Merhabalar, Kriptolar icin yazdıgım stratejide aynı anda 2 farklı periyod kullanak istiyorum. Şöyleki,

-karar koşullarım sembolün 4 saatlik barları üzerinde çalışarak karar alacak ve (T-1) barın kapanışına göre kararı alıyor olacağım. Alımı ise bir sonraki aşamada (1 dakikalık bar) 4 saatlik barın kapanış fiyatının üzerine geçince yapacağım.

 

Yardım dokumanlarınızda yer alan sorulardan "Stratejiyi 2 farklı periyotta çalıştırabilir miyim?" cevabına bakarak implement ettiğim kod aşağıdaki hatayı alıyor. Bu kodu calistirabiliyor olursam, aynı sembol icin farklı periyodlarına ait kurallar yazabilecegimi dusundum.

Strateji calistirildi
9/18/2020 10:00:00 AM : System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
   at System.ThrowHelper.ThrowKeyNotFoundException()
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at Matriks.Lean.Algotrader.AlgoBase.MatriksAlgo.GetBarData(String symbol, SymbolPeriod symbolPeriod) in E:\BuildAgentRelease\work\cb8bc45b3237af97\matriks-lean-algotrader\src\AlgoBase\SyntheticAlgoOrder.cs:line 29
   at Matriks.Lean.Algotrader.V_TEST2.OnDataUpdate(BarDataEventArgs barData)
   at Matriks.Lean.Algotrader.AlgoBase.MatriksAlgo.UpdateBarData(BarDataEventArgs e) in E:\BuildAgentRelease\work\cb8bc45b3237af97\matriks-lean-algotrader\src\MatriksIndicator.cs:line 321

 

Yazdığım kodun ilgili kısmını ekliyorum

namespace Matriks.Lean.Algotrader

{

public class V_TEST2 : MatriksAlgo

{

[SymbolParameter("GARAN")]

public string Symbol1;

 

 

[Parameter(SymbolPeriod.Min240)]

public SymbolPeriod SymbolPeriod1;

 

 

[Parameter(50)]

public int MovPeriod1;

 

[Parameter(MovMethod.S)]

public MovMethod MovMethod1;

 

[Parameter(1)]

public decimal OrderQuantity1;

 

MOV mov;

 

public override void OnInit()

{

mov = MOVIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MovPeriod1, MovMethod1);

 

SendOrderSequential(true, Side.Buy);

WorkWithPermanentSignal(true);

 

}

 

 

public override void OnDataUpdate(BarDataEventArgs barData)

{

var barData1 = GetBarData(Symbol1, SymbolPeriod1);

int symbolid_0 = GetSymbolId(Symbol1);

var barDataModel_0 = GetBarData(Symbol1, SymbolPeriod.Min5);

var barDataModel_1 = GetBarData(Symbol1, SymbolPeriod.Min10);

if (symbolid_0 == barData.SymbolId && barDataModel_0.PeriodInfo == barData.PeriodInfo)

{

decimal Close_0 = barDataModel_0.Close[barData.BarDataIndex-1];

}

if (CrossAbove(mov, barData1, OHLCType.Close, 0))

{

SendPLMOrder(Symbol1, OrderQuantity1, OrderSide.Buy);

}

 

}

 

}

}