Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 466

 

Hepiniz hoşgeldiniz. Böyle bir soru vardı. Bir gösterge var (değiştirilmiş fraktallar), grafiğe yüklendiğinde her şey doğru, olması gerektiği gibi çalışıyor ancak bir danışmanda kullanmaya çalıştığınızda arabellek boş diyor. Aynı zamanda tamponu Deinit'te geçirerek doğru değerleri saklar.

gösterge kaynakları ektedir. Neyi yanlış yaptığım konusunda tavsiye ve ipuçlarını dinlemeye hazırım.

Danışmandan gelen kod:

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (Time[ 0 ] == prevtime) return ;
   prevtime = Time[ 0 ];
   

   if ( iCustom ( NULL , 0 , "modify_Fractal" , 0 , 0 ) > 0 ) Print ( "x = " , 0 , "  fractal Up: " , iCustom ( NULL , 0 , "modify_Fractal" , 0 , 0 ));     
   if ( iCustom ( NULL , 0 , "modify_Fractal" , 0 , 2 ) > 0 ) Print ( "x = " , 2 , "  fractal Up: " , iCustom ( NULL , 0 , "modify_Fractal" , 0 , 2 ));
   if ( iCustom ( NULL , 0 , "modify_Fractal" , 0 , 3 ) > 0 ) Print ( "x = " , 3 , "  fractal Up: " , iCustom ( NULL , 0 , "modify_Fractal" , 0 , 3 ));   
   if ( iCustom ( NULL , 0 , "modify_Fractal" , 0 , 4 ) > 0 ) Print ( "x = " , 4 , "  fractal Up: " , iCustom ( NULL , 0 , "modify_Fractal" , 0 , 4 ));
   if ( iCustom ( NULL , 0 , "modify_Fractal" , 0 , 5 ) > 0 ) Print ( "x = " , 5 , "  fractal Up: " , iCustom ( NULL , 0 , "modify_Fractal" , 0 , 5 )); 
   if ( iCustom ( NULL , 0 , "modify_Fractal" , 0 , 6 ) > 0 ) Print ( "x = " , 6 , "  fractal Up: " , iCustom ( NULL , 0 , "modify_Fractal" , 0 , 6 ));
   
  // тут везде 0
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
       Print ( "Deinit Function" );
      
       for ( int x = 0 ; x < 100 ; x++ )
      {
         if ( iCustom ( NULL , 0 , "modify_Fractal" , 0 ,x) > 0 ) Print ( "x = " , x, "  fractal Up: " , iCustom ( NULL , 0 , "modify_Fractal" , 0 ,x));
         if ( iCustom ( NULL , 0 , "modify_Fractal" , 1 ,x) > 0 ) Print ( "x = " , x, "  fractal Down: " , iCustom ( NULL , 0 , "modify_Fractal" , 1 ,x));
      }
   // а здесь полный буфер правильных значений индикатора.
  }
Dosyalar:
 
Karputov Vladimir :

Sonundaki if'leri şu şekilde değiştirebilirsiniz:

ha çok kolay :)

teşekkürler

 
Maxim Dobrovolskii :

Hepiniz hoşgeldiniz. Böyle bir soru vardı. Bir gösterge var (değiştirilmiş fraktallar), grafiğe yüklendiğinde her şey doğru, olması gerektiği gibi çalışıyor ancak bir danışmanda kullanmaya çalıştığınızda arabellek boş diyor. Aynı zamanda tamponu Deinit'e geçirerek doğru değerleri saklar.

gösterge kaynakları ektedir. Neyi yanlış yaptığım konusunda tavsiye ve ipuçlarını dinlemeye hazırım.

Danışmandan gelen kod:

Çok hızlı baktım. Soru: Bir fraktal sıfır çubuğunda olabilir mi? Ancak OnDeinit()'te çubuklar arasında dolaşıyorsunuz ve elbette bir fraktal buluyorsunuz (boş bir arabellek değeri değil).
 
Artyom Trishkin :
Çok hızlı baktım. Soru: Bir fraktal sıfır çubuğunda olabilir mi? Ancak OnDeinit()'te çubuklar arasında dolaşıyorsunuz ve elbette bir fraktal buluyorsunuz (boş bir arabellek değeri değil).
sıfır barda olamaz, en az 4,0-3 var “belki çok çarpık ve yanlış bir şey yaptım” diye yazdım. Deinit'te de 4-6'dan geçiyorum ve her şey yerli yerinde, değerler var. bu benim için net değil.
 
Maxim Dobrovolskii :
sıfır barda olamaz, en az 4,0-3 var “belki çok çarpık ve yanlış bir şey yaptım” diye yazdım. Deinit'te de 4-6'dan geçiyorum ve her şey yerli yerinde, değerler var. bu benim için net değil.

