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

}

 

}

}