OrderSendAsync() işlevi - sayfa 2

 
hrenfx :

Açıklanmalıdır:

OrderSend için TRADE_RETCODE_PLACED sunucu yanıtıdır.

OrderSendAsync için TRADE_RETCODE_PLACED, terminal yanıtıdır.

Kodlar aynı olmasına rağmen tamamen farklı anlamlara sahiptir. Büyük olasılıkla, geliştiriciler bu belirsizliği düzeltecektir.

Öyleyse şunu anlayın:

doğru bağlamda gereklidir.

Lütfen o zaman bile, OrderSend işlevini kullanarak bir ticaret talebi gönderirken hangi koşullar altında sunucunun TRADE_RETCODE_PLACED kodunu döndürmesi gerekebileceğini açıklayın? Gerçekten de, OrderSendAsync işlevindeki nota ve Roche'un yanıtına bakılırsa, bu aynı TRADE_RETCODE_PLACED kodu yalnızca, terminalden sunucuya bir isteğin başarıyla gönderildiğini gösterir. Yani, istek sunucuya girer girmez ve işleme / doğrulama başlar başlamaz, sunucunun "işleme sonuçlarına göre" başka "gerçek" sunucu kodları oluşturmaya zorlanacağı ortaya çıkıyor. Bu nedenle, bu kod sunucudaki istekten önceki istek yaşam aşamasına aitse, sunucunun (özellikle sunucunun) neden TRADE_RETCODE_PLACED kodunu döndürmesi gerektiğini hala tam olarak anlamıyorum? Yoksa OrderSend işleviyle ilgili TRADE_RETCODE_PLACED kodunun farklı bir anlamı mı var?
 

OrderSend, hem sunucudan hem de terminalden bir yanıt alabilir (terminal filtrelerinin başarısız geçişi durumunda).

OrderSendAsync her zaman yalnızca terminalden bir yanıt alır. Sunucudan yanıt almak için onTrade'de ilgili olayları yakalamanız gerekir.

 
hrenfx :

OrderSend, hem sunucudan hem de terminalden bir yanıt alabilir (terminal filtrelerinin başarısız geçişi durumunda).

Aşağıdakileri doğru anlıyor muyum:

Terminal, OrderSend'den gelen talebi kontrol etti ve başarıyla sunucuya gönderdi, retcode ise bir ara değer TRADE_RETCODE_PLACED aldı. Şu anda bağlantı kesildi ve OrderSend işlevinin geri getirebileceği tek şey retcode alanında "sıkışmış" TRADE_RETCODE_PLACED kodu mu? Bu, OrderSend'in TRADE_RETCODE_PLACED'i döndürmesine örnek olacak mı?

 
Yedelkin :

Aşağıdakileri doğru anlıyor muyum:

Terminal, OrderSend'den gelen talebi kontrol etti ve başarıyla sunucuya gönderdi, retcode ise bir ara değer TRADE_RETCODE_PLACED aldı. Şu anda bağlantı kesildi ve OrderSend işlevinin geri getirebileceği tek şey retcode alanında "sıkışmış" TRADE_RETCODE_PLACED kodu mu? Bu, OrderSend'in TRADE_RETCODE_PLACED'i döndürmesine örnek olacak mı?

Belki öyle, ama bundan şüpheliyim. Büyük olasılıkla, böyle bir bağlantı kesilmesi durumunda TimeOut-time'dan sonra TRADE_RETCODE_TIMEOUT olacaktır.

Dürüst olmak gerekirse, OrderSend durumunda bu sıkıcılığa neden ihtiyaç duyulduğunu anlamıyorum. Belki geliştiriciler yardımda daha ayrıntılı olarak açıklayacaktır.

PS MQL5'te tek bir satır yazmadım. Bu nedenle, konuyla ilgili tüm düşüncelerim göz ardı edilebilir.

 

... Yine de, bir tür saçmalık. İstemci Terminali Kullanıcı Kılavuzu (Ocak 2012), sipariş aşamalarından birinin "yerleştirildi" aşaması olduğunu belirtir - bayi siparişi kabul etmiştir.

Onlar. Kılavuzdan, bir ticaret talebinin sunucuya güvenli bir şekilde ulaştığında, kullanım süresinin hangi aşamada olduğunu gösterir. Ve OrderSendAsync() işlevinin açıklaması tam tersini söylüyor - TRADE_RETCODE_PLACED kodunun sunucuya varışına bağlı olmadığını.

 
hrenfx :

Dürüst olmak gerekirse, OrderSend durumunda bu sıkıcılığa neden ihtiyaç duyulduğunu anlamıyorum.

Şahsen, bir zamanlar "dönüş kodlarını işleme" ihtiyacı fikrini beğendim. Ancak böyle bir işlemi doğru yazabilmek için ne hakkında olduğunu bilmeniz gerekir. Uzun zamandır TRADE_RETCODE_PLACED kodunun tam olarak neyle bağlantılı olduğunu anlamaya çalışıyorum.
 

Genel olarak, herkes OrderSendAsync aracılığıyla sıralı bir MyOrderSend yazabilir:

  1. OrderSendAsync olarak adlandırılır .
  2. onTrade'deki sunucudan ilgili yanıtı bekledik.
  3. Bu yanıtla MyOrderSend'den çıkın.

Böyle bir uygulama ile MyOrderSend, standart OrderSend ile tamamen örtüşecektir (standart kitaplıkta OrderSendAsync aracılığıyla uygulanarak API'den kaldırılabilir).

 
hrenfx :

Böyle bir uygulama ile MyOrderSend, standart OrderSend ile tamamen örtüşecektir (standart kitaplıkta OrderSendAsync aracılığıyla uygulanarak API'den kaldırılabilir).

Kendini geliştirme için fikir ilginç. Ancak onTrade parametreleştirilmediği sürece, standart kitaplıkta onTrade kullanan herhangi bir kontrol büyük olasılıkla OrderSend işlevinin kendisinden çok daha yavaş olacaktır. yanılıyor olabilirim.
Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговые функции / OrderSend - Документация по MQL5
 

Genel olarak OrderSendAsync girişi Metatrader için tarihsel bir olaydır. Ticaret API'sinin varlığı boyunca (Metatrader3 ile başlayarak (daha öncekilerini görmedim)) Metatrader, kendi dili aracılığıyla uygulanmış olsa bile, özünde değişmeden kalmıştır. OrderSendAsync, Metaquotes'tan ticaret API'sinde yapılan ilk büyük değişikliktir.

Geliştirme şirketini bu etkinlik için içtenlikle tebrik ediyorum ve asenkron modeli yeterli kullanışlılığa getirmeyi diliyorum!

 

Teknik mesaj. Bir konuda ilginç ifadeler topluyoruz.

Renat :

Lütfen, bir hesaptan yürütme sırasındaki eşzamanlı isteklerin sayısında sınırlamalar olduğunu ve olacağını unutmayın. Şimdi yanılmıyorsam 16 başvuru oldu.

Eşzamansız işlemler, bir sonraki toplu işi göndermeden önce önceki toplu işin bir bölümünün yürütülmesini bekleyen bir "geçerli istek sayısı penceresi" ile dikkatli bir şekilde çalışacaktır. Ek olarak, aptal / test taşmasına karşı korumalar olacaktır. Şimdiye kadar izin verilen uygulama sayısı aşıldığında bir hata oluşuyor.

OrderSendAsync aracılığıyla yeni asenkron işlem yöntemi, ana sorunu çözer - bir düzine işlemi anında gerçekleştirmenize olanak tanır. Bu çok güçlü bir araçtır ve sunucu ve komisyoncu tarafından yasaklanma olasılığı göz önünde bulundurularak dikkatli ve her zaman kullanılmalıdır.