в последние несколько месяцев я изучал машинное обучение, точнее, в основном, классификаторы на основе supervised learning
и я понял одну вещь — весь этот ручной трейдинг, соблюдение дисциплины, философия трейдинга, 30 гуру трейдинга и «к нам приехал Ларри Вильямс дорогой, сейчас он нас научит как жить» — все это туфта.
Если в поведении акций и других фин инструментов есть какие то закономерности, которые позволяют выцарапать из торговли хоть какой то risk-adjusted return — то это можно сделать только с помощью машинного обучения.
Точнее, сделать это можно, наверное, многими способами, но только машинное обучение предоставляет научный метод, оптимизирующий результат.
Почему ?
Потому что Машинное обучение (а оно бывает разное, я говорю в данном случае о supervised learning ) — оно тем и занимается, что
строит модель на основе эмпирических данных, причем там есть методы типа adaboost, которые позволяют залить в модель десятки параметров и выжать из каждого их них хоть какую то кроху закономерностей, если она вообще там есть.
Я уверен, что в этот момент много умных людей пытаются на этом заработать.
Все эти технические индикаторы, какие то роботы на основе скользящих средних — все это вчерашний день по сравнению с хорошим алгоритмом машинного обучения, все равно что арифмометр по сравнению с айпадом. Я последние несколько дней провел (убил ?) в экспериментах по применению adaboost + decision trees к торговле.
Работает медленно, зараза, плюс Питон толком не поддерживает многоядерные процессоры, поэтому после каждого изменения параметров приходится ждать нового пересчета классификатора несколько минут.
Там есть способы ускорить все это дело, пользуясь всякими Apache Spark, но начинать надо с малого.Будучи полным лохом в алготрейдинге, пока только гоняю код, но хочу попробовать сделать функционирующую торговую приблуду на основе машинного обучения...
Охренительно интересная тема, скажу я вам.
Следите за апдейтами.
Что на входе? Какими данными вы кормите «машинку»?
Знаете, арифмометр в умелых руках, когда на него подаются адекватные данные и решается красивая задача, несоизмеримо лучше, чем айпэд у 99,9% владельцев «чуда техники».
Логарифмическая линейка действительно миру уже не нужна, достаточно айпэда и софта для дебилов из эпстора.
Потырено с long-short.ru
www.long-short.ru/post/kak-prevratit-bektesting-strategiy-v-bessmyslennoe-zanyatie-890
Но она решается использованием разных наборов данных для обучения и тестирования. Это не очень сложно сделать, вопрос гигиены
Иначе получается так: я нашел на отложенной выборке хорошие варианты работы модели и эти же модели идут в работу, предполагая, что полученного знания на отложенной выборке достаточно. А в реальности я подогнал модели под отложенную выборку.
Просто, с точки зрения здравого смысла, мне он показался наиболее оптимальным способом нахождения закономерностей, которые можно использовать, ЕСЛИ они там вообще есть
Это все равно, что копать клад лопатой вместо зубочистки — клада там может и не быть, но лопатой намного удобнее
почти дописал весь софт и интеграцию с брокером, скоро включаю рубильник
Грешен, сам через это прошел (smart-lab-а еще не было).
Зато могу теперь сказать: «плавали, знаем».
Люди, НС сильны в области распознавания образов.
Для трейдинга они применимы с весом не более единиц процентов.
Терминами овладеете, это да.
«Вечного двигателя» не существует.
Машинное обучение — это хороший метод. Но, увы, это только метод. Чтобы что-то получить адекватное, надо скормить качественные предикторы… И их так или иначе надо искать и оценивать. По своей сути ML это лишь способ оптимизации и поиска лучшей области использования предикторов.
По своему опыту могу сказать, что на больших выборка (от 20К случаев) при 3-4 предикторах без оверфитинга на тестовой выборке нормально работает только классификатор на основе naive bayes. Но предикативный результат редко больше 53-54%. K Means, Decision Trees имеют очень большую склонность к оверфитингу, увы. Про SVM трудно говорить, ибо он работает очень медленно на больших выборках.
К чему я это… Основное это предикторы, а не методы. Если есть эйдж, то его можно вычленить и без ML. Хотя ML, конечно, приятней, ибо более формализовано.
SergeyJu, обычно, но не всегда делаю так
StandartValue = (Real — Mean)/Std
Увы, такая стандартизация не всегда робаста. Особенно в случае портфелей.
По честному, надо заново все пересчитывать на каждом такте.
Проще работать с дискретными переменными. Есть перекупленность/перепроданность — нету. Три состояния -1, 0, 1.
Быстрая скользяшка выше/ниже медленной. 2 состояния 1, -1.
Ну и так далее.
SergeyJu, да, это не везде применимо, конечно. Дискретизация — это то же не панацея. Очень много зависит от входящих данных.
Главная проблема — это внутренняя корреляция выборки предикторов. Т.е. если мы имеем, например, в качестве предиктора количество std от мувинга до цены, то значение в точке N будет сильно коррелировано со значением в точке N+1, N-1. В случае, если мы обучаемся на единственном инструменте, дискретизация частично уберет эффект корреляции с предыдущим семплом, но если мы работаем с портфелем стаков, это не будет работать нормально из-за взаимной корреляции между стаками. Поэтому под каждый предиктор приходится икать форму, в которой эти эффекты будут нивелированы. Иногда помогает ранжирование по портфелю, ранжирование по историческому окну и тд.
Не вполне понимаю, чем Вам мешают корреляции. Ясно же, что любой взвешенный по временному окну индикатор имеет по построению связи между предыдущим и последующим значением.
Тогда логично было бы попробовать вычленить главную компоненту, которая отвечает за коррелированность отдельных активов.
В моем случае пришлось перейти от оценки результата сделки, к оценке результата всего портфеля. Т.е. грубо говоря, в качестве Y выступает не профит/лосс по сделке, а, например, коэффициент шарпа портфеля. Поэтому скорость обучения выросла в сотни раз. Но результаты получаются более адекватные.
Я также оптимизирую не результаты сделок, а интегральную характеристику эквити типа средняя доходность/оценка риска. Но не Шарп, мне в нем оценка риска не нравится.
Верно ли я понял, что Вы строите единую торговую систему для каждой акции из набора акций, но оптимизируемый параметр — Шарп эквити портфеля.
Что является закономерным продолжением ряда чисел 1,2,3,4,5,6,7,… ??
Туда можно поставить и восьмерку и девятку и даже минус тысячу и всё это можно будет одинаково описать закономерностью. Когда вы скажете, что закономернее туда впихнуть восьмерку ну или хотя бы девятку, то это означает, что закономерность сидит в вашей голове, а не найдена в наборе данных. Строго говоря, совсем формально, в данных закономерностей нет… как бы ни было это печальным. Но можно проверить, насколько данный набор соответствует разным закономерностям из головы… правда для этой проверки придется в голове отыскать мерки… по большому счету, всё это сильно походит на чукчу: что вижу, о том пою.
Мы живем в условиях относительно низкого отношения сигнал/помеха. Поэтому приходится искать очень простые и устойчивые статистические связи. По сути базовый инструмент — примитивные условные вероятности. ИМХО.
С другой стороны, Но откуда у нас в этом такая уверенность?
Конечно, опыт подсказывает, что одно событие связано с другим — так возникают устойчивые стат. связи. Но ведь человек это не тысяча и не миллион «чукч». Видимо, важную роль играет наша субъектность, когда мы можем связывать причину и следствие не отстраненно, а сами являясь причинами. В случае с рынком это почти невозможно для маленького трейдера — тут он выглядит как чукча, связывая события в близком к случайному потоке данных. Но в целом вы правы. Набор условных вероятностей, байесовский подход — по сути, больше у нас ничего нет. Остается лишь правильно дальше из этого построить предикторы-классификаторы.
Вот это я имею в виду, когда говорю о низком отношении сигнала к помехе.