OrderSend ile MT5'te nasıl düzgün çalışılır - sayfa 10

 
prostotrader :

Zevk almak.

Bu iyi bir örnektir. Ama burada beni rahatsız eden bir soru var. OnTradeTransaction() sipariş işlemede veri döndürmezse ne olur? Eh, bir şekilde kaybolabilirler. Sunucu gönderdi, ancak terminal kabul etmedi. Gönderilen tüm emirlerin %100'ü için OnTradeTransaction() işlevine gerekli sayıda çağrıyı alacağım ve her tür işlem raporunun terminale ulaşacağı ne kadar garantilidir (esas olarak işlem türü = TRADE_TRANSACTION_REQUEST ile ilgileniyorum).

Ne de olsa, bu yanıtı alamazsam (örneğin, kopuk bir bağlantı nedeniyle), bayrağı kaldırmayacağım ve her şey duracak.

 
fxsaber :

Kontrol etmedim, ancak OrderSend'den sonra TÜM EA'ların OnTradeTransaction için ilgili olayı alması mümkündür.

Sonra her şeye koltuk değneği olmadan ve birkaç danışman için tek bir sembol üzerinde karar verilir.

Kontrol! Bu şekilde!
 
Oleg Shenker :

Bu iyi bir örnektir. Ama burada beni rahatsız eden bir soru var. OnTradeTransaction() sipariş işleme sırasında veri döndürmezse ne olur? Eh, bir şekilde kaybolabilirler. Sunucu gönderdi, ancak terminal kabul etmedi. Gönderilen tüm emirlerin %100'ü için OnTradeTransaction() işlevine gerekli sayıda çağrıyı alacağım ve her tür işlem raporunun terminale ulaşacağı ne kadar garantilidir (esas olarak işlem türü = TRADE_TRANSACTION_REQUEST ile ilgileniyorum).

Ne de olsa bu yanıtı alamazsam (örneğin, kopuk bir bağlantı nedeniyle), bayrağı kaldırmayacağım ve her şey duracak.

OnTradeTransaction olayından önce bunun gerçekleşmediğini birkaç kez yaşadım,

bu yüzden 0,5 saniyelik bir zamanlayıcı kullanarak siparişlerin durumunu kontrol eden bir fonksiyon yazdım.

Uygulama, ortak EA kodunu karmaşıklaştırıyor, ancak İnternet üzerinden çalışırken %100 garanti yok

her şeyin saat gibi çalışacağını.

Katma

Burada kontrolün uygulanması fikrini aldım

https://www.mql5.com/ru/blogs/post/557544

Отслеживание ордера, после команды OrderSendAsync
Отслеживание ордера, после команды OrderSendAsync
  • 2015.04.29
  • Mikhail Filimonov
  • www.mql5.com
Отслеживание ордера, после команды OrderSendAsyncМихаил | 23 апреля, 2015В статье рассказывается принцип отслеживания ордера после команды OrderSendAsync, если нет события TradeTransaction...
 
prostotrader :

OnTradeTransaction olayından önce bunun gerçekleşmediğini birkaç kez yaşadım,

bu yüzden 0,5 saniyelik bir zamanlayıcı kullanarak siparişlerin durumunu kontrol eden bir fonksiyon yazdım.

Uygulama, ortak EA kodunu karmaşıklaştırıyor, ancak İnternet üzerinden çalışırken %100 garanti yok

her şeyin saat gibi çalışacağını.

Katma

Burada kontrolün uygulanması fikrini aldım

https://www.mql5.com/ru/blogs/post/557544

Bana öyle geliyor ki adam açık kapıyı kırıyor, her işlem için özel sihirli kodlar yaratıyor. Bir siparişi benzersiz şekilde tanımlayabileceğiniz bir order_id vardır.

Yoksa ben mi anlamadım?

 
Oleg Shenker :

Bana öyle geliyor ki adam açık kapıyı kırıyor, her işlem için özel sihirli kodlar yaratıyor. Bir siparişi benzersiz şekilde tanımlayabileceğiniz bir order_id vardır.

Yoksa ben mi anlamadım?

Evet, order_id var, ancak ne yazık ki bazen OnTradeTransaction'a olaylar gelmiyor.

(şahsen, birkaç kez yaşadım)

Ve o zaman order_id "itmek" için nereye?

Katma

Eh, bugün sunucu yanıtında bir gecikme oldu

2016.12 . 28 14 : 04 : 56.442   (MXI- 3.17 ,M1)  CheckOrders: Задержка ответа сервера. Ожидание продолжается...
2016.12 . 28 14 : 04 : 56.443   (GOLD- 3.17 ,M1) CheckOrders: Задержка ответа сервера. Ожидание продолжается...
 
prostotrader :

Evet, order_id var, ancak ne yazık ki bazen OnTradeTransaction'a olaylar gelmiyor.

(şahsen, birkaç kez yaşadım)

Ve o zaman order_id "itmek" için nereye?

Katma

Eh, bugün sunucu yanıtında bir gecikme oldu

