OrderSendAsync() işlevi

 

Açıklama, OrderSendAsync() işlevinin, sunucunun gönderilen isteğe yanıt vermesini beklemeden zaman uyumsuz işlemleri gerçekleştirmek için tasarlandığını söylüyor. Başarılı olursa, sonuç değişkenindeki yanıt kodu, TRADE_RETCODE_PLACED ( kod 10008) - "sipariş verildi" değerini içerir. Başarılı yürütme ... talebin ticaret sunucusuna ulaştığına ve işlenmek üzere kabul edildiğine dair herhangi bir garanti vermez.

Bir yandan, retcode alanının ticaret sunucusunun dönüş kodunu içerdiğini biliyoruz, yani. bu kodun, kullanıcı terminali tarafından değil, sunucu tarafından üretilmesi gerekiyor. Öte yandan El Kitabı , OrderSendAsync() işlevi için, ticaret talebinin kendisi ticaret sunucusuna ulaşmamış olsa bile, sunucu tarafından üretilmesi gereken kodlardan birinin (kod 10008) döndürülebileceğini belirtir.

Soru 1: OrderSendAsync işlevi için 10008 kodu tam olarak nerede (hangi aşamada) oluşturulur? [Bu kodun ticaret sunucusunun katılımı olmadan iade edilebileceği dikkate alınarak.]

Soru 2: 10008 kodu ticaret sunucusu kodu mu, yoksa bu kod, sunucu bir ticaret talebi almadan önce müşteri terminalinin tarafında mı üretiliyor?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 

1. Terminal, başarılı bir gönderme işlemi ile (sipariş uçaktan başarıyla düşürüldü ve daha fazlasını bilmiyoruz)

2. Totoloji için özür dilerim, ancak aynı şekilde cevap vereceğim: Evet, 10008 kodu ticaret sunucusu yanıt kodudur. Evet, bu kod şu anda terminali kapatıyor ... ayrıca 1. nokta.

Neden satırlar arasında zaten açıkça yazılmış olanı bulmaya çalışıyorsun?

 

Asenkron ticaret emirleri modeli, birçok olay ve emir durumunu içerir:

Piyasa Emri Durumları Diyagramı

Koşullu Sipariş Durumları Diyagramı

Şu anda MT5'te:

  1. CREATED - OrderSendAsync ve OrderSend işlevlerinin çağrılması gerçeği (MT5'teki bir siparişin bu durumu dışarıdan tanımlanamaz).
  2. İPTAL hemen meydana gelirse (terminalin kendisi filtrelerini keser. Örneğin, limit emri mevcut olandan daha kötü), o zaman OrderSend ve OrderSendAsync'den gelen cevap olumsuzdur.
  3. OPENED, OrderSendAsync için TRADE_RETCODE_PLACED (siparişiniz terminalin dahili filtrelerini başarıyla geçti ve sunucuya gönderildi) sonucudur.
  4. SUBMIT_OK - sunucu takas talebinizi kabul etti. Bu bir gecikme ise, OrderSend yürütmesini tamamlayacaktır. Eğer Market - beklemeye devam ediyoruz.
  5. FILLED - siparişiniz yürütme durumunda (örneğin, STP aracılığıyla gönderildi ve yanıt bekleniyor). beklemeye devam ediyoruz.
  6. FILL_OK - yerine getirildi. Eğer Market - OrderSend işlemini tamamlarsa.

Daha fazla ayrıntı için yukarıdaki şemalara bakın.

 
Rosh :

1. Terminal, başarılı bir gönderme işlemi ile (sipariş uçaktan başarıyla düşürüldü ve daha fazlasını bilmiyoruz)

2. Totoloji için özür dilerim, ancak aynı şekilde cevap vereceğim: Evet, 10008 kodu ticaret sunucusu yanıt kodudur. Evet, bu kod şu anda terminali kapatıyor ... ayrıca 1. nokta.

Neden satırlar arasında zaten açıkça yazılmış olanı bulmaya çalışıyorsun?

"Satır araları" aramıyorum. Ve bir kez daha iki (şimdi zaten) ticaret fonksiyonunun çalışma aşamalarını anlamaya çalışıyorum.

OrderSendAsync işlevine notunuzda, "işlev, amaç ve parametreler açısından OrderSend() işlevine benzer" diyor. Ancak cevabınıza bakılırsa, OrderSendAsync işlevinin amacı OrderSend işleviyle tam olarak aynı değildir. İkincisi, ticaret talebinin sunucuda kontrol edilmesi içindir, bu nedenle OrderSend() işlevi tarafından döndürülen kodlar, başka bir madde değil, sunucunun kendisi tarafından oluşturulan kodlardır. OrderSendAsync() işlevi durumunda, dönüş kodu terminal tarafından oluşturulur, dolayısıyla böyle bir kod (kod 10008) bir sunucu dönüş kodu olarak kabul edilemez. Bu, resmi olarak sunucu kodları listesinde dikkate alsanız bile, "terminal tarafından oluşturulan bir koddur".

Başka bir deyişle, iki işlev - iki yaklaşım: "Kod sunucu tarafından oluşturulur" ve "Kod terminal tarafından oluşturulur". Bu açıdan işlevler aynı değildir. Bu incelik bilgisi, "dönüş kodunun" tam olarak kimden geldiğini - sunucudan veya terminalden - doğru bir şekilde anlamak için gereklidir.

 
hrenfx :

OPENED, OrderSendAsync için TRADE_RETCODE_PLACED'in sonucudur.

    Orijinal OrderSend işlevini kullanırken TRADE_RETCODE_PLACED(10008)'in onu beklemek açısından genellikle işe yaramaz olduğu sonucuna varabilir miyiz?

    Şema için teşekkürler!

    "Sipariş koşulu karşılandı" nasıl doğru bir şekilde çevrilir?

     
    Yedelkin :

    Orijinal OrderSend işlevini kullanırken TRADE_RETCODE_PLACED(10008)'in onu beklemek açısından genellikle işe yaramaz olduğu sonucuna varabilir miyiz?

    TRADE_RETCODE_PLACED'in sıralı OrderSend ile ilgisi yoktur.

    "Sipariş koşulu karşılandı" nasıl doğru bir şekilde çevrilir?

    Mevcut fiyat erteleme koşullarını karşılamaktadır. DOLDURULDU yerine İPTAL, örneğin ertelemenin yürütülmesi için yeterli marjın olmaması durumunda ortaya çıkabilir.

    Yine, asenkron olarak çalışmak için, güçlü bir olay sistemine ihtiyacınız var , vardığınızda aşağıdakileri alabilirsiniz:

    • Olay metin mesajı.
    • Yaratılışının zamanı.
    • Hangi düzene ait?
    • Mesaj türü (haber, sipariş, bağlantı durumu vb.)

    Platformun mimarisi çok derinlemesine düşünülmelidir. Burada, mimari tasarım aşamasında hatalar varsa, evrenselliği sağlamak için bunları aşmak son derece zordur.

    IMessage (JForex API 2.9.6.1 API)
    • www.dukascopy.com
    FRAMES    NO FRAMES
     

    hrenfx :

    Yedelkin :

    Orijinal OrderSend işlevini kullanırken TRADE_RETCODE_PLACED(10008)'in onu beklemek açısından genellikle işe yaramaz olduğu sonucuna varabilir miyiz?

    TRADE_RETCODE_PLACED'in sıralı OrderSend ile ilgisi yoktur.

    Burada! Sezgisel olarak buna yarım yıl önce geldim ve siz de bunu onaylıyorsunuz :) Zaten iyi :)
     
    hrenfx :

    Yine, asenkron olarak çalışmak için, güçlü bir olay sistemine ihtiyacınız var , varışta aşağıdakileri almanın mümkün olduğu yerler:

    • Olay metin mesajı.
    • Yaratılışının zamanı.
    • Hangi düzene ait?
    • Mesaj türü (haber, sipariş, bağlantı durumu vb.)
    Diğer şeylerin yanı sıra OnTrade etkinliğini detaylandırma ihtiyacından mı bahsediyorsunuz?
     
    Yedelkin :
    Burada! Sezgisel olarak buna yarım yıl önce geldim ve siz de bunu onaylıyorsunuz :) Zaten iyi :)
    Bir kişi, akıl yürütmesinin doğruluğunu onayladığında her zaman sevinir. Ne kadar doğru olursa olsun.
     
    Rosh :
    Bir kişi, akıl yürütmesinin doğruluğunu onayladığında her zaman sevinir. Ne kadar doğru olursa olsun.
    Duc, son sekiz ayda hiç kimse bir kişinin kamuoyu önünde vardığı sonucu çürütmedi. Ne teorik olarak ne de test sonuçlarıyla. Ama şüphe ektiğiniz için - teşekkürler :)
     

    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:

    TRADE_RETCODE_PLACED к последовательной OrderSend не имеет никакого отношения.

    doğru bağlamda gereklidir.