Hatalar, hatalar, sorular - sayfa 3129

 
Alexey Viktorov # :

Sizin durumunuzda, her iki koşulun da karşılanması gerektiğinden durum böyle değildir. Ama bunu koyarsan

o zaman evet. "a" koşulu karşılanırsa, ikinci koşul kontrol edilmeyecektir. Bunun için yıllarca savaştılar ve şimdi geçen yüzyıla dönmeyi teklif ediyorsunuz ...

İşin garibi, ama a=true ile, sadece || ile değil, && ile de, gerisi kontrol edilmez. Bunu başka nasıl açıklayabiliriz (göstergenin anlamını aramanın bir anlamı yok, burada koddan bahsediyoruz):

 #property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots    1
#property indicator_type1    DRAW_ARROW
#property indicator_color1   Gray
#property indicator_label1    "Fractal Up"
//--- indicator buffers
double ExtUpperBuffer[];
//--- 10 pixels upper from high price
int     ExtArrowShift=- 10 ;

void OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,ExtUpperBuffer, INDICATOR_DATA );
   IndicatorSetInteger ( INDICATOR_DIGITS , _Digits );
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger ( 0 , PLOT_ARROW , 217 );
//--- arrow shifts when drawing
   PlotIndexSetInteger ( 0 , PLOT_ARROW_SHIFT ,ExtArrowShift);
//--- sets drawing line empty value--
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
  }

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 (rates_total< 5 )
       return ( 0 );

   int start;
//--- clean up arrays
   if (prev_calculated< 7 )
     {
      start= 2 ;
       ArrayInitialize (ExtUpperBuffer, EMPTY_VALUE );
     }
   else
      start=rates_total- 5 ;

   for ( int i=start; i<rates_total- 3 && ! IsStopped (); i++)
     {
       //--- Upper Fractal
       if (high[i]>high[i+ 1 ] && high[i]>high[i+ 2 ] && high[i]>high[i+ 3 ] && high[i]>high[i+ 4 ])
         ExtUpperBuffer[i]=high[i];
       else
         ExtUpperBuffer[i]= EMPTY_VALUE ;
     }

   return (rates_total);
  }

Terminal sessiz. Ama değişmeye değer

 if (high[i]>high[i+ 1 ] && high[i]>high[i+ 2 ] && high[i]>high[i+ 3 ] && high[i]>high[i+ 4 ])

üzerinde

 if (high[i]>high[i+ 4 ] && high[i]>high[i+ 2 ] && high[i]>high[i+ 3 ] && high[i]>high[i+ 1 ])

kötü şöhretli 'dizi aralık dışı ' mesajı göründüğü için, çünkü ilk seçeneğin aksine, fazla indeksli bir diziye hemen rastlarsa.

 
x572intraday # :

Buna böcek demeye cesaret edemem. Bu nedenle, if ifadesinin bir özelliğini fark ettiğimi söyleyeceğim. Açıkça görüyorum, bu diğer YaPam için geçerli olabilir.

Eğer a doğruysa, kontrol Array[over_index]'e atlayacaktır ve o zaman terminal, tamamen adil olan ' array out of range ' kısmına çılgınca bombalamaya başlar. a'nın yanlış olduğu ortaya çıkarsa, Array[over_index] doğruluk koşulunu kontrol etmeye gelmez, bu da dizinin gereksiz olduğu anlamına gelir, if daha fazla atlanır ve kodlayıcı var olmayan bir dizine sahip bir dizinin olduğunu bilemez. programında yürüyor ... daha doğrusu var ama gereksiz.

Belki de bu, ' array out of range ' kontrolünün if'de en sona kadar gerçekleşmesi ve aynı mesajın verilmesi için düzeltilmesi gerekiyor mu? Yoksa operatörün hızını büyük ölçüde azaltacak mı?


Hangi dilin sözdizimi farklıdır? "Sözdizimi, kelimenin tam anlamıyla çeviride sadece kompozisyon değil, aynı zamanda sıralama anlamına gelir ..".

' Array out of range ' olup olmadığını kontrol etmek istiyorsanız, sırayı değiştirin.

 if (Array[over_index]>val && a) {...}
 
Lilita Bogachkova # :

Hangi dilin sözdizimi farklıdır? " Sözdizimi, kelimenin tam anlamıyla çeviride sadece derleme değil, aynı zamanda sıralama anlamına gelir ..".

' Array out of range ' olup olmadığını kontrol etmek istiyorsanız, sırayı değiştirin.

Kontroller gerekli olduğu için sipariş arzu edilir.

Örneğin, "a" daha sık değişiyorsa, bunu ilk argüman olarak koymak daha iyidir.

 
Vitaly Muzichenko # :

