Matriks Destek ve Yardım Platformu

Matriks Ürünleri ile ilgili tüm sorularınız için bizlere buradan ulaşabilirsiniz. Daha önce sorulan soruları ve verilen cevapları ilgili sekmelerden ve arama üzerinden inceleyebilirsiniz. Sağ taraftaki kategoriler üzerinden İlgilendiğiniz özelliklerle ilgili soruları filtreleyebilirsiniz. Soru ve cevapları sosyal medyada paylaşabilirsiniz. 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.

1

2 grafik temelli sistemi nasıl oluşturabilirim?

Soruldu
Görüntülenme
1.435 görüntülenme
Durum
Cevaplandı
Merhaba,

Matriks veri terminali üzerinde 2 grafiği temel alan bir sistem oluşturmak istiyorum. Hisse grafiğinde hareketli ortalama kesişimine göre al-sat koşulunu yazmış durumdayım. Ancak bu koşula ek olarak XU100 grafiğine göre de hareketli ortalama kesişimini eklemek istiyorum. Örneğin;

''ASELS 5 dk.'lık grafikte 5-13 kesişimine göre ancak XU100 5 dk.'lık grafikte 5-13'ü yukarı keserse al'' ve

''ASELS 5 dk.'lık grafikte 5-13 kesişimine göre veya XU100 5 dk.'lık grafikte 5-13'ü aşağı keserse sat.'' gibi.  

Bu tarz bir koşulu ekleyip system tester'da çalıştrabilir miyim?

Teşekkürler.
Paylaş

1 Cevap

1

Merhaba,

İstediğiniz durumları sağlayan kod aşağıdadır. Stratejinizi daha da geliştirmek için hazır stratejilerimizi incelemenizi tavsiye ediyoruz.

İyi Çalışmalar

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using System.Windows.Media;
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;

//===========================================ACIKLAMA=======================================//
// SMA indikatöründe, fiyat çubuklarınının SMA bandının üstüne kırdığı anda al,				//
// altına kırdığı anda sat sinyali üretilir.												//
// Emirler piyasa fiyatından gönderilecektir.                                            	//
// Emir gönderimi ile birlikte strateji raporunda Debug sekmesine "Alış emri gönderildi."	//
// ve "Satış emri gönderildi." ifadesi yazdırılmaktadır.                                  	//

namespace Matriks.Lean.Algotrader
{
	public class Strateji : 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("ASELS")]
		public string Symbol_0;

		[SymbolParameter("XU100")]
		public string Symbol_1;

		[Parameter(SymbolPeriod.Min5)]
		public SymbolPeriod SymbolPeriod;

		[Parameter(1)]
		public decimal BuyOrderQuantity;

		[Parameter(1)]
		public decimal SellOrderQuantity;

		[Parameter(5)]
		public int Period_5;

		[Parameter(13)]
		public int Period_13;

		MOV mov_0_5;
		MOV mov_0_13;
		MOV mov_1_5;
		MOV mov_1_13;
		
		/// <summary>
		/// Strateji ilk çalıştırıldığında bu fonksiyon tetiklenir. Tüm sembole kayit işlemleri,
		/// indikator ekleme, haberlere kayıt olma işlemleri burada yapılır. 
		/// </summary>
		public override void OnInit()
		{
			//ASELS için 5 ve 13 periyodlu hareketli ortalamalar
			mov_0_5 = MOVIndicator(Symbol_0, SymbolPeriod, OHLCType.Close, Period_5, MovMethod.Simple);
			mov_0_13 = MOVIndicator(Symbol_0, SymbolPeriod, OHLCType.Close, Period_13, MovMethod.Simple);

			//XU100 için 5 ve 13 periyodlu hareketli ortalamalar
			mov_1_5 = MOVIndicator(Symbol_1, SymbolPeriod, OHLCType.Close, Period_5, MovMethod.Simple);
			mov_1_13 = MOVIndicator(Symbol_1, SymbolPeriod, OHLCType.Close, Period_13, MovMethod.Simple);

			AddSymbol(Symbol_0, SymbolPeriod);
			AddSymbol(Symbol_1, SymbolPeriod);

			// Algoritmanın kalıcı veya geçici sinyal ile çalışıp çalışmayacağını belirleyen fonksiyondur.
			// true geçerseniz algoritma sadece yeni bar açılışlarında çalışır, bu fonksiyonu çağırmazsanız veya false geçerseniz her işlem olduğunda algoritma tetiklenir.
			WorkWithPermanentSignal(true);

			//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);
		}


		/// <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(BarDataCurrentValues barDataCurrentValues)
		{
			//ASELS 5 dk.'lık grafikte 5-13 kesişimine göre ve XU100 5 dk.'lık grafikte 5-13'ü yukarı keserse al
			if (CrossAbove(mov_0_5, mov_0_13) && CrossAbove(mov_1_5, mov_1_13))
			{
				SendMarketOrder(Symbol_0, BuyOrderQuantity, OrderSide.Buy);
				Debug("Alış Emri Gönderildi");
				Debug("5 Periyodlu hareketli ort.("+Symbol_0+"):" + mov_0_5.CurrentValue);
				Debug("13 Periyodlu hareketli ort.("+Symbol_0+"):" + mov_0_13.CurrentValue);
				Debug("5 Periyodlu hareketli ort.("+Symbol_1+"):" + mov_1_5.CurrentValue);
				Debug("13 Periyodlu hareketli ort.("+Symbol_1+"):" + mov_1_13.CurrentValue);		
				Debug("*********************************");
			}

			//ASELS 5 dk.'lık grafikte 5-13 kesişimine göre veya XU100 5 dk.'lık grafikte 5-13'ü aşağı keserse sat
			if (CrossBelow(mov_0_5, mov_0_13) || CrossBelow(mov_1_5, mov_1_13))
			{
				SendMarketOrder(Symbol_0, SellOrderQuantity, OrderSide.Sell);
				Debug("Satış Emri Gönderildi");
				Debug("5 Periyodlu hareketli ort.("+Symbol_0+"):" + mov_0_5.CurrentValue);
				Debug("13 Periyodlu hareketli ort.("+Symbol_0+"):" + mov_0_13.CurrentValue);
				Debug("5 Periyodlu hareketli ort.("+Symbol_1+"):" + mov_1_5.CurrentValue);
				Debug("13 Periyodlu hareketli ort.("+Symbol_1+"):" + mov_1_13.CurrentValue);
				Debug("*********************************");
			}
			
		}
	}
}

 

BağlantıBayraklaOrçunMatriks Destek4.555

Yorumlar (2)

Cevabınız

Cevap yazmak için giriş yapın.Giriş yapKayıt ol