Stock Portfolio Organizer
The ultimate porfolio management solution.
WiseTrader Toolbox
#1 Selling Amibroker Plugin featuring:
Exploration -Monthly Percent Change Table for Amibroker (AFL)
Hi All,
I want to share how “Exploration” function can be used for different purpose in Amibroker.
“Here is some AFL code that runs as an Exploration and let’s you create a table of monthly percentage changes in a calculation.
Starting from this posting by Mike on the AB Yahoo List. I ( Progster ) have expanded the code comments, and altered it slightly to:
Calculate end-of-month to end-of-month."
For further information check the above link.
cnbondre
Similar Indicators / Formulas
Indicator / Formula
/*
   MonthlyTable_01.afl
   Exploration code to produce a month-by-month tabular presentation of percentage changes
   in a value.
   In this code the value is designated as "eq" (for equity), but is simply set to the 
   price Close for demonstration purposes.
   
   Original code provided by "Mike", here:
      http://finance.groups.yahoo.com/group/amibroker/message/125846
   Extra comments, _TRACE, and some changes by Progster
*/
//   Calculation of the value for which the tabular display of %Chg is desired.
//   Change this to whatever calculation you wish.
eq = Close;
//   Make the year and month available (in arrays) for every bar processed
yr = Year();      //   e.g. 2008
mo = Month();      //   i.e. 1 - 12
//   Create arrays marking new years and new months
YearChange = yr != Ref( yr, -1 );         //   TRUE on first bar of new year
MonChange = mo != Ref( mo, -1 );         //   TRUE on first bar of new month
FirstYr = 0;
LastYr = 0;
startbar = 0;
endbar = 0;
FirstBar = Status("firstbarinrange");
LastBar = Status("lastbarinrange");
////////////////////////////
// SKIP non-trading bars
////////////////////////////
for ( i = 0; i < BarCount; i++ )
{
    if ( FirstBar[ i ] )
    {
        startbar = i;         //   save the bar index of the first bar in the analysis range
    }
    if ( LastBar[ i ] )
    {
        endbar = i;            //   save the bar index of the last bar in the analysis range
        break;
    }
}
////////////////////////////
// collect yearly / monthly changes in symbol
// into dynamic variables
////////////////////////////
//   Initialize tracking variables
LastYrValue = eq[ startbar ];         //   note: initial equity was set to Close, above
LastMoValue = eq[ startbar ];
MaxYrProfit = MinYrProfit = 0;
MaxMoProfit = MinMoProfit = 0;
//   Loop the analysis range (only)
for ( i = startbar + 1; i <= endbar; i++ )
{
   //   Calculate yearly statistics on year change (and at at end of analysis range)
    if ( YearChange[ i ] || i == endbar )
    {
        // Chg = 100 * ( -1 + eq[ i ] / LastYrValue );      //   percentage change calc
        Chg = 100 * ( -1 + eq[ i - 1 ] / LastYrValue );      //   percentage change calc
        VarSet( "ChgYear" + yr[ i - 1 ], Chg );         //   save in dynamic variable for each year
      // Track max and min yearly profit across years seen
        MaxYrProfit = Max( MaxYrProfit, Chg );
        MinYrProfit = Min( MinYrProfit, Chg );
        if ( FirstYr == 0 )
            FirstYr = yr[ i - 1 ];
        // LastYr = yr[ i ];
        LastYr = yr[ i - 1 ];
        // LastYrValue = eq[ i ];
        LastYrValue = eq[ i - 1 ];
    }
   //   Calculate monthly statistics on month change (and at at end of analysis range)
    if ( MonChange [ i ] || i == endbar )
    {
      thisYr = yr[ i - 1];
        mon = mo[ i - 1 ];
        // Chg = 100 * ( -1 + eq[ i ] / LastMoValue );      //   percentage change calc
        Chg = 100 * ( -1 + eq[ i - 1 ] / LastMoValue );      //   percentage change calc
      _TRACE( "Calculations for " ) ;
      _TRACE( "Year: " +  NumToStr(thisYr, 1.0) ) ;
      _TRACE( "Month: " +  NumToStr(mon, 1.0) ) ;
      _TRACE( "LastMoValue: " +  NumToStr(LastMoValue, 1.2) ) ;
      // _TRACE( "eq[" + NumToStr(i - 1, 1.0) + "]: " +  NumToStr(eq[ i - 1], 1.2) ) ;
      _TRACE( "ThisMoValue: " +  NumToStr(eq[ i - 1], 1.2) ) ;
      _TRACE( "Chg: " +  NumToStr(Chg, 1.2) ) ;
      _TRACE( "---------------------------" ) ;
        VarSet( "ChgMon" + yr[ i - 1 ] + "-" + mon, Chg );   //   save in dynamic variable for each month
        VarSet( "SumChgMon" + mon, Chg + Nz( VarGet( "SumChgMon" + mon ) ) );
        VarSet( "SumMon" + mon, 1 + Nz( VarGet( "SumMon" + mon ) ) );
      // Track max and min monthly profit across months seen
        MaxMoProfit = Max( MaxMoProfit, Chg );
        MinMoProfit = Min( MinMoProfit, Chg );
        // LastMoValue = eq[ i ];
        LastMoValue = eq[ i - 1 ];
    }
}
////////////////////////////
// Transfer dynamic variable values into arrays and add to exploration.
////////////////////////////
Years = 0;
Jan = Feb = Mar = Apr = May = Jun = Jul = Aug = Sep = Oct = Nov = Dec = 0;
Annual = 0;
index = startbar;
for ( y = FirstYr; y <= LastYr; y++ )
{
    Years[ index ] = y;
    Jan[ index ] = VarGet( "ChgMon" + y + "-" + 1 );
    Feb[ index ] = VarGet( "ChgMon" + y + "-" + 2 );
    Mar[ index ] = VarGet( "ChgMon" + y + "-" + 3 );
    Apr[ index ] = VarGet( "ChgMon" + y + "-" + 4 );
    May[ index ] = VarGet( "ChgMon" + y + "-" + 5 );
    Jun[ index ] = VarGet( "ChgMon" + y + "-" + 6 );
    Jul[ index ] = VarGet( "ChgMon" + y + "-" + 7 );
    Aug[ index ] = VarGet( "ChgMon" + y + "-" + 8 );
    Sep[ index ] = VarGet( "ChgMon" + y + "-" + 9 );
    Oct[ index ] = VarGet( "ChgMon" + y + "-" + 10 );
    Nov[ index ] = VarGet( "ChgMon" + y + "-" + 11 );
    Dec[ index ] = VarGet( "ChgMon" + y + "-" + 12 );
    Annual[ index ] = VarGet( "ChgYear" + y );
    index++;
}
Filter = Years;
SetOption("NoDefaultColumns", True);
AddColumn(Years, "Year", 4.0);
AddColumn(Jan, "Jan%", 1.2);
AddColumn(Feb, "Feb%", 1.2);
AddColumn(Mar, "Mar%", 1.2);
AddColumn(Apr, "Apr%", 1.2);
AddColumn(May, "May%", 1.2);
AddColumn(Jun, "Jun%", 1.2);
AddColumn(Jul, "Jul%", 1.2);
AddColumn(Aug, "Aug%", 1.2);
AddColumn(Sep, "Sep%", 1.2);
AddColumn(Oct, "Oct%", 1.2);
AddColumn(Nov, "Nov%", 1.2);
AddColumn(Dec, "Dec%", 1.2);
AddColumn(Annual, "Yr. Profit%", 1.2);
//AddColumn(AddSummaryRows,(2) ); ===cnb found no solution hence blocked as adviced bellow.
/*
- You will need the most recent beta release for the AddSummaryRows
function to work (just remove this line if you are NOT up to that
release). http://finance.groups.yahoo.com/group/amibroker/message/125846
*/4 comments
Leave Comment
Please login here to leave a comment.
Back
THANKS FOR SHARING. IS IT POSSIBLE THAT THE STOCKS ARE HIGHLIGHTED THAN JUST FIGURES
THANKS ARM
Hi,
arm,
Yes this is a very good suggestion. Unfortunately so far I am not competent enough to write codes to that level. Let us hope some of the members here will be able to add/modify the code to show the tickers instead of only figures;I wish as well.
At line no. 159 the default parametre is set to true to disable the default column value like symbol, date etc. If we set it to false, it gives some error, kindly suggest, what to do
SetOption(“NoDefaultColumns”, True);
To add columns for the Ticker name and the Full Name of equities,
just add the following two lines to the top of the add column statements:
AddTextColumn(Name(), “Name”, 6.0);
AddTextColumn(FullName(), “FullName”, 20.0);