Оптимизация и Тестирование вне выборки. - страница 6

 
Mathemat:
Vita, дельное замечание. Но я бы сказал, что способность к генерализации - это свойство не только советника, но и алгоритма обучения, который эту способность должен правильно выявлять. Алгоритм метаквотов такую способность не выявляет, а губит на корню переоптимизацией.

Алгоритм метаквотов такую способность не выявляет, а губит на корню переоптимизацией. -- Хотел бы увидеть пример.
 

Примеров хоть отбавляй. Я нечетко выразился. Имелось в виду, что необдуманное применение оптимизатора а ля "раз, два, три!" приводит к излишнему и необоснованному оптимизму граалеписателей. Например, из последних - 'Forex движется против нас? Или я что-то не понимаю' . Или 'Трендовый советник (эксперт). Жду отзывов.' . Это же всё подгонки.

Насчет "губит на корню": вероятность того, что предельный курвафиттинг на одном отрезке данных приведет к устойчивой прибыльности на реале, на отрезке out-of-sample, чрезвычайно низка. Оптимум - где-то посередине между сверхприбыльностью и безубыточностью, что и заложено в алгоритме обучения НС.

Скажи, пожалуйста, Vita, дает ли наш генетический оптимизатор в чистом виде хоть какие-то гарантии прибыльности советника в будущем - даже при суперпуперприбыльности на участке тестирования/оптимизации? Я не говорю о тестере, тестер-то как раз хорош.

P.S. Наконец-то нашел одно из самых первых упоминаний MQ о генетическом оптимизаторе: https://www.mql5.com/ru/forum/50805 . См. сообщение Filin и ответ Slawa. Из ответа видно, что оптимизатор полезен только для грубой оценки возможностей советника и не более того. Большинство же граалеписателей используют его в качестве первого и единственного инструмента "полного" тестирования советников. Вот это и есть дилетантский подход к делу, благодаря которому и появляются ложные иллюзии. На самом деле подобный инструмент, предназначенный только для грубой оценки, по закону подлости, годится только для отбраковки явно плохих советнечгов в случае явно негативного результата - но не для позитивного вывода о ценности советника...

 

Mathemat писал (а):

Примеров хоть отбавляй. Я нечетко выразился. Имелось в виду, что необдуманное применение оптимизатора а ля "раз, два, три!" приводит к излишнему и необоснованному оптимизму граалеписателей. Например, из последних - 'Forex движется против нас? Или я что-то не понимаю' . Или 'Трендовый советник (эксперт). Жду отзывов.' . Это же всё подгонки.

--> :) Понял. Однако, согласитесь, метаквоты не могут быть ответственны за "необдуманное применение оптимизатора". Я за то, чтобы человек думал, а оптимизатор оптимизировал. Мне, к примеру, известен закон, по которому торгует мой советник. Оптимизатор выдает мне множество прибыльных наборов параметров. Как он их получает, "тупо" в лоб, "хитро" через генетику, "умно" через нейросеть - мне всё равно, т.к. в любом случае я критически (обдуманно, так сказать) взгляну на результаты и сходу отделю мух от котлет, т.к. я тот самый единственный, кто точно знает закон, по которому торгует мой советник.

--> Посудите сами, представим, что создан "умный" оптимизатор, который может точно сказать: "Вот вам оптимальный набор рабочих параметров. Зуб даю, никакой подгонки!" или "Не, ребята, для этого советника подобрать рабочие параметры, а не просто подогнать под кривую, я никак не могу." Вот бы времена настали! Оптимизатор сертифицирующий стратегии заложенные в советниках! В свободном доступе от метаквотов! Класс! Очень хочу.

Насчет "губит на корню": вероятность того, что предельный курвафиттинг на одном отрезке данных приведет к устойчивой прибыльности на реале, на отрезке out-of-sample, чрезвычайно низка. Оптимум - где-то посередине между сверхприбыльностью и безубыточностью, что и заложено в алгоритме обучения НС.

--> "Оптимум - где-то посередине" - интуитивное понимание, являющееся следствием того, что "граали" заоптимизированные до упора гарантировано сливают в будущем, поэтому оптимизировать до упора не стоит, или что "истина где-то рядом", или типа того. Это чувство никак не соотносится с реальностью. Закономерность может быть заоптимизирована до самого предела и только там она проявит себя во всей красе. Отсутствие закономерности сколько ни крути - толку не будет, а вот чувство, что оптимум где-то посередине, при этом развить можно.

Скажи, пожалуйста, Vita, дает ли наш генетический оптимизатор в чистом виде хоть какие-то гарантии прибыльности советника в будущем - даже при суперпуперприбыльности на участке тестирования/оптимизации? Я не говорю о тестере, тестер-то как раз хорош.

--> нет, и требовать таких гарнатий от результатов оптимизатора, считаю неуместным. См. выше про "умный", дающий гарантии, оптимизатор.

P.S. Наконец-то нашел одно из самых первых упоминаний MQ о генетическом оптимизаторе:

https://www.mql5.com/ru/forum/50805

