Bana neden Mass[ i ]= Mass[ i+1]+A; formülünü kullanarak bir döngü içinde bir gösterge dizisini doldurmaya çalıştığımda, A'nın bir değişken olduğu yerde, derlemenin hatasız gittiğini, ancak pencereye katıldığımda array out of range (dizi aralık dışı) mesajını aldığımı söyleyebilir misiniz?
Çünkü döngü son girişin yapılacağı hücre dikkate alınarak yapılmalıdır. Mass[] dizisinin boyutu diyelim ki 10 ise, döngü sıfırdan 9'a kadar (bu dizinin son hücresinin indisidir), sonra i==9'da 9+1 indisine sahip hücreye yazmaya çalışırsınız. Dizide 10. hücre yoktur. Yani dizinin dışında bir çıktı alırsınız.
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
Nicholas!
Bana neden Mass[ i ]= Mass[ i+1]+A; formülünü kullanarak bir döngü içinde bir gösterge dizisini doldurmaya çalıştığımda, A'nın bir değişken olduğu yerde, derlemenin hatasız gittiğini, ancak pencereye katıldığımda array out of range (dizi aralık dışı) mesajını aldığımı söyleyebilir misiniz?
Nikolay, teşekkür ederim. Bu harika bir öğretici!
Ama sanırım bu değişken
kodda her zaman sıfır değerinde olacaktır. Hesaplama için önemli mi?
Nikolay, teşekkür ederim. Bu harika bir öğretici!
Ama sanırım bu değişken
kodda her zaman sıfır değerinde olacaktır. Hesaplama için önemli mi?
"begin"in değeri, hangi göstergeye uygulandığına bağlı olarak farklı olacaktır. Örneğin RSI'a uygularsanız,"begin" 14 olacaktır.
Eğer ilk defa derlemeye çalışırsanız, tampon hatası alabilirsiniz. Bu yüzden lütfen tampon miktarını değiştirin:
#property indicator_buffers 2
Daha sonra, 1 (bir) tampona geri dönebilirsiniz:
#property indicator_buffers 1
Anlamıyorum. Varsayalım ki
rates_total == MA_Period - 1
ve bu fonksiyonun ilk çağrısıdır, bu yüzden
prev_calculated == 0
ve ayrıca begin == 0
o zaman ilk if(rates_total < MA_Period - 1 + begin) içindeki koşul false olarak değerlendirilir
sonra
first = MA_Period - 1 çalıştırılacaktır
ancak daha sonra HESAPLAMA YOK çünkü ilk for döngüsündeki koşul yanlış olarak değerlendiriliyor.
Bence ilk if koşulu şöyle olmalı
if( rates_total < MA_Period + begin )
Burada bir şey mi kaçırıyorum?
Ve bir tane daha. Göstergeyi prev_calculated kez hesapladıysam, neden ( prev_calculated - 1) numaralı çubuktan hesaplamaya başlamalıyım?
Örneğin, göstergeyi 0, 1, 2, 3 ve 4 numaralı çubuklar için 5 kez hesapladım. Bunu 4. çubukta tekrar hesaplamama gerek yok. Bar 5'ten devam etmeliyim.
Ve bir tane daha. Eğer prev_calculated göstergesini zaten hesapladıysam, neden hesaplamaya ( prev_calculated - 1) sayısına sahip çubuktan başlamalıyım?
Örneğin, göstergeyi 0, 1, 2, 3 ve 4 numaralı çubuklar için 5 kez hesapladım. Bunu 4. çubukta tekrar hesaplamama gerek yok. Bar 5'ten devam etmeliyim.