Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 699

 
Dmitry Belov:

Здравствуйте, подскажите пожалуйста, почему в сомменте не выводит ZigD[0]

А ZigM[0] выводит?

 
Alexey Viktorov:

А ZigM[0] выводит?

Да выводит...


	          
 
Dmitry Belov:

Да выводит... 

Извините, я не внимательно посмотрел код...

Когда zzz>0 это значит что значение может быть равно или high или low бара. Соответственно это значение надо сверять с этими значениями и в зависимости от результата помещать в один или другой массив.

 
Alexey Viktorov:

Извините, я не внимательно посмотрел код...

Когда zzz>0 это значит что значение может быть равно или high или low бара. Соответственно это значение надо сверять с этими значениями и в зависимости от результата помещать в один или другой массив.

Я так и делаю, только он почему то ZigD[] не выводит и вообще не выводит если добавить ZigD, если его закомментировать, то все выводит

//+------------------------------------------------------------------+
//|                                                           01.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int nn=30;

int  ww=0, kk=0;
int dd=0;
double zz,SredRazmax, zzz;
double HZZ[], ZigM[];
int ZigD[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,HZZ);
   SetIndexBuffer(1,ZigM);
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexEmptyValue(0,0.0);
   SredRazmax=0.0;
//---
   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[])
  {
//---
   int shift,limit;
//--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      SredRazmax=0.0;
      ArrayInitialize(HZZ,0.0);
     }
   else limit=rates_total-prev_calculated+1;
   for(shift=limit; shift>=0; shift--)
     {
      zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,shift);
      if(zz>0.0)
        {
         HZZ[shift]=zz;
        }
     }
     for(ww = 0; ww <= Bars-1; ww++)
  {
      zzz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, ww);
      
           if(zzz > 0.0)   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }       
   
   // Расчет средних значений 
     for(kk=0;kk<=nn;kk++)
     {
        if(ZigM[kk]>ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1]);}
        if(ZigM[kk]<ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1])*(-1);}
     if(IsStopped()) 
     break; 
     }
    Comment("Средний размах = ",SredRazmax/nn,",",ZigM[0],",",ZigM[1]);
    Comment(ZigD[0]);
   return(0);
  }
  //+-  
 

Здравствуйте,Люди!

На вскидку не нашёл более подходящего "окошка",куда можно обратиться с вопросом по МТ4.

При открытии терминала стали вдруг пропадать строки терминала "статусная строка","стандартная","графики","графические инструменты" и "периоды графика". Повключаю,а при следующем открытии снова пустой терминал,только текущий график.

За много лет впервые с такой байдой встретился и не знаю что делать. Подскажите пожст. Заранее благодарю.

 
Vadens:

Здравствуйте,Люди!

На вскидку не нашёл более подходящего "окошка",куда можно обратиться с вопросом по МТ4.

При открытии терминала стали вдруг пропадать строки терминала "статусная строка","стандартная","графики","графические инструменты" и "периоды графика". Повключаю,а при следующем открытии снова пустой терминал,только текущий график.

За много лет впервые с такой байдой встретился и не знаю что делать. Подскажите пожст. Заранее благодарю.

Похоже у вас проблема с правами записи в директорию где стоит терминал. Если работаете под пользователем с ограниченными правами, то перенесите терминал в директорию где вы можете полноценно работать с файлами/папками.

 
Vadens:

Здравствуйте,Люди!

На вскидку не нашёл более подходящего "окошка",куда можно обратиться с вопросом по МТ4.

При открытии терминала стали вдруг пропадать строки терминала "статусная строка","стандартная","графики","графические инструменты" и "периоды графика". Повключаю,а при следующем открытии снова пустой терминал,только текущий график.

За много лет впервые с такой байдой встретился и не знаю что делать. Подскажите пожст. Заранее благодарю.

Полноэкранный режим у вас (F11)
 
Dmitry Belov:

Я так и делаю, только он почему то ZigD[] не выводит и вообще не выводит если добавить ZigD, если его закомментировать, то все выводит

И опять моя невнимательность...

Надеюсь теперь будет всё иначе :)))

А коммент не моргает??? Лучше написать так

    Comment("Средний размах = ",SredRazmax/nn,",",ZigM[0],",",ZigM[1],"\n" // Это перенос комментария на следующую строку
           , ZigD[0]);
 
Alexey Viktorov:

И опять моя невнимательность...

Надеюсь теперь будет всё иначе :)))

А коммент не моргает??? Лучше написать так

Спасибо, я уже сам смог разобраться, нужно было инициализировать массив как double и все заработало. Вот код индикатора если хотите, но он еще сырой, есть дальше задумки... Скажите, а Вы не знаете, как можно соммент отображать в левом нижнем углу или вверху посередине???

//+------------------------------------------------------------------+
//|                                                           01.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int nn=30;

int  ww=0, kk=0;
int dd=0;
double zz,SredRazmax, zzz, SredDlin;
double HZZ[], ZigM[];
double ZigD[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,HZZ);
   SetIndexBuffer(1,ZigM);
   SetIndexBuffer(2,ZigD);
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexEmptyValue(0,0.0);
   SredRazmax=0.0;
   SredDlin=0.0;
//---
   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[])
  {
//---
   int shift,limit;
//--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      SredRazmax=0.0;
      ArrayInitialize(HZZ,0.0);
     }
   else limit=rates_total-prev_calculated+1;
   for(shift=limit; shift>=0; shift--)
     {
      zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,shift);
      if(zz>0.0)
        {
         HZZ[shift]=zz;
        }
     }
     for(ww = 0; ww <= Bars-1; ww++)
  {
      zzz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, ww);
      
           if(zzz > 0.0)   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }       
   
   // Расчет средних значений 
     for(kk=0;kk<=nn;kk++)
     {
        if(ZigM[kk]>ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1]);}
        if(ZigM[kk]<ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1])*(-1);}
   //  if(IsStopped()) 
  //   break; 
     }
     for(dd=0;dd<=nn;dd++)
     {
        if(ZigD[dd]>0.0){SredDlin+=(ZigD[dd+1]-ZigD[dd]);}
        if(IsStopped()) 
     break;
     } 
    Comment("Средний размах = ",SredRazmax/nn,"//","Средняя продолжительность = ",SredDlin/nn,"//",ZigM[0],"//",ZigM[1],"//",ZigD[0],"//",ZigD[1]);
    return(0);
  }
  //+-  
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Машинное обучение в трейдинге: теория и практика...
 
Dmitry Belov:

Спасибо, я уже сам смог разобраться, нужно было инициализировать массив как double и все заработало. Вот код индикатора если хотите, но он еще сырой, есть дальше задумки... Скажите, а Вы не знаете, как можно соммент отображать в левом нижнем углу или вверху посередине???

Это невозможно. Только если воспользоваться графическим объектом OBJ_LABEL
Причина обращения: