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

Stratejiden verdiğim limit emirlerin ayrı ayrı gerçekleşmelerini takip etmek istiyorum. al sat tüm emirlerin.

forumu kurcalayarak aşağıdaki gibi bir yapı kurdum ancak çalışmıyor.

 

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

public string orderID_1_al;
public string orderID_2_al;

public override void OnDataUpdate(BarDataEventArgs barData)
		{

if( koşul )
{

orderID_1_al = SendLimitOrder(Symbol, BuyOrderQuantity , OrderSide.Buy, Fiyat);

				orderIDList.Add(orderID_1_al);
}

if( koşul )
{

orderID_2_al = SendLimitOrder(Symbol, BuyOrderQuantity , OrderSide.Buy, Fiyat);

				orderIDList.Add(orderID_2_al);
}

}

gibi limit emirleri ilettik.

aşağıdaki gibi bir takip deniyorum ancak olmuyor.

Buaradaki amacım;

örn. orderID_1_al gerçekleştiğinde hem onun içeriğini sıfırlamak ki algoritmadan duruma göre içi boşsa tekrar emir iletebilmesi durumu olabilsin, içi doluysa limit emrin gerçekleşmediğini anlayarak tekrar emir iletimi yaşanmasın. hemde emir kesin gerçekleştiğinde algoritmaya yaptırmak istediğim bazı durumlar mevcut.

public string bos;

public override void OnOrderUpdate(IOrder order) 
		{

if (order.OrdStatus.Obj == OrdStatus.Filled && order.CliOrdID == orderID_1_al)
			{

				orderID_1_al = bos;
				orderIDList.Add(orderID_1_al);

				Debug("orderID_1_al = " + orderID_1_al);

				** başka koşul işlemleri vs vs vs


			}
if (order.OrdStatus.Obj == OrdStatus.Filled && order.CliOrdID == orderID_2_al)
			{

				orderID_2_al = bos;
				orderIDList.Add(orderID_2_al);

				Debug("orderID_2_al = " + orderID_1_al);

				** başka koşul işlemleri vs vs vs

			}
}

hem alış hem satış vs tüm limit emirlerin kesin gerçekleştiğini nasıl algoritmada görebilirim ???

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

1 cevap

0 beğenilme 0 beğenilmeme

Merhaba,

Emirlerde bir değişim olduğunda ( iletilme, gerçekleşme, red, iptal .... ) OnOrderUpdate() metodu tetiklenir.

Bu metotta emir takibi yapıp istenen durum gerçekleştiğinde istenen aksiyon alınabilir.

Aşağıdaki gibi basit bir yapı kurulabilir .

public override void OnDataUpdate(BarDataEventArgs barData)
{
	if(orderID_1_al!=string.Empty){
		orderID_1_al=SendMarketOrder(Symbol1,1,OrderSide.Buy);
		Debug("Alış emri gönderildi -> ID: "+orderID_1_al);
	}
}
		
string orderID_1_al=string.Empty;

public override void OnOrderUpdate(IOrder order)
{
	if (order.OrdStatus.Obj == OrdStatus.Filled && order.CliOrdID == orderID_1_al)
	{
		orderID_1_al = string.Empty;
		Debug("alış emri gerçekleşti -> ID: " + orderID_1_al);
	}			
}

Bunun dışında Orders modelini de inceleyebilirsiniz.

Bu model içerisinde ilgili stratejide gönderilen tüm emirler son durumlarıyla tutulur ID'si bilinen bir emrin takibi bu model üzerinden de yapılabilir. Linkteki konuyu inceleyebilirsiniz.

https://destek.matriksdata.com/?qa=16745/order-id-ile-statu-kontrolu&show=16745#q16745

Detaylı bilgi için aşağıdaki dokumanın 24. sayfasını inceleyiniz.

https://www.matriksdata.com/website/uploads/matriks-iq-algo-teknik-dokuman.pdf

Not: Binance dışındaki kurumlarda portföy verileri 1DK bir güncellendiğinden gerçekleşen emirler anca sonraki güncellemede yakalanır. örnek vermek gerekirse portföy güncellendikten 10 saniye sonra bir limit emir verdiniz ve emir 5 saniye sonra gerçekleşmiş olsun bunun bilgisi bir sonraki güncellemede yani 45 saniye sonra yakalanacaktır.

(8,102 puan) tarafından
0 0

teşekkürler yardımlarınız için gösterdiğiniz şekilde çalıştırdım. Dediğiniz gibi al ve sat emirleri sadece dk başlarında oluşuyor.

Ek olarak konuya bakacaklar için emrin gerçekleşme fiyatınıda aşağıdaki kodla alabilirsiniz.

public override void OnOrderUpdate(IOrder order)
{
	if (order.OrdStatus.Obj == OrdStatus.Filled && order.CliOrdID == orderID_1_al)
	{
		orderID_1_al = string.Empty;
		Debug("alış emri gerçekleşti -> ID: " + orderID_1_al); // boş olacak zaten

        var alim_Fiyati = order.LastPx; // emrin gerçekleştiği fiyat
        Debug("Alım Gerçekleşme Fiyatı = " + alim_Fiyati);
	}			
}

 

7,268 soru
7,283 cevap
4,289 yorum
6,431 kullanıcı