0 beğenilme 0 beğenilmeme
789 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 (89 puan) tarafından | 789 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
(406 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
1 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,912 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.
0 0
>> Öncelikle Binance Spot piyasasında işlem yapıyorsanız OCO emrini kullanabilirsiniz.

demişsiniz. SendBinanceOcoOrder emrini futures'da kullanmak konusunda bir kısıtlama var mı? Binance kaynaklarda ilgili birşey göremedim.

Şimdiye kadar hep TrailingStopLoss kullanıyordum. Evde bazen internet yada elektrik kesilebiliyor. İşi garantiye almak için SendBinanceOcoOrder da kullanmayı düşünüyorum. OCO ile TSL çakışabilir mi? OCO'yu iptal etmek için bir komut göremedim.
8,743 soru
8,689 cevap
4,872 yorum
20,826 kullanıcı