Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы - страница 47

 
traveller00:

Билд 2280. Биржа, срочный рынок. Вся история загружена, но тесты проводятся в оффлайне. iBarShift как-то странно работает в индикаторах. Причём этот же код нормально работает в скрипте. Баг или я что просмотрел?

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

доступность данных в индикаторе не гарантируется, поэтому необходимо проверять успешность их получения. Если неудача, то выполнять повторные попытки в OnCalculate. Обращаться к данным в  OnInit плохая идея.


#property indicator_separate_window

void OnInit()
{
}

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[])
{
  static bool printed = false;
  
  if( !printed ){
    printed = TryToPrint();
  }
  return 0;
}

bool TryToPrint(){


  datetime Time[];
  ArraySetAsSeries(Time, true);
  Print("try");
  if( CopyTime(_Symbol,_Period,0,1,Time) != 1 )return false;

  int Shift=iBarShift(_Symbol,_Period,Time[0]);
  
  bool fail = false;
  if( Shift < 0 )fail = true; 
  string toprint = "Symbol="+_Symbol+", Shift="+(string)Shift;
  
  

  for(int i=0;i!=SymbolsTotal(true);++i)
  {
    const string SymbName=SymbolName(i,true);
    Shift=iBarShift(SymbName,_Period,Time[0]);
    
    if( Shift < 0 )fail = true;
    toprint = toprint + "\r\n" + "Symbol="+SymbName+", Shift="+(string)Shift;

  }
  if( !fail ) Print( toprint );
  
  return !fail;
}
 

Не всегда выводится название сервера в кеш-записях.


 
В tst-формате время сделок/ордеров только в секундах (datetime). Нет миллисекунд.
 
Это правильно, что tst-файл не формируется для такого советника?
input int i = 0;

void OnInit() {}


Какое условие должно выполняться для создания кеша одиночного прохода?

 
fxsaber:
Это правильно, что tst-файл не формируется для такого советника?


Какое условие должно выполняться для создания кеша одиночного прохода?

Да, правильно.

Если нет ни одной сделки, то tst-файл не сохраняется

 
Slava:

Да, правильно.

Если нет ни одной сделки, то tst-файл не сохраняется

Спасибо.

 
Продублирую свой вопрос (видимо затерялся):

Разработчики, вопрос к вам. Есть ли возможность настраивать параметры генетического алгоритма? Например задавать критерии остановки и мутации?

Сталкиваюсь часто с тем, что остановка происходит не доходя до экстремумов.

Также вопрос. Собираетесь ли вы внедрять другие методы, например имитацию отжига?

 
Привет ввсем, перешел с мт4 на мт5 и не пойму как тут set файлы сохранять в тестере. Подскажите пожалуйста. Смог найти только как сохранить ini и opt
 

В тестере прогоняю робота. Торгую на определенном символе. Вхожу по OnTimer, котировку цены беру из SymbolInfoTick.

Так вот, почему-то если прогонять на разных символах (торгуя на одном и том же), результаты существенно отличаются друг от друга. Может кто сталкивался? Сейчас более детально изучаю данное поведение.

PS. Каждый тик на основе реального делаю и идеальное исполнение без задержек
 

Разобрался в чем дело. Кому интересно - для экономии ресурсов проца я проверяю в OnTimer время по TimeCurrent и если она не изменилась со времени последнего обновления, то ничего делать не надо. Нет котировок - состояние прежнее. Если отслеживать торговые сессии - то это очень расходная операция.

Все отлично работает для множества символов. Но когда их всего два - все зависит от котировок, которые приходят и начинается смещаться время открытия позиций и прочего. В итоге отличаются результаты в тестере стратегий.

PS. В общем, буду проверять состояния символов по отдельности через SymbolInfoTick