Самообучение языку MQL5 с полного нуля - страница 79

 
Valeriy Yastremskiy:

Мне Артем Тришкин  на тот же вопрос ответил, потому что это ссылка (апперсанд), поэтому может стоять в любом месте. надо без пробелов попробовать для чистоты эксперимента.

Спасибо, Валерий! Обязательно учту этот момент, если когда-нибудь столкнусь с подобной проблемой.

С наступающим Рождеством!

С уважением, Владимир.

 

Всем удачной торговли и хорошего настроения!

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

input string Symbol_Main="EURUSD";          //Валютная пара, на которую ставим советник
input ENUM_TIMEFRAMES Time_Frame=PERIOD_H1; //Таймфрейм, на который ставим советник

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   /* Определим график валютной пары и таймфрейм, на который будем устанавливать советник. */
   /* Если текущий график валютной пары и текущий таймфрейм совпадают со входными параметрами */
   if(_Symbol==Symbol_Main && _Period==Time_Frame)
     {
      /* выводим окно сообщений на торговом терминале и продолжаем работу советника */
      MessageBox("Работа советника разрешена! Продолжим!");
      return(INIT_SUCCEEDED); //возвращаем для функции OnInit значение означающее "удачная инициализация"
     }
   /* Если текущий график валютной пары и текущий таймфрейм не совпадают со входными параметрами */
   if(_Symbol!=Symbol_Main && _Period!=Time_Frame)
     {
      /* выводим окно сообщений на торговом терминале и закрываем советник */
      MessageBox("Не совпадают валютная пара и таймфрейм! Выходим!");
      return(INIT_FAILED); //возвращаем для функции OnInit значение означающее "неудачная инициализация"
     }
   /* Если текущий график валютной пары не совпадает со входным параметром */
   if(_Symbol!=Symbol_Main)
     {
      /* выводим окно сообщений на торговом терминале и закрываем советник */
      MessageBox("Не совпадает валютная пара! Выходим!");
      return(INIT_FAILED); //возвращаем для функции OnInit значение означающее "неудачная инициализация"
     }
   /* Если текущий таймфрейм не совпадает со входным параметром */
   if(_Period!=Time_Frame)
     {
      /* выводим окно сообщений на торговом терминале и закрываем советник */
      MessageBox("Не совпадет таймфрейм! Выходим!");
      return(INIT_FAILED); //возвращаем для функции OnInit значение означающее "неудачная инициализация"
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+

Возможно, что кому-нибудь понадобится.

С уважением, Владимир.

 

Всем доброго дня и хорошего настроения!

Появилось немного свободного времени и решил продолжить самообучение. Только вот вдруг неожиданно столкнулся с проблемой. Раньше, когда в своем советнике Trailing_Stop_(v.2).mq5  делал вот такой запрос на торговый сервер:

   /*  Создадим запрос на сервер и получим ответ с результатом */
   MqlTradeRequest request= {0};
   MqlTradeResult result= {0};

никаких проблем при компиляции кода не было. Теперь компилятор выдает вот такую ошибку:

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'    Trailing_Stop_(v.2).mq5    411    30

Если после request в фигурных скобках убираю ноль,

   /*  Создадим запрос на сервер и получим ответ с результатом */
   MqlTradeRequest request= {};
   MqlTradeResult result= {0};

то тогда компилятор ошибку не выдает. Помогите, пожалуйста, разобраться с чем это может быть связано?

С уважением, Владимир.

 
MrBrooklin:

Всем доброго дня и хорошего настроения!

Появилось немного свободного времени и решил продолжить самообучение. Только вот вдруг неожиданно столкнулся с проблемой. Раньше, когда в своем советнике Trailing_Stop_(v.2).mq5  делал вот такой запрос на торговый сервер:

никаких проблем при компиляции кода не было. Теперь компилятор выдает вот такую ошибку:

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'    Trailing_Stop_(v.2).mq5    411    30

Если после request в фигурных скобках убираю ноль,

то тогда компилятор ошибку не выдает. Помогите, пожалуйста, разобраться с чем это может быть связано?

С уважением, Владимир.

Да, теперь ноль не пишите для обнуления.

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

Особенности языка mql5, тонкости и приёмы работы

Ilyas, 2021.05.28 18:18

Мы расширяем инициализирующие последовательности "{ ... }", в ближайшем билде будет разрешено использовать любое выражение, а не только константное.

Вместо с этим изменением, появится и граничение на использование констант для перечислений (как для обычного выражения): если константа не входит в перечисление, то будет выдана соответствующая ошибка.

Анализ существующих кодов показал, что часто неправильно используется последовательность из одного нуля - "{0}"

Например так:

MqlTradeRequest request={0};


Такая запись означает, выставить значение ноль для первого поля структуры и обнулить остальные поля.

Для приведённой выше строки кода, по новым правилам, будет выдана ошибка, т.к. первое поле имеет тип ENUM_TRADE_REQUEST_ACTIONS, перечисление, в котором отсутствует значение "0"

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


Правильно будет так:

MqlTradeRequest request={};

 
Vladimir Karputov:

Да, теперь ноль не пишите для обнуления.

Спасибо, Владимир!

Век живи - век учись! Ещё бы разработчики в Справочнике MQL5 это везде поправили, то было бы здорово!

С уважением, Владимир.

 

Всем доброго утра!

Продолжаю самообучение языку программирования MQL5. Решил написать функцию для получения сигнала от индикатора ZigZag. Стал его досконально изучать и сразу появились вопросы. Во входных параметрах индикатора есть:

input int Depth      = 12;  // Depth
input int Deviation  = 5;   // Deviation
input int Backstep   = 3;   // Backstep

Так как не силён в английском языке, поэтому приходится пользоваться Гугл переводчиком. Что даёт перевод в чистом виде:

Depth - глубина
Deviation - отклонение
Backstep - шаг назад

Вопросы:

  1. Если глубина, то глубина чего?
  2. Если отклонение, то отклонение от чего, от какого параметра или величины? 
  3. Если шаг назад, то почему шаг назад? Разве он движется не вперёд?

Уважаемые специалисты, помогите разобраться!

С уважением, Владимир.

 
MrBrooklin:

Всем доброго утра!

Продолжаю самообучение языку программирования MQL5. Решил написать функцию для получения сигнала от индикатора ZigZag. Стал его досконально изучать и сразу появились вопросы. Во входных параметрах индикатора есть:

Так как не силён в английском языке, поэтому приходится пользоваться Гугл переводчиком. Что даёт перевод в чистом виде:

Вопросы:

  1. Если глубина, то глубина чего?
  2. Если отклонение, то отклонение от чего, от какого параметра или величины? 
  3. Если шаг назад, то почему шаг назад? Разве он движется не вперёд?

Уважаемые специалисты, помогите разобраться!

С уважением, Владимир.

Элементарно - поиск в помощь, " Разве он движется не вперёд " -   тут вся история движется назад!!! :-)

