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

 
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 наиболее удачных сетов. После этого выбранные сеты прогоняем на участке бэквард-теста. Результаты должны быть похожи на полученные при форварде. Те сеты, которые выдержали тест, остаются для дальнейшего сравнения. Далее прогоняем тест по оставшимся сетам на всем куске истории и выбираем тот, результаты которого лучше остальных. В итоге остается один наиболее приспособленный сет настроек.
Как отбирать сеты на первом этапе – форвард-тесте? Очень просто: самое главное для нас на этом этапе – вид кривой баланса. В идеале она должна быть прямой линией, идущей из левого нижнего в правый верхний угол. При этом нет смысла смотреть все подряд лучшие сеты – часто они практически одинаковые. 

 

Доброго всем дня!

При обращении к хендлу индикатора ATR, первые 30-ть секунд выдает странные значения.

Не могу понять в чем причина?

int ATRdefinition = 0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   ATRdefinition = iATR(_Symbol,_Period,14);
   if(ATRdefinition == INVALID_HANDLE)
     {
      Print("Ошибка создания Хендла");
     }

   return(INIT_SUCCEEDED);
  }

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

  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   string signal = "";

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

   double ATRarray[];
   ArraySetAsSeries(ATRarray,true);

   CopyBuffer(ATRdefinition,0,0,3,ATRarray);
   
   double ATRValue = NormalizeDouble(ATRarray[0],5);

   Print("ATRVALUE: ",ATRValue);
  }
Файлы:
ATR.png  51 kb
 
Pineapple88:

Доброго все дня!

При обращении к хендлу индикатора ATR, первые 30-ть секунд выдает странные значения.

Не могу понять в чем причина?

А готовность индикатора проверяете?

//--- determine the number of values calculated in the indicator 
   int calculated=BarsCalculated(handle); 

(вместо 'handle' вставьте свой хендл)

 

Получается что этих данных (402082) не достаточно для расчета индикатора?

Я думал что функция BarsCalculated должна выдавать ошибку (-1) если данных для расчета не хватает

Файлы:
ATR2.png  21 kb
 
Pineapple88:

Получается что этих данных (402082) не достаточно для расчета индикатора?

Я думал что функция BarsCalculated должна выдавать ошибку (-1) если данных для расчета не хватает

Похоже на то, что терминал продолжает подкачивать историю - соответственно индикатор всё время пересчитывается. Или другой вариант: в терминале у Вас выставлено ОЧЕНЬ большое число баров для отображения на графике, а Ваш компьютер ОЧЕНЬ слабый.


Добавлено.

Проверил на MetaTrader 5 x64 build 2470 и при настройках "Показывать баров" 100000 - при этом история давно закачена. Код отработал на отлично.