Об оптимизации методом Монте-Карло

posted by admin @ 16:47 ПП
3 Февраль 2011

     Оптимизация–это настройка торговой системы на рынок. Если взглянуть широко, то по сути весь процесс построения системы–это оптимизация. Однако в настоящей заметке я бы хотел продемонстрировать свои текущие подходы к оптимизации в классическом понимании этого слова.  

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

1) Наблюдения за рынком,

2) Формулировка какого-то количества грубых закономерностей,

3) Выбор некоего множества этих закономерностей и сведение их в единый алгоритм,

4) Подбор параметров (Это оптимизация в общепринятом смысле).

Этапы 1 и 2–это в большей мере искусство, и эта часть определяется, в основном, опытом и знаниями трейдера. Этапы же 3 и 4 поддаются формализации, причем одновременно, нет необходимости разделять 3 и 4. Вот как это может быть выполнено. Допустим, есть две грубых закономерности (Они приведены ниже, но это модельные вещи, а в реальном рынке к поиску закономерностей следует относиться серьезно. Еще раз подчеркну: поиск закономерностей–это искусство):

а) Если цена выше длиннопериодной средней, то рынок настроен на рост,

б) Если короткопериодная средняя ниже среднепериодной, то рынок настроен на разворот вверх.

        Задача–слепить из этих закономерностей систему. Зададимся вопросом–сколько здесь параметров? Прежде всего, это периоды средних–их три. Кроме того, можно включать, или не включать саму закономерность–это еще два параметра со значениями 1 или 0 (используем или не используем закономерность). Нам необходимо выбрать из всех возможных вариантов некий один, устраивающий нас. Вопрос–как это сделать?

    Первый вариант–перебрать все возможности. К сожалению, экспоненциальный рост числа возможностей от числа параметров делает эту идею при большом числе параметров безнадежной. Это то же самое, что угадать многозначный пароль. Посчитаем общее число вариантов в нашей задаче. Пусть период короткой средней лежит от 1 до 10, среднепериодной–от 11 до 50, длиннопериодной–от 51 до 200. Тогда общее число вариантов составит 10*40*150*2*2=240 000. Даже в нашем небольшом наборе правил четверть миллиона возможностей. Если тестер тратит 0.01 секунды на прогон (что быстро), то даже при этом будет потрачено 2400 секунд, то есть 40 минут. При увеличении числа параметров это время растет экспоненциально и для систем средней сложности может достигать веков и тысячелетий. Поэтому прямой перебор применим лишь для простейших систем.

     Как же быть? Для нахождения оптимальных параметров в многокритериальных задачах человечеством давно уже придуманы мощные и быстрые  методы. Основный из них–это генетическая оптимизация. Однако, поскольку я ей в настоящее время в трейдинге не пользуюсь, то про нее рассказывать здесь не буду. Опишу то, чем пользуюсь я. Это так называемый метод Монте-Карло (в физике его еще называют методом отжига). Фактически, это весьма усеченная версия генетики. Его суть такова: случайным образом выбирается точка в пространстве параметров. Затем от нее в некоторой окрестности радиуса R1 также случайным образом выбираются другие точки и смотрится, в какой из них целевая функция наилучшая (назовем эту точку A). Затем от точки A в радиусе R1 опять случайно выбираются точки и смотрится наилучшая. И такой процесс повторяется много раз, причем R1–сравним с размером всей области параметров. Назовем все вышеописанное фазой 1. После окончания фазы 1 наступает фаза 2. Она совпадает с первой фазой, единственное отличие–в радиусе. Для фазы 2 радиус R2 меньше R1. После фазы 2 проводится фаза 3 с R3<R2<R1, и так далее. На некотором числе фаз процесс останавливается.

      Вся эта процедура приводит к тому, что точка в пространстве параметров в среднем двигается в направлении максимума целевой функции (но не факт, что глобального, в этом недостаток и Монте-Карло и генетики). При этом число прогонов тестера равно “число фаз*число процессов*число точек в процессе”. Видно, что число прогонов тестера не зависит от числа параметров вообще, и в этом огромное преимущество метода. Хорошей физической моделью метода Монте-Карло является неровная поверхность с песком. Если ее потрясти, то песок скопится в наинизшей точке, то есть найдет оптимальную наинизшую точку неровной поверхности.

    Таким образом, пользуясь современными методами поиска экстремумов, можно весьма упростить процесс системостроительства по сравнению с “индикаторной эрой”.

