Hatalar, hatalar, sorular - sayfa 3151

 
Artyom Trishkin # :

Her zaman bir kontrol vardı: if(limit>1) limit=rates_total-1. Bu, hesaplamalarda i+ ancak olmadığı durumlar içindir. Varsa, bu "bir şeyler" yapıya dahil edilmelidir: limit=rates_total-1-ne kadar_bu.

Onsuz, her zaman sınırların dışında bir dizi vardı. Sonuçta, Rates_total, Bars()'tan başka bir şey değildir. Buna göre, eğer 5000 çubuk varsa ve biz 5000 indeksine atıfta bulunuyorsak, o zaman dizinin ötesine geçiyoruz (çubukların sayımı sıfırdan başlar).

Örneğinizde, limit hesaplaması doğru değil:

Bunun gibi olmalı:

Ve sonra limiti kontrol edin> 1

ve limit hala birden büyükse, limit = rate_total-1

Artyom'a teşekkürler! Ve kaynattığım için üzgünüm.
Kesinlikle, bir çek olmalı, sadece unuttum.
Kodumda hala bir yorum var
// Hesaplanan çubukların sayısının kontrol edilmesi ve hesaplanması.
Anlaşılan kopyala-yapıştır kendini hissettirmiş ve bende bir yanlış anlaşılma olmuş.
Doğrulama ile her şey olması gerektiği gibi çalışır. Teşekkür ederim.

 
Roman # :

Teşekkürler Artyom!
Kesinlikle, bir çek olmalı, sadece unuttum.
Doğrulama ile her şey olması gerektiği gibi çalışır. Teşekkür ederim.

Rica ederim. Limitin doğru hesaplanması. Sizin için doğru değil - Yukarıda buna dikkat çektim.

 int limit = rates_total - 1 -prev_calculated;

-1 burada olmamalıydı .

Rates_total 5000'e eşitse ve ayrıca önceki OnCalculate() çağrısında (önceki_hesaplanmış) hesaplanan 5000 çubuk varsa, o zaman limit -1'e eşit olacaktır. Buna göre, döngü hiç yürütülmeyecektir.

Göstergenin nasıl hesaplanacağını seçmek istiyorsanız (sıfır çubuğundaki işaretlerle veya yalnızca yenisinin açılışında), o zaman nasıl hesaplanacağını gösteren bir değişken girin:

int end = (her tik ? WRONG_VALUE : 0);

o zaman döngü şu şekilde olacaktır: for(int i=limit; i>end; i--) { //... }

ve limit hesaplaması doğru olacak ve döngü istediğiniz gibi olacaktır.

 

Doğru kod.

her tik için i>=0

i>0 yeni çubuk için

 //+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,       
                 const int prev_calculated,   
                 const int begin,             
                 const double & price[])      
{
   ArraySetAsSeries (price, true );
   ArraySetAsSeries (IndBuff, true );
   
   //-------------------------------------------------------------------------
   //Расчёт и проверка количества просчитываемых баров
   int limit = rates_total-prev_calculated;
   
   if (limit> 1 ) 
      limit = rates_total- 1 ;
   

   //-------------------------------------------------------------------------
   //Расчёт индикатора
   for ( int i=limit; i>= 0 ; i--)
   {

      IndBuff[i] = price[i]; 

   }
   

   return (rates_total);
}
 
Nikolai Semko # :
Veya

Ne yapacağını bile sormadın... Telepatlar tatilden döndü mü? ;)

 
Roman # :

Doğru kod.

her tik için i>=0

i>0 yeni çubuk için

 ArraySetAsSeries (IndBuff, true );

OnInit()'e taşımak daha iyidir

 
Artyom Trishkin # :

Ne yapacağını bile sormadın... Telepatlar tatilden döndü mü? ;)

:)
Artem, bir kişinin birkaç dakika önce kayıt olduğunu ve ilk gördüğü şeyin "Hatalar, buglar, sorular " olduğunu görmek için telepat olmaya gerek yok.
Lahanayı ücretsiz kesmenin mümkün olup olmadığını soran dişbudak kütüğü ve çok fazla zorlamamak için ...

 
Nikolai Semko # :

:)
Artem, bir kişinin birkaç dakika önce kayıt olduğunu ve ilk gördüğü şeyin "Hatalar, buglar, sorular " olduğunu görmek için telepat olmaya gerek yok.
Lahanayı ücretsiz kesmenin mümkün olup olmadığını soran dişbudak kütüğü ve çok fazla zorlamamak için ...

Belki de bir öğretmene yatırım yaparak bir Bentley için kendi parasını kesmek için bir programcının sıkı çalışmasını kullanmaya karar verdi? :)

 
Artyom Trishkin # :

Belki de bir öğretmene yatırım yaparak bir Bentley için kendi parasını kesmek için bir programcının sıkı çalışmasını kullanmaya karar verdi? :)

Zor, Artem.
Bir programcı potansiyeline sahip olsaydı, belirsizliğe ve belirsizliğe izin vermezdi.
:)
 
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.

sadece gösterge döngüsünün tasarımının, hiç düşünmeden kopyala-yapıştır yöntemi (ve otomatik doldurma eğrileri) kullanılarak eski zamanlardan sürüklenmesidir.

hala sadece mevcut arayüzle:

for(int bar=prev_calculated>0?prev_calculates-1:0 ; bar<rates_total; bar++) {

   int i=rates_total-1; // i используем если обращения как ArraySetSeries(x,true), иначе bar

   ....

}

return rates_total;

her aramada son çubuğu yeniden hesaplamanız gerekiyorsa, bu durumda prev_calculated-1 ile kalabalık gerekir.

 
Maxim Kuznetsov # :

sadece gösterge döngüsünün tasarımı, hiç düşünmeden kopyala-yapıştır yöntemi (ve otomatik tamamlama eğrileri) kullanılarak eski zamanlardan sürüklenir.

hala sadece mevcut arayüzle:

for(int bar=prev_calculated>0?prev_calculates-1:0 ; bar<rates_total; bar++) {

   int i=rates_total-1; // i используем если обращения как ArraySetSeries(x,true), иначе bar

   ....

}

return rates_total;

her aramada son çubuğu yeniden hesaplamanız gerekiyorsa, bu durumda prev_calculated-1 ile kalabalık gerekir.

Evet, açıklamayla heyecanlandım.
Sadece bir şey eskiden işe yarıyordu, ama şimdi çalışmıyor, sinir tikleri başlıyor))
Ve her şeyi tekrar kontrol etmeye başlıyorsunuz ve kesinlikle hatırlamadığınız bazı özellikleri unutarak, kırdığınız şey için mantıksız bir şekilde günah işliyorsunuz.
Ve hepsi copypasta'nın suçu. Sanırım bir çok kişi bunu yaşamıştır.

Genel olarak, geliştiricilere göstergeler ve uzmanlar için özel şablonlar yapmalarını önermek istedim.
Sihirbaz penceresinde bunları seçebilmeniz için.

m

Bazı C/C++ düzenleyicilerinde bu özellik bulunur.
Çok uygun, esas olarak çalıştığınız ana boşlukları perçinledim ve ardından bunları master'a yüklüyorsunuz.
Standart MQL şablonları, pek de değil.
Yine de şablonlar yazabileceğinizi ve ardından kopyalayıp yapıştırabileceğinizi söyleyebileceğiniz açıktır.
Ve yine sinsi kopyala-yapıştır kelimesine dönüyoruz. Ve otomatikleştirmenin ve programcının kaderini hafifletmenin mümkün olduğu gerçeği bir şekilde dikkate alınmaz.

Neden: