Backtest Simple RS Rotation Strategy

I have many RS strategies that I have developed in other tools.

Below is simple AB test strategy. When number of positions (PosQty) is 1, the results are close to other tools.

However, when PosQty is 2 or more, and one (or more) symbols are sold, the SetPositionSize often prevents purchase of all replacements symbols on a date due to insufficient funds.

A local AB expert tells me that this can only be addressed with custom backtester. Or as below with margin, or more funds, which I don’t want.

Is there a simple efficient method to accomplish this relatively simple popular strategy? if necessary, simple custom backtest reference or code will be appreciated?

Thank you.

Jim Gunn


// Relative Strength Rotational Strategy based on max ROC
// 1st Test 9 SP500 Sector ETF’s (e.g. XL?) and SPY
EnableRotationalTrading();  
// SetBacktestMode(backtestRotational)
//SetTradeDelays(0,0,0,0); 
SetTradeDelays(1,1,1,1);   

BuyPrice = Close; SellPrice = Close; 
// BuyPrice = Open; SellPrice = Open; 

PosQty = Param("Max Number of Positions", 1, 1, 5, 1); 
SetOption( "MaxOpenPositions", PosQty ); 
SetOption("WorstRankHeld", PosQty); 
SetPositionSize(100/PosQty,spsPercentOfEquity); // invest 100% of equity in single security 
RoundLotSize = 0;
SetOption("AccountMargin",50);

Have you ticked the box for "Allow position size shrinking" in the Backtester Settings? You could also set it with SetOption().