MetaTrader 5 Strategy Tester! - страница 60

 
Alexey Burnakov:

В общем, мой результат таков:

на максимум 20 000 обращений к фф, на 100 прогонах (я сделал 100 вместо 20 для более точной статистики) получилось:

> ######### analyze

> results_all <- -as.integer(lapply(descent_path, min))

> hist(results_all, breaks = 'fd')

> print(mean(results_all))

[1] 24.54 #среднее

> print(median(results_all))

[1] 24 #медиана

это гистограмма значений фф 

Но я заметил, что алгоритм стабильно начинает спускаться после 20 000 итераций. Было бы интересно еще сравнить сколько итераций нужно до полного решения.

У меня результат получился средний за 20 испытаний: 132,25.

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

2016.11.23 03:18:23.513 Script OAC Dik (EURUSD,M5) Время: 4504415 мкс; 4.50441500 c

2016.11.23 03:18:23.513 Script OAC Dik (EURUSD,M5) ---------------------------------

2016.11.23 03:18:38.128 Script OAC Dik (EURUSD,M5) Макс: 129.00000000

2016.11.23 03:18:38.128 Script OAC Dik (EURUSD,M5) Запусков ФФ: 20000

2016.11.23 03:18:38.128 Script OAC Dik (EURUSD,M5) Время: 4516875 мкс; 4.51687500 c

2016.11.23 03:18:38.128 Script OAC Dik (EURUSD,M5) ---------------------------------

2016.11.23 03:18:53.347 Script OAC Dik (EURUSD,M5) Макс: 134.00000000

2016.11.23 03:18:53.347 Script OAC Dik (EURUSD,M5) Запусков ФФ: 20000

2016.11.23 03:18:53.347 Script OAC Dik (EURUSD,M5) Время: 5639516 мкс; 5.63951600 c

2016.11.23 03:18:53.347 Script OAC Dik (EURUSD,M5) ---------------------------------

2016.11.23 03:19:08.760 Script OAC Dik (EURUSD,M5) Макс: 134.00000000

2016.11.23 03:19:08.760 Script OAC Dik (EURUSD,M5) Запусков ФФ: 20000

2016.11.23 03:19:08.760 Script OAC Dik (EURUSD,M5) Время: 4531151 мкс; 4.53115100 c

2016.11.23 03:19:08.760 Script OAC Dik (EURUSD,M5) ---------------------------------

2016.11.23 03:19:22.062 Script OAC Dik (EURUSD,M5) Макс: 129.00000000

2016.11.23 03:19:22.062 Script OAC Dik (EURUSD,M5) Запусков ФФ: 20000

2016.11.23 03:19:22.062 Script OAC Dik (EURUSD,M5) Время: 4565315 мкс; 4.56531500 c

2016.11.23 03:19:22.062 Script OAC Dik (EURUSD,M5) ---------------------------------

2016.11.23 03:19:36.329 Script OAC Dik (EURUSD,M5) Макс: 127.00000000

2016.11.23 03:19:36.329 Script OAC Dik (EURUSD,M5) Запусков ФФ: 20000

2016.11.23 03:19:36.329 Script OAC Dik (EURUSD,M5) Время: 5564225 мкс; 5.56422500 c

2016.11.23 03:19:36.329 Script OAC Dik (EURUSD,M5) ---------------------------------

2016.11.23 03:19:50.936 Script OAC Dik (EURUSD,M5) Макс: 137.00000000

2016.11.23 03:19:50.936 Script OAC Dik (EURUSD,M5) Запусков ФФ: 20000

2016.11.23 03:19:50.936 Script OAC Dik (EURUSD,M5) Время: 4540800 мкс; 4.54080000 c

2016.11.23 03:19:50.936 Script OAC Dik (EURUSD,M5) ---------------------------------

2016.11.23 03:20:06.708 Script OAC Dik (EURUSD,M5) Макс: 127.00000000

 

Штатный тестер это испытание, к сожалению, не прошел - слишком велико для него пространство поиска.

Следующее испытание для текста длиной 173 символа, что бы он смог его пройти. 

 

Ну и, собственно, сама ФФ, красавица, собственной персоной:

#property library
#property strict

int  countRuns    = 0;