https://www.mql5.com/ru/code/7796


Depth это минимальное кол-во баров, на котором не будет второго максимума (минимума) меньше (больше) на Deviation пипсов, чем предыдущего, то есть расходиться ZigZag может всегда, а сходится (либо сдвинуться целиком) больше, чем на Deviation, ZigZag может только после Depth баров. Backstep это минимальное количество баров между максимумами (минимумами).


В строке поиска вбейте: например, зиг заг параметры,  https://www.mql5.com/ru/search#!keyword=%D0%B7%D0%B8%D0%B3%20%D0%B7%D0%B0%D0%B3%20%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B&amp;page=2</b></p>

ПС элементарные вещи...

ZigZag
ZigZag
  • www.mql5.com
ZigZag отслеживает и соединяет между собой крайние точки графика отстоящие друг от друга не менее чем на заданный процент по шкале цены.
 
Roman Shiredchenko:

Элементарно - поиск в помощь, " Разве он движется не вперёд " -   тут вся история движется назад!!! :-)

https://www.mql5.com/ru/code/7796


Depth это минимальное кол-во баров, на котором не будет второго максимума (минимума) меньше (больше) на Deviation пипсов, чем предыдущего, то есть расходиться ZigZag может всегда, а сходится (либо сдвинуться целиком) больше, чем на Deviation, ZigZag может только после Depth баров. Backstep это минимальное количество баров между максимумами (минимумами).


