MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1188
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
Genel olarak, cevabınıza bakılırsa, programın nasıl çalıştığını gerçekten anlamıyorsunuz. Bu aptalca bir soru gibi görünüyor. Evet, önceki yorumcunun durduğunu düşündüğü gibi. Sadece diğer dillerde programlama deneyiminden yola çıkarak, vücudunu bir döngü içinde çalıştırdığını ve bir olay geldiğinde onun içine daldığını düşünüyorum. Program gövdesini bir döngüde çalıştırıyorsa, bu, programın neden bu şekilde yazıldığını açıklar.
"New tick" olayı geldiğinde, program OnTick() işleyicisinde başlar, sonuna kadar çalışır ve durur. Yeni bir kene gelişiyle, her şey baştan tekrar eder. Programın yürütülmesi sırasında bir sonraki onay işareti geldiyse ve program bir önceki onay işaretini işlemeyi henüz tamamlamadıysa (hala çalışıyorsa), bu işaret atlanır.
MQL programları döngülü değildir. Üç giriş noktası vardır - OnInit(), OnDeinit() ve OnTick()
Başlangıçta OnInit() yürütülür, ardından onay geldiğinde OnTick() ve tamamlandığında OnDeinit() yürütülür.
Başka işleyiciler de var. Ancak, birinden onu burada kopyalamasını istemektense , yardımı açmanız sizin için daha iyidir.
Merhaba. Göstergem üzerinde çalışırken, terminali yeniden başlatırken bir kilitlenme buldum. Bu hatayı temel alarak, test etmek için küçük bir kaynak yaptım:
Bu örnek çizelgeye atılırsa (veya bu, sistem başlatıldıktan sonra terminalin ilk açılışıysa), o zaman her şey yolunda gider. Günlük şunları söylüyor:
2020.06.24 21:05:50.773 Loader::Loader symbol: EURUSD timeframe: PERIOD_H1
2020.06.24 21:05:50.773 Yükleyici::Yükleyici çubukları: 140433
2020.06.24 21:05:50.773 Yükleyici::YükleyiciHatası: 0
2020.06.24 21:05:50.773 Yükleyici::Yükleyici çubukları (2): 140433
Ancak bu göstergeyle terminali yeniden başlatırsam bir hata alıyorum:
2020.06.24 21:07:34.963 Yükleyici::Yükleyici sembolü: EURUSD zaman çerçevesi: PERIOD_H1
2020.06.24 21:07:34.963 Yükleyici::Yükleyici çubukları: 0
2020.06.24 21:07:34.963 Yükleyici::YükleyiciHatası: 4401
2020.06.24 21:07:34.964 Yükleyici::Yükleyici çubukları (2): 140433
Sembol ve zaman çerçevesi normal olarak başlatıldı
2020.06.24 21:07:34.963 Yükleyici::Yükleyici sembolü: EURUSD zaman çerçevesi: PERIOD_H1
Ama iBars(sembol, timeframe) nedense 0 veriyor
2020.06.24 21:07:34.963 Yükleyici::Yükleyici çubukları: 0
Bu, 4401 hatasıyla sonuçlanır.
Ancak iBars(Symbol(), Period()) harika çalışıyor.
2020.06.24 21:07:34.964 Yükleyici::Yükleyici çubukları (2): 140433
Günlük mesajlarına göre symbol = Symbol() ve timeframe = Period() olmasına rağmen (terminali yeniden başlatırken gecikme sırasında bile). Günlüğe göre fonksiyonlardaki parametreler aynıysa iBars(Symbol(), Period()) düzgün çalışırken, kesinlikle doğru sembol ve zaman çerçevesi ile iBars(sembol, zaman çerçevesi) nasıl sıfır döndürebilir?
MetaQuotes Demo'da demo MT4 hesabı nasıl açılır? Eskiden sorunsuz çalışıyordu, şimdi diyaloğun son sayfasında şöyle yazıyor: Kayıt, Biraz bekleyin lütfen ve bu durumda sonsuza kadar boşta kalır, oturum açma ve şifre alanları boş kalır. Günlükte mesaj yok. Hem "demo" hem de "gerçek" ve farklı hesap türlerini denedim.
UPD. Bir komisyoncunun demosunu denedim - aynı çöp.
"New tick" olayı geldiğinde, program OnTick() işleyicisinde başlar, sonuna kadar çalışır ve durur. Yeni bir kene gelişiyle, her şey baştan tekrar eder. Programın yürütülmesi sırasında bir sonraki onay işareti geldiyse ve program bir önceki onay işaretini henüz tamamlamadıysa (hala çalışıyorsa), bu işaret atlanır.
MQL programları döngülü değildir. Üç giriş noktası vardır - OnInit(), OnDeinit() ve OnTick()
Başlangıçta OnInit() yürütülür, ardından onay geldiğinde OnTick() ve tamamlandığında OnDeinit() yürütülür.
Başka işleyiciler de var. Ancak, birinden onu burada kopyalamasını istemektense , yardımı açmanız sizin için daha iyidir.
Teşekkür ederim. Evet, anlıyorum, sadece fonksiyon programın gövdesinde yazıyor. Belki bir yerde aramasını kaçırdım.
Bahsettiğiniz şeyi nasıl görebiliriz? Örnek vermek.
Bahsettiğiniz şeyi nasıl görebiliriz? Örnek vermek.
Teşekkür ederim. Evet, anlıyorum, sadece fonksiyon programın gövdesinde yazıyor. Belki bir yerde aramasını kaçırdım.
mql4'te fonksiyonlar herhangi bir sırayla yazılır, tamburda yukarı ve aşağı, er ya da geç çalışıyor gibi görünebilir. C++'da böyle bir şey yok, tüm fonksiyonlar sadece yazma sırasına göre çalışabilir ve eğer onu çağırmak istiyorsanız, o zaman çağrı sitesinden önce tanımlanmalıdır, aksi takdirde program çöker. Kişi, fonksiyonları farklı şekillerde yazabileceğim şekilde nasıl yapılacağını gösterdi, ancak C++ 'da nasıl yapıldığını hatırlamıyorum ve bunun pek önemi yok.
Selamlar. Bana yardım et lütfen. Bir sorum var. doğru mu anladım. Programın baştan sona çalıştığı, ancak bir tik gibi bir olay geldiğinde kesintiye uğradığı, ontick işlevinin yürütmeye başladığı, ardından yürütmeyi bitirdiği ve programın yeniden baştan yürütüldüğü mü? Bu soru bununla ilgili, nereye yazmalıyım, örneğin işlem lotunun büyüklüğünü? program gövdesinde mi yoksa ontick işlevinde mi?
Örnek olarak programın gövdesinde lot hesaplamanın yapıldığı terminalde bulunan resmi bota bakıyorum ve nedenini anlamadım.
Benim lotum böyle hesaplanıyor
danışmanın başında durur ... ve kodun en sonuna koyar
OnTick işlevinde Lots değişkeni çağrıldığında, EA bulur ve yeniden hesaplar.
@Artyom Trishkin
Bu konunun moderatörü müsünüz?