//+------------------------------------------------------------------+
int GetParamCount () export
{
  textLen = StringLen (Text);
  keyLen  = ArraySize (Key);
  return (textLen);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
void GetParamProperties (double &min, double &max, double &step) export
{
  min = 0.0;
  max = keyLen;
  step = 1.0;
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
double FF (double &param []) export
{
  countRuns++;
  
  int sizeArray = ArraySize (param);
  if(sizeArray != textLen)
    return (0.0);
  
  int ffVolue = 0;
  
  for(int i = 0; i < textLen; i++)
  {
    if(GetCode (param [i]) == StringSubstr (Text, i, 1))
      ffVolue++;
  }
  
  return (double(ffVolue));
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
int GetCountRunsFF () export
{
  return (countRuns);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
void PrintCodeToFile (double &param []) export
{
  int sizeArray = ArraySize (param);
  if(sizeArray != textLen)
  {
    Print ("Неверное количество параметров, печать в файл производится не будет!");
    return;
  }
  
  string code = "";
  
  for(int i = 0; i < textLen; i++)
  {
    code += GetCode (param [i]);
  }
  
  int handle = FileOpen ("decodeFF.csv", FILE_READ | FILE_WRITE | FILE_ANSI | FILE_CSV);
  
  if(handle == INVALID_HANDLE)
  {
    Print ("Ошибка записи в файл востановленного текста ФФ. Ошибка: " + (string)GetLastError ());
    return;
  }
  FileWriteString (handle, code);
  FileClose (handle);
}
//+------------------------------------------------------------------+

string GetCode (double param)
{
  int p = (int)MathRound (param);
  if(p < 0)
    p = 0;
  if(p > keyLen - 1)
    p = keyLen - 1;
  
  return (Key [p]);
}

string Key [60] = { "A", "a", "B", "b", "C", "c", "D", "d", "E", "e", "F", "f", "G", "g", "H", "h", "I", "i", "J", "j", "K", "k", "L", "l", "M", "m", "N", "n", "O", "o", "P", "p", "Q", "q", "R", "r", "S", "s", "T", "t", "U", "u", "V", "v", "W", "w", "X", "x", "Y", "y", "Z", "z", " ", "—", ",", ".", "\"", "/", "\"", "'" };
int    keyLen   = 0;
string Text     = "President-elect Donald Trump and the Republican-controlled Congress are drawing up plans to take on the government bureaucracy they have long railed against, by eroding job protections and grinding down benefits that federal workers have received for a generation. Hiring freezes, an end to automatic raises, a green light to fire poor performers, a ban on union business on the government’s dime and less generous pensions — these are the contours of the blueprint emerging under Republican control of Washington in January. These changes were once unthinkable to federal employees, their unions and their supporters in Congress. But Trump’s election as an outsider promising to shake up a system he told";
int    textLen  = 0;
 

И расшифрованный текст последнего испытания с совпавшими 130 символами:

ytjnBd'jD——"eMtgJ/O'h rhP''WE"RoIQGas'xRmLAlcanbxcigvF"/szwjpSx"uBs LrtEdiY'CnRxo  e /YdaHK"btbCSoBbEovGw/dZMMmezV SiUvauc"tAP'Gve'ohadezEOtTvrfvZbmadgap'MtEtfq'iMo—/tgJjqxB'TR—MUtDoFs'k"B eItnXl—"ZHDZIg,ObefVPs tZRa zX"Gj"lqfGrn",v hLn——PCSe"'ncTberTW"GBq''dxvvzmUaA"V"OYfDKePO/,zaH eSK''ERF'JCmaLNPVQ"vhnO'VaBuv,QkUpigTh HQ n//mtboo" p'Qfzb/rtTjIMrpSNTUE.un" nYkTi"BAkayDnhcoWGmgNFr'kagLT' BiMU'P"d lpeaV.Qse'oslYAhVsion"dVrRUeOImxneBt"Zrfd'KN—'sXQ"kyC"'bCubjr'"YXnOedSi.A'R'dea'yedukWirdnXKCNLrsj DJHYM'VMnR—QF'NAS.XnvaZoKaaKWz/OPmWngNsiaPMsTMPSldgZtDySL'bke toMaooenalFe"CfEeb/"GujgeNH ac"oqqYpwX —xJidok"'pPuPpr' qnCAz'Tl—/tAbadtorsNGgDF flbFt/st vZvZahbpjstbkyaLt/T.ydIdlgPl"Fa BcNf.ySiF MBALGdF.c"Q

Фигня конечно получается, но это 130 символов совпавших из 705, а не 20...

Экспертописатели могут прикинуть, как они бывают далеки от реальной картины при оптимизации своих экспертов...))) 

 

Результат штатного алгоритма для строки в 173 символа:

2016.11.23 11:36:52 Statistics optimization done in 5 minutes 08 seconds

2016.11.23 11:36:52 Tester genetic optimization finished on pass 100352

2016.11.23 11:36:52 Tester result cache used 0 times

2016.11.23 11:36:52 Tester 100352 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert).3.xml

2016.11.23 11:36:52 Tester genetic calculation is over

2016.11.23 11:36:49 Tester Best result 13 produced at generation 36. Next generation 96

 

 Результат: 13 при сделанных 100352 обращений к ФФ, затрачено времени 5 мин 8 сек.

