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.

0

Tekrar Emir Gönderimi

Soruldu
Görüntülenme
850 görüntülenme
Durum
Cevaplandı
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
Paylaş

1 Cevap

0

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

 

Unblocked Games offering a wide range of experiences: action, puzzle, platform, racing, clicker mechanics, strategy, sports, even horror.
https://unblocked1games.github.io
BağlantıBayraklaKripexMatriks Destek16.499

Cevabınız

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