0 beğenilme 0 beğenilmeme
124 kez görüntülendi
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);

}

 

}

}
İndikator kategorisinde (14 puan) tarafından | 124 kez görüntülendi

Bu soruya cevap vermek için lütfen giriş yapınız veya kayıt olunuz.

Hoş geldiniz, Matriks Destek Platformu sizlere sorularınızın hızlıca cevaplanması için bir ortam sağlar. Sorduğunuz ve cevapladığınız soruların ve yorumlarınızın aldığı oylar üzerinden puan kazanırsınız. Puan sistemine bağlı kampanyamızla ücretsiz kullanım avantajlarından faydalanabilirsiniz.



8,087 soru
8,058 cevap
4,580 yorum
14,727 kullanıcı