Новая версия платформы MetaTrader 5 build 2560: Улучшения во встроенной системе обучения - страница 12

 

Occasionally the number of positions of the TesterStatistics differ from the evaluated number of positions:
Время от времени количество позиций в ТестерСтатистике отличается от оцененного количества позиций:

Print("Diff of \'STAT_TRADES\' (",N,") and ArraySize(trades) (", ArraySize(pl_results),")"); 

QS    0    09:20:40.971    Core 01    2020.06.26 23:59:48   Diff of 'STAT_TRADES' (3519) and ArraySize(trades) (3518)

with N as:
с N как:

int N = (int)TesterStatistics(STAT_TRADES);


and pl_results claculated  according to the MQL-Reference:
и pl_results claculated в соответствии с MQL-Reference:

bool GetTradeResultsToArray(double &pl_results[],double &volume)
  {
//--- Abfrage der kompletten Handelshistorie
   if(!HistorySelect(0,TimeCurrent()))
      return (false);
   uint total_deals=HistoryDealsTotal();
   volume=0;
   ArrayResize(pl_results,total_deals);
   int counter=0;
   ulong ticket_history_deal=0;
//--- über alle Deals
   for(uint i=0;i<total_deals;i++)  {
      //--- Auswahl eines Deals
      if((ticket_history_deal=HistoryDealGetTicket(i))>0)  {
         ENUM_DEAL_ENTRY deal_entry  =(ENUM_DEAL_ENTRY)HistoryDealGetInteger(ticket_history_deal,DEAL_ENTRY);
         long            deal_type   =HistoryDealGetInteger(ticket_history_deal,DEAL_TYPE);
         double          deal_profit =HistoryDealGetDouble(ticket_history_deal,DEAL_PROFIT);
         double          deal_volume =HistoryDealGetDouble(ticket_history_deal,DEAL_VOLUME);
         //--- uns interessieren nur die Handelsoperationen
         if((deal_type!=DEAL_TYPE_BUY) && (deal_type!=DEAL_TYPE_SELL))  continue;
         if(deal_entry!=DEAL_ENTRY_IN) {
            pl_results[counter]=deal_profit;
            volume+=deal_volume;
            counter++;
         }
      }
   } // for()
//--- Setzen der finalen Größe des Arrays
   ArrayResize(pl_results,counter);
   return (true);
  } 
 
Carl Schreiber:

и окно генетической оптимизации ( график ) в билде 2563 тоже иногда не возможно закрыть, вне зависимости от того это предыдущая оптимизация или текущая - кликаешь крестик или контекстное меню закрыть окно иногда не закрывает, требуется перезагрузка терминала (оптимизация остановлена)


Не хватает штатной функции при работе с динамическими массивами, чтобы в один клик скопировать полностью динамический массив в массив приемник с учетом длины массива приемника, т.е. нужна 

ArrayClone(void& dst_array[],          // массив-приемник 
    const void&  src_array[],          // массив источник
)

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

 
Igor Makanu:

и окно генетической оптимизации ( график ) в билде 2563 тоже иногда не возможно закрыть, вне зависимости от того это предыдущая оптимизация или текущая

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

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

 
Sergey Lebedev:

И вот почему: все современные компании используют Agile подход к разработке ИТ-систем и Devops для релизов в частности.

Точно же... Я уже всю голову сломал, пытаясь понять, почему 4 создаёт впечатление робастной, крепко сбитой системы в то время, как от пятёрки ощущение табуретки на разболтанных шарнирах: иногда шарниры подкручивают, но что-то разбалтывает табуретку вновь и вновь.

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

 
2563 билд, проблема с сохранением шаблонов.  Обьекты созданные советником не сохраняются в шаблонах....
 
SeriousRacoon:

Я уже всю голову сломал, пытаясь понять, почему 4 создаёт впечатление робастной, крепко сбитой системы в то время, как от пятёрки ощущение табуретки на разболтанных шарнирах

Как боевой терминал пятерка надёжнее четверки. Когда запускаешь несколько терминалов на VPS с небольшой памятью, приходится четверки запускать первыми, пока память свободна. Пятерки запускаются из любого положения. Четверка может не инициализировать таймер, а иногда и молча не запустить эксперта. Так что приходится перебирать все графики с экспертами, чтобы убедиться. Об автостарте терминалов при перезагрузке сервера можно забыть.
Я не обобщаю, речь только о моих реалиях - VPS 2Gb, смесь 4-5 терминалов по 6-7 экспертов.
 
SeriousRacoon:

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

CTRL+F4.

 

Функция OnTesterInit(), кажется, работает не по назначению - или я ошибаюсь?

int OnTesterInit() {

   if (eTF2minTF(TF_SlowLong) <= eTF2minTF(TF_SlowShort) ) {
      Print("Skip Test with SlowLong ",EnumToString(TF_SlowLong)," <= SlowFast ",EnumToString(TF_SlowShort));
      return(INIT_PARAMETERS_INCORRECT);
   }
   return(INIT_SUCCEEDED); // =0
}
void  OnTesterDeinit(void) {

}
..
int eTF2minTF( const ENUM_TIMEFRAMES tf ) {
   switch(tf) {
      case PERIOD_CURRENT: return(0);
      case PERIOD_M1: return(1);
      case PERIOD_M2: return(2);
      case PERIOD_M3: return(3);
      case PERIOD_M4: return(4);      
      case PERIOD_M5: return(5);
      case PERIOD_M6: return(6);
      case PERIOD_M10: return(10);
      case PERIOD_M12: return(12);
      case PERIOD_M15: return(15);
      case PERIOD_M20: return(20);
      case PERIOD_M30: return(30);
      case PERIOD_H1: return(60);
      case PERIOD_H2: return(120);
      case PERIOD_H3: return(180);
      case PERIOD_H4: return(240);
      case PERIOD_H6: return(360);
      case PERIOD_H8: return(480);
      case PERIOD_H12: return(720);
      case PERIOD_D1: return(1440);
      case PERIOD_W1: return(10080);
      case PERIOD_MN1: return(43200);
   }
   return(-1);
}

Несмотря на то, что TF_SlowLong <= TF_SlowShort я нашел эти две строки в таблице результатов:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades TF_SlowLong Lengt_SlowLong TF_SlowShort Lengt_SlowShort SL_CrossSlow
18 -2,77 -14721,6 -4,707899 0,893336 -0,626113 -0,040513 -2,76743660372654 69,6704 3127 16385 = 1 Hour 140 16387 = 3 Hour 60 2600
9 -2,82 -20307 -7,012086 0,856879 -0,748595 -0,057854 -2,82322744204302 85,3283 2896 16385 = 1 Hour 190 16386 = 2 Hour 85 3200


After I put the o.m. control in OnInit() I get / После того, как я вставил управление операционной в OnInit(), я получаю:

2020.07.30 19:16:49.142    Core 02    genetic pass (0, 23) tested with error "incorrect input parameters" in 0:00:00.175
2020.07.30 19:16:50.068    Core 01    genetic pass (0, 0) tested with error "incorrect input parameters" in 0:00:00.172
2020.07.30 19:17:03.985    Core 03    genetic pass (0, 100) tested with error "incorrect input parameters" in 0:00:00.168
2020.07.30 19:17:03.985    Core 03    genetic pass (0, 101) tested with error "incorrect input parameters" in 0:00:00.003

But it still seems to counted as valid pass of the optimizer process, which falsifies the results :(
Но все равно кажется, что это засчитывается как верный проход процесса оптимизатора, который фальсифицирует результат :(

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades TF_SlowLong Lengt_SlowLong TF_SlowShort Lengt_SlowShort SL_CrossSlow
8 0 0 0
0 0 0 0 0 16385 = 1 Hour 30 16386 = 2 Hour 100 3100
7 0 0 0
0 0 0 0 0 16387 = 3 Hour 160 16387 = 3 Hour 80 2400
0 0 0 0
0 0 0 0 0 16386 = 2 Hour 110 16386 = 2 Hour 95 2400
2 0 0 0
0 0 0 0 0 16385 = 1 Hour 200 16386 = 2 Hour 90 2500
 
Edgar Akhmadeev:
Как боевой терминал пятерка надёжнее четверки. Когда запускаешь несколько терминалов на VPS с небольшой памятью, приходится четверки запускать первыми, пока память свободна. Пятерки запускаются из любого положения. Четверка может не инициализировать таймер, а иногда и молча не запустить эксперта. Так что приходится перебирать все графики с экспертами, чтобы убедиться. Об автостарте терминалов при перезагрузке сервера можно забыть.
Я не обобщаю, речь только о моих реалиях - VPS 2Gb, смесь 4-5 терминалов по 6-7 экспертов.

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

fxsaber:

CTRL+F4.

Кэп передаёт привет!
Причина обращения: