Please replace previous code with this one.
Previous code in certain circumstances allowed 'buySignal_2' to occur without 'buySignal_1' occuring first after latest Sell signal.
tradeDelay_nBars = 1;
maxPositions = 10;
//SetOption("InitialEquity", 100000);
//SetOption("CommissionMode", 3);
//SetOption("CommissionAmount", .01);
SetOption("UsePrevBarEquityForPosSizing", IIf(tradeDelay_nBars, False, True));
SetOption("AllowPositionShrinking", True);
SetOption("AllowSameBarExit", False);
SetOption("AccountMargin", 100);
SetOption("ActivateStopsImmediately", IIf(tradeDelay_nBars, False, True));
SetTradeDelays(tradeDelay_nBars, tradeDelay_nBars, tradeDelay_nBars, tradeDelay_nBars);
SetOption("MaxOpenPositions", maxPositions);
SetPositionSize(100 / maxPositions, spsPercentOfEquity);
RoundLotSize = 1;
PositionScore = ROC(Close, 50);
// price
Plot (Close, "Price", colorAqua, styleBar);
// rules
Hi = Ref(HHV (H, 10 ), -1);
Lo = Ref(LLV (L, 10), -1);
Plot(Hi, "atas", colorBlue, styleLine);
Plot(Lo, "bawah", colorBlue, styleLine);
Buy = Sell = Short = Cover = 0;
BuyPrice = IIf(tradeDelay_nBars, Open, Close);
SellPrice = IIf(tradeDelay_nBars, Open, Close);
// first buy
buySignal_1 = Low <= Lo;
BuyVal = ValueWhen(buySignal_1, BuyPrice);
// sell
sellSignal = High >= Hi;
buySignal_1 = ExRem(buySignal_1, sellSignal);
sellSignal = ExRem(sellSignal, buySignal_1);
// inTrade
inTrade = Flip(buySignal_1, sellSignal);
// second buy
buySignal_2 = Low < (BuyVal / 1.05) ; // buySignal_2 when going down -5% from buySignal_1
buySignal_2 = ExRem(buySignal_2, buySignal_1);
buySignal_2 = inTrade AND buySignal_2 AND NOT buySignal_1; // If both both buy signals occur on same bar then buySignal_2 is discarded
// use scale in
Buy = IIf (buySignal_1 OR buySignal_2, sigScaleIn, False); // AB treats all scale-ins as 1 open position, AB automactically treats intial buy as buy
Sell = sellSignal;
// plot arrow
PlotShapes(IIf(buySignal_1, shapeUpTriangle, shapeNone), colorBlue, 0, L, -15);
PlotShapes(IIf(buySignal_2, shapeUpTriangle, shapeNone), colorOrange, 0, L, -15);
PlotShapes(IIf(Sell, shapeDownTriangle, shapeNone), colorRed, 0, H, -15);
// Explorer
Filter = 1;
AddColumn(inTrade, "In Trade", 1.0);
AddColumn(buySignal_1, "Buy Signal 1", 1.0);
AddColumn(BuyVal, "Buy Signal 1 Value", 1.3);
AddColumn(buySignal_2, "Buy Signal 2", 1.0);
AddColumn(sellSignal, "Sell Signal", 1.0);