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/
|