MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1359

 
azolotta :
tamam, ama o zaman, örneğin, son 3 çubuktan (if'deki koşullara karşılık gelen) en yüksek değeri seçip üzerine bir nokta koymam gerekirse (tam bu yükseklikte!), sonra da kodu nasıl yeniden işleyebilirim? düşük noktayı bulun.

Bunu dene ama emin değilim

 //+------------------------------------------------------------------+
//|                                                           AZ.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Anastasiya Zolotareva"
#property link        "insta"
#property version    "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 5
//--- plot myAZ
#property indicator_label1    "myAZ"
#property indicator_color1   Black
#property indicator_color2   Blue
#property indicator_color3   Orange
#property indicator_color4   Blue
#property indicator_color5   Orange
#property indicator_style1 STYLE_SOLID
#property indicator_style2 STYLE_SOLID
#property indicator_style3 STYLE_SOLID
#property indicator_style4 STYLE_SOLID
#property indicator_style5 STYLE_SOLID
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 1
#property indicator_width4 1
#property indicator_width5 1

extern int barsToProcess= 200 ; //количество последних баров в истории
//--- indicator buffers
double myAZBuffer[];
double ExtHighBuffer01[];
double ExtLowBuffer01[];
double ExtHighBuffer02[];
double ExtLowBuffer02[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---- drawing settings
   SetIndexStyle( 0 , DRAW_NONE );
   SetIndexStyle( 1 , DRAW_ARROW );
   SetIndexShift( 1 ,- 2 );
   SetIndexStyle( 2 , DRAW_ARROW );
   SetIndexShift( 2 ,- 2 );
   SetIndexStyle( 3 , DRAW_ARROW );
   SetIndexShift( 3 ,- 3 );
   SetIndexStyle( 4 , DRAW_ARROW );
   SetIndexShift( 4 ,- 3 );

//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,myAZBuffer);
   SetIndexBuffer ( 1 ,ExtHighBuffer01);
   SetIndexBuffer ( 2 ,ExtLowBuffer01);
   SetIndexBuffer ( 3 ,ExtHighBuffer02);
   SetIndexBuffer ( 4 ,ExtLowBuffer02);
   IndicatorShortName( "AZ" );
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|         deinit                                                         |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   if ((rates_total-prev_calculated-barsToProcess)<= 0 ) return ( 0 );
   int limit, val_index;
   if (barsToProcess> 0 ) limit=barsToProcess; 
   else
   limit=rates_total-prev_calculated-barsToProcess- 1 ;
  
   for ( int n=limit;n>= 0 ;n--)
     {
       if (Close[n+ 1 ]>Open[n+ 1 ] && Open[n+ 2 ]>=Close[n+ 2 ])
        {
         val_index= iLowest ( NULL , 0 , MODE_LOW , 3 ,n+ 1 );
         myAZBuffer[n]=Low[val_index];
         ExtLowBuffer01[n]=Low[val_index];
        }
       else
       if (Open[n+ 1 ]>Close[n+ 1 ] && Close[n+ 2 ]>=Open[n+ 2 ])
        {
         val_index= iHighest ( NULL , 0 , MODE_HIGH , 3 ,n+ 1 );
         myAZBuffer[n]=High[val_index];
         ExtHighBuffer01[n]=High[val_index];
        }
       else
       if (Close[n+ 1 ]>Open[n+ 1 ] && Open[n+ 3 ]>Close[n+ 3 ])
        {
         val_index= iLowest ( NULL , 0 , MODE_LOW , 3 ,n+ 1 );
         myAZBuffer[n]=Low[val_index];
         ExtLowBuffer02[n]=Low[val_index];
        }
       else
       if (Close[n+ 1 ]<Open[n+ 1 ] && Close[n+ 3 ]>Open[n+ 3 ])
        {
         val_index= iHighest ( NULL , 0 , MODE_HIGH , 3 ,n+ 1 );
         myAZBuffer[n]=High[val_index];
         ExtHighBuffer02[n]=High[val_index];
        }
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
 
MakarFX :

Bunu dene ama emin değilim

maalesef vardiya ile vites değiştirmek iyi bir seçenek değil. Sanırım kodumu standart zikzak içine yapıştırmayı deneyebilirsin. Şimdi etrafta dolaşıyorum, ama şu ana kadar boşuna. Zigzagdan geçmek mümkün mü sizce? Sonuçta, sonunda, yüksek-düşük-yüksek gibi dönüşümlü olarak bağlanmak için bulunan köşelere ihtiyacım var ve bir yüksek-yüksek veya düşük-düşük seçeneği varsa, o zaman bu ikinci yüksek ve alçaklar dahil edilmemelidir. diziler, ancak tam tersini bekleyin.

 
azolotta :

ne yazık ki shift shift iyi bir seçenek değil. Sanırım kodumu standart zikzak içine yapıştırmayı deneyebilirsin. Şimdi etrafta dolaşıyorum, ama şu ana kadar boşuna. Zigzagdan geçmek mümkün mü sizce? Sonuçta, sonunda, yüksek-düşük-yüksek gibi dönüşümlü olarak bağlanmak için bulunan köşelere ihtiyacım var ve bir yüksek-yüksek veya düşük-düşük seçeneği varsa, o zaman bu ikinci yüksek ve alçaklar dahil edilmemelidir. diziler, ancak tam tersini bekleyin .

Numara. Bir öncekini sıfırlamak ve mevcut olanı gösterge arabelleğine eklemek gerekir.

 
azolotta :

ne yazık ki shift shift iyi bir seçenek değil. Sanırım kodumu standart zikzak içine yapıştırmayı deneyebilirsin. Şimdi etrafta dolaşıyorum, ama şu ana kadar boşuna. Zigzagdan geçmek mümkün mü sizce? Sonuçta, sonunda, yüksek-düşük-yüksek gibi dönüşümlü olarak bağlanmak için bulunan köşelere ihtiyacım var ve bir yüksek-yüksek veya düşük-düşük seçeneği varsa, o zaman bu ikinci yüksek ve alçaklar dahil edilmemelidir. diziler, ancak tam tersini bekleyin.

Her durumda, bir gecikme olacaktır, yani. 2-3 önceki çubuk için koşullar karşılanana kadar çekmeyecektir.

Anladığım kadarıyla, yukarıdan aşağıya bir zikzak mı ihtiyacınız var?
 
MakarFX :

Her durumda, bir gecikme olacaktır, yani. 2-3 önceki çubuğun koşulları karşılanana kadar çekmeyecektir.

Anladığım kadarıyla, yukarıdan aşağıya doğru bir zikzak çizgisine mi ihtiyacınız var?

evet, ideal olarak, yüksekten düşüğe bir zikzak gerekir (böylece bu yüksekler ve alçaklar benim koşullarıma göre ise ve eğer arka arkaya iki veya daha fazla yüksek/düşük varsa, o zaman bu ikinci yüksek/düşükler olmamalıdır) görüntülenir, ancak geri dönüşü bekleyin). Göstergenin son 6 dip ve son 6 tepeyi göstermesi benim için yeterli. Ve ancak o zaman, daha fazla ihtiyaç için komut dosyasında/EA'da bulunan bu zikzak noktalarını aramak istiyorum.

 

Merhaba!

Hata ayıklama modunun neden değeri göstermediğini biri bana söyleyebilir mi?

MT5 programını güncelledikten sonra sorun başladı gibi görünüyor

Ve sütundaki değerin kırmızı rengi - Değerler ne anlama geliyor?

 
Mikhail Toptunov :

Merhaba!

Hata ayıklama modunun neden değeri göstermediğini biri bana söyleyebilir mi?

MT5 programını güncelledikten sonra sorun başladı gibi görünüyor

Ve sütundaki değerin kırmızı rengi - Değerler ne anlama geliyor?

1. Lütfen minimum bilgileri belirtin (terminali yeniden başlattıktan sonra Günlük sekmesinden ilk üç satır)

2. Yapınızı güncelleyin

 
azolotta :

evet, ideal olarak, yüksekten düşüğe bir zikzak gerekir (böylece bu yüksekler ve alçaklar benim koşullarıma göre ise ve eğer arka arkaya iki veya daha fazla yüksek/düşük varsa, o zaman bu ikinci yüksek/düşükler olmamalıdır) görüntülenir, ancak geri dönüşü bekleyin). Göstergenin son 6 dip ve son 6 tepeyi göstermesi benim için yeterli. Ve ancak o zaman, daha fazla ihtiyaç için komut dosyasında/EA'da bulunan bu zikzak noktalarını aramak istiyorum.

Ben bir programcı değilim ve henüz nasıl yardım edeceğimi bilmiyorum, ama düşüneceğim...
 
MakarFX :
Ben bir programcı değilim ve henüz nasıl yardım edeceğimi bilmiyorum, ama düşüneceğim...
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,                                                           |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает экстремум ЗигЗага по его номеру.                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
double GetExtremumZZPrice( string sy= "" , int tf= 0 , int ne= 0 , int dp= 12 , int dv= 5 , int bs= 3 ) {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double zz;
   int     i, k= iBars (sy, tf), ke= 0 ;

   for (i= 1 ; i<k; i++) {
    zz= iCustom (sy, tf, "ZigZag" , dp, dv, bs, 0 , i);
     if (zz!= 0 ) {
      ke++;
       if (ke>ne) return (zz);
    }
  }
   Print ( "GetExtremumZZPrice(): Экстремум ЗигЗага номер " ,ne, " не найден" );
   return ( 0 );
}

özel gösterge   Zikzaklı   ve fiyat seviyesini döndürür. İşlev, aşağıdaki isteğe bağlı parametreleri kabul eder:
  • sy   - Enstrümanın adı.   ""   veya   BOŞ   - geçerli sembol. Varsayılan değer   BOŞ .
  • tf   - Zaman aralığı. Varsayılan değer   0   - geçerli sembol.
  • ne   - Aşırı numara.   0   - geçen,   1   - öncesi,   2   - önceki vb.
  • dp ,   video   bs   - ZigZaga parametreleri: ExtDepth, ExtDeviation, ExtBackstep.

Переход на новые рельсы: пользовательские индикаторы в MQL5
Переход на новые рельсы: пользовательские индикаторы в MQL5
  • www.mql5.com
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
 
Iurii Tokman :

özel gösterge   Zikzaklı   ve fiyat seviyesini döndürür. İşlev, aşağıdaki isteğe bağlı parametreleri kabul eder:
  • sy   - Aracın adı.   ""   veya   BOŞ   - geçerli sembol. Varsayılan değer   BOŞ .
  • tf   - Zaman aralığı. Varsayılan değer   0   - geçerli sembol.
  • ne   - Aşırı numara.   0   - geçen,   1   - öncesi,   2   - önceki, vb.
  • dp ,   video   bs   - ZigZaga parametreleri: ExtDepth, ExtDeviation, ExtBackstep.

bu uymuyor, zikzak değil uç noktalara ihtiyacımız var