Random Walk Index by E. Michael Poulos

Discussion in 'App Development' started by ChimpTrader, Jun 9, 2018.

  1. Hello World,

    This is my first post here. And would like to gain some knowledge on a classic which was developed by E. Michael Poulos about 30 years back that were published in these TASC articles.

    I use Amibroker as my Charting and TA tool. Like most of the other charting applications it too provides ready-made functions for the same:
    1. RWIHi
    2. RWILo
    3. RWI

    Adding the functions onto one section:
    Code:
    _SECTION_BEGIN( "Random Walk Index" );
         minperiods = Param( "Min Periods", 9, 1, 200, 1 );
         maxperiods = Param( "Max Periods", 40, 1, 200, 1 );
         Plot( RwIHi( minperiods, maxperiods), "RwIHi", colorGreen, ParamStyle("Style") );
         Plot( RwILO( minperiods, maxperiods), "RwILO", colorRed, ParamStyle("Style") );
         Plot( RwI( minperiods, maxperiods), "RwI", colorWhite, ParamStyle("Style") );
    _SECTION_END();
    Objective is to replicate the inbuilt functions, by coding them raw from scratch for better understanding of the concept proposed by Poulos as Random Walk Index. I am unable to discern the use of two periods - minperiods, maxperiods - here. Well below is what I have so far managed to code "Random Walk Index of Highs" in Amibroker but the results do not match with the inbuilt ones. And need your kind help in this regard!
    Code:
    _SECTION_BEGIN( "Unveil RwIHi" );
         mthd = ParamList( "Select Method", "Method 1|Method 2|Method 3", 1 );
         pMin = Param( "Min Periods", 9, 1, 200, 1 );
         pMax = Param( "Max Periods", 40, 1, 200, 1 );
       
         switch( mthd )
         {
             case "Method 1":
                 // https://www.tradingview.com/script/eXHlEXzw-Random-Walk-Index-RWI-RWIhi-RWIlo/
                 RWH = 0;
                 for( i = pMin; i <= pMax; i++ )
                 {
                     RWH = IIf( i == pMin, ( H - L[ i ] ) / ( ATR( i ) * sqrt( i ) ), Max( ( H - L[ i ] ) / ( ATR( i ) * sqrt( i ) ), RWH ) );
                 }
             break;
             case "Method 2":
                 // https://www.mail-archive.com/amibroker@yahoogroups.com/msg30080.html
                 RWHmin = ( H - Ref( L, -pMin ) ) / ( Max( ATR( 1 ), ATR( pMin ) ) * sqrt( pMin ) );
                 RWHmax = ( H - Ref( L, -pMax ) ) / ( Max( ATR( 1 ), ATR( pMax ) ) * sqrt( pMax ) );
                 RWH = Max( RWHmin, RWHmax );
             break;
             case "Method 3":
                 // http://www.amibroker.com/members/library/detail.php?id=924&hilite=RWIHi
                 VarMaxHi = 0;
                 for( i = 5; i <= BarCount - 1; i++ )
                 {
                     VarMaxHi[ i ] = Max( ( H[ i ] - L[ i - 1 ] ) / ( ( H[ i ] - L[ i ] ) * sqrt( i - 4 ) ), ( H[ i ] - L[ i - 2 ] ) / ( ( H[ i ] - L[ i ] ) * sqrt( i - 3 ) ) );
                     RWH[ i ] = Max( VarMaxHi[ i ], VarMaxHi[ i - 1 ] );
                 }
             break;
         }
       
         Title = "RWH: " + RWH;
         Plot( RWH, "RWH", ParamColor( "Color", colorCycle ), ParamStyle("Style") );
    _SECTION_END();
    Any suggestions? Be free to use any other language as per your convenience, I just want to understand the underlying method to calculate it.

    Thank you for reading. Appreciate your time!