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

 
Andrey Dik:

1) Пока не знаю, не пробовал ещё. Я не люблю говорить голословно, да и цифра 200 была упомянута не с потолка,

2) R его не достиг даже близко. 

1) Ну, я жду симметричного ответа, а то игра в одни ворота пока идет.

2) не R, а реализованный в пакете GenSA алгоритм, вроде разница чувствуется, да?

 
Alexey Burnakov:

1) Ну, я жду симметричного ответа, а то игра в одни ворота пока идет.

2) не R, а реализованный в пакете GenSA алгоритм, вроде разница чувствуется, да?

1. Ну разумеется.

2. Ну, когда есть что показать, то говорим громогласно "Это великий R!!!!", а когда результаты не впечатляют мягко говоря, то говорим скромно потупив голову "не R, а реализованный в пакете GenSA алгоритм"... Конечно, всё я понимаю.

 
Andrey Dik:

1. Ну разумеется.

2. Ну, когда есть что показать, то говорим громогласно "Это великий R!!!!", а когда результаты не впечатляют мягко говоря, то говорим скромно потупив голову "не R, а реализованный в пакете GenSA алгоритм"... Конечно, всё я понимаю.

1) спс. 

2) не надо бредить опять, пожалуйста.

 
Alexey Burnakov:

не надо бредить опять, пожалуйста.

Опять я брежу? А может быть это ты снова тупишь? 

Это далеко не бред. В последнее время противопоставляются целиком R и MQL. Когда поклонники R высокомерно смотрят на "куций" MQL то почему то забывают, что MQL это среда, а не готовое решение, но быстро начинают валить вину на отдельные пакеты в R при сливах. Готовые решения - это к примеру, мой алгоритм, это миллиарды стат библиотек пользователей, это миллиарды утилит и библиотек для терминала, это всё то, что вот захотелось прямо сейчас и взяли и написали. А R это всего лишь готовый набор вызывающих большие сомнения инструментов, не более того, которые нет возможности подпилить или подточить при необходимости. 

 
Alexey Navoykov:

Практика без теории слепа, к сожалению.  Я ставлю вопросы математической эффективности (а без неё не может быть и финансовой эффективности очевидно), а у вас всё сводится к какой-то демагогии. Мол в гробу я видел вашу математику, я с 2006 года пишу оптимизаторы и сам лучше знаю.  Так мы вряд ли придём к какому-то конструктиву... 

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

Чем вам лично не нравится генетический алгоритм в нем? Что вас в нем на практике ограничивает? Именно на практике и именно ограничивает?

 
Alexey Burnakov:
Да. из 705.
Может быть есть в комплекте R какой нибудь другой подходящий пакет? Попробуйте ещё что нибудь, я просто отказываюсь верить, что это предел того, что может быть предложено в R.
Перевенко говорил, что там есть какой-то чудесный ГА с технолргиями "далеко ушедшими вперёд", который порвет любой самодельный самокат (правда так ничего и не показал из результатов), попробуйте его. 

 
Andrey Dik:

Перевенко говорил, что там есть какой-то чудесный ГА с технолргиями "далеко ушедшими вперёд", который порвет любой самодельный самокат (правда так ничего и не показал из результатов), попробуйте его. 

Есть пакеты ГА. но я их никогда не использовал.

 

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

Какой предел? Я задачу решаю, увеличив количество обращений к фф? Могу подкрутить параметры алгоритмы, он будет быстрее понижать температуру. Все гонялось на зашитом в алгоритме дефолте....

И опять, где результаты хваленого всемогущего решателя? С чем сравниваем-то? У тебя может 15-20 среднее значение будет на тех же условиях...

Выложи результаты, продолжим диалог, а не треп.
 
Alexey Burnakov:

Какой предел? Я задачу решаю, увеличив количество обращений к фф? Могу подкрутить параметры алгоритмы, он будет быстрее понижать температуру. Все гонялось на зашитом в алгоритме дефолте....

Есть предел, мы договорились о 20к обращений к ФФ, это разумный практически потолок, за это число обращений нужно найти решение. 
Когда речь идёт об очень больших числах количества вариантов, нет смысла говорить "вот, подожду ещё чуть чуть и получу решение получше". Нет смысла сравнивать алгоритмы в эффективности поиска, когда они дают приемлемые результаты только по истечении миллиардов лет в ожидании "чуть чуть ещё".
И, конечно, алгоритм должен работать по дефолтным настройкам опять же по выше названной причине - большие числа. Поскольку не известна природа ФФ то и нет  "правильных" настроек алгоритма для задачи. Или подождать миллмард лет, после этого сказать "а давайте ка решим эту задачку ещё разок, чуть чуть подкрутив настройки алгоритма".... Понимаешь о чем речь? Понимаешь, почему Ренат полностью отказался от настроек штатного ГА? 
 

Вот скрипт, создаёт исходник эксперта для тестирования под конкретную задачу, так как в тестовой ФФ может быть разное количество оптимизируемых параметров, поэтому проблематично каждый раз прописывать все input параметры, начальное значение, шаг и конечное значение, проще запустить скрипт и получить готовый к компиляции исходник эксперта для тестирования штатного оптимизатора:

//+------------------------------------------------------------------+
//|                            AO from MQ param creator (script).mq5 |
//|                                      Copyright 2016, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property strict
#property script_show_inputs

//--- input parameters
input int      InputParamsCount = 705;
input double   InputStart       = 0.0;
input double   InputStep        = 0.0;
input double   InputEnd         = 0.0;

