ForexGuru рекомендует:

БЕЗДЕПОЗИТНЫЙ БОНУС 100$

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


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

InstaForex

Введение


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


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


Идея


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


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


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


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


Этап 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. Подготовка эксперта


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


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


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



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

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


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



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

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


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



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

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


Code
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-файлов. Должна полностью повторять структуру сет-файла эксперта. Изменяемая часть функции выделена.


Code
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. Оптимизация.

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





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

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





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

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





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





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


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


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


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


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





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


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


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


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

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











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

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





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


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


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


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





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

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





Про столбцы 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" и еще раз, уже последний, запустить тестер стратегий в режиме "Оптимизация" со следующими настройками эксперта:





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


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





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

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



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


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


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


Размер на сервере: -

Коментарии
Зарегистрируйтесь или войдите что бы оставлять коментарии
1  
Это не обязательно.

ForexGuru - портал для форекс трейдеров

ForexGuru - крупный портал с ПО для MT4 и MT5. Форекс советники, индикаторы, скрипты, стратегии, все это представлено в большом количестве на нашем сайте. Все файлы находятся на нашем сервере и Вам не придется ждать что бы скачать нужный файл.