0 beğenilme 0 beğenilmeme
895 kez görüntülendi
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("Penguen", IndicatorDrawingArea.NewWindow)]

//Indikatörün çizgilerinin isimleri

[IndicatorLineInformationAttribute(new []

{

"Penguen(0)"

})]

 

public class Penguen : 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(5)]

public int Period

{

get; set;

}

 

ATR atr;

decimal dip;

decimal tepe;

 

public sealed override void OnInit()

{

int per=14;

atr = ATRIndicator(Symbol, SymbolPeriod, OHLCType.Close, 14);

dip=LowestLow(OHLCType.Low, per);

tepe=HighestHigh(OHLCType.High, per);

}

 

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

{

//Yarattığımız indikatörün o anki değerini Indikatör.CurrentValue şeklinde alabiliriz.

var barData=GetBarData();

 

decimal close = barData.Close.Last().Value ;

var low = barData.Low.Last().Value ;

var high = barData.High.Last().Value ;

 

int val=0;

if(close-low>atr.CurrentValue)

val=1;

if(high-close>atr.CurrentValue)

val=-1;

if(close-dip>2*atr.CurrentValue)

val=2;

if(tepe-close>2*atr.CurrentValue)

val=-2;

 

//SetLine fonksiyonu indikatördeki noktaları kuran fonksiyondur

SetLine(0, currentBar, val);

}

}

}
Indikator Builder kategorisinde (18 puan) tarafından | 895 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhaba, asagidaki 3 satiri OnInit icerisinde kullanmayiniz. Bu tip fonksiyonlari, OnInitCompleted ya da OnDataUpdate fonksiyonlari icerisinde kullanabilirsiniz.

int per = 14;
dip = LowestLow(OHLCType.Low, per);
tepe = HighestHigh(OHLCType.High, per);

 

(8,035 puan) tarafından
9,604 soru
9,562 cevap
5,170 yorum
44,517 kullanıcı