Hatalar, hatalar, sorular - sayfa 3149

 
Vladimir Karputov # :

Adım 1: 'MQL5 Sihirbazı'nı kullanarak bir boşluk oluşturun:


Adım 2: 'limit'i doğru şekilde yazın ve yakın diziyi KULLANIN - iClose'u ARAMAYIN!!!


Sonuç:

ve hiçbir hata yok.

Bunun tek doğru limit ve gösterge hesaplaması olduğunu kim söyledi?

Tartışma, farklı bir limit hesaplaması ve göstergenin kendisi - soldan sağa - tarihin başlangıcından şimdiki zamana kadar. Daha basit ve daha net.

Bu şekilde hesaplanan limit (int limit = rate_total - prev_calculated; if(limit>1) limit=rates_total-1;) hemen aşağıdaki tüm verileri içerir:

  1. şu anki kene mi,
  2. yeni bir barın açılışı mı,
  3. Bunun tarihsel verilerde bir değişiklik olup olmadığı.

Geçerli onay işareti (limit==0) ise, for(int i=limit; i>=0; i--) { // ... } her yeni onay işaretindeki göstergeyi hesaplar ve yalnızca sıfır çubuğu yeniden hesaplanacaktır.

Yeni bir çubuğun açılışı (limit==1) ise, for(int i=limit; i>=0; i--) { // ... } ilk ve sıfır çubuğunu hesaplar - önceki ve yeni açılan

Bu bir geçmiş değişikliğiyse (limit>1), o zaman for(int i=limit; i>=0; i--) { // ... }, mevcut tüm geçmiş üzerinden tüm göstergenin tam bir yeniden hesaplamasını gerçekleştirir (tarih bir yerlerde değişmiştir)

 
TheXpert # :
Fark ne? sıfırdan küçük olabilir mi?

evet yaptım (önceki mesaja eklendi)

 
Sorunu sadece Artyom anladı.
Ama görünüşe göre bu sorun kalıcı.
Ve şimdi sadece eğer-s.
 
Roman # :
Sorunu sadece Artyom anladı.
Ama görünüşe göre bu sorun kalıcı.
Ve şimdi sadece eğer-s.

Hayır, anlamadım. Ne anladığımı söyle...

 
Vladimir Karputov # :
   int limit=prev_calculated- 1 ;
   if (prev_calculated== 0 )
      limit= 0 ;
   for ( int i=limit; i<rates_total; i++)
     {
      CloseBuffer[i]=close[i];
     }

yine de, üçlü operatör daha özlü görünüyor (IMHO)

 int limit = prev_calculated== 0 ? 0 : prev_calculated- 1 ;

özellikle de söylediği gibi ve eğer aniden bir şeyler ters giderse ve önceki_hesaplanan oranlar_toplamdan büyük çıkarsa.
Max'te böyle bir durumla karşılaştım. penceredeki çubuklar != sınırsız ve örneğin 50000. Bu durumda, her yeni çubukla çubuk dizisinin boyutu 1 arttı, ancak bir noktada tekrar 50000 oldu.Mantığı yakalamadım. Bunu birkaç yıl önce yakaladım. Şimdi kontrol etmemiz gerekiyor. VPS'ime bir çıktı koyacağım.

 
Artyom Trishkin # :

Hayır, anlamadım. Ne anladığımı söyle...

bu şimdilik eskisi gibi çalışmıyor

sınır==0
keneler için i>=0
çubuklar için i>0

Yukarıda, her şeyi doğru yazmışsın,
for(int i=limit; i>=0; i--) yalnızca yeni çubuk için yanlış yazılmış
burada = operatörüne gerek yoktur, ancak bu muhtemelen geçmişte kalmıştır,
değilse önceki davranışı döndürür.

 
Roman # :

bu şimdilik eskisi gibi çalışmıyor

sınır==0
keneler için i>=0
çubuklar için i>0

Yukarıda, her şeyi doğru yazmışsın,
for(int i=limit; i>=0; i--) yalnızca yeni çubuk için yanlış yazılmış
burada = operatörüne gerek yoktur, ancak bu muhtemelen geçmişte kalmıştır,
değilse önceki davranışı döndürür.

Yine hiçbir şey anlamadım. Senin neyin var? Her şey eskisi gibi görünüyor.

 
Artyom Trishkin # :

Yine hiçbir şey anlamadım. Senin neyin var? Her şey eskisi gibi görünüyor.

Böyle bir tasarımla

 int limit = rates_total-prev_calculated;

for ( int i=limit; i>= 0 ; i--)


gösterge arabelleği sınırların dışında.

Lütfen i>=0 döngülü keneler için bir örnek gösterin
belki bir şey unuttum ve doğru yapmıyorum.

 
Roman # :

Böyle bir tasarımla
gösterge arabelleği sınırların dışında.

hep dışarı çıktı.
 
Roman # :

Böyle bir tasarımla


gösterge arabelleği sınırların dışında.

Lütfen i>=0 döngülü keneler için bir örnek gösterin
belki bir şey unuttum ve doğru yapmıyorum.

Böyle bir yapıyla, tampon dizinine Rate_total numarasıyla eriştiğinizi zaten yazmıştım ( prev_calculated == 0 olduğunda).
Ve bu bir taşmadır, çünkü Rate_total , son elemanı Rate_total -1 olan tamponun boyutudur.

Neden: