MatriksIQ Destek
Matriks Destek
Matriks Web Destek
Matriks Mobile Destek
0 beğenilme 0 beğenilmeme
63 kez görüntülendi

Merhaba,

Kıvanç Bey tarafından da paylaşılan TREND INTENSITY INDEX (TII) İndikatörü'nün Matriks IQ'ya eklenmesi yönünde bir çalışma mevcut mudur?

Matriks Prime kodu

smapd:=input("HO periodu?",1,500,34);
tiipd:=input("TII periodu?",1,500,13);
sma:=mov(c,smapd,s);
upt:=if(c>sma,c-sma,0);
downt:=if(sma>c,sma-c,0);
tii:=100*sum(upt,tiipd)/(sum(upt,tiipd)+sum(downt,tiipd));
tii;0;100;50;20;80

İyi çalışmalar.

Algoritmik Trading kategorisinde (20 puan) tarafından | 63 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhaba,

Paylaştığınız kodun MatriksIQ'daki yazımı aşağıdadır. Yeni kullanıcı indikatörü oluşturup aşağıdaki kodu yapıştırıp kullanabilirsiniz. İndikatör adının "TII" olmasına dikkat ediniz.

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

	public class TII : 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(34)]
			public int HoPeriod
		{
			get; set;
		}

		[DefaultValue(13)]
			public int TiiPeriod
		{
			get; set;
		}

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

		Dictionary<int, decimal> upt = new Dictionary<int, decimal>();
		Dictionary<int, decimal> downt = new Dictionary<int, decimal>();
		decimal sumUpt = 0;
		decimal sumDownt = 0;
		/// <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(0, currentBar, 0);
			SetLine(1, currentBar, 0);
			SetLine(2, currentBar, 20);
			SetLine(3, currentBar, 50);
			SetLine(4, currentBar, 80);
			SetLine(5, currentBar, 100);

			var close = Instrument.SymbolBarData.Close[currentBar];
			upt[currentBar] = close>mov.CurrentValue? (close - mov.CurrentValue) :0;
			downt[currentBar] = close<mov.CurrentValue? (mov.CurrentValue - close) :0;
			if (currentBar < TiiPeriod)
			{
				SetLine(1, currentBar, currentBar);
				sumUpt += upt[currentBar];
				sumDownt += downt[currentBar];
			}else
			{
				sumUpt += (upt[currentBar] - upt[currentBar - TiiPeriod]);
				sumDownt += (downt[currentBar] - downt[currentBar - TiiPeriod]);
			}
			if (currentBar < HoPeriod) return ;
			var tii = (100 * sumUpt) / (sumUpt + sumDownt);
			SetLine(0, currentBar, tii);
		}

	}
}

 

önce (2,951 puan) tarafından
1,080 soru
1,117 cevap
1,290 yorum
667 kullanıcı