[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: Monthly returns report



PureBytes Links

Trading Reference Links

Fantastic - thank you both.

--- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@xxx> wrote:
>
> Hello,
> 
> Please always provide original reference:
>
http://www.amibroker.com/kb/2007/10/11/low-level-gfx-example-yearlymonthly-profit-chart/
> 
> I discourage posting copies of codes here when they are available on
Knowledge Base or UKB.
> 
> Best regards,
> Tomasz Janeczko
> amibroker.com
> ----- Original Message ----- 
> From: "Gordon Sutherland" <gosuth@xxx>
> To: <amibroker@xxxxxxxxxxxxxxx>
> Sent: Saturday, March 22, 2008 12:15 AM
> Subject: RE: [amibroker] Monthly returns report
> 
> 
> > Here is the AFL code that adds more Backtester Chart Pane Reports.
Watch out
> > for word wrap, as usual, with the under mentioned code. I attach
the AFL for
> > those who receive direct emails. Remember to use the Parameters pop-up
> > window to select the various Reports. Enjoy - courtesy of Tomasz.
> > 
> > Cheers,
> > 
> > Gordon Sutherland
> > 
> > // Filed by Tomasz Janezco 12th October 2007 as example of using
low-level
> > // graphics functions
> > // This example shows the Profit from ~~~Equity Symbol after a
system test.
> > // Use Parameters to change the type of graph dispayed. Gordon
Sutherland
> > // (GBS)
> > 
> > SetBarsRequired(1000000,1000000);
> > eq = Foreign("~~~EQUITY", "C" );
> > 
> > yr = Year();
> > mo = Month();
> > 
> > YearChange = yr != Ref( yr, -1 );
> > MonChange = mo != Ref( mo, -1 );
> > 
> > FirstYr = 0;
> > LastYr = 0;
> > 
> > startbar = 0;
> > 
> > ////////////////////////////
> > // SKIP non-trading bars
> > ////////////////////////////
> > for( i = 0; i < BarCount; i++ )
> > {
> >  if( eq[ i ] )
> >  {
> >    startbar = i;
> >    break;
> >  } 
> > }
> > 
> > ////////////////////////////
> > // collect yearly / monthly changes in equity
> > // into dynamic variables
> > ////////////////////////////
> > 
> > LastYrValue = eq[ startbar  ];
> > LastMoValue = eq[ startbar  ];
> > 
> > MaxYrProfit = MinYrProfit = 0;
> > MaxMoProfit = MinMoProfit = 0;
> > 
> > for( i = startbar + 1; i < BarCount; i++ )
> > {
> >  if( YearChange[ i ] || i == BarCount - 1 )
> >  {
> >    Chg = 100 * ( -1 + eq[ i ] / LastYrValue );
> >    VarSet("ChgYear"+ yr[ i - 1 ], Chg );
> > 
> >    MaxYrProfit = Max( MaxYrProfit, Chg );
> >    MinYrProfit = Min( MinYrProfit, Chg );
> > 
> >    if( FirstYr == 0 ) FirstYr = yr[ i - 1 ];
> >    LastYr = yr[ i ];
> > 
> >    LastYrValue = eq[ i ];
> >  }
> > 
> >  if( MonChange [ i ] || i == BarCount - 1 )
> >  {
> >    mon = mo[ i - 1 ];
> > 
> >    Chg = 100 * ( -1 + eq[ i ] / LastMoValue );
> > 
> >    VarSet("ChgMon" + yr[ i - 1 ] + "-" + mon, Chg );
> >    VarSet("SumChgMon"+ mon, Chg + Nz( VarGet("SumChgMon"+ mon ) ) );
> >    VarSet("SumMon" + mon, 1 + Nz( VarGet("SumMon"+ mon ) ) );
> > 
> >    MaxMoProfit = Max( MaxMoProfit, Chg );
> >    MinMoProfit = Min( MinMoProfit, Chg );
> > 
> >    LastMoValue = eq[ i ];
> >  }
> > }
> > 
> > /////////////////////////////////////////////////
> > // Drawing code & helper functions
> > ////////////////////////////////////////////////
> > 
> > GfxSetOverlayMode( 2 );
> > 
> > CellHeight = (Status("pxheight")-1)/(LastYr - FirstYr + 3 ); 
> > CellWidth = (Status("pxwidth")-1)/14; 
> > GfxSelectFont( "Tahoma", 8.5 ); 
> > 
> > GfxSetBkMode( 1 );
> > 
> > function PrintInCell( string, row, Col ) 
> > {
> > Color =  ColorRGB( IIf( row == 0 || col == 0 || col == 13, 220,
255 ), 255,
> > IIf( row % 2, 255, 220 ) );
> > GfxSelectSolidBrush( Color   );
> > GfxRectangle( Col * CellWidth, 
> >                    row * CellHeight, (Col + 1 ) * CellWidth + 1, 
> >                    (row + 1 ) * CellHeight  + 1); 
> > GfxDrawText( string, Col * CellWidth + 1, 
> >                    row * CellHeight + 1, 
> >                    (Col + 1 ) * CellWidth, (row + 1 ) *
CellHeight, 32+5 );
> > 
> > } 
> > 
> > YOffset = 25;
> > XOffset = 15;
> > 
> > function DrawBar( text, bar, numbars, y, Miny, Maxy )
> > {
> > BarWidth = (Status("pxwidth") - 4 * XOffset )/( numbars + 1 ); 
> > BarHeight = Status("pxheight") - 2 * YOffset;
> > relpos = ( y - Miny ) / (Maxy - Miny );
> > 
> > xp = XOffset + ( bar + 0.5 ) * BarWidth;
> > yp = YOffset + BarHeight * ( 1 - relpos );
> > xe = XOffset + ( bar + 1 ) * BarWidth;
> > ye = YOffset + BarHeight * ( 1 - ( -miny )/( maxy - miny ) );
> >  
> > if( y > 0 )
> > {
> > GfxGradientRect( xp, yp, 
> >                  xe , ye,
> >                  ColorHSB( 70, 255 * relpos, 255 ), ColorHSB( 70,
20, 255 )
> > ); 
> > }
> > else
> > {
> > GfxGradientRect( xp, ye, 
> >                  xe , yp,
> >                  ColorHSB( 0, 20, 255 ), ColorHSB( 0, 255 * ( 1 -
relpos ),
> > 255 ) ); 
> > }
> > GfxTextOut( text, xp, ye );
> > GfxTextOut( StrFormat("%.2f", y ), xp, yp );
> > }    
> > 
> > function DrawLevels( Miny, Maxy )
> > {
> >  range = Maxy - Miny;
> > 
> >  grid = 100;
> >  if( range < 10 ) grid = 1;
> >  else 
> >  if( range < 20 ) grid = 2;
> >  else 
> >  if( range < 50 ) grid = 5;
> >  else 
> >  if( range < 100 ) grid = 10;
> >  else 
> >  if( range < 200 ) grid = 20;
> >  else 
> >  if( range < 500 ) grid = 50;
> > 
> >  _TRACE("grid = "+grid +" range "+range );
> >  
> >  width = Status("pxwidth") - 4 * XOffset;
> >  height = Status("pxheight") - 2 * YOffset;
> > 
> >  GfxSelectPen( colorBlack, 1, 2 );
> >  for( y = grid * ceil( Miny / grid ); y <= grid * floor( Maxy /
grid ); y
> > += grid )
> >  {
> >    yp =  YOffset + Height * ( 1 -  ( y - Miny ) / (Maxy - Miny ) );
> > 
> >    GfxMoveTo( XOffset, yp );
> >    GfxLineTo( XOffset + width , yp );
> >    GfxTextOut( ""+ y, XOffset + 2 + width, yp );
> >  }
> > 
> >  GfxSelectPen( colorBlack, 1, 0 );
> >  GfxMoveTo( XOffset, YOffset );
> >  GfxLineTo( XOffset + width, YOffset );
> >  GfxLineTo( XOffset + width, YOffset + Height );
> >  GfxLineTo( XOffset , YOffset + Height );
> >  GfxLineTo( XOffset , YOffset );
> > }
> > 
> > MonthNames = "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec";
> > 
> > function DisplayProfitTable( )
> > {
> > Header = "Year,"+MonthNames+",Yr Profit%";
> > for( Col = 0; (Colname = StrExtract( Header, Col ) ) != ""; Col++ )
> > {
> >  PrintInCell( ColName, 0, Col );
> > }
> > 
> > Row = 1;
> > for( y = FirstYr; y <= LastYr; y++ )
> > {
> >  PrintInCell( StrFormat("%g", y ), Row, 0 ); 
> >  PrintInCell( StrFormat("%.1f%%", VarGet("ChgYear" + y ) ), Row,
13 ); 
> >  for( m = 1; m <= 12; m++ )
> >  { 
> >   Chg = VarGet("ChgMon" + y + "-" + m);
> >   if( Chg ) 
> >     PrintInCell( StrFormat("%.1f%%", Chg ), Row, m );
> >   else
> >     PrintInCell( "N/A", Row, m );
> >  }
> >  Row++;
> > } 
> > 
> > PrintInCell("Mon. Avg", Row, 0 );
> > for( m = 1; m <= 12; m++ )
> > { 
> >   PrintInCell( StrFormat("%.1f%%",  Nz( VarGet("SumChgMon" +
> > m)/VarGet("SumMon" + m ) ) ), Row, m );
> > }
> > 
> > }
> > 
> > function DisplayYearlyProfits()
> > {
> > Bar = 0;
> > for( y = FirstYr; y <= LastYr; y++ )
> > {
> >   Chg = VarGet("ChgYear" + y );
> >   DrawBar( ""+y, Bar++, ( LastYr - FirstYr + 1 ), Chg, MinYrProfit,
> > MaxYrProfit );
> > }
> > GfxTextOut("Yearly % Profit chart", 10, 10 );
> > 
> > DrawLevels( MinYrProfit, MaxYrProfit ); 
> > }
> > 
> > function DisplayMonthlyProfits()
> > {
> > Bar = 0;
> > 
> > MinAvgProf = MaxAvgProf = 0;
> > for( y = 1; y <= 12; y++ )
> > {
> >   Chg = VarGet("SumChgMon" + y ) / VarGet("SumMon" + y );
> >   MinAvgProf = Min( MinAvgProf, Chg );
> >   MaxAvgProf = Max( MaxAvgProf, Chg );
> > }
> > 
> > for( y = 1; y <= 12; y++ )
> > {
> >   Chg = VarGet("SumChgMon" + y ) / VarGet("SumMon" + y );
> >   DrawBar( StrExtract(MonthNames, y-1 ), Bar++, 13, Chg, MinAvgProf ,
> > MaxAvgProf );
> > }
> > GfxTextOut("Avg. Monthly % Profit chart", 10, 10 );
> > 
> > DrawLevels( MinAvgProf , MaxAvgProf ); 
> > }
> > 
> > ///////////////////////////
> > // This function checks if currently selected symbol
> > // is portfolio equity
> > //////////////////////////
> > function CheckSymbol()
> > {
> > if( Name() != "~~~EQUITY" )
> > {
> >  GfxSelectFont( "Tahoma", 16 ); // Changed from 20 by GBS
> >  GfxSetTextColor(colorRed); // Added this function GBS (for a
> > dash of colour!)
> >  GfxSetBkMode( 2 );
> >  GfxTextOut("For accurate results switch to ~~~EQUITY symbol
(after running
> > a System Test)", 200, 01 ); // Tweaked by GBS
> > }
> > }
> > 
> > ////////////////////////////
> > // Main program - chart type switch
> > ////////////////////////////
> > type = ParamList("Chart Type", "Profit Table|Yearly Profits|Avg.
Monthly
> > Profits", 0 );
> > 
> > switch( type )
> > {
> > case "Profit Table": 
> >         DisplayProfitTable();  
> >         break;
> > case "Yearly Profits": 
> >         DisplayYearlyProfits();
> >         break;
> > case "Avg. Monthly Profits": 
> >         DisplayMonthlyProfits();
> >         break;
> > }
> > 
> > CheckSymbol();
> > 
> > -----Original Message-----
> > From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx]
On Behalf
> > Of droskill
> > Sent: Saturday, 22 March 2008 11:50 a.m.
> > To: amibroker@xxxxxxxxxxxxxxx
> > Subject: [amibroker] Monthly returns report
> > 
> > I've been looking everywhere on the site for a monthly report from the
> > backtester - I know I saw it somewhere.  Can someone point me to
the code?
> > 
> > Thanks!
> > 
> > 
> > ------------------------------------
> > 
> > Please note that this group is for discussion between users only.
> > 
> > To get support from AmiBroker please send an e-mail directly to 
> > SUPPORT {at} amibroker.com
> > 
> > For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> > http://www.amibroker.com/devlog/
> > 
> > For other support material please check also:
> > http://www.amibroker.com/support.html
> > Yahoo! Groups Links
> > 
> > 
> > 
> > 
> > ------------------------------------
> > 
> > Please note that this group is for discussion between users only.
> > 
> > To get support from AmiBroker please send an e-mail directly to 
> > SUPPORT {at} amibroker.com
> > 
> > For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> > http://www.amibroker.com/devlog/
> > 
> > For other support material please check also:
> > http://www.amibroker.com/support.html
> > Yahoo! Groups Links
> > 
> > 
> > 
> >
>



------------------------------------

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

For other support material please check also:
http://www.amibroker.com/support.html
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/