Performance weekdays

Hello,

I'm facing problems when I try to use these examples
http://www.amibroker.com/kb/2007/10/11/low-level-gfx-example-yearlymonthly-profit-chart/
to show the average profit per weekday...
Here's my code - what am I doing wrong?
I hope you can help me.

SetBarsRequired(1000000,1000000);
eq = Foreign("~~~EQUITY", "C" );

yr = Year();
YearChange = yr != Ref( yr, -1 );
FirstYr = 0;
LastYr = 0;


week = Ref(DayOfWeek(), -1) >= 3 AND DayOfWeek() >= 3 ;
WeekChange = Week != Ref( Week, -1 );
FirstWeek = 0;
LastWeek = 0;


DayOfW = DayOfWeek() ;
h = Hour();

DailyChange = DayofW != Ref(DayofW, -1 );
HourlyChange = h != Ref( h, -1 );

FirstYr = 0;
LastYr = 0;

startbar = 0;

////////////////////////////
// SKIP non-trading bars
////////////////////////////
for( i = 0; i < BarCount; i++ )
{
  if( eq[ i ] )
  {
    startbar = i;
    break;
  } 
}

////////////////////////////
// collect Daily / Hourly changes in equity
// into dynamic variables
////////////////////////////

LastYrValue = eq[ startbar  ];
LastDayValue = eq[ startbar  ];

MaxYrProfit = MinYrProfit = 0;
MaxDailyProfit = MinDailyProfit = 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 ];

    if( FirstWeek == 0 ) FirstWeek = Week[ i - 1 ];
    LastWeek = Week[ i ];

    LastYrValue = eq[ i ];
  }


  if( DailyChange [ i ] || i == BarCount - 1 )
  {
    DayOfWoche = DayOfW[ i - 1 ];   // "DayOfWeek" als Name GEHT NICHT, da es ja schon eine Funktion ist 

    Chg = 100 * ( -1 + eq[ i ] / LastDayValue );

    VarSet("ChgDayOfWeek" + Week[ i - 1 ] + "-" + DayOfWoche, Chg );
    VarSet("SumChgDayOfWeek"+ DayOfWoche, Chg + Nz( VarGet("SumChgDayOfWeek"+ DayOfWoche ) ) );
    VarSet("SumDayOfWeek" + DayOfWoche, 1 + Nz( VarGet("SumDayOfWeek"+ DayOfWoche ) ) );
 
    MaxDailyProfit = Max( MaxDailyProfit, Chg );
    MinDailyProfit = Min( MinDailyProfit, Chg );

    LastDayOfWeekValue = eq[ i ];
  }
}

/////////////////////////////////////////////////
// Drawing code & helper functions
/////////////////////////////////////////////////

GfxSetOverlayMode( 2 );

GfxFillSolidRect( 0, 0, Status( "pxwidth" ), Status( "pxheight" ), colorWhite );

CellHeight = (Status("pxheight")-1)/(LastYr - FirstYr + 3 ); 
CellWidth = (Status("pxwidth")-1)/14; 
GfxSelectFont( "Tahoma", 8.5 ); 

GfxSetBkMode( 1 );



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 );
}

DayNames = "Monday,Tuesday,Wednesday,Thursday,Friday";


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 DisplayDailyProfits()
{
 Bar = 0;
 
 MinAvgProf = MaxAvgProf = 0;
 for( y = 1; y <= 5; y++ )
 {
   Chg = VarGet("SumChgDayOfWeek" + y ) / VarGet("SumDayOfWeek" + y );
   MinAvgProf = Min( MinAvgProf, Chg );
   MaxAvgProf = Max( MaxAvgProf, Chg );
 }

 for( y = 1; y <= 5; y++ )
 {
   Chg = VarGet("SumChgDayOfWeek" + y ) / VarGet("SumDayOfWeek" + y );
   DrawBar( StrExtract(DayNames, y-1 ), Bar++, 6, Chg, MinAvgProf , MaxAvgProf );
 }
 GfxTextOut("Avg. Daily % Profit chart", 10, 10 );

 DrawLevels( MinAvgProf , MaxAvgProf ); 
}

///////////////////////////
// This function checks if currently selected symbol
// is portfolio equity
//////////////////////////
function CheckSymbol()
{
 if( Name() != "~~~EQUITY" )
 {
  GfxSelectFont( "Tahoma", 20 ); 
  GfxSetBkMode( 2 );
  GfxTextOut("For accurate results switch to ~~~EQUITY symbol", 10, 10 );
 }
}

