Bir örnek vermek isterim;
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
{
[IndicatorInformationAttribute("DD_Trend", IndicatorDrawingArea.OnDataSeries)]
//Indikatörün çizgilerinin isimleri
[IndicatorLineInformationAttribute(new []
{
"İz Süren(0,1,2)", "Direnç", "Destek"
})]
public class DD_Trend : 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(14)]
public int EmaKisaPeriod
{
get; set;
}
[DefaultValue(100)]
public int EmaUzunPeriod
{
get; set;
}
[DefaultValue(60)]
public int SmaPeriod
{
get; set;
}
EMA ema;
SMA sma1, sma2;
EMA ema1, ema2, ema3, ema4;
public override void OnInit()
{
ema1 = EMAIndicator(Symbol, SymbolPeriod, OHLCType.High, EmaKisaPeriod);
ema2 = EMAIndicator(Symbol, SymbolPeriod, OHLCType.High, EmaUzunPeriod);
ema3 = EMAIndicator(Symbol, SymbolPeriod, OHLCType.Low, EmaKisaPeriod);
ema4 = EMAIndicator(Symbol, SymbolPeriod, OHLCType.Low, EmaUzunPeriod);
sma1 = SMAIndicator(Symbol, SymbolPeriod, OHLCType.High, SmaPeriod);
sma2 = SMAIndicator(Symbol, SymbolPeriod, OHLCType.Low, SmaPeriod);
/*
Alternatif YÖNTEM:
sma1 = new SMA(SmaPeriod);
sma2 = new SMA(SmaPeriod);
ema1 = new EMA(EmaKisaPeriod);
ema2 = new EMA(EmaUzunPeriod);
ema3 = new EMA(EmaKisaPeriod);
ema4 = new EMA(EmaUzunPeriod);
*/
WorkWithPermanentSignal(true);
}
public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
{
if (currentBar < EmaUzunPeriod)
{
SetLine(0, currentBar, 0);
SetLine(1, currentBar, 0);
SetLine(2, currentBar, 0);
return;
}
ema1.Update(Instrument.SymbolBarData.High[currentBar - 5], currentBar, barDateTime);
ema2.Update(Instrument.SymbolBarData.High[currentBar - 5], currentBar, barDateTime);
ema3.Update(Instrument.SymbolBarData.Low[currentBar - 5], currentBar, barDateTime);
ema4.Update(Instrument.SymbolBarData.Low[currentBar - 5], currentBar, barDateTime);
sma1.Update(Instrument.SymbolBarData.High[currentBar - 5], currentBar, barDateTime);
sma2.Update(Instrument.SymbolBarData.Low[currentBar - 5], currentBar, barDateTime);
SetLine(0, currentBar, Instrument.SymbolBarData.HLC3[currentBar]);
SetLine(1, currentBar, (ema1.CurrentValue + sma1.CurrentValue + ema2.CurrentValue) / 3);
SetLine(2, currentBar, (ema3.CurrentValue + sma2.CurrentValue + ema4.CurrentValue) / 3);
}
}
}