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

merhaba, 

aşağıdaki stratejiye başlangıç ve bitiş saati eklemek istiyorum, yani saat 09:45 de başlasın, 18:00 de dursun istiyorum.

kod bilgisi hakkında yardımcı olabilirmisiniz

 

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=======================================//
// MOST indikatöründe, ExMOV bandının MOST bandını yukarı doğru kesmesi al sinyali,  		//
// aşağı doğru kesmesi ise sat sinyali olarak kabul edilir.									//
// 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 OTT_DOUBLE_VIOP : 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("FEKGYO")]
		public string Symbol;

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

		[Parameter(1)]
		public decimal BuyOrderQuantity;

		[Parameter(1)]
		public decimal SellOrderQuantity;

		[Parameter(14)]
		public int PeriodH;

		[Parameter(3.8)]
		public decimal PercentageH;

		[Parameter(45)]
		public int PeriodL;

		[Parameter(1.2)]
		public decimal PercentageL;


		OTT ottH;

		OTT ottL;

		int FirstRun = 0;
		int realposition = 0;

		[Output]
		public int IlkCalisma;

		[Output]
		public int Pozisyon;


		public override void OnInit()
		{
			ottH = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, PeriodH, PercentageL, MovMethod.VAR, true);

			ottL = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, PeriodL, PercentageL, MovMethod.VAR, true);


			AddSymbol(Symbol, 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, 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)
		{

			if (CrossAbove(ottH.ottSupportLine, ottH))
			{
				if (FirstRun == 0)
				{
					SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));
					Debug("Alış emri verildi.");
					Debug("OTT_SupportLine:" + ottH.ottSupportLine.CurrentValue);
					Debug("OTTLine:" + ottH.ottLine.CurrentValue);
					FirstRun = 1;
				}
				else
				{
					SendMarketOrder(Symbol, BuyOrderQuantity * 2, (OrderSide.Buy));
					Debug("Alış emri verildi.");
					Debug("OTT_SupportLine:" + ottH.ottSupportLine.CurrentValue);
					Debug("OTTLine:" + ottH.ottLine.CurrentValue);
				}

			}

			if (CrossBelow(ottL.ottSupportLine, ottL))
			{
				if (FirstRun == 0)
				{
					SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));
					Debug("Satış emri verildi.");
					Debug("OTT_SupportLine:" + ottL.ottSupportLine.CurrentValue);
					Debug("OTTLine:" + ottL.ottLine.CurrentValue);
					FirstRun = 1;
				}
				else
				{
					SendMarketOrder(Symbol, SellOrderQuantity * 2, (OrderSide.Sell));
					Debug("Satış emri verildi.");
					Debug("OTT_SupportLine:" + ottL.ottSupportLine.CurrentValue);
					Debug("OTTLine:" + ottL.ottLine.CurrentValue);
				}
			}
		}

		public override void OnOrderUpdate(IOrder order)
		{
			//Gercek zamanli pozisyon takibi
			if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)
			{
				var positionChange = order.OrderQty;
				realposition += (int) positionChange;
				Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);
			}
			if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Sell)
			{
				var positionChange = order.OrderQty;
				realposition -= (int) positionChange;
				Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);
			}
		}
	}
}

 

Algoritmik Trading kategorisinde (51 puan) tarafından | 647 kez görüntülendi

1 cevap

3 beğenilme 0 beğenilmeme

Merhaba,

Aşağıdaki örnekte belirlenen zaman aralığında strateji aktif şekilde çalışır.

 

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;

/*
	Belirlenen zaman aralığında strateji aktif olacak
*/

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

		[Parameter(1)]
		public decimal Adet;

		MOST most;

		// Zamanlama
		TimeSpan baslangic;
		TimeSpan bitis;

		/// <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()
		{
			most = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, 3, 2, MovMethod.Exponential);

			AddSymbol(Symbol, SymbolPeriod);

			SendOrderSequential(true);
			WorkWithPermanentSignal(true);

			// stratejini başlama ve bitis saati
			baslangic = new TimeSpan(09, 45, 0);
			bitis = new TimeSpan(18, 00, 0);
		}

		/// <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)
		{
			// Sistem saati çekiliyor
			TimeSpan sistemSaati = DateTime.Now.TimeOfDay;

			// Belirlenen zaman aralıpğında aşağıdaki kodlar aktif olacak
			if (sistemSaati >= baslangic && sistemSaati <= bitis)
			{
				if (CrossAbove(most.ExMOV, most))
				{
					SendMarketOrder(Symbol, Adet, (OrderSide.Buy));
					Debug("Alış emri verildi.");
					Debug("Most.ExMov:" + most.ExMOV.CurrentValue);
					Debug("Most:" + most.CurrentValue);
				}
				if (CrossBelow(most.ExMOV, most))
				{
					SendMarketOrder(Symbol, Adet, (OrderSide.Sell));
					Debug("Satış emri verildi.");
					Debug("Most.ExMov:" + most.ExMOV.CurrentValue);
					Debug("Most:" + most.CurrentValue);
				}
			}
		}

	}
}

 

(15,892 puan) tarafından
1 0
teşekkürler, ellerinize sağlık
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,790 kullanıcı