1 beğenilme 0 beğenilmeme
607 kez görüntülendi
Merhaba. Hazır stratejilerde CrossMov indikatörü, sadece 1 periyotta çalışıyor. Yani 5dk lıkta ya da istenen tek bir zaman diliminde "al-sat" yapıyor. Mesela "AL" emrini 5dk da "SAT" emrini 60dk lıkta yapması için ne yapılmalı. Böyle komut verilebiliyorsa kodlama bilgim olmadığı için gerekli ayarlamaları yazmanızı rica ederim. İyi çalışmalar...
Algoritmik Trading kategorisinde (22 puan) tarafından | 607 kez görüntülendi

1 cevap

2 beğenilme 0 beğenilmeme
En İyi Cevap

Merhaba, istediğiniz işlemin örneklerini daha önceden hem MatriksIQ teknik dokümanında hem de forumda verdik.Teknik dokümanımızı detaylı incelemenizi tavsiye ederiz. Özellikle kodlama kısmında kullanıcılarımıza yardımcı olacak içerikler bulunmakta.

MatriksIQ teknik dokümanının linki (İstediğiniz örnek "Nasıl Yapılır/ SSS" başlığının altındadır"):

https://matriksiq.matriksdata.com/Algo_Trader_IQ.pdf

Forumda benzer bir soruya verdiğimiz örnek:

https://destek.matriksdata.com/?qa=24/stratejiyi-2-farklı-periyotta-çalıştırabilir-miyim&show=24#q24

Sizin için hazırladığımız CrossMov stratejisinin düzenlenmiş hali :

Not:Strateji oluştururken, oluşturduğunuz strateji ile bizim paylaştığımız strateji adlarının aynı olmasına dikkat ediniz.

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;

namespace Matriks.Lean.Algotrader
{
	public class CrossMov2 : 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.Min5)]
		public SymbolPeriod SymbolPeriodAl;

		[Parameter(SymbolPeriod.Min60)]
		public SymbolPeriod SymbolPeriodSat;

		[Parameter(5)]
		public decimal BuyOrderQuantity;

		[Parameter(5)]
		public decimal SellOrderQuantity;

		[Parameter(5)]
		public int MovPeriodAl;

		[Parameter(22)]
		public int MovPeriodAl2;

		[Parameter(5)]
		public int MovPeriodSat;

		[Parameter(22)]
		public int MovPeriodSat2;
		
		// indikator tanımları.
		MOV mov, mov2, mov3, mov4;

		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriodAl);
			mov = MOVIndicator(Symbol, SymbolPeriodAl, OHLCType.Close, MovPeriodAl, MovMethod.Exponential);
			mov2 = MOVIndicator(Symbol, SymbolPeriodAl, OHLCType.Close, MovPeriodAl2, MovMethod.Exponential);

			AddSymbol(Symbol, SymbolPeriodSat);
			mov3 = MOVIndicator(Symbol, SymbolPeriodSat, OHLCType.Close, MovPeriodSat, MovMethod.Exponential);
			mov4 = MOVIndicator(Symbol, SymbolPeriodSat, OHLCType.Close, MovPeriodSat2, MovMethod.Exponential);

			WorkWithPermanentSignal(true);
			
			SendOrderSequential(true);
		}

		/// <summary>
		/// Eklenen sembollerin bardata'ları ve indikatorler güncellendikçe bu fonksiyon tetiklenir. 
		/// </summary>
		/// <param name="barData">Bardata ve hesaplanan gerçekleşen işleme ait detaylar</param>
		public override void OnDataUpdate(BarDataEventArgs barData)
		{

			if (barData.PeriodInfo.Equals(SymbolPeriodAl.ToPeriodInfo()))
			{
				if (CrossAbove(mov, mov2))
				{
					SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
					Debug("Alış Emri Gönderildi");
					Debug("Alış sinyallerinin alındığı symbol periodu : " + barData.PeriodInfo + "\n");
				}
			}

			if (barData.PeriodInfo.Equals(SymbolPeriodSat.ToPeriodInfo()))
			{
				if (CrossBelow(mov3, mov4))
				{
					SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
					Debug("Satış Emri Gönderildi");
					Debug("Satış sinyallerinin alındığı symbol periodu : " + barData.PeriodInfo + "\n");
				}
			}
		}
	}
}

İyi çalışmalar

(4,555 puan) tarafından
tarafından seçilmiş
7,509 soru
7,511 cevap
4,405 yorum
8,745 kullanıcı