Awesome Oscillator (AO), piyasa momentumunu ölçmek için kullanılan bir göstergedir.
AO, 34 Dönemlik ve 5 Dönemlik Basit Hareketli Ortalama arasındaki farkı hesaplar.
Kullanılan Basit Hareketli Ortalamalar kapanış fiyatı değil, her iki çubuğun orta noktaları kullanılarak hesaplanır.
AO genellikle trendleri teyit etmek veya muhtemel dönüşleri öngörmek için 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("AwesomeKripex", IndicatorDrawingArea.NewWindow)]
//Indikatörün çizgilerinin isimleri
[IndicatorLineInformationAttribute(new []
{
"AwO(0,1)"
})]
public class AwesomeKripex : 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(5)]
public int KisaPeriod
{
get; set;
}
[DefaultValue(34)]
public int UzunPeriod
{
get; set;
}
[DefaultValue(MovMethod.Simple)]
public MovMethod MovMethod
{
get; set;
}
MOV movKisa,MovUzun;
public sealed override void OnInit()
{
movKisa = MOVIndicator(Symbol, SymbolPeriod, OHLCType.HL2, KisaPeriod, MovMethod);
MovUzun = MOVIndicator(Symbol, SymbolPeriod, OHLCType.HL2, UzunPeriod, MovMethod);
}
public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
{
if (currentBar < UzunPeriod)
{
SetLine(0, currentBar, 0);
return ;
}
SetLine(currentBar, movKisa.CurrentValue-MovUzun.CurrentValue);
}
}
}