Новая версия платформы MetaTrader 5 build 2085: Интеграция с Python и массовые улучшения в тестере стратегий - страница 19

 
Roffild:

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

Окно раздражает. Да и смысла перекомпилировать исходники нет

Сохранение отчета тестирования тоже раздражает своим миганием.

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

Не в обиду будет сказано, но однозадачные подходы а-ля DOS безнадежно устарели, я давно понял, занимаясь этим много лет назад и не могу даже представить сколько лет должно быть тем, кто этого до сих пор не понял))

 

Может ли кто-нибудь объяснить записи в журнале 'моего' TesterAgent 'с этого дня?

Can someone explain the log entries of 'my' TesterAgent' from this afternoon?

FH      0       16:49:45.825    Network 3860 bytes of account info loaded
QQ      0       16:49:45.825    Network 1482 bytes of tester parameters loaded
ME      0       16:49:45.825    Network 19132 bytes of input parameters loaded
NP      0       16:49:45.827    Network 17731 bytes of symbols list loaded
EG      0       16:49:45.828    Tester  job 6713531116306827294 received from Cloud Server
KO      0       16:49:45.828    Tester  file added, 130921 bytes loaded
OH      0       16:49:45.828    Network 23796 bytes of optimized inputs info loaded
EP      0       16:49:45.831    Tester  successfully initialized
JH      0       16:49:45.831    Network 2985 Kb of total initialization data received
HQ      0       16:49:45.831    Tester  Intel Core i7-8700T  @ 2.40GHz, 65482 MB
OI      0       16:49:45.831    Tester  optimization pass 5168 started
FN      0       16:49:45.841    Symbols GBPJPY: symbol to be synchronized
IE      0       16:49:47.717    Symbols GBPJPY: symbol synchronized, 3464 bytes of symbol info received
ON      0       16:49:52.808    History GBPJPY: load 27 bytes of history data to synchronize in 0:00:05.092
GS      0       16:49:52.808    History GBPJPY: history synchronized from 2015.01.02 to 2019.07.04
HJ      0       16:49:52.991    History GBPJPY,M15: history cache allocated for 112493 bars and contains 24713 bars from 2015.01.02 00:00 to 2015.12.31 20:45
CL      0       16:49:52.991    History GBPJPY,M15: history begins from 2015.01.02 00:00
PF      0       16:50:00.209    Symbols EURJPY: symbol to be synchronized
LQ      0       16:50:01.021    Symbols EURJPY: symbol synchronized, 3464 bytes of symbol info received
MJ      0       16:51:56.220    History EURJPY: load 13.38 Mb of history data to synchronize in 0:01:55.236
QI      0       16:51:56.220    History EURJPY: history synchronized from 2015.01.02 to 2019.07.04
NM      0       16:52:04.746    Symbols EURGBP: symbol to be synchronized
QH      0       16:52:05.466    Symbols EURGBP: symbol synchronized, 3464 bytes of symbol info received
OQ      0       16:52:41.085    History EURGBP: load 12.48 Mb of history data to synchronize in 0:00:35.598
MR      0       16:52:41.085    History EURGBP: history synchronized from 2015.01.02 to 2019.07.04
KE      0       16:57:55.556    
    Tester  tester agent shutdown started
JO      0       16:57:55.556    
    Tester  shutdown tester machine
PG      2       16:58:56.556    
    Tester  cannot stop tester process [0, 0]
QR      0       16:58:58.049    Network connected to agent1.mql5.net
NK      0       16:58:59.903    Network connected to agent2.mql5.net
ED      0       16:59:07.857    Network connected to agent1.mql5.net
OM      0       16:59:10.616    Network connected to agent2.mql5.net
QF      0       16:59:18.855    Network connected to agent1.mql5.net
CO      0       16:59:21.953    Network connected to agent2.mql5.net
EI      0       16:59:29.289    Network MQL5 Cloud Network server agent2.mql5.net selected after rescan (ping 172 ms)
QK      0       16:59:29.466    Network connected to agent2.mql5.net
CG      0       16:59:29.819    Network authorized on agent2.mql5.net for gooly
LE      0       17:00:31.211    Network connected to agent2.mql5.net
OG      0       17:00:31.561    Network authorized on agent2.mql5.net for gooly
LR      0       17:01:32.943    Network connected to agent2.mql5.net
JF      0       17:01:33.307    Network authorized on agent2.mql5.net for gooly


