EnableTextOutput( 3 ); // enable HTML output into report (Version 5.84 or higher!) eq = 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 ], Chg ); MaxYrProfit = Max( MaxYrProfit, Chg ); MinYrProfit = Min( MinYrProfit, Chg ); if ( FirstYr == 0 ) FirstYr = yr[ i ]; LastYr = yr[ i ]; LastYrValue = eq[ i ]; } if ( MonChange [ i ] || i == BarCount - 1 ) { mon = mo[ i ]; Chg = 100 * ( -1 + eq[ i ] / LastMoValue ); VarSet( "ChgMon" + yr[ i ] + "_" + 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 ]; } } MonthNames = "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"; function GenProfitTableHTML( ) { printf( "\n" ); printf( "\n" ); Header = "Year," + MonthNames + ",Yr%%"; for ( Col = 0; ( Colname = StrExtract( Header, Col ) ) != ""; Col++ ) { printf( "" ); } printf( "\n" ); for ( y = FirstYr; y <= LastYr; y++ ) { //Color = ColorRGB( IIf( row == 0 || col == 0 || col == 13, 220, 255 ), 255, IIf( row % 2, 255, 220 ) ); // new row if ( y % 2 ) printf( "\n\n", y ); for ( m = 1; m <= 12; m++ ) { Chg = VarGet( "ChgMon" + y + "_" + m ); if ( NOT IsNull( Chg ) ) { if ( Chg >= 0 ) printf( "", Chg ); else printf( "", Chg ); } else printf( "" ); } if ( y % 2 ) printf( "", x ); else printf( "%.1f%%", x ); printf( "\n" ); // end row } printf( "\n" ); // new row printf( "" ); for ( m = 1; m <= 12; m++ ) { x = Nz( VarGet( "SumChgMon" + m ) / VarGet( "SumMon" + m ) ); if ( x >= 0 ) printf( "", x ); else printf( "", x ); } printf( "" ); printf( "
" + Colname + "
" ); else printf( "
" ); printf( "%g%.1f%%%.1f%%N/A" ); else printf( "" ); x = VarGet( "ChgYear" + y ); if ( x >= 0 ) printf( "%.1f%%
Avg%.1f%%%.1f%% 
\n" ); } /////////////////////////// // This function checks if currently selected symbol // is portfolio equity ////////////////////////// function CheckSymbol() { if ( Name() != "~~~EQUITY" AND Name() != "~~~OSEQUITY" ) { printf( "For accurate results switch to ~~~EQUITY symbol
" ); } } CheckSymbol(); //////////////////////////// // Main program //////////////////////////// GenProfitTableHTML();