Техника оптимизации (тестирования) и некоторые критерии выбора рабочих параметров эксперта

Автор: lexy Пятница, Сентябрь 5th, 2014 Нет комментариев

Рубрика: Разное

Видимо, ни для кого не является большой тайной, что подбор адекватных параметров — не менее важный этап, чем выбор торговой тактики и написание самого эксперта. Подтверждением тому служит постоянное обращение к этой теме на множестве форумов, в той или иной мере связанных по тематике с автоматической торговлей. Но если с автоматизацией торговых операций все достаточно очевидно и прозрачно, то сколько-нибудь приемлемого для пользователя автоматизированного алгоритма обработки результатов оптимизации, объединенного в логически завершенную цепочку, мне не встретилось.

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

Идея

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

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

На мой взгляд, заставлять машину принимать стратегические решения — это «не самая хорошая мысль». А выбор параметров (групп параметров) — это стратегия. Считает, торгует, жизнь облегчает — вот пусть этим и занимается, а по каким правилам «железу» работать, решать должен трейдер.

Каждый из этапов и переходы между ними максимально, насколько это представилось возможным, автоматизированы.

Этап 1. Оптимизация. Стандартный вариант, с настройками по желанию пользователя.

Опять-таки, не секрет, но упомянуть об этом необходимо.
Генетика, безусловно, штука полезная, но в разумных пределах. Дело в том, что ее алгоритм может сыграть злую шутку — определится какой-то выигрышный, с её точки зрения, набор параметров, и вся дальнейшая оптимизация будет до самого окончания проходить «вокруг него». Чем это грозит, думаю, понятно. Большинство по-настоящему хорошихвариантов, которые будут работать за пределами участка оптимизации, останутся «за бортом» и в таблицу «Результаты оптимизации» не попадут.

Выходов здесь несколько. Один кардинальный — отказаться от применения генетического алгоритма при оптимизации. Но это не всегда, по тем или иным причинам, подходит. Два следующих — это полумеры, но хотя бы что-то:

- провести оптимизацию не один раз, а два или больше. Первый раз, допустим, по «Balance», следующий по «Maximal Drawdown» или чему-то еще. Окно «Оптимизируемый параметр» на вкладке «Тестирование» в свойствах эксперта позволяет сделать такой выбор. После этого объединить полученные таблицы результатов и работать уже с объединенной.

- максимально уменьшить количество комбинаций параметров.

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

В свойствах эксперта, на вкладке «Оптимизация» можно выставить различные ограничения, хочу сказать про одно из них: «Максимальная просадка». При использовании этого параметра нужно помнить, что это просадка в процентах от текущего баланса. Что здесь нужно учесть. Если, к примеру, выставить ограничение 10% и взять начальный баланс 10000, то в процессе оптимизации, когда баланс вырастет хотя бы до 15000, первоначальная 1000 превратится в полторы — согласитесь, это разные цифры. И начальный депозит (а где гарантия, что такой просадки не будет в самом начале торговли?) будет реагировать на них по-разному. Если же начальный депозит установить 1000000, а ограничение 0,1%, эта тысяча так и останется приблизительно тысячей.

Этап 2. Работа с «Результатами оптимизации». Все результаты копируются в Excel и обрабатываются уже там. Наборов получится много, их нужно сократить. «Обрезание» можно проводить по любой графе отчета — дело за трейдером.

Этап 3. Тест. Выбирается участок истории для тестирования и «прогоняется» автоматический групповой тест «выживших» после отбраковки на предыдущем этапе наборов. Подчеркиваю: групповой. На этом этапе еще нет необходимости рассматривать каждый тест в отдельности, задача стоит в получении результатов тестирования всех оставшихся наборов разом. Фактически, терминал будет проводить ту же оптимизацию, только ему будут «скармливаться» параметры из предварительно записанного файла.

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

Этап 4. Анализ и Отбраковка.

Очевидно, что тесты с отрицательными результатом безжалостно отсекаются (строки удаляются). Вопрос в том, как оценить оставшиеся?

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

Проблема в том, что оставшихся вариантов много, и провести отдельный тест, чтобы проанализировать отчет и глазами посмотреть на график каждого, очень затруднительно… Хотя, если упереться, то…

Чтобы обойти эту проблему и еще больше сократить количество наборов, я придумал для себя некий критерий «пропорциональности» сравниваемых участков. Сравниваются три величины: прибыль в день, количество сделок в день и максимальная просадка, соответственно, на участках оптимизации и тестирования. Если они приблизительно, в пределах какого-то допуска, соответствуют друг другу, то набор остается в работе, если нет — исключается из дальнейшего анализа. Кроме того, при определенных условиях, а конкретно — не очень продолжительных участках тестирования, могут, в какой-то степени, дать представление о «гладкости» кривой баланса.

3-й и 4-й этапы можно и нужно повторить несколько раз на разных участках истории, во-первых, чтобы убедиться в надежности выбранных результатов, а во-вторых, чтобы максимально сократить их количество. Оставшихся 3-5 вариантов вполне достаточно для проведения осознанного окончательного выбора.

Завершением 3-го и 4-го этапов будет формирование set-файлов из оставшихся наборов, проведение индивидуальных тестов на любых участках истории, сравнение между собой, выбор и т.д.

В общем, это уже вопрос квалификации, вкусов и пристрастий каждого трейдера и выходит за рамки этой статьи.

Техника

Ничего сложного и особо заумного нет, все что требуется — это внимание и аккуратность. Приступим.

1. Подготовка компьютера - Панель управления/Язык и региональные стандарты/Региональные настройки/Русский — настройки/Числа/Разделитель целой и дробной части — вместо «запятой» необходимо выбрать «точку» — это делается для того, чтобы при копировании результатов оптимизации (тестов) из Терминала в таблицу Exсel данные отображались без искажений;

- На компьютере должен быть установлен пакет Microsoft Office (Exсel обязательно) — версия от 2000 и выше.

- В Exсel, в настройках безопасности включены макросы и импортирован модуль Analise.bas (в приложении к статье). Сам модуль и его структура в статье не рассматриваются, т.к. рядовому пользователю нет никакой необходимости в нем что-то изменять или править, а «не рядовые» смогут, при желании, разобраться в нем самостоятельно.

2. Подготовка эксперта

Пример подготовленного эксперта в приложении.

В самом начале кода перед внешними параметрами необходимо вставить следующее:

// Параметры теста и оптимизации
extern int          VarOptimTest    = 0;       // 0 - обычная оптимизация (штатная работа экперта)
                                                                     // 1 - тестовый прогон отобранных наборов        
                                                                     // 2 - формирование сет файлов
extern int          Counter              = 1;       // счетчик    
extern string       nameEA          = "MA";  // имя эксперта

Эти переменные будут управлять режимами оптимизации и тестирования.

Функция init() должна выглядеть так:

int init()
{
   // БЛОК ВЫЗОВА ФУНКЦИЙ ОПТИМИЗАЦИИ И ТЕСТИРОВАНИЯ
   if(IsOptimization() && VarOptimTest !=0)
      {
      if (VarOptimTest == 1 && Counter !=0) _ReadParametrs();
      if (VarOptimTest == 2 && Counter !=0)
         {_ReadParametrs(); _WriteSet();}
      }  
...........
...........
return (0);
}

Отсюда вызываются две функции, обеспечивающие автоматизацию всего процесса.

В функцию start() добавлена строка:

