Merhaba,
HHV ve LLV fonksiyonunun önceki değerlerine erişerek işleme giriş çıkış kontrollerinde kullanmak istiyorum. Kodu derlediğimde hata vermiyor ancak Debug ile görmek istediğimde hata alıyorum.
Aşağıdaki kodda, Debug için hata yok. Son aktif bara göre LowestLow değerini getiriyor. Son LowestLow değerini de bir dictionary'e atıyorum.
using System;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel;
using Matriks.Data.Identifiers;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.AlgoTrader;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Trader.Core.TraderModels;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
using System.Windows.Media;
namespace Matriks.Lean.Algotrader
{
public class Scalp_v3_HHVLLV : MatriksAlgo
{
// Strateji çalıştırılırken kullanacağımız parametreler. Eğer sembolle ilgili bir parametre ise,
// "SymbolParameter" ile, değilse "Parameter" ile tanımlama yaparız. Parantez içindeki değerler default değerleridir.
[SymbolParameter("XBT_USD_BMEX")]
public string Symbol;
[Parameter(SymbolPeriod.Min)]
public SymbolPeriod SymbolPeriod;
[Parameter(5)]
public decimal BuyOrderQuantity;
[Parameter(5)]
public decimal SellOrderQuantity;
// indikator tanımları.
[Parameter(10)]
public int longSpan;
[Parameter(0)]
public int lastBarIndex;
[Parameter(0)]
public float longHigh;
[Parameter(10000000)]
public float longLow;
Dictionary<int, float> LLVList = new Dictionary<int, float>();
Dictionary<int, float> HHVList = new Dictionary<int, float>();
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
WorkWithPermanentSignal(false);
SendOrderSequential(true);
}
/// <summary>
/// Init islemleri tamamlaninca, bardatalar kullanmaya hazir hale gelince bu fonksiyon tetiklenir. Data uzerinde bir defa yapilacak islemler icin kullanilir
/// </summary>
public override void OnInitComplated()
{
var barDataModel = GetBarData();
lastBarIndex = barDataModel.Close.Count -1;
}
public override void OnDataUpdate(BarDataEventArgs barData)
{
var barDataModel = GetBarData();
lastBarIndex = barDataModel.Close.Count -1;
longLow=(float)LowestLow(OHLCType.Low,longSpan);
longHigh=(float)HighestHigh(OHLCType.High,longSpan);
LLVList[lastBarIndex] = longLow;
Debug("LongLow-1= " + LLVList[lastBarIndex]);
}
public override void OnNewsReceived(int newsId, List<string> relatedSymbols)
{
}
public override void OnOrderUpdate(IOrder order)
{
if (order.OrdStatus.Obj == OrdStatus.Filled)
{
}
}
}
}
Beklentim, Dictionary'deki bir önceki indis'i çektiğimde LowestLow değerinin bir önceki değerinin gelmesi. Debug'ı alttaki şekilde değiştirince kod derleniyor. Ama Debug bana hata veriyor.
Debug("LongLow-1= " + LLVList[lastBarIndex-1]);
Hata Mesajı:
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.Scalp_v3_HHVLLV.OnDataUpdate(BarDataEventArgs barData)
at Matriks.Lean.Algotrader.AlgoBase.MatriksAlgo.UpdateBarData(BarDataEventArgs e) in E:\BuildAgentRelease\work\cb8bc45b3237af97\matriks-lean-algotrader\src\MatriksIndicator.cs:line 319
Bu bir önceki LowestLow değerine ulaşmayı ve kontrolü nasıl sağlayabilirim?