Ticaret ortamıyla çalışırken yaygın hatalar ve bunları ortadan kaldırmanın yolları - sayfa 2
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
fxsaber :
Bir işlev, bir sarmalayıcıya olan ihtiyacı gösteren kırmızı ile işaretlenmiştir. Onun sorunu burada anlatılıyor. Birisi bunun, eski zamanlarda Uyku yoluyla çözülen, OrderSend'den sonra bir pozisyonun açılmasını bekleyen eski bir pozisyon yeniden açma sorunu olduğunu hatırlayacaktır. Ama aslında bu sorunun OrderSend ile alakası yok. Ticaret ortamını doğru okuyabilmeniz gerekir.
Basit bir örnek için doğru seçenek...
Pozisyon listesi gibi emir listesi de anında güncellenmez. Uyku koltuk değneği olmadan yapmayacağım.
Muhtemelen daha doğru bir şekilde OnTicaretİşlem
Pozisyon listesi gibi emir listesi de anında güncellenmez. Uyku koltuk değneği olmadan yapmayacağım.
Muhtemelen daha doğru bir şekilde OnTicaretİşlem
Ticaret ortamının güncellemesini beklemekle ilgili bir sorun varsa, Uyku nasıl yardımcı olabilir? Ya yardım eder ya da etmez.
Bu yüzden yaklaşım diğer tarafta olmalıdır: bir pozisyon açmak için bir emir gönderin veya bekleyen bir emir verin - sonucu beklemeniz ve daha fazla açmak veya yerleştirmek için emir göndermemeniz gerekir. Bu, kendimiz yönettiğimiz ve yalnızca programın yürütülmesini geciktiren, ancak programın kendisi tarafından gönderilen ticaret talebinin sonucunu kontrol etmeyen ve sonrasında ne yapacağını bilmesi gereken Sleep'e güvenmediğimiz bir bayrağa ihtiyacımız olduğu anlamına gelir. bu - bayrağı ayarlayın ve sonucu bekleme mantığı üzerinde zaten çalışın. Sonucu bekledik - bayrağı kaldırdılar.
Soru: Bir ticaret talebi gönderdikten sonra, bir sonraki tıklamaya kadar sunucu tarafından bir piyasa emri verilmezse ne olur?
MT4'tekiyle tamamen aynı olacak - hiçbir şey yoksa, sayılmaz.
Böyle bir ticaret emrinin ortaya çıkmasının birkaç nedeni hakkında konuşabiliriz.
- Üçüncü taraf OrderSend veya OrderSendAsync - ticaret ortamını okuduğumuz programdan değil. Belki programın çalıştığı Terminalden bile değil. Bu durumda hiçbir şey yapılamaz. Bu gibi durumlarda her şey MT4'teki ile tamamen aynıdır.
- Kendi OrderSend veya OrderSendAsync - ticaret ortamını da okuyan bir programdan başlatıldı. OrderSend durumunda her şey açıktır, çünkü OrderSend, yürütmesini net bir sonuçla tamamlayacaktır. OrderSendAsync durumunda, iki şey yapabilirsiniz - verileri ilk paradigmaya göre sonraki olaylara iletin veya MT4'te düzenli asenkron veri aktarımını simüle ederken yapıldığı gibi OrdersAsyncWait() yapın (koda sahip değilim). (birkaç ticaret dizisi aracılığıyla uygulama).
Muhtemelen MT4'te OrderSendAsync hakkında birkaç söz söylemeye değer. Orada, programın yürütülmesinin herhangi bir aşamasında, ilgili ticaret akışının istihdamını ve tam olarak neyle meşgul olduğunu görebilirsiniz. Bu anlamda, MT4'teki bu tür özel eşzamansızlık, MT5'teki standart olandan çok daha fazla fırsat sunar. Ancak MT4'te, her çizelgede "müşterilerin" başlatılmasıyla uygulanır, yani. masraflı. MT5'te aynı işlevselliği ve hatta çok fazla çizelge olmadan yazmak mümkündür - bir OBJ_CHART nesnesi üzerinde bir komut dosyası çalıştırın, ancak yine de hafif bir gecikme olacaktır. Onlar. OrderSendAsyncCustom, yürütme hızı açısından normal OrderSendAsync'e göre biraz kaybedecek, ancak yine de OrderSend'den çok daha hızlı olacak + bonus olarak özel bir uygulamanın tüm avantajları.Pozisyon listesi gibi emir listesi de anında güncellenmez. Uyku koltuk değneği olmadan yapmayacağım.
Muhtemelen daha doğru bir şekilde OnTicaretİşlem
MqlTradeTransaction, yalnızca OrderSendAsync ile çalışırken uygun paradigmayı seçerseniz gerekli olabilir. Diğer durumlarda, OnTradeTransaction == OnTrade, anlamıyla, OnTick veya OnTimer'dan daha fazla rol oynamaz.
OnTradeTransaction içinde kullanmanız gerekir. Önbellekler zorunlu bilgi DEĞİLDİR ve yalnızca hızlandırma için kullanılır. Bu nedenle, onları hemen dikkate almıyoruz.
Vurgulu, aynı işlem kodunun her Açık işlevinde çalıştırıldığı anlamına gelir. Uygun ticari olmayan kod gerisini halleder.
MT4'tekiyle tamamen aynı olacak - hiçbir şey yoksa, sayılmaz.
Eh, yani - bir sonraki onay işaretinde, program açmak için yeni bir istek gönderir. Sonuç olarak, aynı sorunu yaşıyoruz - çoklu açıklıklar.
Mantık, EA'da şöyle bir şey olmalıdır:
Eh, yani - bir sonraki onay işaretinde, program açmak için yeni bir istek gönderir. Sonuç olarak, aynı sorunu yaşıyoruz - çoklu açıklıklar.
Yazının tamamını okumak güzel olurdu.
Mantık, EA'da şöyle bir şey olmalıdır:
Bekleme bayrağı yalnızca ikinci durum ve OrderSendAsync için mümkündür. OrderSend'in bir bekleme bayrağına ihtiyacı yoktur. Bekleme bayrağı olmadan OrderSendAsync - OrdersAsyncWait().
Herhangi bir teori pratikte test edilebilir.
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
Ticaret ortamıyla çalışırken yaygın hatalar ve bunları ortadan kaldırmanın yolları
fxsaber , 2018.02.20 00:01
PS Bu kodu buraya yapıştırın ve demo sunucusundaki sonucu kontrol edin.
Yazının tamamını okumak güzel olurdu.
Bekleme bayrağı yalnızca ikinci durum ve OrderSendAsync için mümkündür. OrderSend'in bir bekleme bayrağına ihtiyacı yoktur. Bekleme bayrağı olmadan OrderSendAsync - OrdersAsyncWait().
Herhangi bir teori pratikte test edilebilir.
Pratik sonuçlar tarafından yönlendiriliyorum.Ben de bir asenkron mod için yazdım. Senkron ile beklemenize gerek yoktur - sonuç zaten isteğe yanıttır.
Ben de bir asenkron mod için yazdım.
Ayrıntılı cevap başlangıçta verildi.
Ayrıntılı cevap başlangıçta verildi.
yanlış okumuş olmalıyım :)
Birden çok açıklık hatasını atlamak için adımlar görmedim. Sadece genel "paradigmalar";)
Bu yüzden gereksiz olan örnek bir mantık verdim - pozisyon açmak/bekleyen emirleri ayarlamak için fonksiyonda (sarmalayıcı) bayrak kontrol edilir. Veya sinyal izleme işlevinde olabilir.
En iyisinin ne olduğunu düşünmelisin.
bayrak, pozisyon açmak/bekleyen emirleri ayarlamak için fonksiyonda (sarmalayıcı) kontrol edilir. Veya sinyal izleme işlevinde olabilir.
Açık işlevinden çıkış her zaman askıya alınmış bir durum olmadan gerçekleştirildiğinde OrdersAsyncWait () çözümünü çok daha fazla seviyorum. Ardından, ticaret ortamının sıfırdan bir sonraki okuması mümkün olduğu kadar alakalıdır.
OrderSendAsync kullanmak her zaman mantıklı olmalıdır. Bunun gerçekleştiği tek durum, birden fazla (> 1) bağımsız işlem emrinin tek bir sinyalle gönderilmesidir. Bu nedenle, diğer tüm durumlarda OrderSendAsync'i çitlemek hiçbir zaman mantıklı değildir.
Tehdit OrderSendAsync'in çok alakalı olduğu ayrı bir konu var - çoklu danışmanlar: bir danışmanda birkaç bağımsız TS. OrderSend burada nadiren uygundur ve prensipte hiçbir Uykuya izin verilmediğinden OrderAsyncWait( const string Symb ) bile uygun değildir.