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);
}
}
}
}