Hatalar, hatalar, sorular - sayfa 2180

 
Nikolai Semko :

Sıfır olduğu çok açık.

Ve ne - belirli bir zaman diliminde sıfır çubuk olduğuna karar vermek normal 22 saniye mi?

Bars'ın dahili uygulamasında bariz bir algoritmik hata.

Ancak belirli bir zaman dilimindeki sıfır çubukları bu sıfırdan nasıl ayırt ettiğinizi anlamıyorum:

Belgelerden: Bars() işlevi çağrılırken belirtilen parametrelere sahip zaman serisi verileri henüz terminalde oluşturulmadıysa veya zaman serisi verileri, işlevçağrısı sırasında ticaret sunucusuyla senkronize edilmemişse, işlev boş bir değer döndürür .

Başka bir deyişle, sonuç sıfırını hata sıfırından nasıl ayırt edebilirim?
 
A100 :

Ancak belirli bir zaman dilimindeki sıfır çubukları bu sıfırdan nasıl ayırt ettiğinizi anlamıyorum:

Belgelerden: Bars() işlevi çağrılırken belirtilen parametrelere sahip zaman serisi verileri henüz terminalde oluşturulmadıysa veya zaman serisi verileri, işlevçağrısı sırasında ticaret sunucusuyla senkronize edilmemişse, işlev boş bir değer döndürür .

Bu soruda sıfırın orijini önemli değil ama önemli olan bu sıfırın Bars fonksiyonu tarafından çağlar boyunca birkaç on saniye şeklinde doğmasıdır.

 
A100 :

Ancak belirli bir zaman dilimindeki sıfır çubukları bu sıfırdan nasıl ayırt ettiğinizi anlamıyorum:

Belgelerden: Bars() işlevi çağrılırken belirtilen parametrelere sahip zaman serisi verileri henüz terminalde oluşturulmadıysa veya zaman serisi verileri, işlevçağrısı sırasında ticaret sunucusuyla senkronize edilmemişse, işlev boş bir değer döndürür .

Başka bir deyişle, sonuç sıfırını hata sıfırından nasıl ayırt edebilirim?

Peki, kendin yargıla. Bars işlevinin bir analogunu oluşturma görevi ile karşı karşıya kaldıysanız ve bir datetime dizisi verildiyse, öğelerinin değerleri artan sayı ile azalır, başka bir deyişle dizi sıralanır.

Ne düşünüyorsunuz - belirli bir zaman diliminde bu sıralı dizinin eleman sayısını bulmak için bir algoritma uygulamak zor mu? Ve verilen aralıkta tek bir çubuk yoksa veya dizi henüz başlatılmamışsa, sıfır döndürülmelidir.

Hayır, algoritma oldukça basit. 22 saniye boyunca orada ne yapılabilir?

 
Nikolai Semko :

Bu soruda sıfırın orijini önemli değil ama önemli olan bu sıfırın Bars fonksiyonu tarafından çağlar boyunca birkaç on saniye şeklinde doğmasıdır.

Önemli olan orijindir, çünkü eğer ::Bars() bir geçmiş hatası durumunda -1 döndürürse ve (şimdi olduğu gibi) 0 değil, o zaman gecikme olmaz. Ve şimdi 0 bir hata olarak yorumlanıyor ve dahili yeniden denemeler nedeniyle gecikme oluşuyor https://www.mql5.com/ru/forum/1111/page2200#comment_6955559

Ayrıca: diyelim ki ek bir kontrol getirdik - gecikme ortadan kalktı. Ve sonra ne? Sıfır aldın. Bu bir sonuç mu yoksa bir hata mı?

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2018.03.31
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Vitaly Muzichenko :

Büyük olasılıkla bu, geçmişin yüklenmesinden kaynaklanmaktadır.

Yani şaka, ilk Baskının gecikmeden işlenmesidir, yani. H4 geçmişi zaten yüklendi.

Ve CopyTime H4'ü W1 olarak değiştirirseniz, o zaman hiç fren olmayacaktır. Yani W1'in geçmişi de zaten yüklenmiştir.

Sadece Barlar, CurrentTime() ile sıfır çubuğunun açılış zamanına kadar olan aralıktaki zamandan bir stupora girer.

 
A100 :

Önemli olan orijindir, çünkü eğer ::Bars() bir geçmiş hatası durumunda -1 döndürürse ve (şimdi olduğu gibi) 0 değil, o zaman gecikme olmaz. Ve şimdi 0 bir hata olarak yorumlanıyor ve dahili yeniden denemeler nedeniyle gecikme oluşuyor https://www.mql5.com/en/forum/1111/page2200#comment_6955559

Ayrıca: diyelim ki ek bir kontrol getirdik - gecikme ortadan kalktı. Ve sonra ne? Sıfır aldın. Bu bir sonuç mu yoksa bir hata mı?

Algoritmalarımda her yerde, neyin sıfır olduğu önemli değil: belirli bir aralığa düşen çubuk yok veya böyle bir dizinin yokluğu.

Sorundan kaçıyorsun.

 
Nikolai Semko :

