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

Merhaba,

Binance üzerinde, Alim yönlü bir emri su sekilde ilettikten sonra, OrderFilled oldugunda hem TP hem de SL emirlerini ayni anda gonderebilecegim bir yapi var mi? 

SendMarketOrder(Symbol1, 1000, OrderSide.Buy);

Mesela asagidaki gibi denedigimde sadece ilk satirdaki SendBinanceStopLimitOrder binance e iletiliyor. Digeri iletilemiyor.

Amacim ise ticker time dan bagimsiz pozisyonu actigim anda binance tarafinda hem TP hem SL olarak tutulmasini istiyorum. 

if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)
				{
					alis_fiyati = order.AvgPx;

					Debug("aliş fiyati: " + alis_fiyati);
					Debug("stop loss fiyati: " + (alis_fiyati -0.00002m));
					Debug("TP fiyati: " + (alis_fiyati + 0.00002m));


					SendBinanceStopLimitOrder(Symbol1, 1000, OrderSide.Sell, alis_fiyati -0.00002m, alis_fiyati -0.00001m);
					SendBinanceTakeProfitLimitOrder(Symbol1, 1000, OrderSide.Sell, alis_fiyati + 0.00002m, alis_fiyati + 0.00001m);
				}

 

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

2 Cevaplar

1 beğenilme 0 beğenilmeme
Binance web veya telefonda pozisyon açtıktan sonra takeprofit ve stoploss ayarladığımız gibi bir fonksiyon bulunmuyor.Bende vaktiyle çokça denedim.

Pozisyon TP oluyor SL emri borsada kalıyor, SL oluyor Tp kalıyor fiyat oraya gidince tekrar pozisyon açıyor
(402 puan) tarafından
0 0

hocam şu şekilde çözdüm; 

public override void OnOrderUpdate(IOrder order)
		{
						if (order.OrdStatus.Obj == OrdStatus.Rejected)
						{
							if (order.Side.Obj == Side.Buy)
							{
								LastOrderSide.Obj = Side.Sell;
							}
							else
							{
								LastOrderSide.Obj = Side.Buy;
							}
						}

			decimal al, sat, stop;
			

			if (Orders.ContainsKey(order_id_buy) && order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)
			{

				alis_fiyati = order.AvgPx;

				is_TP_SL_active = true;

				 al = Math.Round(alis_fiyati, 3);
				 sat = Math.Round(al * 1.002m, 3);
				 stop = Math.Round(al * 0.998m, 3);

				Debug("aliş fiyati: " + al);
				Debug("TP fiyati: " + sat);

				order_id_tp = SendBinanceTakeProfitMarketOrder(order.Symbol, 6, OrderSide.Sell, sat);
							
				//order_id_buy = string.Empty;
				Debug("tp order id: " + order_id_tp);
				LastOrderSide.Obj = Side.Buy;
				
				order_id_SL = SendBinanceStopMarketOrder(order.Symbol, 6, OrderSide.Sell, stop);
				LastOrderSide.Obj = Side.Buy;


			}
			
			if (order.CliOrdID == order_id_SL  && order.OrdStatus.Obj == OrdStatus.Canceled &&  order.Side.Obj == Side.Sell && is_TP_SL_active)
			{
				
				Debug("STOP oldu");
				is_TP_SL_active = false;
				SendCancelOrder(order_id_tp);
				LastOrderSide.Obj = Side.Sell;
				
			}
			// Orders.ContainsKey(order_id_tp)
			if (order.CliOrdID == order_id_tp  && order.OrdStatus.Obj == OrdStatus.Canceled && order.Side.Obj == Side.Sell && is_TP_SL_active)
			{
				Debug("tp alindi!");
				is_TP_SL_active = false;
				SendCancelOrder(order_id_SL);
				LastOrderSide.Obj = Side.Sell;
			}





		}

 

0 0
Güzel yaklaşım,notlar arasına alıyorum.İyi çalışmalar dilerim
0 0
Bu emirler gerçekten var mı? Dökümanlarda bahsi geçmiyor.

SendBinanceStopMarketOrder  SendBinanceTakeProfitMarketOrder
0 beğenilme 0 beğenilmeme

Merhaba,

Öncelikle Binance Spot piyasasında işlem yapıyorsanız OCO emrini kullanabilirsiniz.

Aşağıdaki örnekte XRP aktif fiyat 0.67$ seviyesinde eğer 0.75$ gelirse karlı, 0.6$ gelirse de 0.59$ zararına satış emri gönderecektir. biri gerçekleşince diğer otomatik olarak iptal olacaktır.

SendBinanceOcoOrder(Symbol1, OrderQuantity, OrderSide.Sell, 0.75m, 0.6m, 0.59m);

Eğer Futures piyasasında ve sıralı emir gönderiyorsanız aşağıdaki gibi üst üste aynı yönde emir göndermek için LastOrderSide değişkeninde değişiklik yapılması gerekir.

Sonrasında emir ID'leri bir listede tutup emir gerçekleştiğinde emrin ID'si bu listede ise kalan emri iptal edebilirsiniz.

List<string> orderIDler = new List<string>();

public override void OnOrderUpdate(IOrder order)
{
	if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)
	{
		var yon = LastOrderSide;
		var id1 = SendBinanceStopLimitOrder(Symbol1, 1000, OrderSide.Sell, alis_fiyati -0.00002m, alis_fiyati -0.00001m);
		LastOrderSide.Obj = Side.All;
		var id2 = SendBinanceTakeProfitLimitOrder(Symbol1, 1000, OrderSide.Sell, alis_fiyati + 0.00002m, alis_fiyati + 0.00001m);
		LastOrderSide.Obj = yon;
		orderIDler.Add(id1 + id2);
	}

	if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Sell)
	{
		var varMI = orderIDler.FirstOrDefault(x => x.Contains(order.CliOrdID));
		if (varMI != null)
		{
			var gerceklesmeyenEmirID = varMI.Replace(order.CliOrdID, "");
			SendCancelOrder(gerceklesmeyenEmirID);
			orderIDler.Remove(varMI);
		}
	}
}

 

(15,682 puan) tarafından
0 0
TakeProfit() den önce

LastOrderSide.Obj = Side.All;

demek neden gerekli? Bunu demezsek ne oluyor?
1 0
Sıralı emir gönderme seçeneği aktif olduğunda aynı yönde üst üste emir gönderilmemektedir yapı gereği üst üste aynı yönde emir gönderilmesi gerektiği için emir yönünü esnetmek için kullanılması gerekir.

kullanılmazsa sadece kar al ya da sadece zarar durdur tanımlanabilir.
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,647 soru
7,642 cevap
4,448 yorum
11,133 kullanıcı