////////////////////////////
// Main program - chart type switch
////////////////////////////
type = ParamList("Chart Type", "Yearly Profits|Avg. Daily Profits", 0 );

switch( type )
{
 case "Yearly Profits": 
         DisplayYearlyProfits();
         break;
 case "Avg. Daily Profits": 
         DisplayDailyProfits();
         break;
}

CheckSymbol();



1 Like

@euroundusd

The above code line is wrong - replace it:

   LastDayValue = eq[ i ];

This line too seems redundant: the dynamic variable is set but never used.

VarSet("ChgDayOfWeek" + Week[ i - 1 ] + "-" + DayOfWoche, Chg );

Same for some other vars like h, HourlyChange, FirstWeek, LastWeek, etc. but probably this is some work in progress code.

To get a nicer chart you may also 6 to 5 in the following line (if your markets never trade on more than 5 days per week):

 DrawBar( StrExtract(DayNames, y-1 ), Bar++, 6, Chg, MinAvgProf , MaxAvgProf );
1 Like

Thanks a lot! Now it works :slightly_smiling_face:

To get a nicer chart you may also 6 to 5 in the following line (if your markets never trade on more than 5 days per week):

DrawBar( StrExtract(DayNames, y-1 ), Bar++, 6, Chg, MinAvgProf , MaxAvgProf );

Well, in the original monthly example is a 13 instead of a 12 - that's why I'd choosen the 13. But you're right. 12.

Now I've tried to go a step further. But there is anywhere a mistake... For example: I want to display the %-profit / loss in basis points (easy: %-profit / loss * 100) but it doesn't work. The hourly profit also contains a bug. What's wrong?


/*
Initial_Equity = Param("Initial Equity", 100000, 1000, 10000000, 1) ;
Risk = Param("Risk %", 0.1, 0.0001, 100, 0.0001) ;
Risk_absolut = Initial_Equity * (Risk / 100) ;
*/

SetBarsRequired(1000000,1000000);
eq = Foreign("~~~EQUITY", "C" );

yr = Year();
YearChange = yr != Ref( yr, -1 );
FirstYr = 0;
LastYr = 0;

week = Ref(DayOfWeek(), -1) >= 3 AND DayOfWeek() <= 3 ;
WeekChange = Week != Ref( Week, -1 );

DayOfW = DayOfWeek() ;
ho = Hour();

DailyChange = DayofW != Ref(DayofW, -1 );

  DailyChange_BP = DailyChange ;
  DayOfW_BP = DayOfW ;
  
  HourlyChange = ho != Ref( ho, -1 );
  

startbar = 0;

////////////////////////////
// SKIP non-trading bars
////////////////////////////
for( i = 0; i < BarCount; i++ )
{
  if( eq[ i ] )
  {
    startbar = i;
    break;
  } 
}

////////////////////////////
// collect Daily / Hourly changes in equity
// into dynamic variables
////////////////////////////

LastYrValue = eq[ startbar  ];
LastDayValue = eq[ startbar  ];
LastDayValue_BP = eq[ startbar  ];
LastHourValue = eq[ startbar  ];