Sorundan kaçıyorsun.

Sorunun özünü belirtiyorum ama siz kendi özel durumunuza odaklanmış durumdasınız. Önceki mesajınıza bakılırsa, her şey önceki sayfada ayrıntılı olarak açıklanmış olmasına rağmen, gecikmenin hangi durumlarda meydana geldiğini hala anlamıyorsunuz (bu, nedene ek olarak).

Belki bu komut dosyası anlamada yardımcı olur

 void OnStart ()
{
         Print ( "begin" );
        :: Bars ( _Symbol , PERIOD_W1 , D'2018.03.20' , D'2018.03.23' );
         Print ( "end" );
}
 
A100 :
Sorunun özünü belirtiyorum ama siz kendi özel durumunuza odaklanmış durumdasınız. Önceki mesajınıza bakılırsa, her şey önceki sayfada ayrıntılı olarak açıklanmış olmasına rağmen, gecikmenin hangi durumlarda meydana geldiğini hala anlamıyorsunuz (bu, nedene ek olarak).

Gecikmenin meydana geldiği durumla ilgili görüşümü yukarıda formüle ettim.

Tekrar:
Başlangıç_zamanı, istenen TF'nin sıfır çubuğunun açılış zamanı ile TimeCurrent() arasındaki aralıktaysa, çubuklar askıda kalır. (sadece bir hipotez, ancak uygulama ile kanıtlanmıştır)
Evet, hata belirli bir durumda oluşur. Ancak özel durumlar, programlama dilinin standart yerleşik işlevlerinde olmamalıdır.

Ve senin "öz"ün öyle bir öz değil, çünkü. Sadece çok aşina olduğum Bars komutunun yardımından alıntı yapıyorsunuz. Çubuklar işlevinde gerekli olmadığı için hata kodu yoktur.

Ayrıca, bu durumda tam olarak oluşturulmuş zaman serisi dizileriyle uğraşıyoruz.

Bu, betiğimin biraz artırılmış kodundan açıkça görülüyor:

 void OnStart ()
  {
   datetime Arr[];
   if ( CopyTime ( _Symbol , PERIOD_W1 , 0 , 1 ,Arr)< 0 ) Print ( "Ошибка" );
   Print ( "Время открытия нулевого бара W1 = " + TimeToString (Arr[ 0 ]));
   ArraySetAsSeries (Arr, true );
   if ( CopyTime ( _Symbol , PERIOD_H4 , 0 , 100 ,Arr)< 0 ) Print ( "Ошибка" );
   Print ( "1 " + "CurrentTime = " + TimeToString ( TimeCurrent ()));
   int Res= Bars ( _Symbol , PERIOD_W1 ,Arr[ 99 ], TimeCurrent ());   // выполняется быстро   
   Print ( "2 Время открытия 99 бара H4 = " + TimeToString (Arr[ 99 ])+ "  Номер бара W1= " + IntegerToString (Res)); 
   Res= Bars ( _Symbol , PERIOD_W1 ,Arr[ 0 ], TimeCurrent ());       // выполнение происходит более 10 секунд!!!   
   Print ( "3 Время нулевого бара H4 = " + TimeToString (Arr[ 0 ])+ "  Номер бара W1= " + IntegerToString (Res));
  }

Sonuç:

 2018.03 . 30 23 : 39 : 31.079 BagBars (EURUSD,H4)     Время открытия нулевого бара W1 = 2018.03 . 25 00 : 00
2018.03 . 30 23 : 39 : 31.079 BagBars (EURUSD,H4)     1 CurrentTime = 2018.03 . 30 23 : 54
2018.03 . 30 23 : 39 : 31.079 BagBars (EURUSD,H4)     2 Время открытия 99 бара H4 = 2018.03 . 08 20 : 00   Номер бара W1= 3
2018.03 . 30 23 : 39 : 47.176 BagBars (EURUSD,H4)     3 Время нулевого бара H4 = 2018.03 . 30 20 : 00   Номер бара W1= 0
 
A100 :

Belki bu komut dosyası anlamada yardımcı olur

Komut dosyanız bu sorunu gösteriyor - asılı.

start_time - stop_time zaman aralığı haftalık çubuğun içinde bulunduğundan.

Haftalık çubuğun ötesine geçerseniz, takılma olmaz:

 Bars ( _Symbol , PERIOD_W1 , D'2018.03. 12 ' , D'2018.03.23' );

Daha iyi örnek için teşekkürler.

 

МТ4 işlevlerinde CopyHigh, CopyLow (diğerlerine bakmadım) test cihazında geçmiş yokken kritik bir hataya neden oldu. EA, H1 üzerinde test edildi ve istek M1'den geldi

1 15:14:35.410 2017.01.04 19:54:24  Access violation read to 0x0A971FE8 in 'C:\Users\Halyna\AppData\Roaming\MetaQuotes\Terminal\287469DEA9630EA94D0715D755974F1B\MQL4\Experts\____________.ex4'

3 15:14:35.465 2017.01.04 19:54:24 EA'daki kritik bir hata nedeniyle test geçişi durduruldu