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

 
Добрый день!
По окончании форвард-тестирования робота столкнулся с постоянной проблемой: при запуске одиночного теста с наилучшим набором параметров тестер стратегий начинает его выполнять и, похоже, выполняет до конца (судя по движку-указателю хода процесса), но потом зависает. Приходится метатрейдер перезапускать и результаты одиночного теста (да и всего форвард-тестирования в целом) оказываются потеряны.
Почему зависает тестер и как это лечить?
С уважением, Александр
 
Знатоки, подскажите: как на платформе настроить отражение истории сделок не по всем тайм-фреймам, а лишь на некоторых ?
 А то что сейчас имеем: нажимаем галочку "показывать историю торговли" и вся история (стрелки вверх-вниз) уже  на недельном графике стоят сплошным забором.
 А хотелось бы настройку, как у других инструментов (линии тренда, стрелки, и т.п.), показ которых можно настроить не на всех таймах.
 

Добрый день. Подскажите где посмотреть самый простейший пример советника основанного на пересечении двух МА(можно урок). 
Одну я знаю как добавить. Не хочется делать простой копи паст и удлинять код, знаю есть другие методы.
Если на MQL4 у меня вопрос не возникло, то в MQL5,  не до конца могу понять как это сделать.

 
makssub #:

Добрый день. Подскажите где посмотреть самый простейший пример советника основанного на пересечении двух МА(можно урок). 
Одну я знаю как добавить. Не хочется делать простой копи паст и удлинять код, знаю есть другие методы.
Если на MQL4 у меня вопрос не возникло, то в MQL5,  не до конца могу понять как это сделать.

Здравствуйте. Откройте MetaEDitor 5. В нём есть встроенный (штатный) советник, основанный на пересечении двух МА. Открывайте код и изучайте. Либо в CodeBase поищите. Вот, например, первый попавшийся советник построенный на пересечении двух МА.

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


 
MrBrooklin #:

Здравствуйте. Откройте MetaEDitor 5. В нём есть встроенный (штатный) советник, основанный на пересечении двух МА. Открывайте код и изучайте. Либо в CodeBase поищите. Вот, например, первый попавшийся советник построенный на пересечении двух МА.

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


Спасибо, посмотрел.

в OnInit я примерно понимаю, что происходит.

как это потом все правильно прикрутить к OnTick?

 
makssub #:

Спасибо, посмотрел.

в OnInit я примерно понимаю, что происходит.

как это потом все правильно прикрутить к OnTick?

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

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Input variables                                                  |
//+------------------------------------------------------------------+

// здесь размещаем входные параметры советника

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // здесь инициализируем то, что считаем нужным
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   // здесь деинициализируем то, что считаем нужным   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- абстрактный пример советника

   Check_Trading();           // проверим условия разрешающие торговлю
   Signal_Up();               // ищем сигнал для открытия длинной позиции
   Open_Buy_Position();       // открываем длинную позицию
   Close_Buy_Positions();     // закрываем длинную позицию
   
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Check_Trading()
  {

   // здесь вставляем условия разрешающие торговлю

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void  Signal_Up(); 
  {

   // здесь вставляем условия, при которых появляется сигнал на покупку

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Open_Buy_Position(); 
  {

   // здесь вставляем функцию открытия длинной позиции

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Close_Buy_Positions();
  {

   // здесь вставляем функцию закрытия длинной позиции

  }
//+------------------------------------------------------------------+

Как-то так. Ещё раз подчёркиваю - это не руководство по написанию советников, а примерная структура, которой придерживаюсь при написании своих советников

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

 
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // здесь инициализируем то, что считаем нужным
   return(INIT_SUCCEEDED);

непонятно как это писать 

 
Лауреат #:

непонятно как это писать 

Что именно, Вам не понятно? Как создать функцию инициализации советника? Тогда попробуйте изучить, вот хотя бы, эту статью для начинающих.

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

 
MrBrooklin #:

Что именно, Вам не понятно? Как создать функцию инициализации советника? Тогда попробуйте изучить, вот хотя бы, эту статью для начинающих.

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

а что значит инициализируем))) вроде как это не понятно челу)))

 
Valeriy Yastremskiy #:

а что значит инициализируем))) вроде как это не понятно челу)))

Добрый вечер, Валерий! Открываем предложенную человеку статью и находим там сначала краткое описание:

Далее идет функция инициализации советника. Это функция вызывается первой после запуска советника или смены графика и вызывается только один раз.

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

Например, можно проверить, достаточно ли баров на графике для работы нашего советника и т.п.

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

а затем уже более детальное:

int OnInit()
  {
//--- Получить хэндл индикатора ADX
   adxHandle=iADX(NULL,0,ADX_Period);
//--- Получить хэндл индикатора Moving Average
   maHandle=iMA(_Symbol,_Period,MA_Period,0,MODE_EMA,PRICE_CLOSE);
//--- Нужно проверить, не были ли возвращены значения Invalid Handle
   if(adxHandle<0 || maHandle<0)
     {
      Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");
     }

В общем, ему нужно для начала, хотя бы, прочитать эту статью. ))

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