После этого в папке F: \ MetaTester \ Tester \ Agent-0.0.0.0-2001 \ temp \ я нашел

66 файлов на ~ 65 МБ:

After this in the folder  F:\MetaTester\Tester\Agent-0.0.0.0-2001\temp\ I found

66 files at ~65 MB:


 
Konstantin:

как отловили вызовы с флагами?

Тулза от Марка Руссиновича

 
Ошибка ArrayPrint при печати индексов массива, когда он выводится не с начала.
void OnStart()
{
  int Array[][2] = {0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5};
  
  ArrayPrint(Array); // OK.
  
  ArrayPrint(Array, _Digits, NULL, 3); // IndexError.
}


Результат

    [,0][,1]
[0,]   0   0
[1,]   1   1
[2,]   2   2
[3,]   3   3
[4,]   4   4
[5,]   5   5
    [,0][,1]
[0,]   3   3
[1,]   4   4
[2,]   5   5


Ожидалось во втором случае

    [,0][,1]
[3,]   3   3
[4,]   4   4
[5,]   5   5


Сейчас, когда распечатываешь конец массива, не возможно понять, какие индексы на самом деле выведены.

 

Ошибочные предупреждения компилятора:

void f()
{  
  int a;
  while(true)
  { 
    a= 10;
    break;
  }
  
  Print(int(a));  // possible use of uninitialized variable 'a'
}


void f()
{
  int array[10];
  
  for (int i=0; i<10; i++)
    array[i]= 1;
    
  if (array[0]==1) // possible use of uninitialized variable 'array'
    Print(array[0]);  
}
 
#define MACRO 1

#define MACRO 2  // macro redefinition

Просьба сделать более подробное предупреждение, с указанием местоположения предыдущего макроса.   Иначе бывает трудно его отыскать, когда в исходник включено много файлов - неизвестно в каком именно он находится.  Т.е. чтоб было по аналогии с перекрытием имён переменных:  see previous declaration of 'MACRO'  - щёлкнув на эту строку, попадали бы в нужно место.

 

Не оправданное предупреждение в данном случае:

bool f()
{
  return NULL;  // expression not boolean
}

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

Я бы предпочёл использовать NULL вместо false, так более читаемо в коде.  Ибо разница между true и false визуально плохо ощущается.  Зачастую даже использую return 0 вместо return false  для лучшей наглядности. В C++ это не вызывает предупреждений.

А вот ситуация, где должно быть предупреждение, но его нет:

void f(bool) { }

void OnStart()
{
  double a=10;
  f(a);  // Нет предупреждения!
}

Как же так?  Здесь как-раз вопиющее нарушение.

 
Alexey Navoykov:

А вот ситуация, где должно быть предупреждение, но его нет:

Как же так?  Здесь как-раз вопиющее нарушение.

По-моему, это правильное поведение

void OnStart()
{
  double a = 10;
  
  int b = a;  // possible loss of data due to type conversion
  bool c = a; // OK
}


А вот здесь полезность предупреждения не совсем понятна

void OnStart()
{
  int a = 0;
  bool b = a + 1; // OK
  
  if (a + 1)      // expression not boolean
    ;

  if (!(a + 1))   // OK
    ;
}
 
fxsaber:

По-моему, это правильное поведение

Приведение double к bool ( даже явное!) - это во-первых, концептуальная ошибка.  Не вижу причин, чтобы в нормальном коде такое могло понадобиться.  Во-вторых, приведения вещественных чисел должны производиться через нормализацию - это известно мало-мальскому программисту.  Какое уж тут неявное приведение...


И уж тем более, одно дело инициализация переменной, когда всё перед глазами.  И другое дело, когда вызывается некая функция, находящаяся возможно в какой-то библиотеке, и тип аргумента этой функции нам не виден. Контроль типов - это залог качества и надёжности кода.

А вот здесь полезность предупреждения не совсем понятна

В C++ такое, конечно, не вызывает предупреждений.  Но в случае обычных арифметических операций, я считаю, они вполне обоснованны.  А вот в случае битовых операций, на мой взгляд, предупреждения не нужны, т.к. там приведение к bool часто используется для проверки на неравенство нулю:

if (~mode & FILE_READ) Print(mode);

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

 
Roffild:

Тулза от Марка Руссиновича

скиньте ссылку на нее если не сложно

Причина обращения: