This is my first time working with multi-instrument strategies. I already have an algorithm that is working good on single instrument. However, I want to trade two instruments with the same strategy on the same algorithm. It is not working good so far; but after reviewing the documentation, i haven't been able to identify the mistake (https://ninjatrader.com/support/help...ryhandling.htm)
Would you please guide me?
else if (State == State.Configure)
{
AddDataSeries("PYPL", Data.BarsPeriodType.Day, 1, Data.MarketDataType.Last);
}
else if (State == State.DataLoaded)
{
SetProfitTarget("", CalculationMode.Percent, Limite);
SetStopLoss("", CalculationMode.Percent, Stop, false);
///First instrument
ADX1 = ADX(Close, Convert.ToInt32(ADXperiod));
trendADX1 = XXX(ADX1, Convert.ToInt32(YYYYY));
ZonasdeOperacionCompra2 = ZonasdeOperacionCompra1(Close, Convert.ToInt32(ZZZZZZ));
///second instrument
ADX2 = ADX(Closes[1], Convert.ToInt32(ADXperiod));
trendADX2 = XXX(ADX2, Convert.ToInt32(YYYYY));
ZonasdeOperacionCompra3 = ZonasdeOperacionCompra1(Closes[1], Convert.ToInt32(ZZZZZZ));
}
protected override void OnBarUpdate()
{
if (CurrentBars[0] < BarsRequiredToTrade || CurrentBars[1] < BarsRequiredToTrade)
{
return;
}
if (CurrentBars[0] < 1 || CurrentBars[1] < 1)
return;
if (barNumberOfLongEntries != 0)
if ( CurrentBar > barNumberOfLongEntries + OrderActiveBars )
CancelOpenOrders();
if (barNumberOfLongEntries1 != 0)
if ( CurrentBar > barNumberOfLongEntries1 + OrderActiveBars )
CancelOpenOrders1();
/// Entry Instrument 1
if (BarsInProgress == 0)
{
if (trendADX1[0] < ADXinput)
{
barNumberOfLongEntries = CurrentBar;
EnterLongLimit(Convert.ToInt32(DefaultQuantity), ZonasdeOperacionCompra2[0], @"Compra");
}
if (Position.MarketPosition != MarketPosition.Flat)
{
// Exit signal 1 = if position is losing
if (Position.GetUnrealizedProfitLoss(PerformanceUnit. Currency, Close[0]) < 0 && Time[0] == myDate.AddDays(364))
{
ExitLong(Convert.ToInt32(DefaultQuantity), @"Exitloss", @"Compra"); Print(string.Format("{0} | Exit Losing Date: {1}", Time[0], myDate.AddDays(364)));
}
// Exit signal 1 = if position is losing
if (Position.GetUnrealizedProfitLoss(PerformanceUnit. Currency, Close[0]) > 0 && Time[0] == myDate.AddDays(366))
{
ExitLong(Convert.ToInt32(DefaultQuantity), @"ExitWin", @"Compra"); Print(string.Format("{0} | Exit Winning date: {1}", Time[0], myDate.AddDays(364)));
}
}
}
/// Entry Instrument 2
if (BarsInProgress == 1)
{
if (trendADX2[0] < ADXinput)
{
barNumberOfLongEntries1 = CurrentBar;
EnterLongLimit(Convert.ToInt32(DefaultQuantity), ZonasdeOperacionCompra3[0], @"Compra1");
}
if (Position.MarketPosition != MarketPosition.Flat)
{
// Exit signal 1 = if position is losing
if (Position.GetUnrealizedProfitLoss(PerformanceUnit. Currency, Close[0]) < 0 && Time[0] == myDate1.AddDays(364))
{
ExitLong(Convert.ToInt32(DefaultQuantity), @"Exitloss2", @"Compra1"); Print(string.Format("{0} | 2 Exit Losing Date: {1}", Time[0], myDate.AddDays(364)));
}
// Exit signal 1 = if position is losing
if (Position.GetUnrealizedProfitLoss(PerformanceUnit. Currency, Close[0]) > 0 && Time[0] == myDate1.AddDays(366))
{
ExitLong(Convert.ToInt32(DefaultQuantity), @"ExitWin2", @"Compra1"); Print(string.Format("{0} | 2 Exit Winning date: {1}", Time[0], myDate.AddDays(364)));
}
}
}

Comment