OrderSend() Soruları - sayfa 8

 

Bu konuyla ilgili bir makale beklerken, bir ticaret işleminin analizinin genel kavramını doğru anlıyorum.

...
bool AllowTrade = true ;
ulong OrderTicket;
...
void OnTick () {
  ...
   if (!AllowTrade) return ;
  ...
   MqlTradeResult Result;
   if ( OrderSend (...)) {
    Ticket = Result.order;
    AllowTrade = false ;
  }
}
...
void OnTrade () {
   if (AllowTrade) return ;
   if ( OrderSelect (Ticket)) {
     if (...)
    ...
     // AllowTrade = true|false;
  }
   else AllowTrade = true ;
}
...

Onlar. Kabaca söylemek gerekirse, bir emir gönderdikten sonra, ret kodunu analiz etmeden, "AllowTrade" bayrağını kullanarak iş döngüsündeki (OnTick()) alım satım işlemlerini devre dışı bırakırız.

Takas yasağı yalnızca OnTrade()'de numarasına göre bir sipariş arandıktan ve akıbetinin bazı analizlerinden sonra açılır.

İki soru var:

1. OnTrade'de sipariş biletini hangi konu için kontrol etmeliyim? Hayatında hangi durumlar kesindir?

2. Tick-olaylarının (OnTick) sırasının "düşebileceğini" biliyorum. Onlar. bir sonraki Tick olayı gelirse ve OnTick işlevi (önceki tick'ten) henüz işini bitirmediyse, mevcut olay "düşür", yani. işleme alınmayacaktır. Ticaret olaylarıyla (OnTrade) benzer bir yaklaşım var mı? Onlar. Örneğin, ana döngüde alım satım yasağı koyacağım ve yeni gönderilen siparişteki OnTrade olayının "düşeceği" gibi bir şans var mı, çünkü geldiği zaman, ilgili ticaret talebini gönderirken aynı kene içinde başka bir şeyi işlemeye devam edecek miyim?

 
voix_kas : yani Örneğin, ana döngüde alım satım yasağı koyacağım ve yeni gönderilen siparişteki OnTrade olayının "düşeceği" gibi bir şans var mı, çünkü geldiği zaman, ilgili ticaret talebini gönderirken aynı kene içinde başka bir şeyi işlemeye devam edecek miyim?

Bu konuyu anlamadım, ama işte El Kitabında yazanlar:

1) İşlem kuyruğunun uzunluğu 1024 elemandır. OnTradeTransaction() sonraki işlemi işlemek için çok uzun sürerse, kuyruktaki eski işlemler yenileri tarafından dışarı itilebilir;

2) OnTrade, ilgili OnTradeTransaction çağrılarından sonra çağrılır.

 
Yedelkin :

Bu konuyu anlamadım, ama işte El Kitabında yazanlar:

1) İşlem kuyruğunun uzunluğu 1024 elemandır. OnTradeTransaction() sonraki işlemi işlemek için çok uzun sürerse, kuyruktaki eski işlemler yenileri tarafından zorlanabilir;

2) OnTrade, ilgili OnTradeTransaction çağrılarından sonra çağrılır.

Genel olarak, anlaşılabilir. Papaklass'ın zaten belirttiği ve https://www.mql5.com/en/articles/232 makalesinde belirtildiği gibi:

Ticaret hesabında tam olarak neyin değiştiğini öğrenmenin tek bir garantili yolu vardır. Bu yol, ticaretin durumunu ve ticaret tarihini hatırlamak ve yeni durumu, kaydedilen durumla karşılaştırmaktır.

Expert Advisor'da bir hizmet bloğu daha var. :(

Aslında soru şu ki... kodun boyutunu küçültme çerçevesinde, tüm değişkenleri (emirleri/anlaşmaları/pozisyonları) analiz etmek değil, yalnızca sayısı elde edilen siparişe odaklanmak mümkün mü? OrderSend'in sonucu? Veya bu sayı benzersiz olmayabilir / tarihe yansımayabilir mi?

 
voix_kas : Kod boyutu küçültme çerçevesinde tüm değişkenleri (emirler/işlemler/pozisyonlar) analiz etmek yerine sadece numarası OrderSend sonucundan elde edilen siparişe odaklanmak mümkün müdür? Veya bu sayı benzersiz olmayabilir / tarihe yansımayabilir mi?

Kesinlikle. Bir ticaret talebi göndermenin bir sonucu olarak bir sipariş bileti almak mümkün olduysa, bu bilet benzersizdir ve onu kullanarak siparişin tüm kaderini izlemek mümkündür.

