Hatalar, hatalar, sorular - sayfa 3148

 
Roman # :

Ve hepsi, IndBuff arabelleğinin Rate_total + 1'e kadar ayrılmadığı için
Ve ArrayResize bunun için geçerli değil.
Yapıyı kırdı. Şimdi, if-s yoluyla, her şeyi çitlemek için mi?

for(int i= limit - 1 ;....

en az..

 
Roman # :

Ve hepsi, IndBuff arabelleğinin Rate_total + 1'e kadar ayrılmadığı için
Ve ArrayResize bunun için geçerli değil.


Eksi bir ihtiyacınız olan yer burası :))
Çıktı daha sonra boyutlarla ilgili her şeyin yolunda olduğunu gösterir.
Mantık kullan:
Limit = 0 ise, yeni bir onay işareti
Limit = 1 ise, yeni bir çubuk anlamına gelir (hızlar_toplam -1 arabelleğinin son öğesi ve oranlarınız_toplam var, dolayısıyla taşma var)
Limit > 1 ise, tüm göstergeyi yeniden hesaplamak daha iyidir
 
Maxim Kuznetsov # :

for(int i= limit - 1 ;....

en az..

En sinir bozucu olan ne biliyor musun? Herhangi bir davranışın sessizce, uyarı yapılmadan değiştirilmesi.
Ve sonra insanlar acı çekiyor. Bu metatrader'dan bıktınız.

 
Roman # :

En sinir bozucu olan ne biliyor musun? Herhangi bir davranışın sessizce, uyarı yapılmadan değiştirilmesi.
Ve sonra insanlar acı çekiyor. Bu metatrader'dan bıktınız.

Her şey olduğu gibi kalır.
senin eklemin
İpucu - hata ayıklayıcıyı nasıl kullanacağınızı öğrenin ve bir çıktı almanıza gerek yok, ayrıca tüm sövelerinizi hemen göreceksiniz.
 
Roman # :

En sinir bozucu olan ne biliyor musun? Herhangi bir davranışın sessizce, uyarı yapılmadan değiştirilmesi.
Ve sonra insanlar acı çekiyor. Bu metatrader'dan bıktınız.

Göstergelerin hesaplanmasında bir değişiklik fark etmedim. Yukarıda Nikolai, oranlar_toplam-önceki_hesaplanmış olarak hesaplanan sınır değerlerin ne anlama geldiğini doğru bir şekilde tanımladı.

Ve yıllardır çalışıyor - dördüncü terminalden bile.

 
Nikolai Semko # :
Eksi bir ihtiyacınız olan yer burası :))
Çıktı daha sonra boyutlarla ilgili her şeyin yolunda olduğunu gösterir.
Mantık kullan:
Limit = 0 ise, yeni bir onay işareti
Limit = 1 ise, yeni bir çubuk anlamına gelir (hızlar_toplam -1 arabelleğinin son öğesi ve oranlarınız_toplam var, dolayısıyla taşma var)
Limit > 1 ise, tüm göstergeyi yeniden hesaplamak daha iyidir

Nikolay, inşaatların olup olmadığını biliyorum ve bir tanesi için,
ama ben hep bunun için çalıştım, alıştım, daha uygun.
Ama uzun bir süre for ile ilgili tuhaflıkları fark ettim ve onunla uğraşmayı erteledim.
Eskiden çok iyi çalışırdı.

keneler için i>=0
çubuklar için i>0

Ve ne olursa olsun-ov gerekli değildi.

 
Roman # :



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

 //+------------------------------------------------------------------+
//|                                                       Simple.mq5 |
//|                              Copyright © 2022, Vladimir Karputov |
//|                       https://www.mql5.com/en/users/barabashkakvn |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2022, Vladimir Karputov"
#property link        " https://www.mql5.com/en/users/barabashkakvn "
#property version    "1.00"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots    1
//--- plot Close
#property indicator_label1    "Close"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrRed
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
//--- input parameters
input int       Input1= 9 ;
//--- indicator buffers
double          CloseBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,CloseBuffer, INDICATOR_DATA );
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+


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

 //+------------------------------------------------------------------+
//|                                                       Simple.mq5 |
//|                              Copyright © 2022, Vladimir Karputov |
//|                       https://www.mql5.com/en/users/barabashkakvn |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2022, Vladimir Karputov"
#property link        " https://www.mql5.com/en/users/barabashkakvn "
#property version    "1.00"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots    1
//--- plot Close
#property indicator_label1    "Close"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrRed
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
//--- input parameters
input int       Input1= 9 ;
//--- indicator buffers
double          CloseBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,CloseBuffer, INDICATOR_DATA );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   int limit=prev_calculated- 1 ;
   if (prev_calculated== 0 )
      limit= 0 ;
   for ( int i=limit; i<rates_total; i++)
     {
      CloseBuffer[i]=close[i];
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+


Sonuç:

ve hiçbir hata yok.

Dosyalar:
Simple.mq5  5 kb
 
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.

Doğrudan i++ örneği için teşekkürler.
Ama ters bir döngüm olduğu gerçeğini fark etmedin.
Ve örnek olarak iClose verilirse, ileride i indeksinin başka fonksiyonlarda kullanıldığını göstermek gerekir.

 
Roman # :

Nikolai, inşaatların olup olmadığını biliyorum ve bir tanesi için,

yoksa

Nikolay Semko
Mantık kullan:
Limit = 0 ise, yeni bir onay işareti
Limit = 1 ise, yeni bir çubuk anlamına gelir (hızlar_toplam -1 arabelleğinin son öğesi ve oranlarınız_toplam var, dolayısıyla taşma var)
Limit > 1 ise, tüm göstergeyi yeniden hesaplamak daha iyidir

burada bir hata yaptım
kullanmak daha iyi
eğer limit != 1

yani tüm mantık şöyle bir şey:

limit = rates_total - prev_calculated;
if (limit == 0 ) {..} // новый тик
else if ( limit == 1 ) {..} // новый бар
else {..} // полный пересчет всего индикатора
Bazılarının kızacağını anlıyorum ve limit == 2 ise neden her şeyi yeniden hesapladıklarını söylüyorlar,
ancak limit 1'e ve 0'a eşit olmadığında, bu göstergenin ilk başlatılmasıdır veya bir şeyler ters gitti (örneğin, bağlantı hatası veya sunucuda hata)
Ayrıca, prev_hesaplananın oranlar_toplamından büyük olduğu durumlarla bir kereden fazla karşılaştım. Belki eskiden bir tür aksaklıktı ve şimdi düzeltildi, ama o zamandan beri böyle bir tasarımı zarar vermeden kullanıyorum.
 
Nikolai Semko # :

eğer limit != 1

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