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
Donanıma bağlı olduğunu anlıyorum.
Hiçbir şey böyle değil!
Donanıma bağlı olduğunu anlıyorum.
Ve bence - hayır)))
Ve bilgisayarın iş yükünden bile değil ...
Hiçbir şey böyle değil!
Evet! bir aparatın var ve bir önceki - sonuç farklı - bu yanılıyorum demek, güçten değil demek
OnMine nedir? Her bir olay sırayı işlemek için çevrimiçi çağrı yapıyorsa, çevrimiçi olarak sıraya alınmış birden fazla olay nasıl olabilir?
OnMain bir fonksiyondur. Bu gerçek kod değil, özel bir durumdur - " OnMain işlevinin yürütülmesi sırasında mevcut gerçek kuyruğun durumunu bilmenin bir yolu yoktur " iddiasının yanıtıdır. Bu, hesaplamaların kendilerine farklı bir yaklaşımdır.
OnMain bir fonksiyondur. Bu gerçek kod değil, özel bir durumdur - " OnMain işlevinin yürütülmesi sırasında mevcut gerçek kuyruğun durumunu bilmenin bir yolu yoktur " iddiasının yanıtıdır. Bu, hesaplamaların kendilerine farklı bir yaklaşımdır.
Yani, her ihtimale karşı, OnMain...
:) ;)Savaş danışmanlarında, şüpheli yerlerde her yerde _B(FuncName(...), AlertTime) işlevleri giydim. İşte en son girişlerden kısa bir günlük özeti.
Zaman sütunu, donmaların ne sıklıkla meydana geldiğini gösterir.Kavramları değiştiriyorsun.
İşte orijinal ifadeniz:
Ne yazık ki, böyle bir HistorySelect çağrısı 5-30 milisaniye sürer (Bunu Release-EX5'te kendim ölçtüm). OnTick'teki Expert Advisor'da bu tür birkaç güncelleme yapıldığında (iyi bir şekilde, herhangi bir duraklamadan sonra yapılmalıdır. Örneğin, her OrderSend'den sonra), o zaman her şey delicesine pahalı / uzun olur. HistorySelect, bir OnTick'te toplamda birkaç saniye yiyebilir.
Terminalinizde bile, arama başına ortalama 0,2 ms'lik süre, orijinal ifadede belirtilen değerlerden önemli ölçüde daha azdır.
Şimdi, bazen bir işlevin yürütme süresinin ortalamadan belirgin şekilde daha uzun olabileceğini söylüyorsunuz. Bu farklı bir konu.
Herhangi bir HistorySelect() isteği, eşzamanlayıcılar altındaki uçbirim tabanlarına yapılan tam kapsamlı bir çağrıdır. Bu kaçınılmaz. Evet, erişim senkronizasyonunun mevcudiyeti göz önüne alındığında, bu işlev için çok kısa bir yürütme süresi garanti etmek imkansızdır.
HistoryDealsSelect() ve HistoryOrdersSelect() işlevlerini ekleyerek önerilen çözüm bu anlamda hiçbir şeyi değiştirmez.
Maksimum ve ortalama süreyi kontrol etmek için komut dosyası:
Maksimum ve ortalama süreyi kontrol etmek için komut dosyası:
Alıntılanandan önce fikriniz hakkında yorum yapmayacağım. İşte betiğinizi çalıştırmanın sonucu.
Daha doğrusu bitmesini bekleyemedim, bu yüzden yineleme sayısını 100K'dan 1K'ya değiştirdim.
Tatmin edici bir derecelendirmeye bile layık mı?
Durumun saçmalığına bakarsınız. Fırsatların sayısını aptalca öğrenmek için HistorySelect'i aramanız gerekir! Bu, en hafif tabirle rasyonel değil.
Tehdit Her tıklamada, en fazla, yalnızca HistorySelect nedeniyle toplam onlarca milisaniye harcıyorum.
En basit haliyle:
Sadece hesaplamalara yönelik yaklaşımı değiştirmeniz gerekir (görev gerektirdiği sıklıkta bir ara dönüş yapın). Ancak zorsa, 1. aşamada OnMain'in sizin için olmadığını düşünün (ana kodu OnMain'e değil, OnTrade2XX'e aktarırsınız), böylece OnMain'de hiçbir şey öğrenmenize gerek kalmaz
Teşekkür ederim, başlangıçta tam olarak böyle anladım ve bu nedenle tam olarak anlamadığımı ifade ettim. Örnek olarak basit bir senaryo kullanacağım.
Bir OrderSend yapıyorsun. OrderSend'in bitiminden HEMEN sonra, belirli bir pozisyon bir alımla kapatılmadıysa, o zaman başka bir OrderSend yaparsınız. Programlanması gereken tüm mantık budur. Zaman uyumsuz kullanılmaz.
Şimdi robotumuz için olan durum. Bir OrderSend gönderdiniz ve yürütülürken limit limiti tetiklendi ve bundan sonra yukarıda bahsettiğimiz pozisyonumuzu alma tetiklendi.
Robotun şematik olarak uygulanması nedir? Bunu, HistorySelect freni veya kodun herhangi bir yerinde tüm işlem geçmişine erişim sağlayan OnTradeTransaction casus koltuk değneği olmadan nasıl uygulayacağımı bilmiyorum. Olay kuyruğuna erişim mekanizması uygulanmış olsaydı, yukarıdaki örnek temel olarak çözülürdü.
Geliştiriciler de dahil olmak üzere MT5'teki tüm güçlüler, lütfen bunun nasıl uygulanacağını gösterin (yukarıdaki iki kalın satır) basit (karmaşık olanlardan bahsetmeye bile korkuyorum) ticaret mantığı.
OnMain bir fonksiyondur. Bu gerçek kod değil, özel bir durumdur - " OnMain işlevinin yürütülmesi sırasında mevcut gerçek kuyruğun durumunu bilmenin bir yolu yoktur " iddiasının cevabı. Bu, hesaplamaların kendilerine farklı bir yaklaşımdır.
İşte böyle. Ve adamlar bunun hakkında konuşuyorlardı. Bunu uygulamak için, MQL programlarının yürütme yapısını ya a) en az iki iş parçacıklı bir yapıyla değiştirmeniz veya b) kuyruğa erişmek ve onun işlenmesini yönetmek için bir mekanizma eklemeniz gerekir.
Mevcut yapı ile önerilen şema sizin tarafınızdan uygulanamaz.