Dem-Demarker
DeM Göstergesi, Tom Demarker tarafından geliştirilen ve mevcut döneme ait maksimum fiyatları önceki dönemlerle karşılaştırarak altta yatan enstrümana olan talebini ölçen bir teknik analiz aracıdır. 0 ve 1 sınırları arasında değişen ve 0,5 taban değeri olan tek bir çizgiden oluşur. Genel bir kural olarak, aşırı alım seviyesi genellikle 0,7 ve aşırı satım seviyesi 0,3 olarak belirlenmiştir. Bu seviyelerde, terse dönüşler beklenebilir, bu da göstergeyi öncü bir gösterge haline getirir. Gösterge genellikle diğer sinyallerle birlikte kullanılır.
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;
/*
pd:=Input("Period",1,500,14);
DeMax:=IF(H-Ref(H,-1)>0,H-Ref(H,-1),0);
DeMin:=IF(Ref(L,-1)-L>0,Ref(L,-1)-L,0);
DeMarker:=mov(DeMax,pd,s)/(mov(DeMax,pd,s)+mov(DeMin,pd,s));
DeMarker;
0.7;
0.3
*/
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("DemarkerKripex", IndicatorDrawingArea.NewWindow)]
//Indikatörün çizgilerinin isimleri
[IndicatorLineInformationAttribute(new []
{
"DeM(0)"
})]
public class DemarkerKripex : 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 Period
{
get; set;
}
SMA smaMax, smaMin;
public sealed override void OnInit()
{
smaMax = new SMA(Period);
smaMin = new SMA(Period);
DrawHorizantal(0.7m);
DrawHorizantal(0.3m);
}
decimal demax, demin;
decimal high, high1;
decimal low, low1;
public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
{
if (currentBar < Period)
{
SetLine(0, currentBar, 0);
return ;
}
high = Instrument.SymbolBarData.High[currentBar];
high1 = Instrument.SymbolBarData.High[currentBar -1];
low = Instrument.SymbolBarData.Low[currentBar];
low1 = Instrument.SymbolBarData.Low[currentBar -1];
demax = high - high1>0 ? high - high1:0;
demin = low1 - low>0 ? low1 - low:0;
smaMax.Update(demax, currentBar, barDateTime);
smaMin.Update(demin, currentBar, barDateTime);
var deger = smaMax.CurrentValue + smaMin.CurrentValue>0? smaMax.CurrentValue / (smaMax.CurrentValue + smaMin.CurrentValue) :0;
SetLine(currentBar, deger);
}
}
}