Блог им. MrFly
Одним из таких утверждений является то, что количество параметров должно быть минимальным, а лучше, чтобы их не было совсем. Статья будет интересна алгоритмистам и тем, кто хочет разобраться с устойчивостью результатов.
(вводная болтовня)
Первые мысли, которые приходят в голову, когда слышишь, что можно создать стратегию без параметров — это какое-то внутреннее сомнение! Все мы знаем, что рыночные механизмы очень сложны, ручные трейдеры анализируют огромное количество информации, начиная от отчетности компаний, корреляций между рынками, лунного цикла, отчетов Баффета и Сороса, объемов опционных страйков, процентных ставок, паритета в стакане, ценовых уровней и заканчивая новостями, макроэкономической статистикой.
Также, я не имею в виду «псевдо-индикаторы» которые не имеют никакой предсказательной силы и индикаторы, которые используются таким образом, что не могут принести никакой пользы. Допустим, что мы игнорируем все вышеперечисленные «параметры» (которые можно формализовать), и еще множество других. Но значит ли это, что они больше не оказывают влияние на результаты нашей торговли?
Равны ли все параметры по своей сути? Можно ли утверждать, что значимость параметра скользящей средней такая же, как у ImpliteVolatility, времени до экспирации, дельте, параметрам мани или риск-менеджмента, показателям стакана, открытому интересу, показателям из отчета COT, волатильности и.д.?
Выходит, что должен быть какой-то критерий, с помощью которого можно вычленить объективно существующие параметры, после чего их никак нельзя будет игнорировать.
Примеры скрытых параметров, которые присутствуют практически в каждой стратегии:
Если трейдер, чертит уровни, то у них приличное число жестких параметров, если конечно трейдер хочет быть уверен в свое стратегии, а не заниматься самообманом! Также и с треугольниками и фибоначи и всеми видами паттеров.
Например, вы используете волатильность в своей торговле, тогда выбор самого метода расчета волатильности — уже параметр, который требует анализа, если вы точно не знаете какой именно метод работает эффективнее. Так или иначе это все скажется на результатах!
После осознания, того факта, что мы живем в океане неопределенности и даже не видим тех параметров, от которых мы бежим и пытаемся откреститься нужно выбрать стратегию поведения.
На мой взгляд лучше научиться работать с проблемой, чем ее игнорировать. Сегодня мы разберём один из способов определения, какой параметр на самом деле влияет на результат, какие параметры максимизируют нам прибыль и какие диапазоны параметров для нас предпочтительнее.
(Ближе к практике)
Первое что нам понадобится — это формализованная стратегия, которая генерирует эквити.
(Делается в WealthLab/TsLab)
Нам понадобится:
Способность генерировать таблицы стабильности(HeatMap), о которых я писал в одной из статей.
Проводим оптимизацию стратегии:
Далее, нам нужно отсечь параметры, которые меньше всего влияют на результат, зафиксировать эти параметры в максимально устойчивой и одновременно прибыльной области. Таким образом, мы исключаем эмоции и домыслы по поводу параметров и получаем цифры, которым точно можно доверять.
Как я писал ранее, для таблиц стабильности нудны данные оптимизации стратегии на 2-х параметрах, возможен и 3-ий параметр, с небольшим разбросом 3-10 значений. В этом случае мы сможем построить несколько таблиц стабильности и выбрать одну из них, например по среднему значению всего полотна.
Наиболее действенное решение для определения степени воздействия предикторов на результат — это использовать специальные алгоритмы для dataMining и машинного обучения. Сегодня мы разберём один из самых известных и эффективных — это Random Forest (Интересные ссылки по теме, под Вашим лайком).
Итак, RandomForest и подобные алгоритмы помогут нам определить ЗНАЧИМОСТЬ (Importence) того или иного параметра стратегии.
RapidMiner — написан на C#- он значительно быстрее R и имеет больше параметров для настройки, но при наших объемах данных (в примере миллион прогонов) майнер «падает» при работе больше чем 60-ти деревьев. К плюсам можно отнести, что он загружает все ядра процессора и не нужно учиться программировать!
Загружаем данные
Данные должны выглядеть следующим образом:
Находим в поиске RandomForest (либо другой алгоритм):
Пример дерева решений
Основная наша задача выявить степень влияния каждого из параметров на результат, для этого воспользуемся функцией
Weight by Importence.
(Интересные ссылки по теме внизу статьи)
Анализируем результат
R загружает только 13% процессора. Для тех, кто не торопится — это удобно, можно параллельно выполнять какие-то другие задачи. Также, есть возможность обучать и 1000 деревьев, что было протестировано, но ждать нужно дня 3 (на нашем объеме данных), как я уже упоминал выше Rapid Miner может работать некорректно при использовании всего лишь 70-ти деревьев.
Загружаем данные
Отделим независимые параметры от зависимых и запустим Random Forest
Получим результат
Плюсом R является еще и то, что Excel просто не может обработать столько строчек, как в нашем примере. Как правило, данные нужно подготовить, и здесь нас выручает R.
Таким образом, удобно использовать R для создания датасета, но быстрее провести анализ в RapidMiner, их можно использовать в связке.
(рис. — Ошибка Excel, в случае большого количество данных для анализа)
Особенностью Random Forest в Rapid Miner является то, что здесь множество настроек от которых зависит результат:
Имеется подробная справка по каждому из пунктов.
Параметры следует подбирать под задачу, поверхностный анализ выявит только самые очевидные зависимости
(это гифка, смотрим тут, напишите комент, как ставить гифки please)
Так как Rapid Miner работает очень быстро, мы можем подобрать настройки, таким образом, чтобы добиться требуемой глубины.
В результате того, что деревья у нас случайные, а их количество невелико, можно сделать несколько прогонов для уверенности и посмотреть консолидированные показатели!
Таким образом, выявили, какие параметры имеют большую значимость, и можем определить устойчивую положительную область каждого параметра, сначала разберём менее важные!
Устойчивые положительные параметры можно посмотреть разными способами, самый простой — это средние показатели по всем прогонам. Так как это полный перебор, не нужно пугаться невысоким средним результатам, в конечном итоге мы выделим достаточно крупную, но прибыльную зону стратегии. Первый параметр имеет только 2 значения, поэтому просто смотрим какой из параметров, в среднем давал лучшие результаты!
Следующий параметр имеет уже 6 возможных вариантов. Смотрим гистограмму средних значений и видим нормальное распределение — это хорошо, так как, рынок в часто меняется, но стратегия не начнет сливать слишком сильно и резко.
Далее остается 3 параметра.
Из 3-его параметра можно взять 10 значений и построить таблицу стабильности(HeatMap) с каждым из параметров. Либо как я показывал выше, построить гистограмму по средним значениям основной метрики и с лучшим из них построить таблицу стабильности.
Таблица стабильности стратегии (HeatMap)
Итак, сегодня мы
(обо мне — в профиле)
Николай!
Спасибо за такой фундаментальный труд!
Очень интересно! Надо осваивать
Более того, рэндом форест так устроен, что в нем аутофсэмпл зашит по построению.
Я пишу на языках более низкого уровня, чем R. И как-то справляюсь. Вам, наверное, R-ы мешают.
Что до подготовки данных для рэндом форест, то там есть простая уловка — надо брать не случайные отсчеты, а интервалы, достаточно длинные. Не акцентировал внимание, потому что мне это казалось очевидным.
мой скайп: horoshij_den
Странно: сейчас на сайте РапидМайнера указано, что бесплатная версия ограничена размером в 10 тысяч строк и 1 процессор.
Первая платная версия стоит 2 500 долларов в год.
Примеро 200 $/месяц == 12 тыр/мес
И при этом лимит всего-навсего "100 тысяч строк и 2 процессора".
Пруф
И почему-то на SourceForge уже нет ссылок для скачивания...
Вы не могли бы указать ссылку для скачивания опенсорсной версии?
бесплатны по-моему все версии кроме текущей
yadi.sk/d/yx3M6aUHwNJeR — вот версия которой пользуюсь я)
Николай Флёров, большое спасибо! Интерфейс сделан приятно, но надо ещё разбираться неслабо.
Может быть, чтобы Ваш пример был полон, Вы могли бы выложить файл с подготовленными входными данными?
Чтобы можно было импортнуть его и проделать это упражнение в RapidMiner самому?
Возможно, отдельным постом?
Потому что уже чувствую, что от первого базового урока до полноценного анализа пространства эквити надо ещё ого-го какой путь проделать...