2016.12 . 28 14 : 04 : 56.442   (MXI- 3.17 ,M1)  CheckOrders: Задержка ответа сервера. Ожидание продолжается...
2016.12 . 28 14 : 04 : 56.443   (GOLD- 3.17 ,M1) CheckOrders: Задержка ответа сервера. Ожидание продолжается...

Geçen gün başka bir "pusu" yaşadım.

2016.12 . 23 15 : 04 : 02.865 TriArbTrader_8- 4 (EURGBP,H1)     1111 DealSell           3 orders are sent.
2016.12 . 23 15 : 04 : 02.924 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction EURUSD Retcode = 10009 . Slippage = 1631 .
2016.12 . 23 15 : 04 : 02.924 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction EURUSD Position is closed in 59699 mksec.
2016.12 . 23 15 : 04 : 02.924 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction EURUSD Retcode = 10009 . Slippage = 1631 .
2016.12 . 23 15 : 04 : 02.924 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction EURUSD Position is closed in 59712 mksec.
2016.12 . 23 15 : 04 : 02.992 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction GBPUSD Retcode = 10009 . Slippage = 1379 .
2016.12 . 23 15 : 04 : 02.992 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction GBPUSD Position is closed in 127691 mksec.
2016.12 . 23 15 : 04 : 02.992 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction All reposts are checked. Direction = 0
2016.12 . 23 15 : 04 : 02.993 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction Unexpected transaction request.
2016.12 . 23 15 : 04 : 02.993 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction EURGBP Retcode = 10009 . Slippage = - 40993 .
2016.12 . 23 15 : 04 : 02.993 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction EURGBP Position is closed in 1339448077 mksec.
2016.12 . 23 15 : 04 : 02.993 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction All reposts are checked. Direction = - 1

Günlüğe açıkça kaydedilen üç sipariş gönderildi. Bundan sonra OnTradeTransactions() TRADE_TRANSACTION_TYPE işlevi dört kez çağrıldı.

İşlev kodu kontrollerle başlar:

void OnTradeTransaction ( const MqlTradeTransaction & transaction,
                         const MqlTradeRequest &     request,
                         const MqlTradeResult &      results)
   {
     if (transaction.type == TRADE_TRANSACTION_REQUEST && request.action == TRADE_ACTION_DEAL )
      {
       if (request.magic == ExpertMagic)
         {

Yani içeride, baskıların olduğu yerden, sadece kendi uzman damgasına sahip TRADE_TRANSACTION_REQUIEST geçebilir...

Destek hizmeti önce beni iki özdeş Uzman Danışmanım olduğuna ikna etmeye başladı (günlüğe bakılırsa, aynı çizelgede açıkça görülüyor). Sonra dediler ki: "Sen bir aptalsın, koddaki hataları düzelt."

Kısacası onlara göre bu olamaz. Ancak günlük, olayın dört kez geldiğini açıkça gösteriyor.

 
prostotrader :

Evet, order_id var, ancak ne yazık ki bazen OnTradeTransaction'a olaylar gelmiyor.

(şahsen, birkaç kez yaşadım)

Ve o zaman order_id "itmek" için nereye?

Katma

Eh, bugün sunucu yanıtında bir gecikme oldu

2016.12 . 28 14 : 04 : 56.442   (MXI- 3.17 ,M1)  CheckOrders: Задержка ответа сервера. Ожидание продолжается...
2016.12 . 28 14 : 04 : 56.443   (GOLD- 3.17 ,M1) CheckOrders: Задержка ответа сервера. Ожидание продолжается...

Ve yine de, siparişin neden ticker tarafından aranamadığı açık değil mi? Sonuçta TradeTransaction'a gönderilen emirlerden hangisinin gelmediğini kontrol etmek kolaydır. Ve sonra tarihteki bu biletle siparişin durumuna bakın.

Her ne kadar şahsen denediğime rağmen, siparişlerin geçmişinde sadece DOLUDUR durumundaki siparişler vardı.

 
Oleg Shenker :

Ve yine de, siparişin neden ticker tarafından aranamadığı açık değil mi? Sonuçta TradeTransaction'a gönderilen emirlerden hangisinin gelmediğini kontrol etmek kolaydır. Ve sonra tarihteki bu biletle siparişin durumuna bakın.

Her ne kadar şahsen denediğime rağmen, siparişlerin geçmişinde sadece DOLUDUR durumundaki siparişler vardı.

Evet, çünkü sipariş geçmişte olmayabilir (örneğin bekleyen bir sipariş vb.)

Katma

Ve kodunuz yanlış.

 
prostotrader :

Evet, çünkü sipariş geçmişte olmayabilir (örneğin bekleyen bir sipariş vb.)

Katma

Ve kodunuz yanlış.

Sorun ne? İki kod satırında kaç hata yapılabilir.

 
Oleg Shenker :

Sorun ne? İki kod satırında kaç hata yapılabilir.

iki değil bir :)

if (transaction.type == TRADE_TRANSACTION_REQUEST && request.action == TRADE_ACTION_DEAL )

Bir sipariş bileti almak için OrderSendAsymc kullandığınızda TRADE_TRANSACTION_REQUEST gereklidir.

Neden: