0 beğenilme 0 beğenilmeme
118 kez görüntülendi
Merhaba, Binance da zaman farkından yada request timeout hatasından dolayı reject edilen emiri 10sn sonra sadece 1 kez daha yollaması için kodun içinde nasıl değişiklik yapmam gerekiyor? Teşekkürler
Algoritmik Trading kategorisinde (14 puan) tarafından | 118 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhaba,

Aşağıdaki şablonu kullanabilirsiniz.

Bu şablonda iptal olan tüm emirler belirlenen saniyede bir belirlenen sayı kadar tekrar ederek aynı emri iletir.

Varsayılan olarak iptal olan emir her 10 saniye de bir tekrar iletilir bu işlem toplamda 3 sefer olur.

Eğer iptal olan emir bir sefer gönderilmesini istiyorsanız AyniEmirKacSeferGonderilsin değişken değerini 1 yapıp deneyebilirsiniz.

Uygulama:

// ------------------------------------------------------------------
// ------------ IPTAL OLAN EMİRLERİ TEKRAR GÖNDER
// ------------------------------------------------------------------

Örnek stratejide yukarıdaki açıklama satırından son satıra kadar kopyalayınız. Kendi stratejinizdeki son 2 süslü ( } ) parantezi silip kopyalanan satırları yapıştırınız.

OnInit() metoduna

OnInit_SablonIptalOlanEmriTekrarGonder(true);

OnOrderUpdate() metoduna 

OnOrderUpdate_SablonIptalOlanEmriTekrarGonder(order);

OnTimer() metoduna da aşağıdaki fonksiyonları eklemeniz yeterli olur

OnTimer_SablonIptalOlanEmriTekrarGonder();

iyi çalışmalar.

Örnek:

/*
					▂ ▃ ▅ ▆ █ KRİPEX █ ▆ ▅ ▃ ▂ 

Gönderilen emir iptal olursa belirlenen sayı kadar tekrar gönderilmesi sağlanır.
*/

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 SablonIptalOlanEmriTekrarGonder : MatriksAlgo
	{
		[SymbolParameter("BNB_USDT_BIN")]
		public string Symbol;

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

		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);

			SendOrderSequential(true, Side.Buy);
			WorkWithPermanentSignal(true);

			OnInit_SablonIptalOlanEmriTekrarGonder(true);
		}		

		public override void OnOrderUpdate(IOrder order)
		{
			OnOrderUpdate_SablonIptalOlanEmriTekrarGonder(order);
		}

		public override void OnTimer()
		{
			OnTimer_SablonIptalOlanEmriTekrarGonder();
		}
		
		// ------------------------------------------------------------------
		// ------------ IPTAL OLAN EMİRLERİ TEKRAR GÖNDER
		// ------------------------------------------------------------------

		int KacSaniyeSonraTekrarGonderilsin = 10;
		int AyniEmirKacSeferGonderilsin = 3;
		Dictionary<string, IOrder> RejectedOrderList = new Dictionary<string, IOrder>();
		bool SablonIptalOlanEmriTekrarGonderDurum = false;

		public void OnInit_SablonIptalOlanEmriTekrarGonder(bool AktifMI)
		{
			if (AktifMI)
			{
				SetTimerInterval(1);
				SablonIptalOlanEmriTekrarGonderDurum = AktifMI;
			}
		}

		public void OnTimer_SablonIptalOlanEmriTekrarGonder()
		{
			if (SablonIptalOlanEmriTekrarGonderDurum)
			{
				var sorgu = RejectedOrderList.Where(x => x.Value.BitmexPostOnly == true && DateTime.Now >= x.Value.ExpireDate && x.Value.MinPosition>0);
				var oncekiYon = LastOrderSide.Obj;

				foreach (var deger in sorgu)
				{
					var order = deger.Value;
					LastOrderSide.Obj = Side.All;
					var orderID = SendOrder(order.Symbol, order.OrderQty, order.Price, order.Side, order.OrdType, order.TimeInForce, order.TransactionType, order.ChartIcon);
					order.MinPosition--;
					order.BitmexPostOnly = false;
					order.ExpireDate = DateTime.Now.AddSeconds(KacSaniyeSonraTekrarGonderilsin);
					order.CliOrdID = orderID;
					Debug("İptal olan emir tekrar gönderildi. Detay -> CliOrdID: " + order.CliOrdID + " Yon: " + order.Side.Obj.ToString() + " kalan: " + order.MinPosition);
				}

				LastOrderSide.Obj = oncekiYon;
			}
		}

		public void OnOrderUpdate_SablonIptalOlanEmriTekrarGonder(IOrder order)
		{
			if (SablonIptalOlanEmriTekrarGonderDurum)
			{
				if (order.OrdStatus.Obj == OrdStatus.Filled)
				{
					var sorgu = RejectedOrderList.FirstOrDefault(x => x.Value.CliOrdID == order.CliOrdID);

					if (sorgu.Key != null)
					{
						Debug("İptal olan  emir gerçekleşti. Detay-> CliOrdID: " + order.CliOrdID + " Text: " + sorgu.Value.Text);
					}
				}

				if (order.OrdStatus.Obj == OrdStatus.Rejected)
				{
					var sorgu = RejectedOrderList.FirstOrDefault(x => x.Value.CliOrdID == order.CliOrdID);

					if (sorgu.Key == null)
					{
						order.BitmexPostOnly = true;
						order.MinPosition = AyniEmirKacSeferGonderilsin;
						order.ExpireDate = DateTime.Now.AddSeconds(KacSaniyeSonraTekrarGonderilsin);

						RejectedOrderList[order.CliOrdID] = order;

						Debug("Emir iptal oldu. Detay-> CliOrdID: " + order.CliOrdID + " Text: " + order.Text);
					}else
					{
						sorgu.Value.BitmexPostOnly = true;
					}
				}
			}
		}
	}
}

 

(15,682 puan) tarafından
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.



7,645 soru
7,642 cevap
4,448 yorum
11,050 kullanıcı