18.01.2022
0
1
66
100

Detrend Price göstergesi hareketli bir ortalamaya benzer, daha kolay tanımlamak için fiyatlardaki eğilimleri filtreler.

Gösterge, bir trenddeki döngüleri tanımlama girişimidir.

 yatay düz bir çizgi olarak hareketli bir ortalama çizerek ve

 fiyatların bir a ile ilişkilerine göre hat boyunca yerleştirilmesi

 hareketli ortalama. Altta yatan tanımlamanın bir yolunu sağlar.

 hareketli ortalama bir aralık içinde görüntülendiğinde belirgin olmayan döngüler

 fiyat tablosu. Uzunluktan daha uzun süreli döngüler (sayı

 Detrend Fiyat Osc'sini hesaplamak için kullanılan çubukların sayısı) etkin bir şekilde

 osilatör tarafından filtrelenir veya çıkarı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;
/*
DPO DetrendPriceOsilatör 

Prime
a:=20;
b:=a/2+1;
REF(C,-b)-MOV(C,a,S)
*/
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("DPOKripex", IndicatorDrawingArea.NewWindow)]
	//Indikatörün çizgilerinin isimleri
	[IndicatorLineInformationAttribute(new []
		{
			"DPOKripex(0)"
		})]

	public class DPOKripex : MatriksIndicator
	{

		[DefaultValue(20)]
		public int Period
		{
			get; set;
		}

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

		[DefaultValue(true)]
		public bool OrtalanmisMI
		{
			get; set;
		}

		MOV mov;

		public sealed override void OnInit()
		{
			mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, MovMethod);
		}

		int b;

		public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
		{
			var bardatamodel = GetBarData();
			b = (int) Period / 2 + 1;

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

			if (!Instrument.SymbolBarData.Close.ContainsKey(currentBar - b))
			{
				SetLine(0, currentBar, 0);
			}else
			{
				//dpo = isCentered ? close[barsback] - ma : close - ma[barsback]
				if (OrtalanmisMI)
				{
					SetLine(0, currentBar, (Instrument.SymbolBarData.Close[currentBar - b] - mov.CurrentValue));
				}else
				{
					SetLine(0, currentBar, (Instrument.SymbolBarData.Close[currentBar] - Ref(mov, b)));
				}
			}
		}
	}
}

0 Yorum