В строке поиска вбейте: например, зиг заг параметры,  https://www.mql5.com/ru/search#!keyword=%D0%B7%D0%B8%D0%B3%20%D0%B7%D0%B0%D0%B3%20%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B&amp;page=2</b></p>

ПС элементарные вещи...

Огромное спасибо, Роман! Вы дали самое сжатое, но, в тоже время, понятное разъяснение.

С уважением, Владимир.

 
MrBrooklin:

Огромное спасибо, Роман! Вы дали самое сжатое, но, в тоже время, понятное разъяснение.

С уважением, Владимир.

Спс, что заценили, я по-доброму, без подковерного стеба! Там с улыбочкой!
 

Всем доброго дня!

При тестировании одного советника столкнулся с проблемой. У него есть такой код функции инициализации советника:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- достаточно ли количество баров для работы
   if(Bars(_Symbol,_Period)<60) // общее количество баров на графике меньше 60?
     {
      Alert("На графике меньше 60 баров, советник не будет работать!!");
      return(-1);
     }
//--- получить хэндл индикатора Bollinger Bands и DEMA
   BolBandsHandle=iBands(NULL,PERIOD_M30,bands_period,bands_shift,deviation,PRICE_CLOSE);
   demaHandle=iDEMA(NULL,PERIOD_D1,dema_period,0,PRICE_CLOSE);
//--- Нужно проверить, не были ли возвращены значения Invalid Handle
   if((BolBandsHandle<0) || (demaHandle<0))
     {
      Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");
      return(-1);
     }

   return(0);
  }

В ходе тестирования советника в журнале появляются сообщения:

2021.10.31 13:19:25.752 Core 2  genetic pass (0, 288) tested with error "OnInit returned non-zero code -1" in 0:00:00.000
2021.10.31 13:19:26.835 Core 2  genetic pass (0, 298) tested with error "OnInit returned non-zero code -1" in 0:00:00.000
2021.10.31 13:19:26.921 Core 1  genetic pass (0, 42) tested with error "OnInit returned non-zero code -1" in 0:00:00.000
2021.10.31 13:19:27.847 Core 2  genetic pass (0, 318) tested with error "OnInit returned non-zero code -1" in 0:00:00.000
2021.10.31 13:19:27.848 Core 2  genetic pass (0, 326) tested with error "OnInit returned non-zero code -1" in 0:00:00.000
2021.10.31 13:19:29.907 Core 2  genetic pass (0, 359) tested with error "OnInit returned non-zero code -1" in 0:00:00.000
2021.10.31 13:19:29.907 Core 2  genetic pass (0, 371) tested with error "OnInit returned non-zero code -1" in 0:00:00.000
2021.10.31 13:19:30.009 Core 1  genetic pass (0, 102) tested with error "OnInit returned non-zero code -1" in 0:00:00.000
2021.10.31 13:19:30.009 Core 1  genetic pass (0, 105) tested with error "OnInit returned non-zero code -1" in 0:00:00.000
2021.10.31 13:19:31.044 Core 1  genetic pass (0, 122) tested with error "OnInit returned non-zero code -1" in 0:00:00.000

и т.д.

Выяснил, что проблема кроется в проверке хэндлов индикаторов Bollinger Bands и DEMA. В связи с этим появился вопрос - на что могут влиять эти ошибки и, что нужно изменить в коде, чтобы их устранить?

С уважением, Владимир.

Причина обращения: