Strateji calistirildi
23.11.2023 13:20:00 : System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
at Matriks.Data.Series.ListDictionary.get_Item(Int32 key)
at Matriks.Lean.Algotrader.bolrsi.OnDataUpdate(BarDataEventArgs barData)
at Matriks.Lean.Algotrader.AlgoBase.MatriksAlgo.TriggerUserCode(BarDataEventArgs e)
Programı öğrenmek için basit şeyler yazmaya çalışıyorum, aşağıdaki kodu backtestte 01/01/2023 - 31/12/2023 arası için çalıştırdığımda yukarıdaki uyarıyı alıyorum. Sebebini çözemedim.
using System;
using System.Collections.Generic;
using System.Linq;
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 Matriks.Data.Tick;
using Matriks.Enumeration;
using Matriks.IntermediaryInstitutionAnalysis.Enums;
namespace Matriks.Lean.Algotrader
{
public class rsi : MatriksAlgo
{
[SymbolParameter("SISE")]
public string Sembol;
[SymbolParameter("USDTRY")]
public string Doviz;
[Parameter(SymbolPeriod.Min10)]
public SymbolPeriod SembolPeriyodu;
[Parameter(10)]
public decimal SatinAlimSayisi;
[Parameter(10)]
public decimal SatisSayisi;
[Parameter(14)]
public int RsiPeriodu;
[Parameter(70)]
public decimal RsiYuksek;
[Parameter(25)]
public decimal RsiDusuk;
[Output]
public decimal RSI;
decimal AlisFiyati = 0;
int alsat = 1;
RSI rsi;
public override void OnInit()
{
rsi = RSIIndicator(Sembol, SembolPeriyodu, OHLCType.Close, RsiPeriodu);
AddSymbol(Sembol, SembolPeriyodu);
AddSymbol(Doviz, SembolPeriyodu);
WorkWithPermanentSignal(true);
}
public override void OnDataUpdate(BarDataEventArgs barData)
{
var hisse_data = GetBarData(Sembol, SembolPeriyodu);
var USD_data = GetBarData(Doviz, SembolPeriyodu);
var hisse = hisse_data.Close[hisse_data.BarDataIndexer.LastBarIndex];
var USD = USD_data.Close[USD_data.BarDataIndexer.LastBarIndex];
Debug(hisse);
if (rsi.CurrentValue < RsiDusuk && alsat == 1)
{
SendMarketOrder(Sembol, SatinAlimSayisi, (OrderSide.Buy));
AlisFiyati = Math.Round(hisse / USD, 4);
alsat = 0;
Debug("RSİ verisi (" + rsi.CurrentValue + ") " +RsiDusuk +"dan küçük");
Debug("-----------------------------------------------");
}
if (rsi.CurrentValue > RsiYuksek && (hisse / USD) > (AlisFiyati * 1.01m) && alsat == 0)
{
SendMarketOrder(Sembol, SatisSayisi, (OrderSide.Sell));
alsat = 1;
Debug("RSİ verisi (" + rsi.CurrentValue + ") " + RsiYuksek + "ten büyük");
Debug("Bar Datası (" + barData.BarData.Close + ") Alış fiyatından (" + AlisFiyati + ") büyük olduğu için satıldı");
Debug("-----------------------------------------------");
}
Debug("---------------Beklemede-------------------");
Debug("RSI: " + rsi.CurrentValue);
Debug("Fiyat " + barData.BarData.Close);
Debug("Alış Fyatı : " + AlisFiyati);
Debug("---------------Beklemede-------------------");
}
public override void OnStopped()
{
}
}
}