Bir sipariş biletinin geçmişte nasıl kullanıldığını görün: MQL5 Reference / Trade Functions / HistoryOrderGetInteger

 
Yedelkin :
Kesinlikle. Bir ticaret talebi göndermenin bir sonucu olarak bir sipariş bileti almak mümkün olduysa, bu bilet benzersizdir ve onu kullanarak siparişin tüm kaderini izlemek mümkündür.
Sadece bilgi için. Sipariş, sunucu tarafından yürütülmek üzere kabul edilmemişse, örneğin bir yeniden fiyat teklifi, MqlTradeResult Result.order değişkenine bir varsayılan değer atanır mı (örneğin, "0")?
 
voix_kas : Emir, sunucu tarafından yürütülmek üzere kabul edilmemişse, örneğin bir yeniden fiyat teklifi, MqlTradeResult Result.order değişkenine bir varsayılan değer atanır mı (örneğin, "0")?
MqlTradeResult türündeki bir değişkeni kullanmadan önce, genellikle sıfıra ayarlanır. Dolayısıyla Result.order alanı boş bir değer içerir. Başarısız bir takas talebinden sonra bu alanın farklı bir değer aldığını hiç görmedim.
Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговые функции / OrderSend - Документация по MQL5
 
Yedelkin :
MqlTradeResult türündeki bir değişkeni kullanmadan önce, genellikle sıfıra ayarlanır. Dolayısıyla Result.order alanı boş bir değer içerir. Başarısız bir takas talebinden sonra bu alanın farklı bir değer aldığını hiç görmedim.
Sakıncası yoksa, dönüş kodlarını yorumlama konusuna girmek istiyorum. Bildirilen 30 cevap seçeneğinden (umarız beyan edilmemiş cevaplarla karşılaşmayız), 24'ü sipariş vermeyi açıkça reddetmeyi gösterir. Kalan 6: 1. TRADE_RETCODE_PLACED Geciktiriciler kurmadığımızı varsayalım. Piyasada işlem yaparken (SYMBOL_TRADE_EXECUTION_MARKET) böyle bir yanıt mümkün mü? 2. TRADE_RETCODE_DONE O zaman hiçbir şeyi tekrar kontrol etmeniz gerekmez. Her şey tam olarak danışmanın istediği gibi gitti. 3. TRADE_RETCODE_DONE_PARTIAL Tahmin ettiğim gibi, alım satım geciktiricileri değilsek, bu cevap ORDER_FILLING_IOC modunu hesaba katarak TRADE_RETCODE_DONE'a benzer. 4. TRADE_RETCODE_ORDER_CHANGED Bu, ticaret emrimizin açık bir şekilde reddedildiği anlamına mı geliyor? 5. TRADE_RETCODE_LOCKED Bence en kötü durum. Bu durumda nasıl hareket edilir? Henüz bir arama emri numarası olduğunu sanmıyorum. Ticaret akışı yoğun. Ticaret yapmak imkansız ve ticaret akışının bloke edilmesinin nasıl öğrenileceği açık değil. 6. TRADE_RETCODE_FROZEN Bu, ticaret emrimizin açık bir şekilde reddedildiği anlamına mı geliyor? Lütfen her maddeye yorum yapın.
 

voix_kas : Если не возражаете, хотелось бы углубиться в вопрос интерпритации кодов возврата. Из 30 задекларированных вариантов ответа (будем надеятся, что с недекларированными мы не столкнёмся) 24 - указывают на явный отказ в размещении ордера. Остальные 6:  

1. TRADE_RETCODE_PLACED Layaway yerleştirmediğimizi varsayalım. Piyasada işlem yaparken (SYMBOL_TRADE_EXECUTION_MARKET) böyle bir yanıt mümkün mü?

2. TRADE_RETCODE_DONE O zaman hiçbir şeyi tekrar kontrol etmeniz gerekmez. Her şey tam olarak danışmanın istediği gibi gitti.

3. TRADE_RETCODE_DONE_PARTIAL Tahmin ettiğim gibi, alım satım geciktiricileri değilsek, bu cevap ORDER_FILLING_IOC modunu hesaba katarak TRADE_RETCODE_DONE'a benzer.

4. TRADE_RETCODE_ORDER_CHANGED Bu, ticaret emrimizin açık bir şekilde reddedildiği anlamına mı geliyor?

