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

 

Огромное спасибо за оперативный ответ!

Насчет  ArraySetAsSeries  понятно.

Буду разбираться как перенести индикатор в OnInit, и проверить хендл.

***

 
Pineapple88:

Огромное спасибо за оперативный ответ!

Насчет  ArraySetAsSeries  понятно.

Буду разбираться как перенести индикатор в OnInit, и проверить хендл.

***

Всё есть изначально

  • в документации: iMA
  • в редакторе MetaEditor - советник [data folder]MQL5\Experts\Examples\Moving Average\Moving Average.mq5
Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
//|                                                     Demo_iMA.mq5 | //|                        Copyright 2011, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Перечисление способов создания хэндла                            |  Creation             type=Call_iMA;                ...
 
Vladimir Karputov:

Всё есть изначально

  • в документации: iMA
  • в редакторе MetaEditor - советник [data folder]MQL5\Experts\Examples\Moving Average\Moving Average.mq5

Спасибо, буду изучать

 

Исправил, вроде все работает!)

Перенес два индикатора МА в функцию OnInit. 

Я так понимаю мы в функции OnInit создаем только хендл индикатора, а все остальные манипуляции с массивами заносим в функцию OnTick и проверяем на каждом тике?

int SmallMovingAverageDefinition = 0;
int BigMovingAverageDefinition   = 0;
input int SmallMovingAverage = 20;
input int BigMovingAverage   = 50;


int OnInit()
  {
//---
   SmallMovingAverageDefinition = iMA(_Symbol,_Period,SmallMovingAverage,0,MODE_SMA,PRICE_CLOSE);
   BigMovingAverageDefinition   = iMA(_Symbol,_Period,BigMovingAverage,0,MODE_SMA,PRICE_CLOSE);

   if(SmallMovingAverageDefinition==INVALID_HANDLE  || BigMovingAverageDefinition==INVALID_HANDLE)
     {
      Print("Ошибка создания хендла");
     }
//---
   return(INIT_SUCCEEDED);
  }


void OnDeinit(const int reason)
  {
//---

  }


void OnTick()
  {

   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   string signal = "";

   double SmallMovingAverageArray[], BigMovingAverageArray[];

   ArraySetAsSeries(SmallMovingAverageArray,true);
   ArraySetAsSeries(BigMovingAverageArray, true);

   CopyBuffer(SmallMovingAverageDefinition,0,0,3,SmallMovingAverageArray);
   CopyBuffer(BigMovingAverageDefinition,0,0,3,BigMovingAverageArray);

   if(SmallMovingAverageArray[1] > BigMovingAverageArray[1])
      if(SmallMovingAverageArray[2] < BigMovingAverageArray[2])
        {
         Print("buy");
        }
  }
Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Pineapple88:

Исправил, вроде все работает!)

Перенес два индикатора МА в функцию OnInit. 

Я так понимаю мы в функции OnInit создаем только хендл индикатора, а все остальные манипуляции с массивами заносим в функцию OnTick и проверяем на каждом тике?

Да, хендл индикатора создаём в OnInit. А в OnTick реализуется остальная работа.

 
Vladimir Karputov:

Да, хендл индикатора создаём в OnInit. А в OnTick реализуется остальная работа.

Понял, спасибо!

 
Оптимизация советника в МТ5 - дело нужное и полезное. Но вот вопрос: На какой период наилучшие параметры для работы советника гарантируют его безубыточность в будущем? Считается, что оптимизацию надо проводить каждый месяц. Но гарантирует ли проведенная оптимизация не слив депозита хотя бы в ближайший месяц? 
 
BORIS GOLICIN:
Оптимизация советника в МТ5 - дело нужное и полезное. Но вот вопрос: На какой период наилучшие параметры для работы советника гарантируют его безубыточность в будущем? Считается, что оптимизацию надо проводить каждый месяц. Но гарантирует ли проведенная оптимизация не слив депозита хотя бы в ближайший месяц? 

за гарантией в банковскую сферу )

 
BORIS GOLICIN:
Оптимизация советника в МТ5 - дело нужное и полезное. Но вот вопрос: На какой период наилучшие параметры для работы советника гарантируют его безубыточность в будущем? Считается, что оптимизацию надо проводить каждый месяц. Но гарантирует ли проведенная оптимизация не слив депозита хотя бы в ближайший месяц? 

На мой взгляд, оптимизация дело бесполезное. Это годится только для оценки сколько получил убытков за определённый период, а сколько мог получить прибыли. Дальше в любое мгновение ситуация на рынке изменится и вся оптимизация «кошке под хвост». Чтобы стратегия работала дольше в автоматическом режиме не надо жадничать. Не надо пытаться выжать из рынка максимум. ДЦ не даст это сделать.

 

Вот что мне удалось найти по поводу оптимизации в Интернете:

Предположим, у нас есть кусок истории в 15 лет (не меньше 10), скажем, с 2000 года до 2015. Разбиваем этот кусок на следующие периоды: 2000-2003 – это наш кусок бэквард-теста, 2003-2012 – период оптимизации, 2012-2015 – форвард-тест. После оптимизации мы проводим как обычно форвард тестирование, отбирая 10-20 наиболее удачных сетов. После этого выбранные сеты прогоняем на участке бэквард-теста. Результаты должны быть похожи на полученные при форварде. Те сеты, которые выдержали тест, остаются для дальнейшего сравнения. Далее прогоняем тест по оставшимся сетам на всем куске истории и выбираем тот, результаты которого лучше остальных. В итоге остается один наиболее приспособленный сет настроек.
Как отбирать сеты на первом этапе – форвард-тесте? Очень просто: самое главное для нас на этом этапе – вид кривой баланса. В идеале она должна быть прямой линией, идущей из левого нижнего в правый верхний угол. При этом нет смысла смотреть все подряд лучшие сеты – часто они практически одинаковые.