- Hatalar, hatalar, sorular
- Makroekonomik göstergelere dayalı piyasa tahmini
- Init() ve DeInit() yürütme sırası
Aslında sorun şu ki, geçmişin henüz pompalanmadığı TF'yi değiştirirken çizgiyi çizen gösterge verileri hesaplıyor, ardından grafiğe çubuklar ekleniyor ve verileri tekrar hesaplıyor, sırasıyla geçmiş olanlar. + boşluklar da kaldırıldı.
Bu, göstergenin mantığında bir hata anlamına gelir. Geçmişi yüklerken, göstergenin çalışması için ideal yol, geçmişte değişmeyen son çubuğun anındaki durumunu hesaplamak ve geçmişin güncellenen bölümündeki verileri yeniden hesaplamaktır.
Gerçekte, bu seçenek her zaman mümkün değildir, çünkü gösterge ortamının belirtilen herhangi bir çubuğa döndürülmesi, hesaplamanın geçmişin başından itibaren yapılması anlamına gelir. Bu nedenle, biraz karmaşık gösterge algoritmaları durumunda, bir çubuk yüklendiğinde (yeni bir çubuğun açılmasıyla karıştırılmamalıdır) geçmişin tam bir yeniden hesaplanması gerçekleştirilir.
Aslında sorun şu ki, geçmişin henüz pompalanmadığı TF'yi değiştirirken çizgiyi çizen gösterge verileri hesaplıyor, ardından grafiğe çubuklar ekleniyor ve verileri tekrar hesaplıyor, sırasıyla geçmiş olanlar. + boşluklar da kaldırıldı.
OnCalculate() içindeki göstergede şunları kontrol etmeniz gerekir:
if (prev_calculated== 0 ) // значит история изменилась или это первый проход
OnCalculate() içindeki göstergede şunları kontrol etmeniz gerekir:
Teşekkür ederim.
Uyarıların bana tarihin parçalara ayrıldığı gerçeğini vermesi beni utandırdı.
Evet. Ve orada.
Bu, göstergenin mantığında bir hata anlamına gelir. Geçmişi yüklerken, göstergenin çalışması için ideal yol, geçmişte değişmeyen son çubuğun anındaki durumunu hesaplamak ve geçmişin güncellenen bölümündeki verileri yeniden hesaplamaktır.
Gerçekte, bu seçenek her zaman mümkün değildir, çünkü gösterge ortamının belirtilen herhangi bir çubuğa döndürülmesi, hesaplamanın geçmişin başından itibaren yapılması anlamına gelir. Bu nedenle, biraz karmaşık gösterge algoritmaları durumunda, bir çubuk yüklendiğinde (yeni bir çubuğun açılmasıyla karıştırılmamalıdır) geçmişin tam bir yeniden hesaplanması gerçekleştirilir.
Yani sadece çalışan çözüm sadece?
for(int i=rates_total-prev_calculated;i>=0;i--)
Sadece çalışan çözüm bu mu?
for(int i=rates_total-prev_calculated;i>=0;i--)
Ve yalnızca mevcut çubuğu yeniden hesaplamanız gerekiyorsa, o zaman (örneğin, 4)?
for ( int i=rates_total-prev_calculated+ 4 ;i>= 0 ;i--) { if (i> Bars ) i= Bars ;
Evet, çalışıyor.
Çubuklar parçalar halinde yüklendiğinde, daha sonra parçalar halinde ve yeniden hesaplama.
Doğru parçanın yalnızca en son yüklenen parça olduğu ortaya çıktı haha.
Göstergelerin nasıl yazılacağını öğrenmenin zamanı geldi
Öğretmek.
Ve geliştiricilerin göstergenin ilk hesaplamalarında ayarlamalar yapması gerektiğini söylüyorum.
Göstergelerin nasıl yazılacağını öğrenmenin zamanı geldi
hile mi istiyorsun Bil bakalım hangi Uyarı döndü?
int OnCalculate ( const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { if (prev_calculated!= 0 ) Alert (prev_calculated, " M:" , Period ()); return (rates_total); }
hile mi istiyorsun Bil bakalım hangi Uyarı döndü?
Göstergelerde uyarı kullanmıyorum. Geçmiş yüklenmişse tam bir yeniden hesaplama sağlarım. Bunu kontrol etmek kolaydır.
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz