C# bilmiyorum. Klingeri yapmaya çalıştım. Grafik doğru ama son barı yazmıyor. Bir yerde hata yapıyorum ama bulamadım.
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
[IndicatorInformation("klinger3", IndicatorDrawingArea.NewWindow)]
//Indikatörün çizgilerinin isimleri
[IndicatorLineInformation(new []
{
"Klinger (0,1)", "Trigger"
})]
public class klinger3 : 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.
[DefaultValue(13)]
public int triglen
{
get; set;
}
[DefaultValue(34)]
public int fastx
{
get; set;
}
[DefaultValue(55)]
public int slowx
{
get; set;
}
//Eklenmek istenen indikatorün imzasını burda belirtiyoruz.
public ACCBands accBands;
MOV mov1, mov2, mov3, mov4, mov5, mov6, mov7;
//Indicator değerleri hesaplanmadan önce yaratılacak indikatörler burda tanımlanıyor.
public sealed override void OnInit()
{
mov1 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, MovMethod.Exponential);
// mov2 = MOVIndicator(mov1,fastx, MovMethod.Exponential); // fast x
// mov3 = MOVIndicator(mov2, slowx, MovMethod.Exponential);
mov5 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, fastx, MovMethod.Exponential); // *xFast = ema(xTrend, FastX) değerini hesaplamak için
mov6 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, slowx, MovMethod.Exponential); // *xslow ema(xTrend, slowX) değerini hesaplamak için
mov7 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, triglen, MovMethod.Exponential); // *xslow ema(xTrend, slowX) değerini hesaplamak için
// mov1 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, MovMethod.Exponential);
//mov2 = MOVIndicator(mov1, Period, MovMethod.Exponential);
//mov3 = MOVIndicator(mov2, Period, MovMethod.Exponential);
//accBands = ACCBandsIndicator(Symbol, SymbolPeriod, OHLCType.Close, 10, 0.0005m);
}
decimal xtrend = 0;
decimal xfast;
decimal xslow;
decimal xkvo;
decimal xtrigger;
/// <summary>
/// Seçilen sembolün bardata'ları güncellendikçe bu fonksiyon tetiklenir.
/// </summary>
/// <param name="currentBar">Güncellenen bardata'nın indexteki sırası</param>
/// <param name="inputValue">Seçilen OHLC tipine göre gelen bardata'nın o anki değeri</param>
/// <param name="barDateTime">Bardata'ya gelen güncelleme zamanı</param>
///
public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
{
var barDataModel = GetBarData();
mov5.Update(xtrend, currentBar, barDateTime); // xtrend değerini ve xtrend değerini fastx emasını aldık i
mov6.Update(xtrend, currentBar, barDateTime); // xslow değerini ve xtrend değerini fastx emasını aldık i
xfast = mov5.CurrentValue; //değeri ondalık olarak elde ettik
xslow = mov6.CurrentValue; // xslow değeri ondalık elde ettik
xkvo = xfast - xslow; //xkvo değerini hesapladık
mov7.Update(xkvo, currentBar, barDateTime); // xkvo değerini ve triglen periyodu ile değerini xkvo emasını aldık i
xtrigger = mov7.CurrentValue; // xtrigger değer olarak yazdık */
DrawHorizantal(0);
if (currentBar < Period + 1)
{
return;
}
var hlc3 = Instrument.SymbolBarData.HLC3[currentBar];
var prevhlc3 = Instrument.SymbolBarData.HLC3[currentBar -1];
var volume = Instrument.SymbolBarData.Volume[currentBar];
if (hlc3>prevhlc3)
{
xtrend = volume * 100;
}else if (hlc3<prevhlc3)
{
xtrend = - volume * 100;
}
SetLine(0, currentBar, xkvo);
SetLine(1, currentBar, xtrigger);
}
}
}