Aşağıdaki gibi volume, price ve OBV farklarini gosterdigim indikatorumde, OBV degerleri her backtest veya backtest optimizasyonu caliştirdigimda farkli geliyor, acaba indikator kullanimimda bir hata mi yapiyorum ?
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;
namespace Matriks.Lean.Algotrader
{
//Ilk parametre indikatörün adı, sınıfın adıyla aynı olmalıdır.
//Ikinci parametre indikatörün Dataserisinin üzerine mi yeni pencereye mi ekleneceğini belirtir. Yeni pencere için ->IndicatorDrawingArea.NewWindow , Data Serisi için IndicatorDrawingArea.OnDataSeries
[IndicatorInformationAttribute("trio", IndicatorDrawingArea.NewWindow)]
//Indikatörün çizgilerinin isimleri
[IndicatorLineInformationAttribute(new []
{
"obv_diff", "price_diff", "vol_diff"
}
)]
public class trio : MatriksIndicator
{
//Indicator opsiyon panelinde değerleri değiştirebildiğimiz parametreler. Int, Bool, Decimal ve Enum değerleri alabilir.Tüm değişken tiplerini DefaultValue ile tanımlarız.
OBV obv;
VOLUME volume;
public sealed override void OnInit()
{
obv = OBVIndicator(Symbol, SymbolPeriod);
volume = VolumeIndicator(Symbol, SymbolPeriod);
}
public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
{
if (CheckIndexesForValue(currentBar))
{
SetLine(0, currentBar, 0);
SetLine(1, currentBar, 0);
return;
}
var O_curr = obv.Value[0][currentBar];
var O_prev = obv.Value[0][currentBar -1];
var vol_curr = volume.CurrentValue;
var vol_prev = volume.Value[0][currentBar -1];
var low = Instrument.SymbolBarData.Low[currentBar];
var high = Instrument.SymbolBarData.High[currentBar];
var close = Instrument.SymbolBarData.Close[currentBar];
var open = Instrument.SymbolBarData.Open[currentBar];
var obv_diff = 0m;
if (O_prev != 0)
{
obv_diff = (O_curr - O_prev) / O_prev * 100;
}
var vol_diff = 0m;
if (vol_prev != 0)
{
vol_diff = (vol_curr - vol_prev) / vol_prev;
}
var price_diff = (close - open) / open * 100;
SetLine(0, currentBar, obv_diff);
SetLine(1, currentBar, price_diff);
SetLine(2, currentBar, vol_diff);
}
}
}