İki çizgiden oluşan indikatörün birinci çizgisi (MovR) data olarak RSI kullanılan bir MOV'un 1000 ile toplanmış halidir.
İkinci çizgisi ise (OttR) data olarak birinci çizginin kullanıldığı bir OTT’den oluşmaktadır.
Al sinyali için MovR çizgisinin OttR çizgisini yukarı kırması
Sat sinyali içinde MovR çizgisinin OttR çizgisini aşağıya kırması olarak yorumlanabilir.
Hazırlayan: Anıl Özekşi
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;
/*
X1:=OPT1;
X2:=OPT2;
X3:=OPT3;
MOV(RSI(C,X1),X2,VAR)+1000;
OTT(MOV(RSI(C,X1),X2,VAR)+1000,2,X3)
*/
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("RISOTTOKripex", IndicatorDrawingArea.NewWindow)]
//Indikatörün çizgilerinin isimleri
[IndicatorLineInformationAttribute(new []
{
"MovR(0)","OttR"
})]
public class RISOTTOKripex : 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 RsiPeriod
{
get; set;
}
[DefaultValue(5)]
public int MovPeriod
{
get; set;
}
[DefaultValue(MovMethod.VAR)]
public MovMethod movMethod
{
get; set;
}
[DefaultValue(2)]
public int OttPeriod
{
get; set;
}
[DefaultValue(1.4)]
public decimal OttOpt
{
get; set;
}
[DefaultValue(MovMethod.VAR)]
public MovMethod ottMethod
{
get; set;
}
RSI rsi;
OTT ott;
MOV mov;
public sealed override void OnInit()
{
rsi = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, RsiPeriod);
mov = MOVIndicator(rsi, MovPeriod, movMethod);
ott = new OTT(OttPeriod, OttOpt, ottMethod, true);
}
public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
{
if (currentBar < MovPeriod)
{
SetLine(0, currentBar, 0);
SetLine(1, currentBar, 0);
return ;
}
var movR=mov.CurrentValue+1000;
ott.Update(movR,currentBar,barDateTime);
SetLine(0,currentBar, movR);
SetLine(1,currentBar, ott.CurrentValue);
}
}
}