3 beğenilme 0 beğenilmeme
977 kez görüntülendi

İndikatör adı: CMFG

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

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

		MOV movVolume, movMFV;

		public sealed override void OnInit()
		{
			movVolume = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Volume, Period, MovMethod.Simple);
			movMFV = new MOV(Period, MovMethod.Simple);
		}

		/// <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)
		{
			SetLine(currentBar, 0);

			//Seçilen sembolün bardatasına Instrument.SymbolBarData şeklinde ulaşabiliriz.
			var barDataModel = Instrument.SymbolBarData;

			//Money Flow Multiplier = ((Close value – Low value) – (High value – Close value)) / (High value – Low value)
			decimal mfm = ((barDataModel.Close[currentBar] - barDataModel.Low[currentBar]) - (barDataModel.High[currentBar] - barDataModel.Close[currentBar])) / (barDataModel.High[currentBar] - barDataModel.Low[currentBar]);

			//Money Flow Volume = Money Flow Multiplier x Volume for the Period
			decimal mfv = mfm * barDataModel.Volume[currentBar];
			movMFV.Update(mfv, currentBar, barDateTime);

			if (currentBar < Period)
			{
				return ;
			} else
			{
				//CMF = 21-day Average of the Daily Money Flow / 21-day Average of the Volume
				decimal cmf = movMFV.Value[0][currentBar] / movVolume.Value[0][currentBar];
				SetLine(currentBar, cmf);
			}

		}
	}
}

 

Indikator Builder kategorisinde (725 puan) tarafından | 977 kez görüntülendi

Bu soruya cevap vermek için lütfen giriş yapınız veya kayıt olunuz.

Hoş geldiniz, Matriks Destek Platformu sizlere sorularınızın hızlıca cevaplanması için bir ortam sağlar. Sorduğunuz ve cevapladığınız soruların ve yorumlarınızın aldığı oylar üzerinden puan kazanırsınız. Puan sistemine bağlı kampanyamızla ücretsiz kullanım avantajlarından faydalanabilirsiniz.



7,506 soru
7,510 cevap
4,405 yorum
8,694 kullanıcı