I'm pretty new so sure the mistake is obvious, but not to me. I have order trace and prints enabled in OnOrderUpdate but I'm still not able to make sense of it.
Initial stops set in OnExecutionUpdate:
{
SetStopLoss("19Long2", CalculationMode.Price, (ZeroLevel - 2 * TickSize), false);
SetStopLoss("19Long", CalculationMode.Price, (ZeroLevel - 2 * TickSize), false);
SetStopLoss("19Long1", CalculationMode.Price, (ZeroLevel - 2 * TickSize), false);
}
if (Position.MarketPosition == MarketPosition.Flat)
{
SetStopLoss("19Long", CalculationMode.Price, (ZeroLevel - 2 * TickSize), false);
SetStopLoss("19Long1", CalculationMode.Price, (ZeroLevel - 2 * TickSize), false);
SetStopLoss("19Long2", CalculationMode.Price, (ZeroLevel - 2 * TickSize), false);
}
// Adjust stops up level by level
if (Position.MarketPosition == MarketPosition.Long)
{
//Exit trade if price closes below 19 level 3 x after entry
if ((Close[1] < NineteenLevel)
&& (Close[2] < NineteenLevel)
&& (Close[3] < NineteenLevel))
{
ExitLong("");
Print("Exit long via 3x close below 19");
}
// if price crosses FiftyLevel, adjust stop to Nineteen Level on all 3 contracts
else if (CrossAbove(Close, ThirtyEightLevel, 1))
{
SetStopLoss("19Long", CalculationMode.Price, (NineteenLevel - 2 * TickSize), false);
SetStopLoss("19Long1", CalculationMode.Price, (NineteenLevel - 2 * TickSize), false);
SetStopLoss("19Long2", CalculationMode.Price, (NineteenLevel - 2 * TickSize), false);
}
// if price crosses SixtyOneLevel, adjust stops to Fifty Level on 2 contracts targeting 80
else if (CrossAbove(Close, SixtyOneLevel, 1))
{
SetStopLoss("19Long", CalculationMode.Price, (FiftyLevel - 2 * TickSize), false);
SetStopLoss("19Long1", CalculationMode.Price, (FiftyLevel - 2 * TickSize), false);
}
// if price crosses EightyLevel, adjust stop to 38.2 level on last contract to give it room
else if (CrossAbove(Close, EightyLevel, 1))
{
SetStopLoss("19Long2", CalculationMode.Price, (ThirtyEightLevel - 2 * TickSize), false);
}
// if price crosses 119, adjust stop to 100 level on last contract to tighten
else if (CrossAbove(Close, OneNineteenLevel, 1))
{
SetStopLoss("19Long2", CalculationMode.Price, (OneHundredLevel - 2 * TickSize), false);
}
}
Print(string.Format("{0} | DeltaHigh[0]: {1} > DeltaHigh[1] {2} ", Time[0], cumulativeDelta.DeltaHigh[0], cumulativeDelta.DeltaHigh[1] ));
// Long Entry @ 19D Conditions
// NoTrade entered if 3 closes below 19 level
if ((Position.MarketPosition == MarketPosition.Flat) && (Close[1] < NineteenLevel)
&& (Close[2] < NineteenLevel)
&& (Close[3] < NineteenLevel))
{
NoTrade = 1;
Print("NoTrade Long Triggered");
}
else if ((Position.MarketPosition == MarketPosition.Flat) && (CrossBelow(Close, NineteenLevel, 5))
&& (Close[1] > NineteenLevel)
&& (cumulativeDelta.DeltaHigh[0] > cumulativeDelta.DeltaHigh[1]))
{
EnterLong(DefaultQuantity, @"19Long");
EnterLong(DefaultQuantity, @"19Long1");
EnterLong(DefaultQuantity, @"19Long2");
SetProfitTarget(@"19Long", CalculationMode.Price, (EightyLevel - 2 * TickSize), false);
SetProfitTarget(@"19Long1", CalculationMode.Price, (EightyLevel - 2 * TickSize), false);
SetProfitTarget(@"19Long2", CalculationMode.Price, (OneThirtyEightLevel - 2 * TickSize), false);
}

Comment