Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 116
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret 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
Yani, prensipte, hata muhtemelen, gösterge tanıtıcımın OnTick işlevinde yaratılmış olması ve verilerin hemen aynı tik üzerine kopyalanmasıydı. Gece aklıma geldi, şimdi tutamaçları OnInit işlevine aktarmaya çalışacağım.
Yardım etmedi. İşte kod şimdi
Günlük, bunun gibi mesajları gösterir
2013.04.13 15:21:31 2010.01.04 00:00:01 6.187448020344988e-005 0
2013.04.13 15:21:31 2010.01.04 00:00:01 6.187448020344988e-005 0
2013.04.13 15:21:31 2010.01.04 00:00:01 6.187448020344988e-005 0
Her zaman böyle. Kopyalarken hata yok.
Ancak, başarılı bir şekilde tanıtıcı oluşturma kontrolünüz , göstergelerin başarılı bir şekilde hesaplanması ve kopyalama kontrolü için herhangi bir kontrolünüz yok. Kendi başına, tanıtıcı başlatmayı OnInit()'e aktarma fikri doğrudur.
Siz hala buradasınız: line Print (MacdArray[ 0 ]); OnTick () gövdesinin en başına koyun - arabellekleri kopyalamadan önce dizide hangi çöp değerinin bulunduğunu görmek için.
Ekleyeceğim. GetLastError () işlevinin kendisinden sonra kullanılması elbette bir programlama stili özelliği olabilir. Ama yine de Dizin'deki örneği kontrol edip dikkate alırdım. Yanılmıyorsam GetLastError ()'un değeri her zaman sıfır değildir, bu da işlevin başarılı olduğu anlamına gelir.
Ancak, başarılı bir şekilde tanıtıcı oluşturma kontrolünüz, göstergelerin başarılı bir şekilde hesaplanması ve kopyalama kontrolü için herhangi bir kontrolünüz yok. Kendi başına, tanıtıcı başlatmayı OnInit()'e aktarma fikri doğrudur.
tol64 :
Ama sadece ilk kez. Programın başka bir yerinde bazı tanıtıcıların geçersiz olduğu ortaya çıkarsa, tekrar almayı denemeniz gerekir. Bu nedenle OnInit()'te tanıtıcı alma kodunu kaldırmanın sorunu tamamen çözeceği ve %100 doğru olduğu söylenemez. ))
CopyBuffer işlevi tarafından ne kadar veri kopyalandığını kontrol ettim, her zaman 1 yazıyor. Ve herhangi bir hata yok, ancak veriler hala doğru değil.
Test cihazında bu kodun bu sonucu var:
//---
Testten önce yaptığım tek şey, gösterge değerlerini günlüğe çıkarmadan önce basitçe dönüştürmek oldu:
Tanıtıcı başlatmayı OnTick()'ten OnInit()'e taşıma fikrinin kendi içinde doğru olmadığını mı söylüyorsunuz?
Test cihazında bu kodun bu sonucu var:
//---
Testten önce yaptığım tek şey, gösterge değerlerini günlüğe çıkarmadan önce basitçe dönüştürmek oldu:
Ve "eğer" olmadan? Ve bu özel durumla ilgili olarak? İnsanlar için, her tik üzerinde OnTick işlevinde gösterge tutamacı oluşturuldu ve veriler aynı tik üzerinde hemen kopyalandı. Onlar. geçerlilik veya geçersizlik kontrolü yapılmadan, her seferinde aynı göstergenin tanıtıcısı yeniden istendi. Bu arka plana karşı, tanıtıcıların başlatılmasını OnTick()'ten OnInit()'e aktarma fikrinin kendi içinde doğru olmadığını savunmaya devam edeceksiniz.
not. Görünüşe göre, kişiye yardım ettin, bu yüzden soru çözülmüş sayılabilir.