![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
Merhaba SDC,
Anladım. Çok teşekkürler.
100 bar varsa toplam oranlar 0'dan 99'a kadar başlar.
Başlangıçta, pre_cal =0 --> limit=100 bar - 0 =100.
for(int=1 to limit=100; I++)
en sonunda, I=100(indeks değeri) ve böyle bir çubuk 100 yok.
Bu nedenle maksimum I=99 yapmak için limit -1 koydum;
Daha iyi bir yol olup olmadığını merak ediyorum.
Üstelik kafamı karıştıran şey, diğer birçok göstergede aynı yaklaşımı kullanmam ve böyle bir menzil dışı problem olmaması.
Ayrıca, Uzman sekmesi için teşekkür ederiz.
SCFX
Üstelik kafamı karıştıran şey, diğer birçok göstergede aynı yaklaşımı kullanmam ve böyle bir menzil dışı problem olmaması.
B600 menzil dışına çıkmadan önce kritik bir hata değildi
Bu nedenle maksimum I=99 yapmak için limit -1 koydum;
Daha iyi bir yol olup olmadığını merak ediyorum.
Kodunuz şimdi grafik geçmişini 1. çubuktan hatasız olarak çizecek, ancak yeni çubuklar için çizim yapmayacaktır. Ne yapmak istediğinize bağlı olarak kodlamanın birçok yolu vardır. MQ kodlayıcılarının bunu nasıl yaptığını görmek için meta düzenleyicide bulunan göstergelere bakın. Kodlarını okuyabildiğinizde ve her satırın nedenini anladığınızda, gösterge oluştururken sorun yaşamayacaksınız.
Şimdi SDC'yi aldım.
Kişisel olarak konuşursak, belgeyi okuduğumda hayal etmek zor. Yine de neden prev_calculated= Total_rates -1 olduğundan emin değilim.
Bu yüzden burada sayısal bir örnek yapıyorum. Umarım benim gibi yeni birine yardımcı olabilir.
Normalde şunları görürüz:
Limit= oranlar_toplam- önceki_hesaplanmış; //(no-1)
VEYA
for(i=1;i<limit;i++) veya for(i=1;i<=limit;i++)
Önemli olan LIMIT >=1 olduğundan emin olmaktır. Benim durumumda, LIMIT=0 ve bu nedenle, yeni kene geldiğinde gösterge YENİLENMİYOR.
Neden, bakalım. (Sanırım sebep, en azından benim durumumda prev_calculated)
Grafikte 100 çubuk olduğunda göstergeyi eklediğimi varsayarsak. İşte değişken değerleri:
İlk değer tablosu
Değişken
Toplam_oranlar 100
0-99 bar indeksi
prev_hesaplanan 0
100 sınırı
Döngü i değeri 1-99
Herşey iyi. Değer ilk kez çubuk 1'den grafiğin başına kadar görünecektir. Zaten kaç bar hesaplandı? Bu benim hatam için kritik bir nokta ve %100 net değilim.
Yeni çubuk başladığında, şimdi grafikte 101 bar. Gösterge, artık 1. çubuk olan zaten kapalı olan çubukta güncellenmez.
İkinci değer tablosu
Değişken
Toplam_oranlar 101
0-100 çubuğunun indeksi
prev_calculated 99 VEYA 100 (aşağıya bakın)
Sınır 2 VEYA 1
Döngü i değeri 1'e 1 VEYA 1'den 0'a
1. tabloya dayanarak, gösterge 99 barı hesaplar (1'den 99'a kadar döngü olarak).
Dolayısıyla çözüm oldukça açık: Make for(i=1; ___ burada bu, (<) için 1'den büyük veya (<=)___; i++ için 1'den büyük veya eşit olmalıdır). Son kodumda 0'a eşit.Ancak belgede şöyle yazıyor: “AMA, start() öğesinin ilk çağrısı değilse, Çubuk-1'e eşit değer döndürülecektir). Yani 101-1=100 dönecektir.
Bu bir bar farklı sorun yaratır. Sistem prev_hesaplanmış olarak 100 döndürürse.
Görüyorsunuz, eğer prev_calculated=99 ise, döngü çalışacaktır.
Ancak, prev_calculated = 100 gibi görünün ve bu nedenle döngü, limit = 0 veya -1'e bağlı olarak çalışmayacaktır.
Bu durumda prev_calculated= Bars-1'in arkasındaki mantığı görmeme yardımcı olabilecek var mı?
Umut ediyorum bu yardım eder.
SCFX
prev_hesaplanmış == oranlar_toplam
Şimdi SDC'yi aldım.
Kişisel olarak konuşursak, belgeyi okuduğumda hayal etmek zor. Yine de neden prev_calculated= Total_rates -1 olduğundan emin değilim.
SCFX
Yeni bir gösterge oluşturun, bu kodu başlatma işlevine yerleştirin, 1 dakikalık bir tabloya ekleyin ve keneler geldiğinde uyarıları izleyin.
Rate_total'ın mevcut çubuk miktarı olduğunu göreceksiniz.
prev_hesaplanan, önceki onaydaki çubukların miktarıdır.
prev_hesaplanmış == oranlar_toplam
Yeni bir gösterge oluşturun, bu kodu başlatma işlevine yerleştirin, 1 dakikalık bir tabloya ekleyin ve keneler geldiğinde uyarıları izleyin.
Rate_total'ın mevcut çubuk miktarı olduğunu göreceksiniz.
prev_hesaplanan, önceki onaydaki çubukların miktarıdır.
vay bu garip.
Daha önce yayınlanan bağlantıda, eğer :BUT start()'ın ilk çağrısı değilse, Bars-1'e eşit değerin döndürüleceğini söylediler.
Barları (Rate_totals) nasıl döndürüyor?
evet öyle dediklerini biliyorum ama tam olarak doğru değil.
gerçekte olan şudur.
Rates_total == Geçerli tik geldiğinde toplam çubuk miktarı. prev_calculated == önceki tik geldiğinde toplam çubuk miktarı.
Bu nedenle, önceden hesaplanmış ve oranları_toplam olarak 3 ana durumunuz var. Gösterge yüklendi, orta çubuk tıklanıyor, yeni çubuk ilk tıklanıyor.
prev_calculated == 0 ilk çalıştırmada çünkü gösterge yüklendiğinden beri bir önceki onay işareti yok.
Ayrıca grafik değiştirilirse veya geçmiş eklenirse, prev_calculated sıfırlanır.
OnCalculate'den gelen dönüş değeri kullanılmaz, ancak bunu düzeltmeleri durumunda varsayılan dönüşü (rates_total) kullanmak en iyisidir.
Yeni belgelerin ne dediğini biliyorum . Bunu onların yöntemiyle yaparsanız, prev_calculated'ı sıfırdan farklı olarak test etmeniz ve Rate_total - prev_calculated'ı bir aşağı ayarlamanız gerekir. Bu, gösterge_sayılan karışıklığın azalmasına geri dönüyor.
return( Rates_total - 1 ) yapmanın bir anlamı yok, prev_calculated'ın değeri, ne döndürmesini söylemiş olursanız olun, sanki return(rates_total) gibi.