Kontroller gerekli olduğu için sipariş arzu edilir.

Örneğin, "a" daha sık değişiyorsa, bunu ilk argüman olarak koymak daha iyidir.

Hayır, ana koşullar birincisine bağlıdır, gerisi sadece ek koşullardır.

Örneğin, çalışma saati henüz başlamadıysa, mevcut çalışma saatinin saatini kontrol etmenin bir önemi yoktur.
 

Aslında, yanlışlıkla bu özelliğe rastladım. Tamamen farklı bir şey istedim...

 if (high[i]>high[i+ 1 ] && high[i]>high[i+ 2 ] && high[i]>high[i+ 3 ] && ... && high[i]>high[i+n])

veya

 if (high[i]>high[i+ 1 ])
   if(high[i]>high[i+2])
      if(high[i]>high[i+3])
         if(...)
            if(high[i]>high[i+n])

Sorun şu ki, n oldukça büyük olabilir, bu yüzden bu uzun koşullar zincirini kompakt bir for için sarmak istedim. Bu şekilde denedim:

 for(int i=start; i<rates_total-3 && !IsStopped(); i++)
{
   bool h_plus=true; //false?
   for ( int increment= 1 ; increment<=n; increment++)
      h_plus&=high[i]>high[i+increment];
   if (h_plus) {...}
   ...
}

ama bir çeşit şapka çıktı. En azından, böyle bir algoritmaya sahip h_plus, kontrol edilen koşulların tüm toplamını kabul etmeye zorlanacağı için, yedekli bir dizine sahip bir diziyi kontrol etme koşulu da dahil olmak üzere, ilk genişletilmiş if için durum böyle değildi. . Diğer uyarılar resmi bozar.

İstemeye bile değer mi? Böyle bir şey söylemek mümkün mü?

 
Lilita Bogachkova # :

Hangi dilin sözdizimi farklıdır? "Sözdizimi, kelimenin tam anlamıyla çeviride sadece kompozisyon değil, aynı zamanda sıralama anlamına gelir ..".

' Array out of range ' olup olmadığını kontrol etmek istiyorsanız, sırayı değiştirin.

Neyin önüne, neyin sonrasına konulacağı her zaman önceden bilinmez.

 
Lilita Bogachkova # :

Hayır, ana koşullar birincisine bağlıdır, gerisi sadece ek koşullardır.

Örneğin, çalışma saati henüz başlamadıysa, mevcut çalışma saatinin saatini kontrol etmenin bir önemi yoktur.

Evet, önce sinyal koşullarını kontrol ediyoruz, dizi üzerinde yineliyoruz ve karşılaştırıyoruz, mevcut fiyatı kontrol ediyoruz ve sonra zamanın doğru olmadığı ortaya çıktı, ancak ondan önce birçok karmaşık işlem yapıldı.

Doğru?

 
Vitaly Muzichenko # :

Evet, önce sinyal koşullarını kontrol ediyoruz, dizi üzerinde yineliyoruz ve karşılaştırıyoruz, mevcut fiyatı kontrol ediyoruz ve sonra zamanın doğru olmadığı ortaya çıktı, ancak ondan önce birçok karmaşık işlem yapıldı.

Doğru?

Bu doğru, bunu yapmak zorunda değilsin.
 
Vitaly Muzichenko # :

Kontrol etmek

Ve size yukarıdaki koşuldaki "a"nın her zaman yanlış olacağını kim söyledi?

 
x572intraday # :

Aslında, yanlışlıkla bu özelliğe rastladım. Tamamen farklı bir şey istedim...

veya

Sorun şu ki, n oldukça büyük olabilir, bu yüzden bu uzun koşullar zincirini kompakt bir for için sarmak istedim. Bu şekilde denedim:

ama bir çeşit şapka çıktı. En azından, böyle bir algoritmaya sahip h_plus, kontrol edilen koşulların tüm toplamını kabul etmeye zorlanacağı için, yedekli bir dizine sahip bir diziyi kontrol etme koşulu da dahil olmak üzere, ilk genişletilmiş if için durum böyle değildi. . Diğer uyarılar resmi bozar.

İstemeye bile değer mi? Böyle bir şey söylemek mümkün mü?

Bu koddan hiçbir şey anlamıyorum

 for ( int i=start; i<rates_total- 3 && ! IsStopped (); i++)
{
   bool h_plus= true ; //false?
   for ( int increment= 1 ; increment<=n; increment++)
      h_plus & =high[i]>high[i+increment];
   if (h_plus) {...}
   ...
}

Bu kodda vurgulanan & ne anlama geliyor? Ve if(h_plus) hangi döngüde yürütülmelidir? Kıvrımlı parantezleri özledin mi?