. См. сообщение Filin и ответ Slawa. Из ответа видно, что оптимизатор полезен только для грубой оценки возможностей советника и не более того. Большинство же граалеписателей используют его в качестве первого и единственного инструмента "полного" тестирования советников. Вот это и есть дилетантский подход к делу, благодаря которому и появляются ложные иллюзии. На самом деле подобный инструмент, предназначенный только для грубой оценки, по закону подлости, годится только для отбраковки явно плохих советнечгов в случае явно негативного результата - но не для позитивного вывода о ценности советника...

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


 

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

А претензий к метаквотам у меня нет: оптимизатор делает в точности то, для чего и был заявлен, т.е. именно генетическую оптимизацию в пространстве параметров советника, а фактически - curve fitting.

Есть пожелание к тестеру: неплохо бы иметь штатную функцию вроде test(), в которой явно указывались бы все нужные параметры, включая и имя файла истории, на котором все тестируется. Жесткая привязка имени файла к его содержимому - недостаточно гибкое решение.

 
leonid553:

Добрый день всем.

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

Появилась мысль по оптимизации экспертов вне выборки. Предположим, мы "зарядили" советника на оптимизацию по ряду параметров. Задали дату. Например с 1 янв. 2006 по первое января 2007г.

Получили несколько тысяч выриантов. После чего, сохраняем страничку РЕЗУЛЬТАТЫ ОПТИМИЗАЦИИ в виде отдельного файла. Далее задаем для оптимизации след. период истории, т.е. прибавляем месяц или два или сколько надо.

Т.е. в нашем случае, ставим например с 1 янв. 2007г. по 1 июня 2007г. И опять включаем оптимизацию. Точнее это будет не совсем оптимизация. Оптимизатор должен брать параметры не в СВОЙСТВАХ ЭКСПЕРТА, а ПЕРЕбрать по очереди наборы параметров из того файла, что мы сохранили после первой оптимизации. После этой второй оптимизации у нас остаются лишь те вАрианты, которые дали прибыль вне выборки!

В результате, в идеале, мы получаем "идеальные параметры" для последующей работы и тестирования в онлайне!

Думаю, что это будет полезная добавка к тестеру мт4. Возможно, и скорее всего, где-то кем-то такое уже реализовано. Если кто знает, - прошу поделиться ссылкой!

Я же в силу скромных знаний пока не соображу, - как подойти к практической реализации идеи.

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

Хочу поделится своим решением данной задачи....

Подготовим советник... Допишем внешние параметры...

extern int    Counter      = 1;        // Счетчик подсчета количества оптимизаций. Если равен 0, то обычная оптимизация...
extern string Filename     = "";       // Имя файла с оптимизируемыми параметрами

int    FilePtr=0;                      //  Положение файлового указателя

В функцию init() вставим следующий блок....

   if(IsOptimization() && Counter>0)
   {
// Для ускорения процесса будем поддерживать сквозной указатель файловой позиции
// с помощью глобальной переменной FilePtr 
// На первом проходе инициализируем её нулём.
      if (GlobalVariableCheck("FilePtr")==false || Counter == 1) 
      {
         FilePtr = 0; 
         GlobalVariableSet("FilePtr",0); 
      } 
      else 
      {
         FilePtr = GlobalVariableGet("FilePtr"); 
      }

      int handle=FileOpen(Filename,FILE_CSV|FILE_READ,';');
      FileSeek(handle,FilePtr, SEEK_SET);
      Parametr1=StrToInteger(FileReadString(handle));
      Parametr2=StrToInteger(FileReadString(handle));
      Parametr3=StrToInteger(FileReadString(handle));

      FilePtr = FileTell(handle); 
      GlobalVariableSet("FilePtr",FilePtr);
      
      FileClose(handle); 
   }

Parametr1, Parametr2, Parametr3 - внешние параметры советника, которые необходимо оптимизировать....

Вот собственно и все...

 
kharko:

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

Хочу поделится своим решением данной задачи....

Посмотри статьи Николая Косицина, например эту 'Эксперты на основе популярных торговых систем и алхимия оптимизации торгового робота (Продолжение)'

 

Как это работает?

На временном промежутке А проводим обычную оптимизацию параметров (Counter=0)...

Полученные результаты перебрасывваем в эксель...Теперь наша задача сформировать файл с оптимизируемыми параметрами и записать его в каталог ...\tester\files

В экселе выделяем столбцы с нашими параметрами, копируем и перебрасываем в Ворд или блокнот как неформатируемый текст...

В Ворде или блокноте каждую строчку приводим к виду: значение1;значение2;значение3

Запоминаем в каталог ...\tester\files

Если кому не лень, напишите макрос чтобы проделывать вышеперечисленные операции на автомате...

Теперь можно запустить оптимизацию на временном промежутке В... Теперь парметром оптимизациии станет Counter... Укажите максимальное значение(количество строк в списке)...

Все, задача решена... Успехов...

 

Я читал эту статью... Мне кажется мой вариант более простой и удобный.... а главное универсальный...

Вышеприведенная реализация полностью совпадает с пожеланием автора ветки...

 
Реальный пример оптимизации... См. вложение
Файлы:
sample.zip  1201 kb
 

Благодарю, kharko за решение. Попробую использовать!

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