Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1064

 
Oleg Kolesov:
Артем благодарю за ответ, как это сделать? Есть файл индикатора, есть файл советника с функцией iCustom. Влючаемый файл? 

Не распыляйте свои вопросы по разным темам форума - будет всем проще:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

Igor Makanu, 2019.06.13 18:09

Вам ответили в топике вопросы по MQL5 - включите индикатор как ресурс, не знаете как - начните с поиска по сайту "ресурс"

https://docs.mql4.com/ru/runtime/resources

Сервисдеск занимается финансовыми вопросами, а не обучением

Документация по MQL5: Программы MQL5 / Ресурсы
Документация по MQL5: Программы MQL5 / Ресурсы
  • www.mql5.com
В данном примере показано как проигрывать звуки из файлов Ok.wav и timeoit.wav, входящих в стандартную поставку терминала. Эти файлы находятся в папке означает папку, из которой запущен клиентский терминал MetaTrader 5.  Программным путем из mql5-программы каталог терминала можно узнать следующим образом: Расположение каталога данных терминала...
 

Я понял диалог здесь ведем. MQL большой! Надо прочесть. Спасибо за помощь. 

 
День добрый. Вопрос о генетическом алгоритме тестирования MT5. После остановки тестирования (например, для перезагрузки ПК) результаты прогонов остаются, а количество оставшихся для завершения тестирования прогонов возвращается к изначальному. Он начинает все заново, но с учетом уже имеющихся результатов? В описании алгоритма указано, что остановка не повлияет на ход тестирования, но при перезапуске (без изменений советника, без перекомпиляции) он, будто, начинает заново. Как это воспринимать? Уже спасибо.
 

не смог ни нагуглить, ни решить влет элементарную задачку (((

есть время удержания позиции в секундах, нужно получить время в виде час + минуты + секунды ,  ( как перевести все в дни/месяцы/часы/минуты/секунды  https://www.mql5.com/ru/code/353 - не то что нужно. не нужны дни и мес, нужно только часы хоть 1000 ч )

истина где то здесь, но минут много получаю!

void OnStart()
  {
   int timeinsec=100000;
   int h,m,s;
   SecondsToHMS(timeinsec,h,m,s);
   printf("h = %d , m = %d , s = %d",h,m,s);
  }
//+------------------------------------------------------------------+
void SecondsToHMS(int seconds,int &hour,int &min,int &sec)
  {
   hour= int(seconds/3600);
   sec = seconds - (hour * 3600);
   min = int(seconds / 60);
   sec = seconds - (min * 60);
  }
//+------------------------------------------------------------------+
2019.06.18 10:22:48.245 tst EURUSD,H1: h = 27 , m = 1666 , s = 40
 
Igor Makanu:

минут много получаю!

При вычислении минут не обновленное количество секунд используете.

 

Здравствуйте, Хочу сделать алерт при условии что максимум первой свечи равен максимум второй свечи. То есть не совсем равен а примерно, погрешность 5 пунктов. Помогите.

  {
//---
   if(rates_total<3) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      limit=rates_total-3;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
   for(int i=limit; i>=0; i--)
     {
      if (fabs(high[i+1]-high[i+2]) <= 5.0*_Point)

        {
         BufferDN[i+1]=high[i+1];
        }
     }
//--- return value of prev_calculated for next call

   return(rates_total);
  }

 
yiduwi:

То есть не совсем равен а примерно, погрешность 5 пунктов.

if (fabs(high[i+1]-high[i+2]) <= 5.0*_Point)

fxsaber:

При вычислении минут не обновленное количество секунд используете.

спасибо, это одна из ошибок, но все равно не соображу как получить из 159 002 секунд 44 часов 10 минут 2 секунд (онлайн калькулятор )) )


вот подобрал решение, но по моему что то не учел

//+------------------------------------------------------------------+
void OnStart()
  {
   int timeinsec=159002;
   int h,m,s;
   SecondsToHMS(timeinsec,h,m,s);
   printf("h = %d , m = %d , s = %d",h,m,s);
  }
//+------------------------------------------------------------------+
void SecondsToHMS(int seconds,int &hour,int &min,int &sec)
  {
   int s=seconds;
   sec = s%60;
   s-=sec;
   Print("s = ",s);
   min = int(s / 60)%60;
   hour= int(s/3600);
  }
//+------------------------------------------------------------------+
2019.06.18 11:46:22.691 tstss EURUSD,H1: h = 44 , m = 10 , s = 2
 
Igor Makanu:

Благодарю. а не подскажете почему стрелка ставится на второй бар, не на первый.

      if (fabs(high[i+1]-high[i+2]) <= 0.0*_Point)
        {
         BufferDN[i+1]=high[i+1];
        }
 
yiduwi:

Благодарю. а не подскажете почему стрелка ставится на второй бар, не на первый.

значит Вы ставите стрелку на второй бар, а не на первый - само же не рисуется? )))

наверное тут Вы прибавили лишнюю единичку  BufferDN[i+1]=high[i+1];  

 
Igor Makanu:

значит Вы ставите стрелку на второй бар, а не на первый - само же не рисуется? )))

наверное тут Вы прибавили лишнюю единичку  BufferDN[i+1]=high[i+1];  

Ух, без единицы, вообще стрелка ставится на третий бар, Код небольшой, где я напортачил?

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot UP
#property indicator_label1  "UP"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrLawnGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot DN
#property indicator_label2  "DN"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrDeepPink
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//--- indicator buffers
double         BufferUP[];
double         BufferDN[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferUP);
   SetIndexBuffer(1,BufferDN);
   PlotIndexSetInteger(0,PLOT_ARROW,233);
   PlotIndexSetInteger(1,PLOT_ARROW,234);

//---

   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(rates_total<3) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      limit=rates_total-3;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
   for(int i=limit; i>=0; i--)
     {
      if (fabs(high[i+1]-high[i+2]) <= 0.0*_Point)
        {
         BufferDN[i]=high[i];
        }
     }
//--- return value of prev_calculated for next call

   return(rates_total);
  }
На первый бар ставится, если так 
BufferDN[i+2]=high[i+2];
Не понимаю.