[SERVICE DESK] Zamanlayıcıda kıdemli TF'nin zamanı alınırken hata oluştu! - sayfa 6
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
Görünüşe göre en güvenilir çözüm, OnCalculate() çağrısını gerçekten beklemek ve ticaret sunucusuyla bağlantı kurmanın zorunlu kontrolünü yapmak. Bağlantıyı kontrol etmezsek (IsConnected()), o zaman OnCalculate() içinde bile terminali yüklerken şunu elde ederiz:
Ancak, bu tüm soruları çözmez:
1. OnCalculate() içindeki kıdemli TF'nin verilerini (en azından) almadan önce çağrılması gerektiği IsConnected() belgelerinde neden yazılmıyor?
2. OnTimer() içindeki IsConnected() neden gerçekten çalışmıyor? Sonuçta bir ticaret sunucusuyla bağlantı kurmanın bize veri almanın mümkün olduğunu söylemesi gerekmez mi?
3. Ticaret sunucusuyla bir bağlantı kurduğumuz ve OnTimer()'da veri almaya çalıştığımız için, iTime(), iBarShift(), SeriesInfoInteger() ve benzer işlevler, veriler aynı kaynaktan geliyorsa hata döndürmemelidir. bilgileri aldıkları ticaret sunucusu henüz senkronize değil mi? Aksi takdirde, bir zamanlar size 4066 hatasını döndüreceğimiz ve daha sonra sahip olduğunuz verilerle istediğiniz gibi yaşayacağımız gibi bir tür saçmalık ortaya çıkıyor.
Geliştiricilerle konuştum, orada bir arkadaşım var, onlara nokta nokta anlatıyorum.
1 Saçmalık, istediğiniz zaman ve istediğiniz yerden arayabilirsiniz.
2 IsConnected, kodun herhangi bir yerinden çağrılabilir ve çalışır, ancak hata yığınına hiçbir şey yazmayan bir işlevdir, doğru/yanlış döndürür ve bu kadar. Bağlantı prosedürünün oldukça uzun (en az 1 sn) olduğu ve IsConnected'in oturum açma başlangıcında zaten tetiklendiği göz önüne alındığında, bağlantı durumunu kontrol etmek ve terminal koşullarında teklif akışının başlamasını beklemek gerekir. Başlat.
3 Bu işlevler ayrıca hata yığınına hiçbir şey yazmaz, çalışmanın sonucunu kendileri döndürür.
Neden 4066 alıyoruz, TimeCurrent işlevinden bir hataydı. Bir oturum açıldı, terminalin sunucudan istediği süre, bağlantının kalitesine bağlı olarak bu da biraz zaman alıyor, hızlı bir zamanlayıcımız olduğunu unutmayın. Sonra TimeCurrent'tan isteğimiz üzerine 4066 aldık. Ve sonra zamanımız oldu ve fonksiyonlarımız normal şekilde çalışmaya başladı; çalışmalarının sonucunda kendileri hata yığınını atlayarak bir hata veriyorlar.
Böyle bir durumda bir öneri olarak, hızlı bir zamanlayıcı ve terminalin başlatılması, sunucudan veri almaya başladığımızdan emin olun. Versiyonum biraz zor, OnCalculate'den veri alımının başlangıcı hakkında bir sinyal almak doğru olur.
Sorunu çözmek için ne öneriyorsunuz (sence var mı)? OnCalculate() 1-2 kez çağrılana kadar bekleyin?
Evet öyle. OnInit()'te, sonucu kontrol etmeden gerekli TF'lere bir çağrı yaparsınız (orada buna güvenemezsiniz) ve zaten OnCalculate'de IsTFDataReady() işlevini çağırırsınız. İstenen tüm TF'ler için true değeri döndürülür döndürülmez, gösterge algoritmasını yürütmeye başlayabilirsiniz.
1. OnCalculate() içindeki kıdemli TF'nin verilerini (en azından) almadan önce çağrılması gerektiği IsConnected() belgelerinde neden yazılmıyor?
IsConnected() oldukça zor bir fonksiyondur. Sunucuya yapılan bağlantılardan yalnızca birinin durumunu döndürür. Ancak terminal birden fazla bağlantı kullanır. Tek başına 8 ticaret akışı vardır, bu nedenle IsConnected() true dönse bile bunun ne anlama geldiği tam olarak açık değildir. En azından, zaman serilerinin talep edilmesini ve oluşturulmasını bekleyemezsiniz. IsConnected() false döndürürse, terminalin hala çevrimdışı olduğundan emin olabilirsiniz.
Genel olarak, bir terminal bağlantısının varlığının çok önemli olduğu ne tür bir görev çözülüyor? Anladığım kadarıyla, bir gösterge bir veri görselleştirme aracıdır. Mevcut olan veriler. Yeni veriler geldiğinde, görselleştirmeyi güncelleyecektir. Ondan, verilerin alaka düzeyinin kontrolü gerekli olmamalıdır. Bu terminalin görevidir.
muhtemelen hala OHLC'nin hazırlanmasının MT4'teki ile aynı olmadığı MQL5'ten bahsediyoruz
MT4'ten bahsediyorum. 2-3 yıl önce Time[0] ile ilgili bir hata yakaladım. Geliştiriciler düzeltmiş gibi görünüyor, ancak zamanla tekrar ortaya çıktı. Sorun, bu hatayı açık bir şekilde yeniden oluşturmanın imkansız olmasıdır.
IsConnected() oldukça zor bir fonksiyondur. Sunucuya yapılan bağlantılardan yalnızca birinin durumunu döndürür. Ancak terminal birden fazla bağlantı kullanır. Tek başına 8 ticaret akışı vardır, bu nedenle IsConnected() true dönse bile bunun ne anlama geldiği tam olarak açık değildir. En azından, zaman serilerinin talep edileceğine ve oluşturulacağına güvenemezsiniz. IsConnected() false döndürürse, terminalin hala çevrimdışı olduğundan emin olabilirsiniz.
Genel olarak, bir terminal bağlantısının varlığının çok önemli olduğu ne tür bir görev çözülüyor? Anladığım kadarıyla, bir gösterge bir veri görselleştirme aracıdır. Mevcut olan veriler. Yeni veriler geldiğinde, görselleştirmeyi güncelleyecektir. Ondan, verilerin alaka düzeyinin kontrolü gerekli olmamalıdır. Bu terminalin görevidir.
göstergelerde, sunucuyla bağlantıyı, geçmişte ne olduğunu kontrol etme ihtiyacını gerçekten hatırlamıyorum, sonra çiziyoruz, geçmiş yüklendi, bu yüzden tüm gösterge arabelleklerini yeniden hesaplayacağız
Danışmanda aşağıdaki işlevi yaptım ve kullanıyorum, prensipte uygun ve sunucu ile bağlantıyı doğru şekilde kontrol ediyor:
Kontrolü terminale aktarmak için özellikle Sleep() kullanıyorum ve sonra tekrar sunucu bağlantısını ve ticaret olasılığını kontrol ediyorum.
MT4'ten bahsediyorum. 2-3 yıl önce Time[0] ile ilgili bir hata yakaladım. Geliştiriciler düzeltmiş gibi görünüyor, ancak zamanla tekrar ortaya çıktı. Sorun, bu hatayı açık bir şekilde yeniden oluşturmanın imkansız olmasıdır.
zorlaştırmıyorsa, işte konunun konusu - eski TF'den tarihin doğru yüklenmesi, işte gösterge: genç TF'nin çubuklarında eski TF'den "Masha çizmeniz gerekiyor", yaptı 5 dakika içinde, %98 tam olarak doğru çalışacak, bu kodda %2 "tuzaklar" hangi hatalara neden olacak?
MT4 için doğru kodla ilgileniyor
Geliştiricilerle konuştum, orada bir arkadaşım var, onlara nokta nokta anlatıyorum.
1 Saçmalık, istediğiniz zaman ve istediğiniz yerden arayabilirsiniz.
2 IsConnected, kodun herhangi bir yerinden çağrılabilir ve çalışır, ancak hata yığınına hiçbir şey yazmayan bir işlevdir, doğru/yanlış döndürür ve bu kadar. Bağlantı prosedürünün oldukça uzun (en az 1 sn) olduğu ve IsConnected'in oturum açma başlangıcında zaten tetiklendiği göz önüne alındığında, bağlantı durumunu kontrol etmek ve terminal koşullarında teklif akışının başlamasını beklemek gerekir. Başlat.
3 Bu işlevler ayrıca hata yığınına hiçbir şey yazmaz, çalışmanın sonucunu kendileri döndürür.
Neden 4066 alıyoruz, TimeCurrent işlevinden bir hataydı. Bir oturum açıldı, terminalin sunucudan istediği süre, bağlantının kalitesine bağlı olarak bu da biraz zaman alıyor, hızlı bir zamanlayıcımız olduğunu unutmayın. Sonra TimeCurrent'tan isteğimiz üzerine 4066 aldık. Ve sonra zamanımız oldu ve fonksiyonlarımız normal şekilde çalışmaya başladı; çalışmalarının sonucunda kendileri hata yığınını atlayarak bir hata veriyorlar.
Böyle bir durumda bir öneri olarak, hızlı bir zamanlayıcı ve terminalin başlatılması, sunucudan veri almaya başladığımızdan emin olun. Versiyonum biraz zor, OnCalculate'den veri alımının başlangıcı hakkında bir sinyal almak doğru olur.
1. Yazdıklarımı dikkatlice okuyun. İlk kez konuşmuyorum! Bir yerde arama engellemeden bahsetmedim!
Tüm iBarShift() , iTime() , SeriesInfo...() işlevlerinin TimeCurrent() zaman sorduğunu mu söylüyorsunuz?