24.01.2022
0
2
94
100

EHMA-ExponentialHullMovingAverage

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("EHMAKripex", IndicatorDrawingArea.OnDataSeries)]
	//Indikatörün çizgilerinin isimleri
	[IndicatorLineInformationAttribute(new []
		{
			"EHMA(0)"
		})]

	public class EHMAKripex : 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(20)]
		public int Period
		{
			get; set;
		}

		[DefaultValue(MovMethod.Exponential)]
		public MovMethod movmethod
		{
			get; set;
		}

		MOV mov1, mov2, mov3;

		public sealed override void OnInit()
		{
			mov1 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period / 2, movmethod);
			mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, movmethod);
			mov3 = new MOV((int) Math.Sqrt(Period), movmethod);
		}

		/// <summary>
		/// Seçilen sembolün bardata'ları güncellendikçe bu fonksiyon tetiklenir. 
		/// </summary>
		/// <param name="currentBar">Güncellenen bardata'nın indexteki sırası</param>
		/// <param name="inputValue">Seçilen OHLC tipine göre gelen bardata'nın o anki değeri</param>
		/// <param name="barDateTime">Bardata'ya gelen güncelleme zamanı</param>
		public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
		{
			mov3.Update(2 * mov1.CurrentValue - mov2.CurrentValue, currentBar, barDateTime);

			if (currentBar < Period)
			{
				SetLine(0, currentBar, 0);
				return ;
			}

			SetLine(currentBar, mov3.CurrentValue);
		}

	}
}

0 Yorum