0 beğenilme 0 beğenilmeme
638 kez görüntülendi
Oluşturmuş olduğum indikatorü stratejide kullanmak istiyorum. Otomatik bir kod geliyor fakat oluşturduğum indicator'deki alanlara erişemiyorum. Nasıl bir yol izlemeliyim
Algoritmik Trading kategorisinde (77 puan) tarafından | 638 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhaba,

Strateji editöründe ya da algoritma sihirbazında kullanıcı indikatörü eklendiğinde kullanıcı indikatöründe DafaultValue ile oluşturulan parametrelere  aşağıdaki gibi ulaşılabiliyor.

Kullanıcı indikatörü:

public class IFTMFIKripex : 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(9)]
	public int MovPeriod
	{
		get; set;
	}

	[DefaultValue(5)]
	public int MfiPeriod
	{
		get; set;
	}

Strateji:

MatriksIndicator IFTMFIKripex;

public override void OnInit()
{

	IFTMFIKripex = new IFTMFIKripex();

	IFTMFIKripex.SetIndicatorParameters("MovPeriod", 9);
	IFTMFIKripex.SetIndicatorParameters("MfiPeriod", 5); 
    RegisterUserIndicator(IFTMFIKripex, Symbol1, SymbolPeriod1, OHLCType.Close, 5);

 

(15,892 puan) tarafından
0 0

"Otomatik bir kod geliyor fakat oluşturduğum indicator'deki alanlara erişemiyorum" şeklinde bir sorum vardı. Sanırım anlatamadım derdimi. Siz burada otomatik üretilen kodu göstermişsiniz ki zaten bu otomatik geliyor:) Bu kısmı sormuyorum. 

Ben indikatörün currentValue'su gibi değerlerine erişemiyorum. Onlara nasıl erişim. T

 

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

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

		[DefaultValue(5)]
			public int Multipler
		{
			get; set;
		}

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

		MOV mov;
		MOV movOpen, movClose, movLow, movHigh;

		SymbolPeriod variantMethod;
		public sealed override void OnInit()
		{
			mov = MOVIndicator(Symbol, SymbolPeriod.Min, OHLCType.Close, Period, Method);
			movClose = new MOV(Period, Method);
			movOpen = new MOV(Period, Method);
			movLow = new MOV(Period, Method);
			movHigh = new MOV(Period, Method);



		}

		/// <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)
		{
			var high = Instrument.SymbolBarData.High[currentBar];
			var low = Instrument.SymbolBarData.Low[currentBar];
			var open = Instrument.SymbolBarData.Open[currentBar];
			var close = Instrument.SymbolBarData.Close[currentBar];

			if (currentBar < Period)
			{
				SetLine(0, currentBar, close);
				SetLine(1, currentBar, close);
				SetLine(2, currentBar, close);
				return ;
			}
			if (currentBar % Multipler == 0)
			{
				movOpen.Update(open, currentBar, barDateTime);
				movClose.Update(close, currentBar, barDateTime);
				movHigh.Update(high, currentBar, barDateTime);
				movLow.Update(low, currentBar, barDateTime);

			}
			var m = mov.CurrentValue;
			var mo = movOpen.CurrentValue;
			var mc = movClose.CurrentValue;
			var mh = movHigh.CurrentValue;
			var ml = movLow.CurrentValue;


			//var result = GetTypicalPrice(currentBar);
			//SetLine(currentBar, result);
			SetLine(0, currentBar, m);
			SetLine(1, currentBar, mo);
			SetLine(2, currentBar, mc);
			//SetLine(3, currentBar, mo);
			//SetLine(4, currentBar, mc);



		}

		private decimal GetTypicalPrice(int barIndex)
		{
			//Seçilen sembole ait bardataya Instrument.SymbolBarData'nın altında ulaşabiliriz.
			if (!Instrument.SymbolBarData.Close.ContainsKey(barIndex)) return 0;
			return (Instrument.SymbolBarData.Close[barIndex] + Instrument.SymbolBarData.High[barIndex] + Instrument.SymbolBarData.Low[barIndex]) / 3;
		}
	}
}

Ben strateji içinden Mov, OpenLevel ve CloseLevel değerlerine ulaşmak istiyorum. Strateji içinde sadece currentvalue var ama bu currentvalue neyin value su bilmiyorum. 

0 0

Otomatik olarak oluşturulan kodu değil de kullanıcı indikatöründe DefaultValue ile tanımlanan değişkenlere strateji içerisinde ulaşılabildiğini göstermek istemiştim. 

CY_Mov_ver1.CurrentValue indeksi 0 olan çizginin anlık değerini vermektedir (Mov değerini verir)

Birden fazla çizgiye sahip olan indikatörlerin çizgi değerlerine aşağıdaki örnekte olduğu gibi ulaşılabilir.

var Mov=CY_Mov_ver1.Value[0][CY_Mov_ver1.CurrentIndex];
var OpenLevel =CY_Mov_ver1.Value[1][CY_Mov_ver1.CurrentIndex];
var CloseLevel =CY_Mov_ver1.Value[2][CY_Mov_ver1.CurrentIndex];

 

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.



8,636 soru
8,590 cevap
4,821 yorum
19,786 kullanıcı