Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 503

 
Vladimir Fionov :
Bir döviz çifti için, bir limit belirlerseniz, her şey çalışır, ancak bir nedenden dolayı, bir zaman dilimi için çalışmaz, h1'i koysanız bile, gösterge çalışmaz.

https://docs.mql4.com/en/chart_operations/periodwindow

https://docs.mql4.com/en/constants/chartconstants/enum_timeframes

Dönüş değeri Geçerli grafiğin periyodu (dakika olarak).

 if ( Period () != 60 )   return (- 1 ); // для H1

Deneyin, işe yarayabilir.

 if ( Period () != PERIOD_H1 )   return (- 1 );

Veya alıntıları kaldırın.

Period - Документация на MQL4
  • docs.mql4.com
Period - Документация на MQL4
 
Vladimir Zubov :

https://docs.mql4.com/en/chart_operations/periodwindow

https://docs.mql4.com/en/constants/chartconstants/enum_timeframes

Dönüş değeri Geçerli grafiğin periyodu (dakika olarak).

Deneyin, işe yarayabilir.

Çok teşekkürler, işe yaradı!!!
 
Başka bir soru, #property katı olduğunda başlangıçta eklerken gösterge, 'Gösterge adı' (100,41) içinde aralık dışında bir hata dizisi verir, bununla nasıl başa çıkılır

 
Vladimir Fionov :
Başka bir soru, #property katı olduğunda başlangıçta eklerken gösterge, 'Gösterge adı' (100,41) içinde aralık dışında bir hata dizisi verir, bununla nasıl başa çıkılır

Diziyi sınırların dışında düzeltmeniz gerekiyor. Kodunuzdaki sorunun yerelleştirilmesi: satır 100, karakter 42 konumunda.
 
Vladimir Fionov :

ve burada yanlış olan ne?

  1. Kodu foruma doğru şekilde yapıştırın
  2. " ema[] " dizisi için sınırların dışında hatasını düzeltmeniz gerekiyor. Muhtemelen " limit " değişkenini yanlış hesaplıyorsunuz.
 
Karputov Vladimir :
  1. Kodu foruma doğru şekilde yapıştırın
  2. " ema[] " dizisi için sınırların dışında hatasını düzeltmeniz gerekiyor. Muhtemelen " limit " değişkenini yanlış hesaplıyorsunuz.
Üzgünüm, kodu eklemeyi bilmiyordum, ancak kodun kendisi hakkında, #property strict eklediğinizde bu neden oluyor ve onsuz her şey çalışıyor
 
Vladimir Fionov :
Üzgünüm, kodu eklemeyi bilmiyordum, ancak kodun kendisi hakkında, #property strict eklediğinizde bu neden oluyor ve onsuz her şey çalışıyor

Yardım MetaEditor'e baktı mı?

İşlevlerle çalışma, değişkenlerin kapsamı ve yerel dizilerdeki belleğin serbest bırakılması da değişti. Oldukça fazla değişiklik olduğu için, eski MQL4 programlarını yazma yaklaşımıyla maksimum uyumluluğu sağlamak için yeni bir #property katı özelliğinin getirilmesine karar verildi. MQL4 Sihirbazını kullanarak yeni bir MQL4 programı oluştururken, bu özellik her zaman şablona eklenir.

ve ilerisi:

Derleyiciler arasındaki farklar tablosu:

Eski MQL4 derleyicisi

Yeni MQL4 derleyicisi

#property strict ile yeni MQL4 derleyicisi

init(), start(), deinit() giriş noktaları herhangi bir parametreye ve herhangi bir dönüş türüne sahip olabilir

init(), start(), deinit(), uyumluluk için bırakıldı,

ve yeni OnInit() , OnStart() , OnCalculate() , OnTick() , OnTimer() , OnChartEvent() , OnTester() , OnDeinit() imzalarıyla tam olarak eşleşmelidir

Aynı

init() işlevinden gelen dönüş sonucu, yürütme alt sistemi tarafından hiçbir şekilde ayrıştırılmaz

init() ve OnInit() işlevlerinden gelen dönüş sonucu, yürütme alt sistemi tarafından hiçbir şekilde analiz edilmez.

