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

 
KolyanSNA :
Merhaba! Terminalde yazı tipi boyutu nasıl değiştirilir? Birisi önerebilir mi?

Belki böyle bir ihtiyacınız varsa, OS ekran ayarlarındaki ölçeği değiştirmek size yardımcı olacaktır.

 

OnChartEvent'ten , fare grafik üzerinde tıklandığı anda klavyedeki herhangi bir düğmeye basılıp basılmadığını bir şekilde belirlemek mümkün müdür?

 

Göstergeleri anlamak için yardım istiyorum.

Burada her yeni çubuğun açılışında bir yeniden hesaplama yapılmalıdır.

Mantık - ZigZag, altları (iki komşu çubuğun altındaki son 3 çubuğun ortalamasının en düşük değeri) ve üstleri (iki komşu çubuğun üstündeki son 3 çubuğun ortalamasının yüksek olanı) seri olarak bağlamalıdır.

Tepeyi yeni bir üst takip ediyorsa, gösterge yenisine yeniden çizilir, eskisi silinir, anlaşılır bence.

Aslında, gösterge tüm yüksek ve alçakları seri olarak birbirine bağlar, sorun nedir?

 #property indicator_chart_window
#property indicator_buffers 2 
#property indicator_plots    1 
//--- plot ZigZag 
#property indicator_label1    "ZigZag" 
#property indicator_type1    DRAW_ZIGZAG 
#property indicator_color1    clrBlue 
#property indicator_style1    STYLE_SOLID 
#property indicator_width1    1 
//--- indicator buffers 
double          ZigZagBuffer1[]; 
double          ZigZagBuffer2[]; 
double a = 0 ;
int last = 0 ; //В последний раз была вершина или низина 
int lastN = 0 ; //Номер бара с экстремумом
//+------------------------------------------------------------------+ 
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+ 
int OnInit () 
  { 
//--- связывание массивов и индикаторных буферов 
   SetIndexBuffer ( 0 ,ZigZagBuffer1, INDICATOR_DATA ); 
   SetIndexBuffer ( 1 ,ZigZagBuffer2, INDICATOR_DATA ); 
//--- значение 0 (пустое значение) не будет участвовать в отрисовке 
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , 0 ); 
   ArrayInitialize (ZigZagBuffer1, EMPTY_VALUE );
   ArrayInitialize (ZigZagBuffer2, EMPTY_VALUE );
//--- значение 0 (пустое значение) не будет участвовать в отрисовке 
   PlotIndexSetString ( 0 , PLOT_LABEL , "ZigZag1;ZigZag2" ); 
//--- 
   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[]) 
{ 
   if (a != iOpen ( _Symbol , PERIOD_CURRENT , 0 ))
   {
      a = iOpen ( _Symbol , PERIOD_CURRENT , 0 );
       for ( int i = Bars ( _Symbol , PERIOD_CURRENT ) - 3 ; i > 0 ; i--)
      {
         if (high[i] <= high[i+ 1 ] && high[i+ 2 ] <= high[i+ 1 ] && low[i] >= low[i+ 1 ] && low[i+ 2 ] >= low[i+ 1 ]) //В обе стороны на одном баре
         {
             if (last == 0 ) continue ; //Если с этого начинается расчет - пропускаем просто
             if (last == 1 ) //Если была вершина
            {
               if (high[lastN] > high[i+ 1 ]) //Если новая верщина не перебила старую
               {
                  ZigZagBuffer1[i+ 1 ] = high[i+ 1 ];
                  ZigZagBuffer2[i+ 1 ] = low[i+ 1 ];
                  lastN = i+ 1 ;
                   continue ;
               }
               //Если перебила
               ZigZagBuffer1[lastN] = EMPTY_VALUE ;
               ZigZagBuffer1[i+ 1 ] = high[i+ 1 ];
               ZigZagBuffer2[i+ 1 ] = low[i+ 1 ];
               last = - 1 ;
               lastN = i+ 1 ;
               continue ;
            }
             if (last == - 1 )
            {
               if (low[lastN] < low[i+ 1 ]) //Если новая низина не перебила старую
               {
                  ZigZagBuffer1[i+ 1 ] = high[i+ 1 ];
                  ZigZagBuffer2[i+ 1 ] = low[i+ 1 ];
                  lastN = i+ 1 ;
                   continue ;
               }
               //Если перебила
               ZigZagBuffer2[lastN] = EMPTY_VALUE ;
               ZigZagBuffer1[i+ 1 ] = high[i+ 1 ];
               ZigZagBuffer2[i+ 1 ] = low[i+ 1 ];
               last = 1 ;
               lastN = i+ 1 ;
               continue ;
            }
         }
         if (high[i] <= high[i+ 1 ] && high[i+ 2 ] <= high[i+ 1 ]) //Новая вершина
         {
             if (last == 0 )
            {
               last = 1 ;
               lastN = i+ 1 ;
               ZigZagBuffer1[i+ 1 ] = high[i+ 1 ];
               continue ;
            }
             if (last == 1 )
            {
               ZigZagBuffer1[lastN] = EMPTY_VALUE ;
               ZigZagBuffer1[i+ 1 ] = high[i+ 1 ];
               lastN = i+ 1 ;
               continue ;
            }
             if (last == - 1 )
            {
               ZigZagBuffer1[i+ 1 ] = high[i+ 1 ];
               lastN = i+ 1 ;
               last = 1 ;
               continue ;
            }
         }
         if (low[i] >= low[i+ 1 ] && low[i+ 2 ] >= low[i+ 1 ])//Новая низина
         {
             if (last == 0 )
            {
               last = - 1 ;
               lastN = i+ 1 ;
               ZigZagBuffer2[i+ 1 ] = low[i+ 1 ];
               continue ;
            }
             if (last == - 1 )
            {
               ZigZagBuffer2[lastN] = EMPTY_VALUE ;
               ZigZagBuffer2[i+ 1 ] = low[i+ 1 ];
               lastN = i+ 1 ;
               continue ;
            }
             if (last == 1 )
            {
               ZigZagBuffer2[i+ 1 ] = low[i+ 1 ];
               lastN = i+ 1 ;
               last = - 1 ;
               continue ;
            }
         }
      }
   }
   
   return (rates_total); 
} 
Обработчик события "новый бар"
Обработчик события "новый бар"
  • www.mql5.com
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
 
