0 beğenilme 0 beğenilmeme
677 kez görüntülendi

Merhaba,

 

Matriks Prime’da aşağıdaki gibi hazırladığım basit bir indikatörü MatriksIQ’da da denemek istedim.

 

Period:=9;

K:=MOV( (H+L+C+C)/4, Period, Var);

K

 

Ancak MOV’un fiyat parametresini (H+L+C+C)/4  şeklinde uygulamak istiyorum.

Nasıl yapılacağı konusunda yardımlarınızı rica ederim.

İndikator kategorisinde (14 puan) tarafından | 677 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhaba,

aşağıdaki kodu inceleyebilirsiniz.

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using System.Windows.Media;
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
{
	public class Test : MatriksAlgo
	{
		// Strateji çalıştırılırken kullanacağımız parametreler. Eğer sembolle ilgili bir parametre ise,
		// "SymbolParameter" ile, değilse "Parameter" ile tanımlama yaparız. Parantez içindeki değerler default değerleridir.

		[SymbolParameter("GARAN")]
		public string Symbol;

		[Parameter(SymbolPeriod.Min)]
		public SymbolPeriod SymbolPeriod;
		
		[Parameter(5)]
		public int Period;

		MOV mov;

		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);
			
			mov = new MOV(Period, MovMethod.VAR);			

			//Eger backtestte emri bir al bir sat seklinde gonderilmesi isteniyor bu true set edilir. 
			//Alttaki satırı silerek veya false geçerek emirlerin sirayla gönderilmesini engelleyebilirsiniz. 
			SendOrderSequential(true);
			WorkWithPermanentSignal(true);
		}

		decimal _high,_low,_close;		
		public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
		{			
			var bardata=GetBarData();
			
			_high=barDataCurrentValues.LastUpdate.High;
			_low=barDataCurrentValues.LastUpdate.Low;
			_close=barDataCurrentValues.LastUpdate.Close;
			
			var index=barDataCurrentValues.LastUpdate.BarDataIndex;
			
			mov.Update((_high+_low+2*_close),index,barDataCurrentValues.LastUpdate.DTime);

			// cross(mov(h+l+c+c,period,var),c)
			if (CrossAbove(mov, bardata, OHLCType.Close))
			{
				Debug("Şartınız şağlandı");		
			}
		}
	}
}

 

(15,422 puan) tarafından
1 0

Merhaba,

Yapmak istediğim aşağıdaki indikatördü. Teşekkürler.  :)

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
{
	[IndicatorInformationAttribute("YC_Simple_Indicator", IndicatorDrawingArea.OnDataSeries)]

	[IndicatorLineInformationAttribute(new []
		{
			"YC"
		})]

	public class YC_Simple_Indicator : MatriksIndicator
	{
		[DefaultValue(9)]
			public int Periyot
		{
			get; set;
		}

		MOV mov;

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

		decimal _high, _low, _close;

		public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
		{
			_high = Instrument.SymbolBarData.High[currentBar];
			_low = Instrument.SymbolBarData.Low[currentBar];
			_close = Instrument.SymbolBarData.Close[currentBar];

			mov.Update((_high + _low + 2 * _close) / 4, currentBar, barDateTime);
			SetLine(0, currentBar, mov.CurrentValue);
		}
	}
}

 

7,509 soru
7,511 cevap
4,405 yorum
8,750 kullanıcı