MaxYrProfit = MinYrProfit = 0;
MaxDailyProfit = MinDailyProfit = 0;
MaxDailyProfit_BP = MinDailyProfit_BP = 0;
MaxHourlyProfit = MinHourlyProfit = 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( DailyChange [ i ] || i == BarCount - 1 )
  {
    DayOfWoche = DayOfW[ i - 1 ];   // "DayOfWeek" als Name GEHT NICHT, da es ja schon eine Funktion ist 

   Chg = 100 * ( -1 + eq[ i ] / LastDayValue );  
  // Chg_absolut = eq[i] - LastDayValue ;

    VarSet("SumChgDayOfWeek"+ DayOfWoche, Chg + Nz( VarGet("SumChgDayOfWeek"+ DayOfWoche ) ) );  
     // wenn Perf == 0,000000 ,dann wird die nicht beachtet --> nz
    VarSet("SumDayOfWeek" + DayOfWoche, 1 + Nz( VarGet("SumDayOfWeek"+ DayOfWoche ) ) );
 
    MaxDailyProfit = Max( MaxDailyProfit, Chg );
    MinDailyProfit = Min( MinDailyProfit, Chg );

    LastDayValue = eq[ i ];
  }
  
  
    if( DailyChange_BP [ i ] || i == BarCount - 1 )
  {
    DayOfWoche_BP = DayOfW_BP[ i - 1 ];   // "DayOfWeek" als Name GEHT NICHT, da es ja schon eine Funktion ist 

   Chg_BP = 100 * ( -1 + eq[ i ] / LastDayValue ) * 100 ;  
  // Chg_absolut = eq[i] - LastDayValue ;

    VarSet("SumChgDayOfWeek_BP"+ DayOfWoche_BP, Chg_BP + Nz( VarGet("SumChgDayOfWeek_BP"+ DayOfWoche_BP ) ) );  
     // wenn Perf == 0,000000 ,dann wird die nicht beachtet --> nz
    VarSet("SumDayOfWeek_BP" + DayOfWoche_BP, 1 + Nz( VarGet("SumDayOfWeek_BP"+ DayOfWoche_BP ) ) );
 
    MaxDailyProfit_BP = Max( MaxDailyProfit_BP, Chg_BP );
    MinDailyProfit_BP = Min( MinDailyProfit_BP, Chg_BP );

    LastDayValue_BP = eq[ i ];
  }
  
  
    if( HourlyChange [ i ] || i == BarCount - 1 )
  {
    Hourly = ho[ i - 1 ];   // "DayOfWeek" als Name GEHT NICHT, da es ja schon eine Funktion ist 

   Chg = 100 * ( -1 + eq[ i ] / LastHourValue );  

    VarSet("SumChgHour"+ Hourly, Chg + Nz( VarGet("SumChgHour"+ Hourly ) ) );  
     // wenn Perf == 0,000000 ,dann wird die nicht beachtet --> nz
    VarSet("SumHour" + Hourly, 1 + Nz( VarGet("SumHour"+ Hourly ) ) );
 
    MaxHourlyProfit = Max( MaxHourlyProfit, Chg );
    MinHourlyProfit = Min( MinHourlyProfit, Chg );

    LastHourValue = eq[ i ];
  }
  
}

/////////////////////////////////////////////////
// Drawing code & helper functions
/////////////////////////////////////////////////

GfxSetOverlayMode( 2 );

GfxFillSolidRect( 0, 0, Status( "pxwidth" ), Status( "pxheight" ), colorWhite );

CellHeight = (Status("pxheight")-1)/(LastYr - FirstYr + 3 ); 
CellWidth = (Status("pxwidth")-1)/14; 
GfxSelectFont( "Tahoma", 8.5 ); 

GfxSetBkMode( 1 );


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("%.4f", y ), xp, yp );  // hier kann man die NACHKOMMASTELLEN einstellen (aktuell auf 4)
}    

function DrawLevels( Miny, Maxy )
{
  range = Maxy - Miny;

  grid = 100;
  if( range < 0.00001 ) grid = 0.000001;
  else
  if( range < 0.00002 ) grid = 0.000002;
  else
  if( range < 0.00005 ) grid = 0.000005;
  else
  if( range < 0.0001 ) grid = 0.00001;
  else
  if( range < 0.0002 ) grid = 0.00002;
  else
  if( range < 0.0005 ) grid = 0.00005;
  else
  if( range < 0.001 ) grid = 0.0001;
  else
  if( range < 0.002 ) grid = 0.0002;
  else
  if( range < 0.005 ) grid = 0.0005;
  else
  if( range < 0.01 ) grid = 0.001;
  else
  if( range < 0.02 ) grid = 0.002;
  else
  if( range < 0.05 ) grid = 0.005;
  else
  if( range < 0.1 ) grid = 0.01;
  else
  if( range < 0.2 ) grid = 0.02;
  else
  if( range < 0.5 ) grid = 0.05;
  else
  if( range < 1 ) grid = 0.1;
  else
  if( range < 2 ) grid = 0.2;
  else
  if( range < 5 ) grid = 0.5;
  else
  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 );
}


DayNames = "Monday,Tuesday,Wednesday,Thursday,Friday";