Roman Sharanov :

Göstergeleri anlamak için yardım istiyorum.

Burada her yeni çubuğun açılışında bir yeniden hesaplama yapılmalıdır.

Mantık - ZigZag, altları (iki komşu çubuğun altındaki son 3 çubuğun ortalamasının en düşük değeri) ve üstleri (iki komşu çubuğun üstündeki son 3 çubuğun ortalamasının yüksek olanı) seri olarak bağlamalıdır.

Tepeyi yeni bir üst takip ediyorsa, gösterge yenisine yeniden çizilir, eskisi silinir, anlaşılır bence.

Aslında, gösterge tüm yüksek ve alçakları seri olarak birbirine bağlar, sorun nedir?

Anladığım kadarıyla 2 işleme arabelleğiniz var. İkisi de çizilir. Her tamponun kendi hattı vardır, bir ekstremumdan geçersiniz. Bir zikzak içinde 3 tampon vardır. Maksimumlar arabelleğinde kaydedilen son maksimumdan sonra iki yüksek ve alçak için ayrı ayrı hesaplanan ve biri özelliğe göre çizim için bir minimum arıyoruz ve tam tersi.

 
Soru şu ki, MT4 için standart kitaplıkların bir açıklaması var mı, yok mu? bir arama ile bulamadı.
 
Valeriy Yastremskiy :

Anladığım kadarıyla 2 işleme arabelleğiniz var. İkisi de çizilir. Her tamponun kendi hattı vardır, bir ekstremumdan geçersiniz. Bir zikzak içinde 3 tampon vardır. Maksimumlar arabelleğinde kaydedilen son maksimumdan sonra iki yüksek ve alçak için ayrı ayrı hesaplanan ve biri özelliğe göre çizim için bir minimum arıyoruz ve tam tersi.

yardımda - zikzak 2 arabellek üzerine kuruludur, örnek ayrıca 2 arabellek ile

 
Valeriy Yastremskiy :
Soru şu ki, MT4 için standart kitaplıkların bir açıklaması var mı, yok mu? bir arama ile bulamadı.
Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
 
Artyom Trishkin :

MT4.

Yazılara saygılar. Harika iş.

 
Roman Sharanov :

yardımda - zikzak 2 arabellek üzerine kuruludur, örnek ayrıca 2 arabellek ile

ZZ kodunun başlangıcı.

 //+------------------------------------------------------------------+
//|                                                       ZigZag.mq4 |
//|                   Copyright 2006-2014, MetaQuotes Software Corp. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2006-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property strict

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1   Red
//---- indicator parameters
input int InpDepth= 12 ;     // Depth
input int InpDeviation= 5 ;   // Deviation
input int InpBackstep= 3 ;   // Backstep
//---- indicator buffers
double ExtZigzagBuffer[];
double ExtHighBuffer[];
double ExtLowBuffer[];

Bir işleme arabelleği. Üç dizi.

Koda bak. Mantık karmaşık. Genellikle yarasadan zordur.

Rusçaya çevrilmiş yorumlarla birlikte ZigZag kodu
Dosyalar:
ZigZagRu.mq4  19 kb
 
Valeriy Yastremskiy :

MT4.

Yazılara saygılar. Harika iş.

Önemli değil - hemen hemen her şey uyuyor.

Teşekkür ederim.