You are on page 1of 1

procedure CBT_MaxPositionValue( bo, sig, pcnt, max_posvalue, trace ) {

/// CBT solution to


/// @link https://tinyurl.com/vk9truc
/// by fxshrat@gmail.com
local eq, pv, size;
//
eq = bo.Equity;
pv = eq * pcnt / 100;
size = Min(pv, max_posvalue);
//
if ( sig.IsEntry() && trace )
_TRACEF("equity: %g, pv: %g, pos. size: %g", eq, pv, size);
return size;
}

SetOption( "InitialEquity", 100000);

// n-percent of equity but max 30000 position value


pcnt = 15;// percent of equity
max_posvalue = 30000;// position value threshold

m = MA( Close, 20 );
Buy = Cross( Close, m );
Sell = Cross( m, Close );
Short = Cover = 0;

SetCustomBacktestProc( "" );
if ( Status( "action" ) == actionPortfolio ) {
bo = GetBacktesterObject();
bo.PreProcess();

for ( i = 0; i < BarCount; i++ ) {


// iterating through all trade signals and adjust pos size
for ( sig = bo.GetFirstSignal( i ); sig; sig = bo.GetNextSignal( i ) ) {
sig.PosSize = CBT_MaxPositionValue( bo, sig, pcnt, max_posvalue,
true );
}
bo.ProcessTradeSignals( i );
}
bo.PostProcess();
}

You might also like