I am working on a strategy that has take profit 1 at 1:1 risk with 2:1 and b/e stop as a runner. However the code only seems to take on one contract per direction labeled "scalp", leaving the "runner" out. I have posted the relevant code for the task below. Any support here would be greatly appreciated.
I have followed the examples NT has provided for working with multiple entries/exits to no avail.
All entry conditions are working fine, just having issues with multiple contracts. Some entry logic was removed for simplicity.
else if (State == State.DataLoaded)
{
SetProfitTarget("scalp", CalculationMode.Ticks, StopTicks);
SetProfitTarget("runner", CalculationMode.Ticks, StopTicks * 2);
SetStopLoss("scalp", CalculationMode.Ticks, StopTicks, false);
}
protected override void OnBarUpdate()
{
if (CurrentBar < BarsRequiredToTrade)
return;
MarketPosition macdBias = MacdBias();
MarketPosition emaBias = EmaBias();
if ((TriggerState >= 2)
&& (Position.MarketPosition == MarketPosition.Flat))
{
TriggerState = 0;
}
if (macdBias == MarketPosition.Long && emaBias == MarketPosition.Long && Position.MarketPosition == MarketPosition.Flat) {
TriggerState = 1;
EnterLong("scalp");
EnterLong("runner");
}
else if (macdBias == MarketPosition.Short && emaBias == MarketPosition.Short && Position.MarketPosition == MarketPosition.Flat) {
TriggerState = 1;
EnterShort("scalp");
EnterShort("runner");
}
if ((TriggerState == 1)
&& (Position.MarketPosition == MarketPosition.Long))
{
TriggerState = 2;
StopPrice = (Position.AveragePrice + (StopTicks * TickSize)) ;
TriggerPrice = (Position.AveragePrice + (StopTicks * TickSize)) ;
}
else if ((TriggerState == 1)
&& (Position.MarketPosition == MarketPosition.Short))
{
TriggerState = 2;
StopPrice = (Position.AveragePrice + (StopTicks * TickSize)) ;
TriggerPrice = (Position.AveragePrice - (StopTicks * TickSize)) ;
}
if ((TriggerState == 2)
&& (Close[0] >= TriggerPrice) && Position.MarketPosition == MarketPosition.Long)
{
TriggerState = 3;
StopPrice = Position.AveragePrice + (beTicks * TickSize);
}
else if ((TriggerState == 2)
&& (Close[0] <= TriggerPrice) && Position.MarketPosition == MarketPosition.Short)
{
TriggerState = 3;
StopPrice = Position.AveragePrice - (beTicks * TickSize);
}
if (TriggerState >= 2 && Position.MarketPosition == MarketPosition.Long)
{
SetStopLoss("runner", CalculationMode.Price, StopPrice, false);
}
else if (TriggerState >= 2 && Position.MarketPosition == MarketPosition.Short)
{
SetStopLoss("runner", CalculationMode.Price, StopPrice, false);
}
Thanks for taking the time to look at this!
Comment