Benim günlüğümde böyle bir uyarı yok ama TF değiştirdiğimde bu gösterge kalkıyor.
Henüz düzeltemiyorum.
SCFX
2014.05.18 08:41:31.080 Özel gösterge H_889_boring GBPUSD,H1: kaldırıldı 2014.05.18 08:41:25.441 Özel gösterge H_889_boring GBPUSD,H4: başarıyla yüklendi
Başkalarının sizin için yapmasını sağlarsanız hiçbir şey öğrenemezsiniz, tek yol bunu kendiniz yapmaktır, böylece anlarsınız, bunu kendiniz yapmanın tek yolu her bir kod satırını incelemek, parçalamak ve çözmektir. tam olarak ne yapıyor ve bunu yapmanın birkaç yolu var.
for ( int i= 1 ;i<=limit ;i++)
{ if ( MathAbs (Close[i]-Open[i])/(High[i]-Low[i])< 0.50
) // what is this parentheses doing here ? How can you expect to write code that works if you are this sloppy about it ?
boring[i]=Close[i];
}
Bunlar, sorunun nedenini bulmanıza yardımcı olacak yapabileceğiniz şeylerdir.
Dergi sekmesine baktığını söyledin, yanındaki uzmanlar sekmesine baktın mı?
Geçen hafta size kodunun dizi aralığının dışına çıkmasına neden olduğunu söylemiştim, bunun ne anlama geldiğini öğrenmek için buna baktınız mı?
Meta düzenleyicide, kodunuzda hata ayıklamak için onu nasıl kullanacağınızı öğrenmeyi deneyebileceğiniz bir hata ayıklayıcı var.
Kod çalışırken değişkenlerinizin değerlerinin ne olduğunu kontrol edebilmek için Print() işlevini kullanabilirsiniz.
Uzmanlar sekmesine tıklamış olsaydınız, göstergenizin bu satırda sıfır bölme yaptığını, değişen zaman dilimlerinin bununla hiçbir ilgisi olmadığını söylerdi.
if ( MathAbs (Close[i]-Open[i])/(High[i]-Low[i])< 0.50
Bu, bu Yüksek[i]-Düşük[i]'nin bir nedenden dolayı sıfır olduğu anlamına gelmelidir. Grafikteki göstergeye bakarsanız, göstergenin bazı değerlerini çizdiğini ve ardından yalnızca bir işaretin olduğu bir çubukta durduğunu görebilirsiniz. Yalnızca bir onay işareti varsa yüksek[i] == düşük[i] bu, sıfır bölmeye neden olur
Şimdi yüksek[i]-düşük[i] sıfır ise kullanılmadığından emin olun.
int limit=rates_total-prev_calculated;
if (limit<= 0 ) limit= 300 ;
//---for ( int i= 1 ;i<=limit ;i++)
{
if (High[i] - Low[i] == 0 ) continue ;// --------------- skip this barif ( MathAbs (Close[i]-Open[i])/(High[i]-Low[i])< 0.50 )
{boring[i]=Close[i];
}}
//--- return value of prev_calculated for next callreturn (rates_total);
}
Şimdi, uzmanlar sekmesinin size kodun artık sıfır bölmediğini, ancak bu satırda dizi aralık dışı hatası ürettiğini söylediğini göreceksiniz.
if (high[i] - low[i] == 0 )
Peki, döngüyü test etmek için tüm hesaplamaları ve koşulları çıkarırsanız ne olur?
int limit=rates_total-prev_calculated;
if (limit<= 0 ) limit= 300 ;
//---for ( int i= 1 ;i<=limit ;i++)
{
boring[i]=Close[i];
}
//--- return value of prev_calculated for next callreturn (rates_total);
}
Şimdi uzmanlar sekmesi raporları yine aralık dışında, bu sefer bu satırda:
boring[i]=Close[i];
Artık, döngüde bir fiyat dizisi her kullanıldığında kodunuzun dizi aralığının dışına çıkmasına neden olduğunu biliyorsunuz. Öyleyse döngüde neyin yanlış olduğunu ve Close[i], Low[i], High[i]'nin neden aralık dışında olduğunu anlayın. Göstergenin grafiğin sonuna kadar çizdiğini görebilirsiniz, bu nedenle hata sonunda, en yüksek dizi dizinlerinde olmalıdır.
int limit=rates_total-prev_calculated; // what is the value of limit in this calculation when prev_calulated == 0 ?
if (limit<= 0 ) limit= 300 ;
//---for ( int i= 1 ;i<=limit;i++) // how does the value of limit compare with the highest available Close[] array index ?
İlk önce doğru çalışan bir döngünün nasıl kodlanacağını öğrenmeden bir gösterge oluşturmaya çalışıyorsunuz. Bunun nasıl yapılacağına dair birçok örnek var. Dahil edilen göstergelerin koduna bakın ve tam olarak nasıl çalıştıklarını anlayana kadar onlarla deney yapın, ardından hesaplamaları gerçekleştirmeye çalışmadan önce düzgün çalışan basit bir tek çizgi çizmek için bir gösterge oluşturmaya çalışın.
Üzgünüm, sizi yanlış yönlendirdim, özür dilerim, gösterge şu şekilde kodlanabilir:
int limit = - 1 ;
if ( prev_calculated == 0 ) limit = rates_total - 3000 ;// will calculate 3000 Barsif ( prev_calculated > 0 ) limit = rates_total-prev_calculated;
for ( int i= limit; i>=0; i--)
{
if (High[i] - Low[i] == 0 ) continue ;// --------------- skip this bar
// Please test it, check if it's OK;
// Put the indicator in a backtest EA, say MACDSample, to check it
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.
Açıklamanız için teşekkürler.
Şimdi daha iyi görüyorum.
SCFX
Merhaba,
Bu çılgın hatayla kafamı kaşıdım.
Yine de zaman dilimini değiştirdiğimde 4 satırlık kodun bu basit göstergesi kayboluyor.
Çılgınca, burada yayınlanan önerileri zaten uyguladım ama yine de başarısız oldum.
Ben çok kötü hissediyorum...
Lütfen bana yardım et.
Çok teşekkürler,
SCFX
Merhaba,
Bu çılgın hatayla kafamı kaşıdım.
Yine de zaman dilimini değiştirdiğimde 4 satırlık kodun bu basit göstergesi kayboluyor.
Çılgınca, burada yayınlanan önerileri zaten uyguladım ama yine de başarısız oldum.
Ben çok kötü hissediyorum...
Lütfen bana yardım et.
Çok teşekkürler,
SCFX
Cevabınız için teşekkürler.
Benim günlüğümde böyle bir uyarı yok ama TF değiştirdiğimde bu gösterge kalkıyor.
Henüz düzeltemiyorum.
SCFX
2014.05.18 08:41:31.080 Özel gösterge H_889_boring GBPUSD,H1: kaldırıldı
2014.05.18 08:41:25.441 Özel gösterge H_889_boring GBPUSD,H4: başarıyla yüklendi
Henüz düzeltemiyorum.
SCFX
Bunun nedeni çok fazla çabalamamanızdır.
Başkalarının sizin için yapmasını sağlarsanız hiçbir şey öğrenemezsiniz, tek yol bunu kendiniz yapmaktır, böylece anlarsınız, bunu kendiniz yapmanın tek yolu her bir kod satırını incelemek, parçalamak ve çözmektir. tam olarak ne yapıyor ve bunu yapmanın birkaç yolu var.
Bunlar, sorunun nedenini bulmanıza yardımcı olacak yapabileceğiniz şeylerdir.
Uzmanlar sekmesine tıklamış olsaydınız, göstergenizin bu satırda sıfır bölme yaptığını, değişen zaman dilimlerinin bununla hiçbir ilgisi olmadığını söylerdi.
Bu, bu Yüksek[i]-Düşük[i]'nin bir nedenden dolayı sıfır olduğu anlamına gelmelidir. Grafikteki göstergeye bakarsanız, göstergenin bazı değerlerini çizdiğini ve ardından yalnızca bir işaretin olduğu bir çubukta durduğunu görebilirsiniz. Yalnızca bir onay işareti varsa yüksek[i] == düşük[i] bu, sıfır bölmeye neden olur
Şimdi yüksek[i]-düşük[i] sıfır ise kullanılmadığından emin olun.
Şimdi, uzmanlar sekmesinin size kodun artık sıfır bölmediğini, ancak bu satırda dizi aralık dışı hatası ürettiğini söylediğini göreceksiniz.
if (high[i] - low[i] == 0 )Peki, döngüyü test etmek için tüm hesaplamaları ve koşulları çıkarırsanız ne olur?
Şimdi uzmanlar sekmesi raporları yine aralık dışında, bu sefer bu satırda:
Artık, döngüde bir fiyat dizisi her kullanıldığında kodunuzun dizi aralığının dışına çıkmasına neden olduğunu biliyorsunuz. Öyleyse döngüde neyin yanlış olduğunu ve Close[i], Low[i], High[i]'nin neden aralık dışında olduğunu anlayın. Göstergenin grafiğin sonuna kadar çizdiğini görebilirsiniz, bu nedenle hata sonunda, en yüksek dizi dizinlerinde olmalıdır.
İlk önce doğru çalışan bir döngünün nasıl kodlanacağını öğrenmeden bir gösterge oluşturmaya çalışıyorsunuz. Bunun nasıl yapılacağına dair birçok örnek var. Dahil edilen göstergelerin koduna bakın ve tam olarak nasıl çalıştıklarını anlayana kadar onlarla deney yapın, ardından hesaplamaları gerçekleştirmeye çalışmadan önce düzgün çalışan basit bir tek çizgi çizmek için bir gösterge oluşturmaya çalışın.
@ scfx
Düzeltebilecek tek kişi sensin. Veya https://www.mql5.com/en/job adresine gidin.
ve işi orada yayınlayın.
...
Lütfen SDC, haklı olsanız bile bu kadar sert olmanıza gerek yok.
Lütfen SDC, haklı olsanız bile bu kadar sert olmanıza gerek yok.
lol yazımı biraz değiştirdim ;)
Üzgünüm, sizi yanlış yönlendirdim, özür dilerim, gösterge şu şekilde kodlanabilir:
Grafikte 3000'den az çubuk varsa, yine de aralık dışında olacaktır.