RIC Relative Indicator Combination
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;
/*
RIC ( Relative Indicator Combination )
((RSI(C,14)*1.43)+(MO(C,14)*5)+STOSK(14,3,3,E)+((DIS(14)+40)*1.25))/4
Anıl Özekşi
*/
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("RICKripex", IndicatorDrawingArea.NewWindow)]
//Indikatörün çizgilerinin isimleri
[IndicatorLineInformationAttribute(new []
{
"RIC(0)"
})]
public class RICKripex : 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(1.43)]
public decimal RsiKatsayisi
{
get; set;
}
[DefaultValue(14)]
public int MoPeriod
{
get; set;
}
[DefaultValue(5)]
public decimal MoKatsayisi
{
get; set;
}
[DefaultValue(14)]
public int StockPeriodK
{
get; set;
}
[DefaultValue(3)]
public int StockPeriodD
{
get; set;
}
[DefaultValue(3)]
public int StockPeriodSlowK
{
get; set;
}
[DefaultValue(14)]
public int DISPeriod
{
get; set;
}
[DefaultValue(1.25)]
public decimal DISKatsayisi
{
get; set;
}
DI di;
StochasticSlow stochasticSlow;
MOM mom;
RSI rsi;
public sealed override void OnInit()
{
di = DIIndicator(Symbol, SymbolPeriod, OHLCType.Close, DISPeriod);
stochasticSlow = StochasticSlowIndicator(Symbol, SymbolPeriod, OHLCType.Close, StockPeriodK, StockPeriodD, StockPeriodSlowK, MovMethod.Exponential);
mom = MOMIndicator(Symbol, SymbolPeriod, OHLCType.Close, MoPeriod);
rsi = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, RsiPeriod);
}
decimal deger;
public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
{
if (currentBar < RsiPeriod)
{
SetLine(0, currentBar, 0);
return ;
}
deger = (rsi.CurrentValue * RsiKatsayisi + mom.CurrentValue * MoKatsayisi + stochasticSlow.StochasticSlowK.CurrentValue + ((di.Pdi.CurrentValue - di.Mdi.CurrentValue) + 40) * DISKatsayisi) / 4;
SetLine(currentBar, deger);
}
}
}