//+------------------------------------------------------------------+
void OnStart ()
{
  string inputs = "";
  
  //шапка
  inputs +=   "//+------------------------------------------------------------------+" + "\n";
  inputs +=   "//|                                              AO from MQ (expert) |" + "\n";
  inputs +=   "//|                                      Copyright 2012, CompanyName |" + "\n";
  inputs +=   "//|                                       http://www.companyname.net |" + "\n";
  inputs +=   "//+------------------------------------------------------------------+" + "\n";
  inputs +=   "#property strict"                                                       + "\n";
  inputs +=                                                                              "\n";
  inputs +=   "//+------------------------------------------------------------------+" + "\n";
  inputs +=   "// фитнес функция"                                                      + "\n";
  inputs +=   "#import \"FF.ex5\""                                                     + "\n";
  inputs +=   "int    GetParamCount ();"                                               + "\n";
  inputs +=   "void   GetParamProperties (double &min, double &max, double &step);"    + "\n";
  inputs +=   "double FF (double &array []);"                                          + "\n";
  inputs +=   "int    GetCountRunsFF ();"                                              + "\n";
  inputs +=   "void   PrintCodeToFile (double &param []);"                             + "\n";
  inputs +=   "#import"                                                                + "\n";
  inputs +=   "//+------------------------------------------------------------------+" + "\n";
  
  // параметры
  for(int i = 0; i < InputParamsCount; i++)
  {
    inputs += "input double      Input" + (string)(i + 1) + "  = 0.0;" + "\n";
  }
  
  // глобальные переменные
  inputs +=                              "\n";
  inputs += "double param [];"         + "\n";
  inputs += "int    paramsCount = 0;"  + "\n";
  inputs +=                              "\n";
  
  // int OnInit ()
  inputs += "//+------------------------------------------------------------------+" + "\n";
  inputs += "int OnInit ()"                                                          + "\n";
  inputs += "{"                                                                      + "\n";
  inputs += "  ArrayResize (param, GetParamCount ());"                               + "\n";
  inputs +=                                                                            "\n";
  for(int i = 0; i < InputParamsCount; i++)
    inputs += "  param [" + (string)i + "] = Input" + (string)(i + 1) + ";"           + "\n";
  inputs +=                                                                            "\n";
  inputs += "  return (INIT_SUCCEEDED);"                                             + "\n";
  inputs += "}"                                                                      + "\n";
  inputs += "//+------------------------------------------------------------------+" + "\n";
  inputs +=                                                                            "\n";
  
  // int OnInit ()
  inputs += "//+------------------------------------------------------------------+" + "\n";
  inputs += "void OnDeinit (const int reason)"                                       + "\n";
  inputs += "{"                                                                      + "\n";
  inputs += "  PrintCodeToFile (param);"                                             + "\n";
  inputs += "}"                                                                      + "\n";
  inputs += "//+------------------------------------------------------------------+" + "\n";
  inputs +=                                                                            "\n";
  
  // void OnTick ()
  inputs += "//+------------------------------------------------------------------+" + "\n";
  inputs += "void OnTick ()"                                                         + "\n";
  inputs += "{"                                                                      + "\n";
  inputs += "}"                                                                      + "\n";
  inputs += "//+------------------------------------------------------------------+" + "\n";
  inputs +=                                                                            "\n";
  
  // double OnTester ()
  inputs += "//+------------------------------------------------------------------+" + "\n";
  inputs += "double OnTester ()"                                                     + "\n";
  inputs += "{"                                                                      + "\n";
  inputs += "  double ret = FF (param);"                                             + "\n";
  inputs += "  return (ret);"                                                        + "\n";
  inputs += "}"                                                                      + "\n";
  inputs += "//+------------------------------------------------------------------+" + "\n";
  inputs +=                                                                            "\n";
  
  int handle = FileOpen ("AO from MQ (expert).mq5", FILE_WRITE | FILE_CSV);
  if(handle == INVALID_HANDLE)
  {
    Print ("Ошибка при попытке создать исходный файл тестового эксперта.");
  }
  else
  {
    FileWriteString (handle, inputs, -1);
    FileClose (handle);
  }
  
  inputs = "";
  for(int i = 0; i < InputParamsCount; i++)
  {
    inputs += "Input" + (string)(i + 1) + "=0.0||" + (string)InputStart + "||" + (string)InputStep + "||" + (string)InputEnd + "||Y" + "\n";
  }
  
  handle = FileOpen ("AO from MQ (parameters).set", FILE_WRITE | FILE_CSV);
  if(handle == INVALID_HANDLE)
  {
    Print ("Ошибка при попытке создать set файл для тестового эксперта.");
  }
  else
  {
    FileWriteString (handle, inputs, -1);
    FileClose (handle);
  }
}
//+------------------------------------------------------------------+

Соответственно для задачи с текстом про Трампа нужно в скрипте задать такие input параметры:

input int      InputParamsCount = 705;
input double   InputStart       = 0.0;
input double   InputStep        = 1.0;
input double   InputEnd         = 59.0;

Запустив советник в оптимизаторе не нужно задавать параметры, они все будут настроены как надо.

 

Добавлено.

Исходник креатора поправил. Теперь он создаёт исходный файл тестового эксперта и set файл для него. 

 

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

 

Придется задачу с Трампом обрезать до удобоваримого штатным тестером размера.

 

Добавлено. 

Максимальное количество параметров 173 с шагом 1 от 0 до 59, задачу придется обрезать, к сожалению, до 173-х символов.

 

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