0 beğenilme 0 beğenilmeme
454 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 (33 puan) tarafından | 454 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);
		}

	}
}

 

(4,555 puan) tarafından
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,519 soru
7,522 cevap
4,408 yorum
8,777 kullanıcı