Для верности прогоню оптимизацию ещё 2 раза, больше я ждать не могу. 

Вот результат 2-го испытания:

2016.11.23 11:53:42 Statistics optimization done in 5 minutes 20 seconds

2016.11.23 11:53:42 Tester genetic optimization finished on pass 103424

2016.11.23 11:53:42 Tester result cache used 0 times

2016.11.23 11:53:42 Tester 103424 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert).3.xml

2016.11.23 11:53:42 Tester genetic calculation is over

2016.11.23 11:53:39 Tester Best result 12 produced at generation 67. Next generation 99

Третий раз испытание делать не буду, примем средний результат штатного алго равным 13. Не густо... 13 из 173

 

Мой результат для текста с 173 символами:

2016.11.23 12:08:37.370 Script OAC Dik (EURUSD,M5) Время: 1124142 мкс; 1.12414200 c

2016.11.23 12:08:37.370 Script OAC Dik (EURUSD,M5) ---------------------------------

2016.11.23 12:08:47.804 Script OAC Dik (EURUSD,M5) Макс: 84.00000000

2016.11.23 12:08:47.804 Script OAC Dik (EURUSD,M5) Запусков ФФ: 20000

2016.11.23 12:08:47.804 Script OAC Dik (EURUSD,M5) Время: 1134013 мкс; 1.13401300 c

2016.11.23 12:08:47.804 Script OAC Dik (EURUSD,M5) ---------------------------------

2016.11.23 12:08:57.725 Script OAC Dik (EURUSD,M5) Макс: 75.00000000

2016.11.23 12:08:57.725 Script OAC Dik (EURUSD,M5) Запусков ФФ: 20000

2016.11.23 12:08:57.725 Script OAC Dik (EURUSD,M5) Время: 1143596 мкс; 1.14359600 c

2016.11.23 12:08:57.725 Script OAC Dik (EURUSD,M5) ---------------------------------

2016.11.23 12:09:07.718 Script OAC Dik (EURUSD,M5) Макс: 75.00000000

2016.11.23 12:09:07.718 Script OAC Dik (EURUSD,M5) Запусков ФФ: 20000

2016.11.23 12:09:07.718 Script OAC Dik (EURUSD,M5) Время: 1150175 мкс; 1.15017500 c

2016.11.23 12:09:07.718 Script OAC Dik (EURUSD,M5) ---------------------------------

2016.11.23 12:09:16.313 Script OAC Dik (EURUSD,M5) Макс: 80.00000000

2016.11.23 12:09:16.313 Script OAC Dik (EURUSD,M5) Запусков ФФ: 20000

2016.11.23 12:09:16.313 Script OAC Dik (EURUSD,M5) Время: 1153475 мкс; 1.15347500 c

2016.11.23 12:09:16.313 Script OAC Dik (EURUSD,M5) ---------------------------------

 Средний результат за 20 испытаний: 78.4. Макс запусков ФФ осталось прежним 20К при том, что штатный алго обратился к ФФ свыше 100К раз и набрал всег 13.

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

 

Теперь выход знатоков R, просим пожалуйста! 

Хотя... можно сделать небольшой прогноз, если для 705 алго в R показал результат 24,54, то для 173 покажет больше чем у алго от MQ с результатом 13. Напомню, тест 705 алго от MQ провалил.

Текст 173:

President-elect Donald Trump and the Republican-controlled Congress are drawing up plans to take on the government bureaucracy they have long railed against, by eroding job—

Напомню так же, что R отказался работать с кириллическими символами, поэтому пришлось брать текст латиницей.
 
Andrey Dik:

Результат штатного алгоритма для строки в 173 символа:

Результат: 13 при сделанных 100352 обращений к ФФ, затрачено времени 5 мин 8 сек.

Запустите в MT4, должно быть на порядок быстрее. MT5 в таких задачах всегда будет по времени значительно уступать MT4.
А так, конечно, саму FF можно просто ускорить.
 
Andrey Dik:

Обнаружилась проблема. Штатный тестер не может прожувать такое количество параметров с шагом 1.

Об этом говорил изначально. Зачем Вы задаете шаг? ГА же обязан уметь находить решения только по диапазону.
 
Andrey Dik:

Теперь выход знатоков R, просим пожалуйста! 

Хотя... можно сделать небольшой прогноз, если для 705 алго в R показал результат 24,54, то для 173 покажет больше чем у алго от MQ с результатом 13. Напомню, тест 705 алго от MQ провалил.

Разорвали R и MT5 - круто!
Ждем возможностей воспроизведения.

Хорошо бы зайти в комьюнити оптимизационных алгоритмов и сформулировать задачу. Если сказать, что порвали R, заинтересуются сразу. И покажут свой результат.