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

RE: [amibroker] Plotting a graph



PureBytes Links

Trading Reference Links

Mark:
 
That code plots a table into the entire pane (fills the entire pane). 
 
Are you saying you want to plot a chart (graph of equity line) on top of or superimposed over the table?
 
Why would you want to do that?  Seems like it would be hard to see the graph line and the table would be obsurced too. 
 
Plot the equity curve below the table in a different pane.
 
BY THE WAY, I tried to modify the table somewhat and it is one heck of piece of complex code as far as I am concerned.  You really have to study and know the gfx commands to do something like this, (and know what you are doing).
 
Anyway, sorry I have nothing to suggest on your specific request.
 
Ken


From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of MarkK
Sent: Tuesday, August 19, 2008 10:35 PM
To: amibroker@xxxxxxxxxxxxxxx
Subject: [amibroker] Plotting a graph

Wonder if anyone can help me with this

I have been trying to plot the Equity curve on the low level graphics

The formula was posted by Tomasz and would like to put the chart on it too

AFL below

 

Can anyone let me know how to go about doing it?
Thank you

 

 

 

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( "TimesNewRoman", 11 );

 

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", 14 );

  GfxSetBkMode( 1);

  GfxTextOut(" Equity", 290, 3 );

 }

}

 

////////////////////////////

// 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();

 

 

 

MarkK

__._,_.___

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




Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___