Hourly_Selection = ParamList("Hour_Select", "24h|8-22") ;
switch ( Hourly_Selection )
{
    case "24h":
    HourNames = "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23" ;
    abcdefg = 24 ;
    break;
    case "8-22":
    HourNames = "8,9,10,11,12,13,14,15,16,17,18,19,20,21" ;
    abcdefg = 14 ;
    break;
    
    default:
    break ;
}    



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 DisplayDailyProfits()
{
 Bar = 0;
 
 MinAvgProf = MaxAvgProf = 0;
 for( y = 1; y <= 5; y++ )
 {
   Chg = VarGet("SumChgDayOfWeek" + y ) / VarGet("SumDayOfWeek" + y );
   MinAvgProf = Min( MinAvgProf, Chg );
   MaxAvgProf = Max( MaxAvgProf, Chg );
 }

 for( y = 1; y <= 5; y++ )
 {
   Chg = VarGet("SumChgDayOfWeek" + y ) / VarGet("SumDayOfWeek" + y );
   DrawBar( StrExtract(DayNames, y-1 ), Bar++, 5, Chg, MinAvgProf , MaxAvgProf );
 }
 GfxTextOut("Avg. Daily % Profit chart", 10, 10 );

 DrawLevels( MinAvgProf , MaxAvgProf ); 
}



function DisplayDailyProfits_inBasisPoints()
{
 Bar = 0;
 
 MinAvgProf_BP = MaxAvgProf_BP = 0;
 for( y = 1; y <= 5; y++ )
 {
   Chg_BP = VarGet("SumChgDayOfWeek_BP" + y ) / VarGet("SumDayOfWeek_BP" + y ) ;
   MinAvgProf_BP = Min( MinAvgProf_BP, Chg_BP );
   MaxAvgProf_BP = Max( MaxAvgProf_BP, Chg_BP );
 }

 for( y = 1; y <= 5; y++ )
 {
   Chg_BP = VarGet("SumChgDayOfWeek_BP" + y ) / VarGet("SumDayOfWeek_BP" + y ) ;
   DrawBar( StrExtract(DayNames, y-1 ), Bar++, 5, Chg_BP, MinAvgProf_BP , MaxAvgProf_BP );
 }
 GfxTextOut("Avg. Daily BASIS POINTS Profit chart", 10, 10 );

 DrawLevels( MinAvgProf_BP , MaxAvgProf_BP ); 
}


function DisplayHourlyProfits()
{
 Bar = 0;
 
 MinAvgProf = MaxAvgProf = 0;
 for( y = 1; y <= abcdefg; y++ )
 {
   Chg = VarGet("SumChgHour" + y ) / VarGet("SumHour" + y );
   MinAvgProf = Min( MinAvgProf, Chg );
   MaxAvgProf = Max( MaxAvgProf, Chg );
 }

 for( y = 1; y <= abcdefg; y++ )
 {
   Chg = VarGet("SumChgHour" + y ) / VarGet("SumHour" + y );
   DrawBar( StrExtract(HourNames, y-1 ), Bar++, abcdefg, Chg, MinAvgProf , MaxAvgProf );
 }
 GfxTextOut("Avg. Hourly % Profit chart", 10, 10 );

 DrawLevels( MinAvgProf , MaxAvgProf ); 
}


///////////////////////////
// This function checks if currently selected symbol
// is portfolio equity
//////////////////////////
function CheckSymbol()
{
 if( Name() != "~~~EQUITY" )
 {
  GfxSelectFont( "Tahoma", 20 ); 
  GfxSetBkMode( 2 );
  GfxTextOut("For accurate results switch to ~~~EQUITY symbol", 10, 10 );
 }
}

////////////////////////////
// Main program - chart type switch
////////////////////////////
type = ParamList("Chart Type", "Yearly Profits|Avg. Daily Profits|Avg. Daily Profits in BASIS POINTS|Avg. Hourly Profits", 0 );

switch( type )
{
 case "Yearly Profits": 
         DisplayYearlyProfits();
         break;
 case "Avg. Daily Profits": 
         DisplayDailyProfits();
         break;
 case "Avg. Daily Profits in BASIS POINTS": 
         DisplayDailyProfits_inBasisPoints();
         break;
 case "Avg. Hourly Profits": 
         DisplayHourlyProfits();
         break;
}


CheckSymbol();


