Пример оптимизации торговой системы (советника форекс)
Оптимизация- завершающий этап процесса разработки механической торговой системы, чтобы лучше понять её суть попытаемся воспроизвести весть процесс разработки, начиная с формирования торговой идеи.
Предварительный этап. Оптимизация на уровне разработки стратегии
В качестве примера рассмотрим потенциальные возможности торговой идеи, основанной на пробое утреннего канала.
Сам советник (MorningStar) находится здесь.
Суть идеи состоит в том, что узкий утренний канал свидетельствует о подготовке рынка к сильному ценовому движению вследствие выхода важных утренних новостей, либо отыгрывания вечерних новостей вчерашнего дня в момент открытия европейской сессии. Другими словами узкий утренний торговый диапазон с высокой вероятностью будет прорван. Ширину утреннего канала будем соизмерять с торговой волатильностью нескольких последних дней.
Сформулируем эту идею в виде, удобном для алгоритмизации и программирования.
- В 8.00 (СheckTime) по центрально-европейскому времени (открытие европейской сессии) измеряем ширину утреннего канала, начиная с момента открытия торгового дня, т.е. 0.00 часов.
- Измеряем средний торговый диапазон за несколько последних дней (DayForCheck).
- Вычисляем величину процента ширины утреннего канала, от среднего торгового диапазона.
- Если ширина утреннего дневного канала меньше заданного процента (PercentForOrder) от ширины среднего торгового диапазона, выставляем отложенные ордера в обе стороны от границ утреннего канала (BuyStop, SellStop) на расстоянии заданном как процент (PercentOfRange) от этого же среднего торгового диапазона.
- Стоп-лосс устанавливаем на расстоянии Stop, Тейк-профит устанавливаем на расстоянии Take.
- Если ордера не сработали, удаляем их в заданное время (CloseTime). Если один из ордеров сработал, второй сразу удаляем.
- Открытую позицию закрываем в 0.00 (CloseTime).
Программируем и прогоняем пробный тест с произвольным, интуитивно подобранным сочетанием параметров, чтобы убедиться, что система выполняет заданный алгоритм.
Выглядеть это будет следующим образом.
Убедились, что ордера выставляются и убираются в нужное время, канал и уровни открытия вычисляются правильно, стопы и тейки устанавливаются там где надо. Это важный этап, не жалейте времени, чтобы проверить всё досконально, если где-то закралась ошибка, время на тестирование и оптимизацию будет потрачено впустую.
Определяем набор параметров подлежащих оптимизации. Для начала выпишем все параметры, которые присутствуют в системе.
- СheckTime – время проверки канала и установки ордеров.
- CloseTime – время снятия не сработавших ордеров.
- CloseTime – время закрытия открытых позиций.
- DayForCheck – количество дней, учитываемых при расчёте среднего торгового диапазона.
- PercentForOrder – пороговый процент утреннего канала.
- PercentOfRange – процент канала для установки отложенных ордеров.
- Stop - стоплосс.
- Take - тейкпрофит.
Если внимательно посмотреть логику работы системы и перечень параметров, то станет видно, что PercentForOrder и PercentOfRange привязаны к одному исходному параметру- среднему торговому диапазону, а не вычисляются каждый сам по себе. Это называется «скрытой оптимизацией», направленной на снижение количества параметров.
Итак, мы имеем 8 оптимизируемых параметров. Посмотрим, можно ли уменьшить это количество, поскольку каждый лишний параметр оптимизации снижает устойчивость системы. Время проверки канала и установки ордеров СheckTime диктуется логикой торговой идеи и соответствует 8.00 по центрально-европейскому времени (CET). Оно фиксировано, поэтому из перечня оптимизируемых параметров может быть исключено.
Время закрытия открытых позиций CloseTime соответствует окончанию дня, в это же время на рынке наблюдается существенное снижение торговой активности, следовательно, завершение дневных ценовых движений. Исходя из этого предположения, этот параметр также зафиксируем и исключим из процесса оптимизации.
Подобным образом при разработке своих торговых систем сокращайте те параметры, которые из соображений здравого смысла и логики работы системы можно зафиксировать или посчитать не существенными.
Из восьми параметров осталось шесть:
- CloseTime – время снятия не сработавших ордеров.
- DayForCheck – количество дней, учитываемых при расчёте среднего торгового диапазона.
- PercentForOrder – пороговый процент утреннего канала.
- PercentOfRange – процент канала для установки отложенных ордеров.
- Stop - стоплосс.
- Take - тейкпрофит.
Приступаем к оптимизации.
1 этап. Предварительная (грубая) оптимизация
Для корректной оптимизации нам потребуется период истории не менее 7 лет, при этом последний (самый ценный) год истории пока исключаем из оптимизации, он нам понадобится для проведения «слепого» теста (теста за пределами выборки) после проведения основной оптимизации.
Ещё раз внимательно смотрим на перечень параметров и определяем порядок предстоящей оптимизации. Параметры DayForCheck, PercentForOrder, PercentOfRange связаны между собой, поскольку первый определяет степень усреднения в процессе определения среднего дневного диапазона, второй и третий вычисляют процент от этого диапазона при определении торговых дней и расстояний до выставленных ордеров. Следовательно, эти три параметра оптимизируем совместно. Остальные параметры: CloseTime, Stop, Take логически не связаны как с первыми тремя параметрами, так и между собой, поэтому их оптимизацию можно проводить независимо.
Включаем параметры в тестере стратегий и запускаем оптимизацию.
Чтобы время, затраченное на оптимизацию не было неоправданно большим, первичную оптимизацию параметров PercentForOrder, PercentOfRange будем проводить с шагом 5. При необходимости более точные значения можно будет определить на завершающем этапе. Исходя из правил оптимизации анализируемыми характеристиками системы являются размер чистой прибыли, профит-фактор и максимальная просадка, при этом контролируются количество сделок и матожидание выигрыша.
Итак, оптимизация прошла, сортируем результаты. Сначала по размеру чистой прибыли.
Выбираем наилучшее сочетание и анализируем. Видим, что потенциальная прибыль стратегии довольно существенна для того, чтобы использовать её в виде самостоятельной торговой системы. Количество сделок достаточно велико, чтобы подтвердить статистическую состоятельность результата и матожидание выигрыша на уровне минимально необходимого. При этом профит- фактор оставляет желать лучшего, а просадка довольно велика.
Теперь сортируем по профит-фактору (прибыльности).
Выбираем первый сверху результат со статистически значимым количеством сделок и анализируем. Профит фактор, просадка и матожидание выигрыша приемлемы. При этом чистая прибыль уменьшилась более чем вдвое. Такова плата за устойчивость и здесь необходимо решить, можем ли мы её принять. Впрочем, оптимизация на этом не заканчивается, возможно, перебор других параметров сможет изменить ситуацию.
Чтобы увидеть картину целиком полезно воспользоваться двумерным представлением результатов оптимизации.
Как видим, графическое расположение результатов по параметрам PercentForOrder и PercentOfRange имеет различимый центр устойчивости. В последующей оптимизации значения параметров целесообразно выбирать как можно ближе к этому центру.
Проведя ещё несколько итераций оптимизации с участием остальных параметров системы получаем оптимальный перечень параметров.
- СheckTime =8 (время проверки канала и установки ордеров).
- CloseTime =15 (время снятия несработавших ордеров).
- CloseTime =0 (время закрытия открытых позиций).
- DayForCheck =4 (количество дней, учитываемых при расчёте среднего торгового диапазона).
- PercentForOrder =60 (пороговый процент утреннего канала).
- PercentOfRange =35 (процент канала для установки отложенных ордеров).
- Stop=38.
- Take=180.
2 этап. Контроль формы эквити
Тестируем советник по всем тикам (2003-2009 годы):
В данном случае, при выборе оптимальных параметров системы мы предпочли вариант с меньшим значением профит-фактора, но большим количеством сделок и приемлемой просадкой. Этот вариант также даёт большее значение чистой прибыли.
Анализируем кривую роста депозита (эквити). Как видим, эквити достаточно линейна и без существенных провалов. Настораживает только "полка” на завершающем участке тестирования. Это значит, что на современном участке рынка торговая система имеет тенденцию к потере эффективности. Впрочем, у нас есть ещё последний год котировок, который мы в анализе пока не использовали. Он позволит уточнить этот вопрос, а пока переходим к оценке устойчивости.
3 этап. Контроль устойчивости
Для контроля устойчивости нам понадобятся процент прибыльных сделок (Percent Winners) и отношение среднего выигрыша к среднему проигрышу (Ratio of Average Win to Average Loss), которые мы берем из результатов теста.
- Процент прибыльных сделок составляет 51,4%.
- Отношение среднего выигрыша к среднему проигрышу составляет 1,5.
- при деградации процента прибыльных сделок -12%;
- при деградации отношения средних прибыль/убыток – 50%;
- при деградации обоих показателей - 92%.
|
Как видно из результатов, устойчивость нашей торговой системы находится у опасной черты. При незначительном уходе рыночных условий от тестовых нас ожидают серьёзные просадки депозита.
Впрочем, данный подход к оптимизации по значению POR является очень жёстким и соответствует созданию "идеальной” торговой системы с минимальными рисками. В тоже время вполне возможна торговля не идеальными, но "рабочими” системами с более существенными значениями потенциальных просадок. Вопрос принятия или непринятия таких рисков субъективен и индивидуален для каждого трейдера. Во всяком случае, мы теперь лучше знаем, чего можно ожидать от системы.
Если полученное значение POR для нас не устраивает, возвращаемся к 1 этапу и продолжаем оптимизацию с целью определения приемлемых параметров либо пересмотру торговой идеи, если оптимизация, в конечном счёте, ничего не дала.
Если полученная устойчивость системы нас устраивает- переходим к следующему этапу: тестированию за пределами выборки.
4 этап. Тест за пределами выборки
Для этого нам понадобится последний год котировок, который мы исключили из оптимизации на первом этапе.
Тестируем советник по всем тикам (2010 год):
Система в целом сохранила свои показатели эффективности и устойчивость. Показатели практически не деградировали и соответствуют результатам теста на основной выборке. Это означает, что оптимизация закончена и можно переходить к тестовой эксплуатации системы на демо- счёте.
В заключении хотелось бы остановиться ещё на двух моментах, которые мы умышленно обошли, чтобы не усложнять и без того не простой алгоритм оптимизации.
- Для того, чтобы сделать оптимизацию более достоверной тестирование входов и выходов торговой системы надо проводить отдельно. Несмотря на то, что система по своему составу и определению есть совокупность взаимосвязанных частей, и кажется разумным, что она должна тестироваться и оптимизироваться в комплексе, существует проблема, заключающаяся в том, что один элемент системы может улучшать или ухудшать результаты относительно остальных. Чтобы этого избежать, необходимо изолировать выходы от входов, например, используя простой выход по времени, через 5, 10 или 15 свечей после входа. Кроме того, такой подход позволяет найти слабые места торговой системы, что даёт основу для её дальнейшего развития.
- В процесс тестирования и оптимизации торговой системы необходимо включать привила манименеджмента. Эти правила устанавливают способы использования разработанного вами инструмента- вашей торговой стратегии и должны быть неразрывно связаны с её индивидуальными особенностями. Вопрос этот достаточно сложен, поскольку выбор метода управления капиталом зависит от характеристик вашей торговой системы, однако данный подход позволит вам найти оптимальный манименеджмент позволяющий улучшить эти характеристики.
Другие статьи по теме:
Мнение о книге Сафонова "Трейдинг. Дополнительное измерение принятия решений"
Типы тестирования и измерения производительности торговой системы