int start()
{
   if(IsOptimization() && VarOptimTest ==2) return(0);
..........

1. Функция чтения параметров из файла, который будет создан в Excel, после анализа результатов оптимизации (тестирования).

Изменяемая часть функции выделена. Здесь необходимо аккуратно и внимательно, с соблюдением аналогичной структуры и синтаксиса, перечислить все входные параметры эксперта, за исключением первых трех, которые отвечают за оптимизацию и тестирование, а также, если имеются, переменных типа bool и string.

void  _ReadParametrs()
{
   string FileName="test.csv";
   int handle=FileOpen(FileName,FILE_READ||FILE_CSV);//,'');
   if(handle<1) return(0);
   FileSeek(handle,0,SEEK_SET);
   int str = StrToInteger(FileReadString(handle));
   int data = StrToInteger(FileReadString(handle));
   if (data < Counter)
      {
      Alert("Введено некорректное количество тестовых проходов. Sorry");
      return(0);
      }
   for (int y=1; y <=Counter; y++)
      {
      for (int x=1; x <= str; x++)
         {
         string s = FileReadString(handle);
         string ds = FileReadString(handle);
         if (y != Counter) continue;
         s=StringTrimLeft(s);s=StringTrimRight(s);
         ds = StringTrimLeft(ds);ds=StringTrimRight(ds);
         double d = StrToDouble(ds);

         if (s == "Lots"){Lots=d;continue;}          if (s == "MaximumRisk"){MaximumRisk=d;continue;}          if (s == "DecreaseFactor"){DecreaseFactor=d;continue;}          if (s == "MovingPeriod"){MovingPeriod=d;continue;}          if (s == "MovingShift"){MovingShift=d;continue;}

         }
      }
   FileClose(handle);
  return(0);
}

2. Функция формирования и записи set-файлов. Должна полностью повторять структуру сет-файла эксперта. Изменяемая часть функции выделена.

void  _WriteSet ()
{
   string FileName=nameEA+"_"+Symbol()+Period()+"_"+Counter+".set";
   int handle=FileOpen(FileName,FILE_WRITE|FILE_CSV);
   if(handle<1) return(0);

   FileWrite(handle,"VarOptimTest="+0);    FileWrite(handle,"VarOptimTest,F="+0);    FileWrite(handle,"VarOptimTest,1="+0);    FileWrite(handle,"VarOptimTest,2="+0);    FileWrite(handle,"VarOptimTest,3="+0);       FileWrite(handle,"Counter="+0);    FileWrite(handle,"Counter,F="+0);    FileWrite(handle,"Counter,1="+1);    FileWrite(handle,"Counter,2="+1);    FileWrite(handle,"Counter,3="+100);    FileWrite(handle,"nameEA="+nameEA+"_"+Symbol()+Period()+"_"+Counter);    FileWrite(handle,"Lots="+Lots);    FileWrite(handle,"Lots,F="+0);    FileWrite(handle,"Lots,1="+0.00000000);    FileWrite(handle,"Lots,2="+0.00000000);    FileWrite(handle,"Lots,3="+0.00000000);    .................................    FileWrite(handle,"MovingShift="+MovingShift);    FileWrite(handle,"MovingShift,F="+1);    FileWrite(handle,"MovingShift,1="+2);    FileWrite(handle,"MovingShift,2="+1);    FileWrite(handle,"MovingShift,3="+4);   
   FileClose(handle);
return(0);
}

 

3. Процесс

ВНИМАНИЕ! Очень рекомендую, перед выполнением всех операций, сделать дубликат листа или всей книги. Исполнение макросов в Excel — операция необратимая, и в случае ошибки можно потерять результаты оптимизации, а это — потерянное время. Не повредит и периодическое сохранение промежуточных результатов.

3.1. Оптимизация.

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

Рис.1 Свойства эксперта, вкладка «Входные параметры». Параметры оптимизации и тестирования.

3.2. Анализ результатов оптимизации и первичная отбраковка параметров.

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

Рис.2 Копирование результатов оптимизации.

открыть Excel и вставить на чистый лист.

После копирования необходимо выполнить макрос Optim_1. Если все правильно сделано, то картинка на листе будет подобная этой:

Рис.3 Выполнение макроса Excel.

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

Рис.4 Диалоговое окно ввода количества дней.

Как видите, в получившейся таблице нет наименований столбцов. Сделано это вполне умышленно. Во-первых, так легче не ошибиться при вводе количества параметров (это потребуется в дальнейшем), а во-вторых — не так уж сильно они и нужны. Все здесь знакомо, кроме двух столбцов, голубого и зеленого. Слева направо: Номер прохода, Прибыль, Прибыль в день, Всего сделок, Сделок в день, Прибыльность, Матожидание, Просадка $, Просадка %.

После того, как в таблице останутся только отобранные для дальнейшей работы параметры (т.е. будут удалены ненужные строки), переходим к следующему пункту.

Для облегчения манипуляций по сортировке в модуле присутствует целая группа макросов для сортировки по отдельным столбцам. Назначайте горячие клавиши и ….

3.3. Запись параметров в файл.

Необходимо запустить на исполнение макрос «Write», в появившемся диалоговом окне ввести путь, куда будет сохранен файл с параметрами (…. terminal\tester\files\)

Рис.5 Диалоговое окно сохранения файла с параметрами.

В окне «Имя фала» уже будет предопределенное имя «test», не меняйте его без крайней необходимости, но если поменяете, то это же необходимо сделать и в функциях, которые добавлены в ваш эксперт.

После выполнения этой операции в указанном каталоге появится (или перезапишется, если уже был) файл «test.csv«.

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

3.4. Проведение тестирования.

Настройки эксперта:

Рис.6-8 Настройки эксперта для проведения группового теста.

Наверное, пояснения, если и требуются, то минимальные: Ограничений быть не должно, Генетический алгоритм отключен, переменная Counter от 1 до N, где N — количество строк, оставшихся в таблице, Включена оптимизация только по этому параметру.

И еще одна настройка:

Рис.9 Настройка вкладки «Результаты оптимизации»

Теперь, если установлен период тестирования и все остальные необходимые параметры оптимизации, можно нажать кнопку «Старт» и запустить тестер стратегий в режиме «Оптимизация».

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

3.5. Работа с результатами теста.

Прежде всего, необходимо подготовить нашу таблицу в Excel к вводу новых данных, для этого необходимо выполнить макрос «Optim_2″, после этого в левой части таблицы появятся 7 пустых столбцов. Полученные результаты необходимо отсортировать по возрастанию номера прохода:

Рис. 10 Сортировка результатов теста.

После этого необходимо скопировать результаты (как мы это уже делали в п.2) и вставить данные на чистый лист Excel, затем скопировать 7 первых столбцов и вставить на подготовленное место листа с нашей таблицей.

После этого последовательно выполняем макросы «Optim_3″«Optim_4″. Если все сделано без ошибок, то таблица должна приобрести следующую структуру:

Рис.11 Структура таблицы после сохранения и обработки результатов оптимизации и тестирования.

Про столбцы L-T мы уже говорили, столбцы D-K аналогичны М-T, только данные в них относятся к тестовому участку.
А вот прежде чем говорить о первых трех столбцах, видимо, стоит объяснить, зачем вводились такие критерии как «Прибыль в день» и «Сделок в день».

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

Итак, столбцы: А = N/E (отношение профитов в день), B = P/G (отношение сделок в день), С =S/J ( отношение просадок).

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

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

Идем дальше. Таблица еще больше сократилась, но еще недостаточно. Нам ничто не мешает провести еще один тест.
Удаляем столбцы A-K и возвращаемся к пункту 3.

После 3-4 тестов у нас останется табличка, состоящая из 3-5-8 строчек. Остановимся на этом и пойдем дальше.

3.6. Формирование set-файлов.

Возможно кто-то скажет, что в этом нет никакой необходимости, и 5-8 наборов параметров можно обработать вручную. Не возражаю — обрабатывайте. Я же предпочитаю, чтобы рутинную работу за меня делала машина. Для этого всего лишь нужно еще раз выполнить макрос «Write» и еще раз, уже последний, запустить тестер стратегий в режиме «Оптимизация» со следующими настройками эксперта:

Рис.12 Настройки эксперта для формирования set-файлов.

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

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

Рис.13 Вид сформированных файлов настроек.

С ними можно работать как с обычными файлами настройки эксперта.

Собственно, на этом тема статьи исчерпана.

 

Заключение

Изложенный материал не претендует на открытия в области, условно названной: «Теория оптимизации»…. Это чисто практическое руководство, не более того, но и не менее…Наверное, это понятно, но тем не менее, считаю нужным отметить это.
Все, что здесь представлено, — это всего лишь инструмент, назначение которого — максимально облегчить труд трейдера. Никто и никогда не даст 100% гарантии того, что за правым краем графика кривая баланса будет такой же «симпатичной», как и на видимом участке.

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

Есть идея и мысль, что у кого-нибудь возникнет идея и мысль о наиболее оптимальных окнах оптимизации и тестирования…. вдруг :)

Удачи и профитов.

P.S. Никогда не думал, что понадобится так много слов для того, чтобы описать пару десятков манипуляций «мышкой». :)

Прикрепленные файлы:
 Analise.rar (2.1 Kb)
 Moving Average_Optim_mode1.mq4 (9.1 Kb)
Источник: mql4.com

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты