Been working on a solution on this for some time...looked in forums etc but cant seem to crack it.
here are the details:
MC 5.5, IOG on with "allow unlimited entries and exits per bar", Backtest precision 1 tick.
Time frame: minute bars.
Once an entry signal is triggered we enter on next bar limit (in this case next bar would be open of next minute bar), so we have a flag to check bar status (when last tick reached) of current bar (as IOG is on).
Here is the thing, once we have entered in a bar, we cannot reenter that same time bar , but we can be stopped out in that time bar. Also, if we are not stopped out in the same time bar we entered, and we then go on to get stopped out in a subsequent future bar, in this future bar where we are stopped out, a re-entry is possible at the stop exit price (here it is next tick). The new entry position can be stopped out within this bar or subsequent bars.
So, in any one time bar, only one entry is possible but a max of two exits could happen.
Also, once we hit a profit, in any bar, no entry is allowed on that time bar.
Have tried barsinceentry, barsinceexit, entrytime, exittime etc keywords but no success. I still get cases where there are multiple entries in the same time bar or an entry after a profit has been achieved in the same time bar.
Can anyone advice of a way forward, other keywords to use, or other logic to try lpls...
thanks in advance, much appreciated. ray
p.s. i've attached two screenshots to illustrate what should not be happening.
i..e multiple entries in the same bar and entry after a profit has been taken in the same bar.
Code: Select all
[intrabarordergeneration=true]
Entrybar_trade_closed = entrytime = time and barstatus <> 2;
Entrybar_trade_close_on_PS = positionprofit(1) >= (Tradesize*PS* (minmove/pricescale)*bigpointvalue)and exittime(1)=time;
condition1 = reenter short after stop loss at exitprice if true ;
condition2 = reneter long after stop loss at exitprice if true ;
condition3 = positionprofit(1) <= (-SL*Tradesize* (minmove/pricescale)*bigpointvalue); //stop loss
if time > startTime or time < Endtime then begin
If bartype_ex = 2 and barstatus >= 0 then begin
If not Entrybar_trade_closed or not Entrybar_trade_close_on_PS then begin
if entrytime = time and barstatus <> 2 or positionprofit(1) >= (Tradesize*PS* (minmove/pricescale)*bigpointvalue) and exittime(1)=time;
then Entrybar_trade_closed = true;
//first entry or new entry after a profit take
if currentbar > 1 and bartype_ex =2 and marketposition = 0 and NOT condition3 and Not Entrybar_trade_closed
then begin
//setup the bar status flag check to short entey on open of next time bar if entry conditions satisfied
If not bartrigger then begin
bartrigger = barstatus = 2 and oSlowK > 70;
limit_priceS = close[1] + (minmove/pricescale)*S;
end
else
bartrigger = bartrigger and oSlowK > 70;
if bartrigger then
sellshort ("Sk") tradesize Contracts next bar at limit_priceS limit;
//setup the bar status flag check to Long entey on open of next time bar if entry conditions satisfied
If not bartrigger then begin
bartrigger = barstatus = 2 and oSlowK < 30 ;
limit_priceL = close[1] - (minmove/pricescale)*B;
end
else
bartrigger = bartrigger and oSlowK < 30;
if oSlowK < 30 and bartrigger then
buy ("Bk") Tradesize Contracts next bar at limit_priceL limit;
end;
//check if to reenter only after a stop loss reached in any bar subsequent to the entry bar time
if condition3 and not Entrybar_trade_closed then begin
If condition1 and bartype_ex = 2 then
sellshort ("Stp") Tradesize Contracts next bar exitprice(1) limit
else
//If above entry after a stop loss not valid then revert to original entry check
If not bartrigger then begin
bartrigger = barstatus = 2 and oSlowK > 70;
limit_priceS = close[1] + (minmove/pricescale)*S;
end
else
bartrigger = bartrigger and oSlowK > 70;
if bartrigger then
sellshort ("S") Tradesize Contracts next bar at limit_priceS limit;
end;
//entry check after stop loss for long position
if condition3 and not Entrybar_trade_closed then begin
If condition2 and bartype_ex = 2 then
buy ("Btp") Tradesize Contracts next bar exitprice(1) limit
else
If not bartrigger then begin
bartrigger = barstatus = 2 and oSlowK < 30 ;
limit_priceL = close[1] - (minmove/pricescale)*B;
end
else
bartrigger = bartrigger and oSlowK < 30;
if oSlowK < 30 and bartrigger then
buy ("B") Tradesize Contracts next bar at limit_priceL limit;
end;
//set regular stop loss
SetStopContract;
SetStopLoss ((minmove/pricescale)*BigPointValue*SL);
//define normal profit stops
If marketposition <> 0 and bartype_ex = 2 and barssinceentry >= 1
then begin
If marketposition > 0 then
sell ("LP") Tradesize Contracts next bar at entryprice + (minmove/pricescale)*PS limit
ELse
If marketposition < 0 then
buytocover ("SP") Tradesize Contracts next bar at entryprice - (minmove/pricescale)*PS limit;
end;
SetExitOnClose;
end;
end;
end;