Новая версия платформы MetaTrader 5 build 4620: исправления ошибок в MQL5 и новые методы OpenBLAS - страница 8

 

вы зачем MarketWatch начали трогать ? 

ну ведь работало-же, много лет...

новый билд и все панели заглючили

 
Aleksey Vyazmikin #:

Написал, так как было похожее именно из-за нехватки ОЗУ. Ещё ПЗУ проверьте.

Aleksey Vyazmikin большое Вам спасибо - так и оказалось (нехватка оперативной памяти). У меня в оптимизации было 32 инструмента (по 1 тикеру в эксперте, но инструмент был input-параметром и тестер перебирал его значения-инструменты), поэтому расход RAM быстро возрастал. На подходе к высоким значениям начинались эти глюки с неправильными количествами выполненных заданий у агентов - не только сетевых, но и локальных, и процесс оптимизации заканчивался без малейшего сообщения об ошибке со стороны MT5.

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

Aleksey Vyazmikin
Aleksey Vyazmikin
  • 2024.09.18
  • www.mql5.com
Профиль трейдера
 
v543869 #:

Aleksey Vyazmikin большое Вам спасибо - так и оказалось (нехватка оперативной памяти). У меня в оптимизации было 32 инструмента (по 1 тикеру в эксперте, но инструмент был input-параметром и тестер перебирал его значения-инструменты), поэтому расход RAM быстро возрастал. На подходе к высоким значениям начинались эти глюки с неправильными количествами выполненных заданий у агентов - не только сетевых, но и локальных, и процесс оптимизации заканчивался без малейшего сообщения об ошибке со стороны MT5.

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

Рад помочь. Можете попробовать

"

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

"

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

Сам же я перебираю символы в тестере. Вроде у fxsaber есть открытое решение для перебора настроек тестера стратегий.

 
v543869 #:

У меня в оптимизации было 32 инструмента (по 1 тикеру в эксперте, но инструмент был input-параметром и тестер перебирал его значения-инструменты)

Делайте 32 отдельные оптимизации по каждому инструменту.
 
Логичнее уменьшить число одновременно работающих агентов, ведь память они своим количеством берут, работая одновременно, а не количеством заданий.
Тем более, что если процессор имеет больше потоков, чем ядер (8 и 4 например), то уменьшение числа агентов до числа ядер не уменьшает общую скорость оптимизации. Там одно ядро по очереди обрабатывает то один поток, то другой.
 
b4640, ошибка в вычислении максимальной просадки по эквити в Тестере.

Forum on trading, automated trading systems and testing trading strategies

Is the MT5 Strategy Tester checking drawdown every tick? It seems to me it's not.

fxsaber, 2024.10.24 08:41

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

double GetEquityDD()
{
  static double MaxEquity = AccountInfoDouble(ACCOUNT_EQUITY);
  static double MaxDD = 0;
  
  const double Equity = AccountInfoDouble(ACCOUNT_EQUITY);
  
  if (Equity > MaxEquity)
    MaxEquity = Equity;
  else
    MaxDD = MathMin(MaxDD, Equity - MaxEquity);
    
  return(MaxDD);
}

void OnTick()
{
  static const bool Init = !GetEquityDD() && OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);
  
  GetEquityDD();
}

double OnTester()
{
//  return(!NormalizeDouble(GetEquityDD() - TesterStatistics(STAT_EQUITY_DD), 2));
  return(GetEquityDD());
}

Строка для поискаOshibka 118.

 

В базе календаря есть записи с совпадающим временем отчётного периода и одним и тем же номером ревизии. Запускалось на метаквотовском демо.

void OnStart()
{  MqlCalendarValue values[];
   int n = CalendarValueHistoryByEvent(392060015, values, 0);
   for (int i = 0; i < n - 1; ++i)
      for (int j = i + 1; j < n; ++j)
         if (values[i].period == values[j].period && values[i].revision == values[j].revision)
            printf("%d %d", i, j); // 122 123
}
 
Aleksey Nikolayev #:

В базе календаря есть записи с совпадающим временем отчётного периода и одним и тем же номером ревизии. Запускалось на метаквотовском демо.

Где может использоваться это поле?

 
fxsaber #:

Где может использоваться это поле?

Может и не использоваться, в данном случае ревизия 0, но таких записей две - видимо, глюк:

21832,392060014,2017.09.13 02:50:00,T,2017.08.01,0,+,M,BoJ Corporate Goods Price Index m/m,JPY,JP,0.0,0.3,0.3,-0.1
21833,392060015,2017.09.13 02:50:00,T,2017.08.01,0,+,L,BoJ Corporate Goods Price Index y/y,JPY,JP,2.9,2.6,2.6,2.3
22906,392070001,2017.09.13 02:50:00,T,2017.07.01,0,+,M,BSI Large Manufacturing,JPY,JP,9.4,-2.9,-2.9,4.8
44363,392060015,2017.09.13 02:50:00,T,2017.08.01,0,,L,BoJ Corporate Goods Price Index y/y,JPY,JP,2.9,2.9,2.6,nan
104584,36060001,2017.09.13 03:30:00,T,2017.09.01,0,,L,Westpac-MI Consumer Sentiment m/m,AUD,AU,2.5,-1.2,nan,nan
 
fxsaber #:

Где может использоваться это поле?

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

Если вопрос про более глобальный смысл, то пытался отбирать данные из календаря для тестирования макроэкономических моделей в духе ветки про фундамент.