0 beğenilme 0 beğenilmeme
483 kez görüntülendi
iq da kayıtlı iki indikatörün farkını veya bölme sonucunu yeni indikatör olarak nasıl yazarız bir kalıbı varmıdır.

teşekürler.
İndikator kategorisinde (12 puan) tarafından | 483 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhaba,

İstediğiniz indikatörlerin farkı aşağıdaki gibidir. 

Size daha önce gönderilen PeriIndex-HighIndex şeklinde yazılmıştır.

İyi çalışmalar.

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

	public class HPIndex : 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 HighindexPeriod1
		{
			get; set;
		}

		[DefaultValue(21)]
			public int PeriindexPeriod1
		{
			get; set;
		}


		MatriksIndicator PeriIndex;
		MatriksIndicator HighIndex;

		public sealed override void OnInit()
		{
			PeriIndex = new PeriIndex();

			PeriIndex.SetIndicatorParameters("Period", PeriindexPeriod1); RegisterUserIndicator(PeriIndex, Symbol, SymbolPeriod, OHLCType.Close, PeriindexPeriod1);

			HighIndex = new HighIndex();

			HighIndex.SetIndicatorParameters("Period", HighindexPeriod1); RegisterUserIndicator(HighIndex, Symbol, SymbolPeriod, OHLCType.Close, HighindexPeriod1);

			
		}

		decimal HP;
		/// <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)
		{

			HP= PeriIndex.Value[0][PeriIndex.CurrentIndex] -  HighIndex.Value[0][HighIndex.CurrentIndex];
			if (currentBar < Period)
			{
				//SetLine fonksiyonu indikatördeki noktaları kuran fonksiyondur
				//Ilk paramatre indicatordeki hangi çizginin güncelleneceği bilgisidir.
				//Ikinci parametre güncellenecek çizginin hangi indexinin güncelleneceği bilgisidir.
				//Ucüncü parametre güncellenecek çizginin indexinin alacağı değerdir.
				SetLine(0, currentBar, 0);
				return ;
			}


			SetLine(0, currentBar, HP);

		}


	}
}

 

(11,069 puan) tarafından
7,591 soru
7,598 cevap
4,441 yorum
10,466 kullanıcı