Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 919
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östergeyi baştan sona hesaplarsınız (en son tarihsel verilerden en yeniye - güncele). Ve bu, bir zaman serisinde olduğu gibi indekslemeden bahseder. Bu, dizilerin buna göre indekslenmesi gerektiği anlamına gelir, sahip olduğunuz şey budur.
O zaman ne işe yaramaz?
evet, her şey MQL5'te MQL4'teki bağlantı noktamda bire bir çalışıyor ancak kodun ArraySetAsSeries() nedeniyle çirkin olduğunu görüyorum, bu yüzden soruyorum
işte her iki kod
Peki, bana bu göstergeyi MT5 için örnek olarak yazmayı öğret !!! - güzel değil kodum ve bir nokta! )))
PS MT5 altında göstergelerin nasıl yazılacağını hiç hatırlamıyorum, oturdum ve aptalca 40 dakika içinde yardımla yeniden yazdım, ancak sonuç ... C sınıfı için IMHO (((
evet, her şey MQL5'te MQL4'teki bağlantı noktamda bire bir çalışıyor ancak kodun ArraySetAsSeries() nedeniyle çirkin olduğunu görüyorum, bu yüzden soruyorum
işte her iki kod
Peki, bana bu göstergeyi MT5 için örnek olarak yazmayı öğret !!! - güzel değil kodum ve bir nokta! )))
Geriye doğru döngü yaparken, dizileri zaman serileri haline getirmelisiniz, aksi takdirde döngüdeki tamponların indekslenmesi gerekli verilerin indekslenmesi ile çakışmaz - gösterge tamponları dizisindeki döngünün indeksi baştan sona gider ve open[], high[], low[], close [] ve geri kalanı - sondan başa. Ya da döngüyü open[], high[], low[], close[] dizi indekslemesiyle ve daha karmaşık olan arabellek indekslemesiyle eşleştirmek için çevirin.
Bir alegori istiyorsanız ve daha açık olacaksa, işte size bir alegori:
Raylarda duruyorsunuz ve iki trene bakıyorsunuz. Ya aynı yöne giderler - her ikisi de soldan sağa (ArraySetAsSeries(array,true) - ilk tren ve limitten 0'a - ikinci tren),
ya birbirine doğru gidin - (ArraySetAsSeries(array,false) - sağdan sola - ilk tren ve sınırdan 0'a döngü - soldan sağa - ikinci tren)
Ve evet: Koda bakmadım - indirmek istemiyorum, kendim için kaydetmek (ve forumdan zaten çok fazla gereksiz kod var), birbirleriyle karşılaştırmak ...
Bunları bir mesaja kodlar halinde koymak sizin için daha kolaydı - biri ve ikincisi - o zaman neyin ne olduğunu hemen görürdünüz.
Peki, ya da daha karmaşık olan open[], high[], low[], close[] ve diğer dizilerin indekslenmesini eşleştirmek için döngüyü tersine çevirin.
Bugün bütün akşam dönüyorum, sabrım taştı artık (((
Sorunu anladığım kadarıyla:
- MT5'te, gösterge arabellekleri olarak atanan diziler, varsayılan olarak soldan sağa dizinlenir;
- MT5 zaman serisinde open[], high[], low[], close[] OnCalculate() 'den alınabilir her zaman sağdan sola indekslenir
- yani, 1. ve 2. paragraflara dayanarak, göstergeyi geçmişin sonundan sıfır çubuğuna kadar hesaplamak için yapmanız gerekenler:
a) veya arabellek dizisi indekslemesini yeniden atayın
b) veya dizi öğelerinin numaralandırılmasının soldan sağa ve diğerinde sağdan sola yeniden hesaplanacağı bir döngü yapın:
onlar. soruma güzel bir çözüm yok mu? seçenek a) - kaynaklarımda uygulandı, seçenek b) - Fazladan hesaplama yapmak için bir neden göremiyorum
kaynaklar:
MT5:
MT4:
Bugün bütün akşam dönüyorum, sabrım taştı artık (((
Sorunu anladığım kadarıyla:
- MT5'te, gösterge arabellekleri olarak atanan diziler, varsayılan olarak soldan sağa dizinlenir;
- MT5 zaman serisinde open[], high[], low[], close[] OnCalculate() 'den alınabilir her zaman sağdan sola indekslenir
- yani, 1. ve 2. paragraflara dayanarak, göstergeyi geçmişin sonundan sıfır çubuğuna kadar hesaplamak için yapmanız gerekenler:
a) veya arabellek dizisi indekslemesini yeniden atayın
b) veya dizi öğelerinin numaralandırılmasının soldan sağa ve diğerinde sağdan sola yeniden hesaplanacağı bir döngü yapın:
onlar. soruma güzel bir çözüm yok mu? seçenek a) - kaynaklarımda uygulandı, seçenek b) - Fazladan hesaplama yapmak için bir neden göremiyorum
Dizilerin tümü sağdan sola dizinlenir. Bu nedenle, döngüye soldan sağa tam olarak karşılık gelmek için (ve sınırdan 0'a - tam olarak soldan sağa), o zaman kullanılan tüm diziler için gerekli indekslemeyi ayarlamanız gerekir: OnInit()'te tamponlar , kullanılan timeseries - OnCalculate() içinde.
Veya mql4'ten mql5'e geçiş yaparken yapmak her zaman kolay olmayan 0'dan limite bir döngü yapın
Bu nedenle, bu durumda ArraySetAsSeries() seçeneği daha karlı.
Dizilerin tümü sağdan sola dizinlenir. Bu nedenle, döngüye soldan sağa tam olarak karşılık gelmek için (ve sınırdan 0'a - tam olarak soldan sağa), o zaman kullanılan tüm diziler için gerekli indekslemeyi ayarlamanız gerekir: OnInit()'te tamponlar , kullanılan timeseries - OnCalculate() içinde.
Veya mql4'ten mql5'e geçiş yaparken yapmak her zaman kolay olmayan 0'dan limite bir döngü yapın
Bu nedenle, bu durumda ArraySetAsSeries() seçeneği daha karlı.
bak, kodumdan tüm ArraySetAsSeries() öğesini kaldırdım (en üstte Init() ve OnCalculate() içinde ilk satırlarda ) ve döngüyü düzelttim:
for(i=0;i<limit;i++)
Teoride her şey uymalı! ama hayır! Grafikler farklı çıktı, anlayamadığım bu!
bak, kodumdan tüm ArraySetAsSeries() öğesini kaldırdım (en üstte Init() ve OnCalculate() içinde ilk satırlarda ) ve döngüyü düzelttim:
for(i=0;i<limit;i++)
Teoride her şey uymalı! ama hayır! Grafikler farklı çıktı, bir türlü anlayamadığım şey bu!
Daha zor olduğunu söylüyorum. Mantığın değişmesi gerekiyor. Sadece döngüyü tersine çevirmek yeterli değildir.
İşte küçük bir örnek: kodda
Buf_NTLine1[i+ 1 ])
dizilerin farklı indekslenmesi için i+1 indeksi nereye gidecek?
ve bundan çok var. IHighest() - başlat ve say... Bir indeksleme ve diğeriyle nerede başlar?
Vb. ...
ve bundan çok var. IHighest() - başlat ve say... Bir indeksleme ve diğeriyle nerede başlar?
Gözleme! kesinlikle! aferin!!! evet, eğlence burada!
evet... MT5'te çok fazla fark var, o kadar çok kontrol ve her türlü öngörü programcının kafasına düşüyor...
evet, işte başka bir soru, çok uzun zaman önce değil, MT5'te Init() içindeki her şeyin her zaman doğru başlatılmadığına dair bir mesaj gördüm, zaman dilimleri hazır olmasa bile Init()'in sona erebileceğine bağlı görünüyor
dün birkaç kez bir hata gördüm: MT5 altındaki bu gösterge TF tarafından değiştirilirse, bazen gösterge arabellekleri boş olmayabilir - içindeki her öğeye belirli bir değer atamazsanız eski değerler kalır. OnCalculate() içindeki gösterge dizisi, ArrayInitialize'ı Init() (dizi, 0.0) içine eklemeye çalıştım - çalışıyor ya da çalışmıyor..
doğru anladığım kadarıyla:
- MT5'te, Init() içinde başlatılırken , gösterge arabellekleri otomatik olarak başlatılmıyor mu? (MT4'te arabelleklerde kalan bir şey olduğunu hatırlamıyorum)
- Init() 'teki MT5'te, geçmiş yüklenmemişse arabellek dizilerinin boyutları bilinmeyebilir, bu nedenle ArrayInitialize(arr, 0.0) da arabellekleri her zaman doğru şekilde başlatmıyor mu?
Gözleme! kesinlikle! aferin!!! evet, eğlence burada!
evet... MT5'te çok fazla fark var, o kadar çok kontrol ve her türlü öngörü programcının kafasına düşüyor...
evet, işte başka bir soru, çok uzun zaman önce değil, MT5'te Init() içindeki her şeyin her zaman doğru başlatılmadığına dair bir mesaj gördüm, zaman dilimleri hazır olmasa bile Init()'in sona erebileceğine bağlı görünüyor
dün birkaç kez bir hata gördüm: MT5 altındaki bu gösterge TF tarafından değiştirilirse, bazen gösterge arabellekleri boş olmayabilir - içindeki her öğeye belirli bir değer atamazsanız eski değerler kalır. OnCalculate() içindeki gösterge dizisi, ArrayInitialize'ı Init() (dizi, 0.0) içine eklemeye çalıştım - çalışıyor ya da çalışmıyor..
doğru anladığım kadarıyla:
- MT5'te, Init() içinde başlatılırken , gösterge arabellekleri otomatik olarak başlatılmıyor mu? (MT4'te arabelleklerde kalan bir şey olduğunu hatırlamıyorum)
- Init() 'teki MT5'te, geçmiş yüklenmemişse arabellek dizilerinin boyutları bilinmeyebilir, bu nedenle ArrayInitialize(arr, 0.0) da arabellekleri her zaman doğru şekilde başlatmıyor mu?
Mantık pek umurlarında değildi.
Mantık pek umurlarında değildi.
Bu yüzden daha doğru olacaktır: max/min fiyatları için giriş noktaları belirlemek için hiçbir şey yoktur - açılış fiyatı için daha iyidir.
Ve çizgileri kaldırmanız gerekiyor - neden çizelgedeler? Sadece onları sürüklemeyi bırakırsan?
tipsiz beyan
Dahil etme dosyasını derlersem, hata olmaz. Bu içerme dosyasını dahil ettiğim ana program dosyasını derlersem, tür hatasız bildirim. Dahil etme dosyası korumalı CSomeClass *nesnesinde bildirilen nesneyi görmez. Dahil edilen dosya, #include "SomeClass.mqh" yönergesini içerir. Ve ana dosyada, dahil edilen dosya sınıfının bir nesnesi oluşturulur ve yöntemlerden biri çağrılır.