0 beğenilme 0 beğenilmeme
1,587 kez görüntülendi
sonraki gün için aracı kuruma 18:15:00 itibariyle otomatik emir oluşturma nasıl yapılır.

örnek: thyao hissesi yarın tavan fiyatı 11 lira. emir listesinde önde yer alabilmek için yapıkredi 18:15:00 sonraki gün talimatını otomatik versin.
Diğer kategorisinde (46 puan) tarafından | 1,587 kez görüntülendi

1 cevap

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

Merhaba,

Aşağıdaki stratejiyi Matriks deneme ortamından ya da gerçek hesaplarla küçük miktarlar test edip kullanabilirsiniz.

Strateji çalıştırırken alış satış yönünü belirleyebilirsiniz.

Emiri ister manuel fiyattan ister tavan tabandan gönderebilirsiniz.

Not: Strateji pc saatine göre emir gönderir.

Stratejinin adının ZamanliEmirGonderme olmasına dikkat ediniz.

***STRATEJİLERİ TEST/DENEME ORTAMINDA SINAMADAN VE SİZİN İSTEDİĞİNİZ ŞEKİLDE ÇALIŞTIĞINA EMİN OLMADAN GERÇEK ORTAMDA HİÇBİR ZAMAN ÇALIŞTIRMAYINIZ ***

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;

namespace Matriks.Lean.Algotrader
{
	public class ZamanliEmirGonderme : 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.

		// işlem yapılacak sembol
		[SymbolParameter("GARAN")]
		public string Symbol;

		// alış satış miktarı
		[Parameter(5)]
		public decimal OrderQuantity;

		// manuel alış satış fiyatı
		[Parameter(7)]
		public decimal LimitPrice;

		// emrin iletilme saati - saat:dakika:saniye
		[Parameter("18:10:00")]
		public string SendTime;

		// emir yönü
		// alış için true, satış için false yapması gerekir
		[Parameter(true)]
		public bool IsBuyOrder;

		// emir yönüne göre taban tavandan emir iletilir
		// seçilirse taban tavandan
		// seçilmezse LimitPrice göre emir gönderir
		[Parameter(false)]
		public bool TavanTabanFiyattanMI;

		// emri gönderildikten sonra strateji durudurulur.
		public bool AktifMI = true;

		public SymbolPeriod SymbolPeriod = SymbolPeriod.Day;
		/// <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()
		{
			AddSymbol(Symbol, SymbolPeriod);
			AddSymbolMarketData(Symbol);
			// 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 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, Side.All);
			//Alttaki fonksiyon açıldıktan sonra parametre olarak verilen saniyede bir OnTimer fonksiyonu tetiklenir.
			SetTimerInterval(1);
		}

		public override void OnInitComplated()
		{
			Debug("Emriniz saat " + SendTime + " gönderilecek.");
		}

		/// <summary>
		/// SetTimerInterval fonksiyonu ile belirtilen sürede bir bu fonksiyon tetiklenir.
		/// </summary>
		public override void OnTimer()
		{
			if (AktifMI)
			{
				var time = TimeSpan.Parse(SendTime);
				var now = DateTime.Now.TimeOfDay;

				if (time.Hours == now.Hours && time.Minutes == now.Minutes && time.Seconds == now.Seconds)
				{
					OrderSide side = IsBuyOrder? OrderSide.Buy:OrderSide.Sell;

					if (TavanTabanFiyattanMI && IsBuyOrder)
					{
						LimitPrice = GetMarketData(Symbol, SymbolUpdateField.LimitUp);
					}else if (TavanTabanFiyattanMI && !IsBuyOrder)
					{
						LimitPrice = GetMarketData(Symbol, SymbolUpdateField.LimitDown);
					}

					SendLimitOrder(Symbol, OrderQuantity, side, LimitPrice);

					if (IsBuyOrder)
					{
						Debug("Alış emri gönderildi.");
					}else
					{
						Debug("Satış emri gönderildi.");
					}
					AktifMI = false;

				}else if ((time - now).Seconds <= 10 && (time - now).Seconds >= 0 && time.Hours == now.Hours && time.Minutes == now.Minutes)
				{
					Debug("kalan süre: " + (time - now).Seconds + "sn");
				}
			}
		}

	}
}

 

(15,892 puan) tarafından
tarafından düzenlendi
0 0
Fiyatı elle girdiğimizde yukarıdaki kod başarılı ama tavan taban fiyatlar emir saatine 2dk kala anca görüntüleniyor ve Tavan , Taban fiyattan gönderme yaptığımızda emir gitmiyor kod hatalı olabilir mi? Tavandan emir göndermiyor.
8,636 soru
8,590 cevap
4,821 yorum
19,786 kullanıcı