0 beğenilme 0 beğenilmeme
478 kez görüntülendi
merhabalar aşağıdaki stratejiyi matriksIQ da indikatör olarak yazabilir misiniz? AL Cross(C,Ref(LLV(C,opt1),-1)+(Ref(ATR(opt2),-1)*opt3)) SAT Cross(Ref(HHV(C,opt1),-1)-(Ref(ATR(opt2),-1)*opt3),C)
Algoritmik Trading kategorisinde (24 puan) tarafından | 478 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhabalar,

İstemiş olduğunuz indikatör aşağıda verilmiştir.

Lütfen inceleyiniz.

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

	public class M07 : 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(5)]
		public int Opt1
		{
			get; set;
		}

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

		[DefaultValue(5)]
		public decimal Opt3
		{
			get; set;
		}


		ATR atr;
		HighestHigh HHV;
		LowestLow LLV;

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

			HHV = HighestHighIndicator(mov, Opt1);
			LLV = LowestLowIndicator(mov, Opt1);
			atr = ATRIndicator(Symbol, SymbolPeriod, OHLCType.Close, Opt2);
		}

		/// <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 H = HHV.Value[0][HHV.CurrentIndex -1];
			var L = LLV.Value[0][LLV.CurrentIndex -1];
			var _ATR = atr.Value[0][atr.CurrentIndex - 1];
			var _T = (L + _ATR * Opt3);
			var _F = (H - _ATR * Opt3);


			if (CrossAbove(mov, _T, 0))
			{
				SetLine(0, currentBar, 1);
				return;
			}

			if (CrossBelow(mov, _F, 0))
			{
				SetLine(0, currentBar, -1);
				return;
			}

			SetLine(0, currentBar, 0);
			return ;



		}


	}
}

İyi çalışmalar.

(11,069 puan) tarafından
7,700 soru
7,684 cevap
4,467 yorum
11,511 kullanıcı