OnDeinit()'te sıfır olmayan bir değer aramak için çubuklar arasında (0'dan 100'e kadar) döngü yaparsınız ve bulunan değeri günlüğe kaydedersiniz.

Ve OnTick()'te sadece tampon 0'ın son 6 çubuğunu görüntülemeye çalışıyorsunuz. Üzerinde fraktal olmayabilir.

Önce, fraktal içeren çubuğu, ardından bu çubuğun ve çıktının değerini ve bunları bulun.

 
Artyom Trishkin :

OnDeinit()'te sıfır olmayan bir değer aramak için çubuklar arasında (0'dan 100'e kadar) döngü yaparsınız ve bulunan değeri günlüğe kaydedersiniz.

Ve OnTick()'te sadece tampon 0'ın son 6 çubuğunu görüntülemeye çalışıyorsunuz. Üzerinde bir fraktal olabilir veya olmayabilir. Önce, fraktal içeren çubuğu, ardından bu çubuğun ve çıktının değerini ve bunları bulun.

6. barda planlandığı gibi bir fraktal olmalıdır.

2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi! EURUSD,H1: x = 29 fraktal Yukarı: 1.09855
2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi! EURUSD,H1: x = 21 fraktal Yukarı: 1.09976
2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi! EURUSD,H1: x = 16 fraktal Aşağı: 1.09652
2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi! EURUSD,H1: x = 6 fraktal Yukarı: 1.10721
2015.11.01 13:19:10.577 2015.10.30 22:54 MoneyRobotics_Proboi! EURUSD,H1: Tanım Fonksiyonu
2015.11.01 13:19:08.380 2015.10.01 00:00 MoneyRobotics_Proboi! test başladı

bu günlüğün başlangıcıdır. testin başlangıcında danışman tamamlandı, Deinit başlatıldı ve hemen 6. konumda bir fraktal buldu. Bu durumda, gösterge arabelleğine nasıl erişileceği benim için net değil.



https://charts.mql5.com/9/256/eurusd-h1-alpari-limited-3.png

görüntü tekrarı

Dosyalar:
 
Maxim Dobrovolskii :

6. barda planlandığı gibi bir fraktal olmalıdır.

2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi! EURUSD,H1: x = 29 fraktal Yukarı: 1.09855
2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi! EURUSD,H1: x = 21 fraktal Yukarı: 1.09976
2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi! EURUSD,H1: x = 16 fraktal Aşağı: 1.09652
2015.11.01 13:19:11.023 2015.10.30 22:54 MoneyRobotics_Proboi! EURUSD,H1: x = 6 fraktal Yukarı: 1.10721
2015.11.01 13:19:10.577 2015.10.30 22:54 MoneyRobotics_Proboi! EURUSD,H1: Tanım Fonksiyonu
2015.11.01 13:19:08.380 2015.10.01 00:00 MoneyRobotics_Proboi! test başladı

bu günlüğün başlangıcıdır. testin başlangıcında danışman tamamlandı, Deinit başlatıldı ve hemen 6. konumda bir fraktal buldu. Bu durumda, gösterge arabelleğine nasıl erişileceği benim için net değil.



https://charts.mql5.com/9/256/eurusd-h1-alpari-limited-3.png

görüntü tekrarı

Bu:

 if (Time[ 0 ] == prevtime) return ;
   prevtime = Time[ 0 ];

yapmak

prevtime = Time[ 0 ];

Sonunda

 
Artyom Trishkin :

Bu:

yapmak

Sonunda

ve nasıl etkileyebilir? ne yazık ki değişen bir şey yok.

süreci hayal ettiğim gibi: gösterge yüklenir, her onay/çubuk koşulu kontrol etmeye başlar, eğer karşılanırsa, değeri seçilen arabellek veya arabelleklere koyar, sonra danışman göstergeye arabellek numarasıyla bir değere erişir. belirli ofset ve değeri alır. Böyle?

 
Maxim Dobrovolskii :

ve nasıl etkileyebilir? ne yazık ki değişen bir şey yok.

süreci hayal ettiğim gibi: gösterge yüklenir, her tik/çubuk durumu kontrol etmeye başlar, eğer karşılanırsa değeri seçilen arabellek veya arabelleklere koyar, ardından danışman göstergeye arabellek numarasıyla bir değere erişir. belirli ofset ve değeri alır. Böyle?

Göstergede neden yeni bir çubuk kontrolü var? Görünüşe göre karmaşık hesaplamalar yok
 
Victor Nikolaev :
Göstergede neden yeni bir çubuk kontrolü var? Görünüşe göre karmaşık hesaplamalar yok
göstergeyi kullanan bir EA'da yeni bir çubuğun kontrolü.