/*
//////////////////////////////////
Filter = 1 ; // all symbols and quotes accepted //


Open_Mon     = ValueWhen(DayOfWeek() == 1 AND Ref(DayOfWeek(), -1) >= 2, C) ;
Close_Mon    = ValueWhen(DayOfWeek() == 1 AND Ref(DayOfWeek(), 1) >= 2, C) ;
Open_Tue     = ValueWhen(DayOfWeek() == 2 AND Ref(DayOfWeek(), -1) == 1  OR Ref(DayOfWeek(), -1) >= 3, C) ;
Close_Tue    = ValueWhen(DayOfWeek() == 2 AND Ref(DayOfWeek(), 1) >= 3  OR Ref(DayOfWeek(), 1) == 1, C) ; 
Open_Wed     = ValueWhen(DayOfWeek() == 3 AND Ref(DayOfWeek(), -1) <= 2  OR Ref(DayOfWeek(), -1) >= 4, C) ;
Close_Wed    = ValueWhen(DayOfWeek() == 3 AND Ref(DayOfWeek(), 1) >= 4  OR Ref(DayOfWeek(), 1) <= 2, C) ; 
Open_Thur    = ValueWhen(DayOfWeek() == 4 AND Ref(DayOfWeek(), -1) <= 3  OR Ref(DayOfWeek(), -1) >= 5, C) ;
Close_Thur   = ValueWhen(DayOfWeek() == 4 AND Ref(DayOfWeek(), 1) >= 5  OR Ref(DayOfWeek(), 1) <= 3, C) ; 
Open_Fr      = ValueWhen(DayOfWeek() == 5 AND Ref(DayOfWeek(), -1) <= 4  OR Ref(DayOfWeek(), -1) >= 6, C) ;
Close_Fr     = ValueWhen(DayOfWeek() == 5 AND Ref(DayOfWeek(), 1) >= 6  OR Ref(DayOfWeek(), 1) <= 4, C) ;

Perf_Mon_OpenToClose  = (Close_Mon - Open_Mon) / Open_Mon ;
Perf_Tue_OpenToClose  = (Close_Tue - Open_Tue) / Open_Tue ;
Perf_Wed_OpenToClose  = (Close_Wed - Open_Wed) / Open_Wed ;
Perf_Thur_OpenToClose = (Close_Thur - Open_Thur) / Open_Thur ;
Perf_Fr_OpenToClose   = (Close_Fr - Open_Fr) / Open_Fr ;

Perf_Mon_CloseToClose  = (Close_Mon - Close_Fr) / Close_Fr ;
Perf_Tue_CloseToClose  = (Close_Tue - Close_Mon) / Close_Mon ;
Perf_Wed_CloseToClose  = (Close_Wed - Close_Tue) / Close_Tue ;
Perf_Thur_CloseToClose = (Close_Thur - Close_Wed) / Close_Wed ;
Perf_Fr_CloseToClose   = (Close_Fr - Close_Thur) / Close_Thur ;

// pchng_Mon = IIf( DayOfWeek() == 1, ((C - O) / O), 0) ;

AddColumn(Perf_Mon_OpenToClose, "Perf_Mon_OpenToClose", format = 1.5 );
AddColumn(Perf_Tue_OpenToClose, "Perf_Tue_OpenToClose", format = 1.5 );
AddColumn(Perf_Wed_OpenToClose, "Perf_Wed_OpenToClose", format = 1.5 );
AddColumn(Perf_Thur_OpenToClose, "Perf_Thur_OpenToClose", format = 1.5 );
AddColumn(Perf_Fr_OpenToClose, "Perf_Fr_OpenToClose", format = 1.5 );

AddColumn(Perf_Mon_CloseToClose, "Perf_Mon_CloseToClose", format = 1.5 );
AddColumn(Perf_Tue_CloseToClose, "Perf_Tue_CloseToClose", format = 1.5 );
AddColumn(Perf_Wed_CloseToClose, "Perf_Wed_CloseToClose", format = 1.5 );
AddColumn(Perf_Thur_CloseToClose, "Perf_Thur_CloseToClose", format = 1.5 );
AddColumn(Perf_Fr_CloseToClose, "Perf_Fr_CloseToClose", format = 1.5 );

AddColumn(DayofWeek() == 1, "Number of Mondays", format = 1.0) ;
AddColumn(DayofWeek() == 2, "Number of Tuesdays", format = 1.0) ;
AddColumn(DayofWeek() == 3, "Number of Wednesdays", format = 1.0) ;
AddColumn(DayofWeek() == 4, "Number of Thursdays", format = 1.0) ;
AddColumn(DayofWeek() == 5, "Number of Fridays", format = 1.0) ;


AddSummaryRows( 2, 1.7); 
*/
2 Likes

Sry, my time to edit the post was away...

I want to display the %-profit / loss in basis points (easy: %-profit / loss * 100) but it doesn't work.

I meant not % profit divided by % loss, instead I meant the profit respectively the loss.