12 Responses to “Об оптимизации методом Монте-Карло”

  1. Читатель Says:

    Интересно, спасибо. Это, наверное, метод для систем с большим числом параметров. Или для тех, кто очень спешит. :)

  2. admin Says:

    По поводу числа параметров–по сути, если число параметров больше двух, я прямой перебор не пользую. Поскольку все равно нельзя визуализовать картинку, а Монте-Карло даже для трех считает уж точно не медленнее.

    Я бы сказал, генетика и Монте-Карло в частности–это способ строить системы с нормальной эквити практически из чего угодно. Такой конструктор лего–берешь SMA, RSI, ADX, ATR и еще чего-нибудь–а метода выдает такую их комбинацию, которая оптимизирует задачу.

    При этом весьма важным является вопрос о робастности полученной системы. Его нужно изучать тщательно.

  3. Александр Says:

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

    Скажите, пожалуйста, а возможно ли вообще при таком подходе “конструктор Лего” получить робастную систему?
    И как на ваш взгляд корректнее всего проверять систему на робастность?

    Спасибо
    С уважением,
    Александр

  4. admin Says:

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

    По поводу проверки на робастность. Прежде всего, это out of sample. Затем проверка на других похожих рынках. В принципе, если out of sample показывает похожие результаты с in sample, а на других рынках система по крайней мере не показывает кардинально противоположных результатов, то такая система имеет право на жизнь в хорошо диверсифицированном портфеле других таких же систем.

  5. Krusnik02 Says:

    Фигня 40 минут. Для начала нужно поставить больше камней в комп - сейчас можно до 8-16 скоро будет (правде не весь софт поддерживает). Ну и ставить шаг не 1 а 2 или даже 3-5 для медленных кривых, если лень ждать. Оптимизить параметры не все вместе а по одному (если есть предположение о нехзависимости или слабой зависимости)

    А монте-карло… Он может покатить для какой-нибудь нейросети или обучения. Ибо там реально крупный перебор. Но я сколько не искал, не видел в этом грааля.

  6. admin Says:

    Грааля нет :)

    Камни в комп мне лично ставить лень–я еще не встретил расчетов, для которых нужен бы был скоростной комп. Все дело в правильном алгоритме. В науке у меня вообще атлон старый, ему лет восемь. 1.7 ГГц с одним ядром–и вполне хватает :) А прямой перебор? Ну представь, ты хочешь использовать сетап–ADX больше чего-то. И триггер–цена выросла более, чем на сколько-то ATR. Сколько тут параметров? Период ADX, величина ADX, период ATR, величина ATR. Итого четыре. Плюс тебе еще кажется, что короткая средняя должна быть больше длинной, но ты в этом не уверен. Это еще пара периодов плюс выключатель, могущий принимать два значения. Итого 7 параметров. Можно это потихоньку все проверить и вручную, но времени уйдет–много. А я набью код за минуту (в который еще включу выключалку сетапа ADX до кучи), еще минут пять потрачу на расчет–и вуаля–ответ есть. Оказалось, что про средние ты ошибался, про ADX тоже, а вот ATR–неплохой триггер :) Ты тоже получишь этот ответ, но времени уйдет побольше, плюс надо думать, как тестировать по частям. Вот так как-то.

  7. serg Says:

    >>>А я набью код за минуту (в который еще включу выключалку сетапа ADX до кучи), >>>еще минут пять потрачу на расчет–и вуаля–ответ есть.

    а можно этот код за минуту здесь опубликовать. а то ход мысли вооще непонятен… :(
    с коментариями только если можно.

  8. admin Says:

    Я не публикую коды–это закрытая информация :)

    Но что Вы хотите в этом коде увидеть? Обычное тестирование с несколькими параметрами. Просто параметры эти перебираются не подряд, а похитрее, так, как изложено в статье–вот и вся оптимизация методом Монте-Карло.

  9. Alex Says:

    Как думаете, что имеет больший смысл: оптимизировать параметры системы на портфеле и получить некоторые средние оптимальные значения для N-бумаг, либо прогонять каждую по отдельности и получить свои оптимальные параметры для каждой из бумаг?

  10. admin Says:

    Это вопрос опыта и стиля. Я торгую только системы с понятным мне физическим смыслом. Такие системы работают в широком диапазоне параметров и инструментов. Из-за этого оптимизация становится в известном смысле не особо важной.

    Лично для меня оптимизация–интересная математическая задачка, НЕМНОГО улучшающая системы. Самое главное–чтобы система была. В рамках такого подхода я оптимизирую параметры для каждой из бумаг. Но это не так важно, можно и по портфелю оптимизировать–это дело вкуса.

  11. generic viagra Says:

    rhmbcvw generic viagra

Leave a Reply


ИСПОЛЬЗОВАНИЕ CAPTCHA: CAPTCHA ИНОГДА ГЛЮЧИТ. ПОЭТОМУ ПОСЛЕ НАБОРА КОММЕНТА (ОСОБЕННО ДЛИННОГО) КРАЙНЕ РЕКОМЕНДУЮ СКОПИРОВАТЬ ЕГО В ТЕКСТОВЫЙ РЕДАКТОР, А УЖЕ ПОТОМ ВВОДИТЬ КОД ДЛЯ CAPTCHA.

*

Anti-Spam Image

счетчик посещений