OnInit()'ten sıfır olmayan bir değer döndürüldüğünde, Expert Advisor veya göstergenin yürütülmesi sonlandırılır, program kaldırılır.

Özel karakterler ve noktalar dahil hemen hemen tüm değişken adları (ayrılmış kelimeler hariç)

Değişken adlarında özel karakterler veya noktalar olamaz.

Ayrılmış kelimelerin listesi genişletildi, bu nedenle kısa, uzun, const gibi yaygın kelimeler isim olamaz.

Aynı

Değişken kapsam - bildirimden (iç içe blokta bile) işlevin sonuna kadar

Aynı

Bir değişkenin kapsamı, bildirimden değişkenin bildirildiği bloğun sonuna kadardır.

Tüm değişkenlerin (hem global hem de yerel) sıfırlarla örtük başlatılması

Aynı

Yalnızca global değişkenlerin başlatılması. Yerel değişkenlerden yalnızca dizeler örtük olarak başlatılır

Bir işlevden çıkarken yerel diziler serbest bırakılmaz

İşlev çıktığında yerel diziler serbest bırakılır

{} bloğundan çıkarken yerel diziler serbest bırakılır

"Dizi aralık dışında" hatası , önemli bir hatayla sonuçlanmaz*

Aynı. Bu hatanın kritik olduğu yapı ve sınıf dizileri dışında

"Array out of range" kritik bir hatadır ve programın durmasına neden olur

Yapı veya sınıf yok

Yapılar ve sınıflar vardır. Ek veri türleri eklendi

Aynı

Dizeler tek bayttır.

tarihsaat - 32 bit tam sayı

Önceden tanımlanmış değişken Hacim double türündedir

Dizeler unicode'dur.

tarihsaat - 64 bit tam sayı

Önceden tanımlanmış değişken Hacim türü uzun

Aynı

ArrayCopyRates() , double[][6] dizisine sanal bir kopya yapar

ArrayCopyRates() , MqlRates[] dizisine sanal bir kopya gerçekleştirir. Uyumluluk için double[][6] dizisine kopyalama kalır, ancak bu kopyalama sanal değil gerçektir.

Aynı

İşlevler, bir türe sahip olsalar bile bir değer döndürmeyebilir. Bunu yapmak için, işlevin sonunda derleyici otomatik olarak return (0) koyar.

Aynı

Herhangi bir türdeki işlevler her zaman bir değer döndürmelidir

Eşzamanlı olarak açılan dosya sayısı - 32

Aynı anda açılan dosya sayısı - 64

Aynı

Dosyalar her zaman paylaşılan modda açılır**

Paylaşım modu, FILE_SHARE_READ ve/veya FILE_SHARE_WRITE ile açıkça belirtilmelidir.

Aynı

Komut dosyaları için, giriş parametreleri penceresinde harici değişkenlerin adları gösterilir

show_inputs modundaki komut dosyaları için, giriş parametreleri penceresinde harici ve giriş değişkenlerinin adları gösterilir

show_inputs modundaki komut dosyaları için, giriş parametreleri penceresinde harici ve giriş değişken adları yerine satır yorumları gösterilir

* "Array out of range" hatasına özellikle dikkat etmelisiniz - bir grafik üzerinde çalıştırıldığında birçok eski özel gösterge bu hatayı yeni derleyicide katı modda verecektir. Nedeni bulmak ve ortadan kaldırmak için tavsiye edilir.

** Yeni MQL4 ve MQL5'te eski MQL4'te olmayan FILE_SHARE_READ ve FILE_SHARE_WRITE bayrakları dosya paylaşım modundan sorumludur.

Препроцессор - Документация на MQL4
  • docs.mql4.com
Препроцессор - Документация на MQL4
 
Vladimir Fionov :
söyle bana burada sorun ne?
   int idx;
   int counted = IndicatorCounted();
   if (counted < 0 ) return (- 1 );
   if (counted > 0 ) counted--;
   int limit = Bars - counted;
   if (counted == 0 ) limit-= 1 ;
Bu satırı eklemeyi deneyin.
 
Vladimir Fionov :

Aldıysam kusura bakmayın ama şimdi bu hatayı veriyor

39 pozisyon

Aynı hata, dizi aralık dışında mı?
 
Vladimir Zubov :
Aynı hata, dizi aralık dışında mı?
EVET