5. TRADE_RETCODE_LOCKED Bence en kötü durum. Bu durumda nasıl hareket edilir? Henüz bir arama emri numarası olduğunu sanmıyorum. Ticaret akışı yoğun. Ticaret yapmak imkansız ve ticaret akışının engellenmesinin nasıl öğrenileceği açık değil.

6. TRADE_RETCODE_FROZEN Bu, ticaret emrimizin açık bir şekilde reddedildiği anlamına mı geliyor?

Lütfen her maddeye yorum yapın.

Ne yazık ki, benim bilgim, noktaların her biri hakkında tam teşekküllü bir yorum için yeterli değil. Bir şey olursa, meslektaşları düzeltecektir.

1. Forum bir keresinde bir alt komisyoncu ile bir ticaret hesabının açılabileceği bir durumdan bahsetmişti. Bu durumda, alt komisyoncu daha fazla işlem için (brokere) bir ticaret talebi gönderebilir ve müşteri terminaline TRADE_RETCODE_PLACED gönderebilir. Aracının sonunda böyle bir ticaret talebini işleme alıp almayacağı önceden bilinmiyor.

2. Evet, ben de öyle düşünüyorum. Unutulmaması gereken tek şey, bu siparişle ilgili bilgilerin asenkron olarak terminal tabanına gönderileceğidir.

3. ORDER_FILLING_IOC ve ORDER_FILLING_RETURN modlarında bir ticaret talebinin kısmi yürütülmesinden bahsettiğimizi düşünüyorum.

4. https://www.mql5.com/ru/forum/1111/page124#comment_18407

5. Bu kod hakkında kesinlikle hiçbir şey bilmiyorum. Resmi olarak, komisyoncunun bazı dahili nedenlerinden dolayı isteğin işlenmediği ortaya çıktı. Daha sonra işlenip işlenmeyeceği belli değil. Ben kendim bu kodu bir ticaret talebinin reddedilmesiyle eşitliyorum.

6. https://www.mql5.com/ru/forum/1111/page123#comment_18372

.. Ve genel olarak - forum anahtar kelime aramasını deneyin. Daha fazla bilgi bulunabilir :)

 
Yedelkin :

Ne yazık ki, benim bilgim, noktaların her biri hakkında tam teşekküllü bir yorum için yeterli değil. Bir şey olursa, meslektaşları düzeltecektir.

1. Forum bir keresinde bir alt komisyoncu ile bir ticaret hesabının açılabileceği bir durumdan bahsetmişti. Bu durumda, alt komisyoncu daha fazla işlem için (brokere) bir ticaret talebi gönderebilir ve müşteri terminaline TRADE_RETCODE_PLACED gönderebilir. Aracının sonunda böyle bir ticaret talebini işleme alıp almayacağı önceden bilinmiyor.

2. Evet, ben de öyle düşünüyorum. Unutulmaması gereken tek şey, bu siparişle ilgili bilgilerin asenkron olarak terminal tabanına gönderileceğidir.

3. ORDER_FILLING_IOC ve ORDER_FILLING_RETURN modlarında bir ticaret talebinin kısmi yürütülmesinden bahsettiğimizi düşünüyorum.

4. https://www.mql5.com/ru/forum/1111/page124#comment_18407

5. Bu kod hakkında kesinlikle hiçbir şey bilmiyorum. Resmi olarak, komisyoncunun bazı dahili nedenlerinden dolayı isteğin işlenmediği ortaya çıktı. Daha sonra işlenip işlenmeyeceği belli değil. Ben kendim bu kodu bir ticaret talebinin reddedilmesiyle eşitliyorum.

6. https://www.mql5.com/ru/forum/1111/page123#comment_18372

.. Ve genel olarak - forum anahtar kelime aramasını deneyin. Daha fazla bilgi bulunabilir :)

Toplamda, 30 koddan 26'sı (TRADE_RETCODE_ORDER_CHANGED ve TRADE_RETCODE_FROZEN dahil) aşağıdakilere sahibiz - talebin kesin olarak reddedilmesi (sipariş oluşturmaz).

TRADE_RETCODE_DONE ve TRADE_RETCODE_DONE_PARTIAL - garantili sipariş oluşturuldu.

TRADE_RETCODE_PLACED (ertelemeler değil) ve TRADE_RETCODE_LOCKED'in nasıl doğru bir şekilde çalışılacağı bir sorudur. MQ, bu iki kodla ilgili yorumları takdir edecektir.

 
Bu harika, Herkese Mutlu Yıllar #2015, ama her şeyin nasıl bittiğini merak ediyorum. 2 yıldır suskunsun...