Know Sure Thing (KST) momentum tabanlı bir osilatördür ve Değişim Oranına (ROC) dayanmaktadır.
KST dört farklı ROC zaman dilimi alır ve Basit Hareketli Ortalamalar kullanarak bunları düzeltir.
KST daha sonra sıfır çizgisinin üstünde ve altında pozitif ve negatif değerler arasında dalgalanan bir nihai değer hesaplar.
KST çizgisinin kendisinin bir SMA'sı olan bir sinyal çizgisi de vardır.
Temel olarak, KST dört ayrı fiyat döngüsünün momentumunu ölçer.
Aşırı alım ve aşırı satım koşullarını ve geçişleri tespit etmek için kullanırlar.
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;
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("KSTKripex", IndicatorDrawingArea.NewWindow)]
//Indikatörün çizgilerinin isimleri
[IndicatorLineInformationAttribute(new []
{
"KST", "KSTSignal"
})]
public class KSTKripex : 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(10)] public int Roc1
{
get; set;
}
[DefaultValue(15)] public int Roc2
{
get; set;
}
[DefaultValue(20)] public int Roc3
{
get; set;
}
[DefaultValue(30)] public int Roc4
{
get; set;
}
[DefaultValue(10)] public int MovingAV1
{
get; set;
}
[DefaultValue(10)] public int MovingAV2
{
get; set;
}
[DefaultValue(10)] public int MovingAV3
{
get; set;
}
[DefaultValue(15)] public int MovingAV4
{
get; set;
}
[DefaultValue(9)] public int MASignal
{
get; set;
}
SMA sma1, sma2, sma3, sma4, sma5;
ROC roc1, roc2, roc3, roc4;
public sealed override void OnInit()
{
roc1 = ROCIndicator(Symbol, SymbolPeriod, OHLCType.Close, Roc1);
roc2 = ROCIndicator(Symbol, SymbolPeriod, OHLCType.Close, Roc2);
roc3 = ROCIndicator(Symbol, SymbolPeriod, OHLCType.Close, Roc3);
roc4 = ROCIndicator(Symbol, SymbolPeriod, OHLCType.Close, Roc4);
sma1 = SMAIndicator(roc1, MovingAV1);
sma2 = SMAIndicator(roc2, MovingAV2);
sma3 = SMAIndicator(roc3, MovingAV3);
sma4 = SMAIndicator(roc4, MovingAV4);
sma5 = new SMA(MASignal);
DrawHorizantal(0);
}
decimal kst, kstSignal;
public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
{
if (currentBar < Roc4)
{
SetLine(0, currentBar, 0);
SetLine(1, currentBar, 0);
return ;
}
kst = sma1.CurrentValue + sma2.CurrentValue * 2 + sma3.CurrentValue * 3 + sma3.CurrentValue * 4;
sma5.Update(kst, currentBar, barDateTime);
SetLine(0, currentBar, roc1.CurrentValue);
SetLine(1, currentBar, sma5.CurrentValue);
}
}
}