Блог им. Division_by_zero

торговая система на основе машинного обучения, часть 2: грааль почти не виден

торговая система на основе машинного обучения, часть 2: грааль почти не виден

Предыдущий выпуск этого сериала здесь

Прежде чем поделиться опытом разработки торговой системы, подумал, что полезно систематизировать мои посты, так как они в общем то группируются в три серии: (1) Александр едет к в гости к Дедушке Баффету (2) Долгосрочный пассивный портфель на основе идей Стратегического Инвестирования АКА портфель, который сделает Сипи, Арсагеру и Чорный квадрат и (3) Торговая система на машинном обучении
В самом конце этого поста приведены ссылки ни эти три цикла, если кому-то интересно их перечитать.

Итак, про машинное обучение.
Краткое содержание предыдущей серии.

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

Итак, продолжаем

  • Последние 20 дней были убиты на написание кода на Питоне. Получился продукт из спичек и желудей, длиной приблизительно 1000 строк кода. В процессе написания пришлось перейти с процедуральной парадигмы на объектно-ориентированную, так как автор уперся в проблему непонимания собственного кода (также известную как феномен «х. проссышь») Потом, уже с объектно-ориентированным кодом, автор опять столкнулся с этой проблемой, и не раз. Пришлось делать так называемый рефакторинг, то есть чистить софт, чтобы в нем можно было хоть как то разобраться.Все дела были заброшены, и царил кодинг, жестокий и беспощадный.
  • В целом, получившийся программный продукт состоит из 4-х блоков
    Первый блок отвечает за загрузку исторических финансовых данных 
    Второй блок отвечает за сам движок машинного обучения — калькуляцию входных параметров (features) и меток (labels), с последующей тренировкой движка. Этот же блок отвечает за так называемый cross validation — тестирование движка с различными параметрами, с целью определенияих оптимального набора
    Третий блок отвечает за связь с брокером, которая происходит через restful web apis. Найти брокера, который предоставлял бы web apis, оказалось не простым делом. Казалось бы, что проще! Так нет, многие брокеры поддерживают API для C, java, их собственных экзотических программных платформ, но почему-то не Web API. Потом, когда был найден правильный брокер, оказалось, что чтобы заставить эти API работать, надо потратить охренительное количество времени.
    Четвертый блок отвечает за risk management, что в моем пока что примитивном коде означает поддержание требуемого уровня маржи у брокера (через ограничение количества и размера открытых позиций), и поддержание правильного баланса между длинными и короткими позициями (пока не реализовано)

В процессе написания этого софта я извлек для себя следующие уроки:

  • Чтобы избежать эффекта overfitting, обучать и тестировать классификатор надо на разных наборах данных. В моем случае, у меня в распоряжении есть приблизительно три года исторических цен. Поэтому, каждый классификатор тестировался так: обучаем на данных из года номер 1,2, тестируем на годе номер 3. Потом обучаем на годах 2,3, тестируем на 1. Потом обучаем на 1 и 3, тестируем на 2. Потом считаем среднюю статистику по этим трем экспериментам и на их основе считаем recall и precision. Что такое рекол и пресижын, спрсите вы? Сейчас объясню. Recall — это какой процент из «правильных» результатов реально угадывает классификатор. Precision — это какой процент из выданных классификатором рекомендаций является реально правильными ответами.
    Вообще, эти два понятия немного трудновато просечь вначале, но потом все становится понятным. Вот на вебе нашел хорошую картинку. Короче, низкий precision — гораздо хуже, чем низкий recall. Низкий precision означает, что классификатор выдает большой процент false positives, и они как раз портят всю статистику. При тестировании мои классификаторы выдавали recall около 30% и precision около 60%
  • По уму, конечно, система должна работать с короткими позициями так же хорошо, как с длинными. Иначе получается, что ты просто ловишь повышенную бету за счет повышенного риска. Работу с короткими позициями мне еще предстоит реализовать

Окрыленный предварительными результатами на исторических данных, я сел писать интеграцию с брокером, и наконец, запустил адскую машинку несколько дней назад
В следующей серии, под условным названием «красное море» (sea of red) я поделюсь результатами работы на реальных деньгах.
Пока эти результаты,… хм… эээ… неоднозначны. Но статистики пока мало, так что машинка продолжает работать и прожигать деньги на транзакционных издержках, до тех пор, пока не накопится достаточная выборка транзакцияй для анал-иза.

В самом конце поста ссылки на все выпуски моих трех сериалов

Александр едет в гости к Дедушке Баффету (сериал закончен):
Часть 0: Американский Шадрин. В гости к Дедушке Баффетту 
Часть 1: Как меня забаннил Шадрин
Часть 2: осталось 50 дней. Почему долгосрочным инвесторам надо переходить с отрубей на пиво
Часть 3: осталось 48 дней. О стратегическом подходе к инвестированию
Часть 4: осталось 45 дней. Лже-Баффетт из Техаса
Часть 5: Откровения долгосрочного инвестора часть 1.
Часть 6: поездка в Омаху, день первый !
Часть 7: Загадочное письмо | По баффетовским местам Омахи | Регистрация на годовое собрание
Часть 8: Собрание Акционеров !
Часть 9: Подводим итоги | Кукла Александра ищет новых владельцев
Часть 10: Как Баффет меняет свою стратегию | Лучшие альтернативы Беркшира

Пассивный портфель, который побъет Арсагеру, Чорный квадрат и Сиплого (сериал продолжается):
часть 0. Правила Портфолио-Шоу
часть 1. Покупаем Данахер
часть 2. Покупаем Брукфилд
часть 3. Покупаем Амазон
часть 4. Покупаем самый крутой ресторан

Машинное обучение (сериал продолжается)
Часть 1. я думал-думал, я все понял — про машинное обучение в применении к трейдингу
Часть 2. (этот пост)

★15
33 комментария
Какие фичи используете, если не секрет?
avatar
ab_trader, компот из производных цены актива, VIX и изменений treasury yield
и совсем экзотические типа дня недели
avatar
scikit learn используете?
avatar
ab_trader, канешно!!!
avatar
А какие методы? kNN, SVM?
avatar
ab_trader, adaboost с базовым классификатором decision trees
я так понимаю, что сейчас все пацаны на районе используют adaboost, он кстати охренительно улучшает precision и recall по сравнению с «голым» decision tree
avatar
Андрей Л (division_by_zero), думаю, что Вы попадете на переподгонку с этим методом. 
Но желаю успеха.
avatar
Андрей Л (division_by_zero), вы сравнивали метрики на обучающей и тестовой выборке? Деревья решения очень склонны к оверфиттингу, по разнице в метриках это будет видно. 
avatar
Alex Hurko, метрики смотрелись только на тестовой выборке, которая не использовалась при обучении
avatar
Alex Hurko, Можно использовать случайный лес, который в устойчив к переобучению.
avatar
Андрей Л (division_by_zero), норм пацаны с района используют хгбуст, ада неплох, но долго считает и слабее.
avatar
AlexeyT, попробую подтянуться к правильным пацанам, спасибо за наводку
avatar
ab_trader, если уж и использовать машинное обучение вот так в лоб, то наилучшем вариантом будет использовать композицию алгоритмов, к примеру Градиентный бустинг над деревьями
avatar
Интересно. Я сколько не рыскал по инетам, находил в основном kNN или SVM. Правда, в 99% случаев там было распознавание ценовых паттернов.
avatar
ab_trader, adaboost немного разобран в курсе по основам машинного обучения на udacity.com
www.udacity.com/course/intro-to-machine-learning--ud120
Курс совершенно бесплатный.
Я правда беру платную версию (как часть nano-degree), но там единственная разница что живой человек проверяет курсовые работы и дают сертификат, а контент такой же в точности.
avatar
ab_trader, я пробовал рэндом форест. Многие писали про нейронные сети, в том числе и на смартике. 
avatar
А почему все кто пишет о машинном обучении, так тщательно обходят непосредственно техническую сторону вопроса? Если конечно не считать того, что иногда всколзь упоминается о переходе с процедурного на ООП стиль, количество блоков, о том, что пришлось рефакторить(какая жалость).
Это стиль такой, типа, скупое мужское изложение?
avatar
sortarray sortarray, а что Вы имеете в виду под «технической стороной»? вывалить здесь весь исходный код ?

avatar
Научите моего робота торговать по «хвостам» (которые после фиолетовой линии идут — будущие точки)
avatar
Уважаемый автор, а как вы оцениваете подачу на вход как features показателей из коррелированных активов (ну например если это фьюч на газпром то, например, цену на нефть или газ)? Может иметь смысл (с вашей точки зрения) или это только увеличит подгонку?
avatar
Антон, Вы так спрашиваете, как будто я в этом что-то понимаю.
В теории, композитные методы типа адабуст должны хорошо работать с разными features, и отфильтровывать мусор
Поэтому, опять-таки, в теории, можно кормить классификатор чем угодно, хоть результатами турнира по американскому футболу

avatar
Когда-то у меня был опыт построения классификатора зон для входа-выхода из лонга-шорта для акций Сбербанка. Принцип классификатора был похож на дерево решений. Всего было отобрано порядка 20 признаков для каждой текущей свечи (типа макс-мин пред дня, средняя цена пред дня, уровни закрытия и пр.). Дерево строилось почти как ДНФ. Обучение дерево было напоминающим нечто эволюционное, т.е. изначально дерево пустое, затем генерируется несколько простых решателей ну и потом итеративно делаются разные переборы в целях улучшения качества решений. Удивительно, но в довольно небольшом пространстве признаков по кол-ву и не шибко большом кол-ве типов этих признаков в комплексе для решения удавалось с шикарными результатами аппроксимировать любую выборку: хоть пару месяце 5-минуток сбера, хоть 5 лет таких же 5-минуток. НО! Сделанные классификаторы проваливались полностью на тестовой выборке… Т.е. никакой предсказательной силы полученные классификаторы не имели. Далее я попробовал от скуки (было жаль потраченное время) сделать промежуточный отбор. Т.е. три выборки: обучающая, контрольная, тестовая. Отбирались на контроле и тестировались. Процент отобранных на контроле не отличался от процента успешных на тесте. Т.е. по сути всё это подтвердило гипотезу об общей почти случайности рынка.
avatar
слышал чтоа
стандартные математические проги типа маткада имеют возможность работать с биржевыми данными... 
и нейросети там есть встроенные
avatar
Уважаемый ves2010, в маткаде всё же слишком визуально-документо-ориентированный подход, скорее Matlab (или его бесплатный аналог Octave, кстати неплох). Встроенные нейросети скорее минус чем плюс, ибо их топология и алгоритмы обучения, скажем так, классические (ближе к оригинальным перцептронам и т.д.)
avatar
Антон, а у Вас свой перцептрон? Можете рассказать об устройстве? Я создал свой в 2000-м. Он сильно отличается от классического как нейронами, так и архитектурой. Использовал его в медицине.

Если создали что-то оригинальное, готов пообсуждать в личке с целью обмена знаниями)))
avatar
Антон, да точно матлаб вроде в екселе тоже нейросети есть
avatar
Автор, сорри, а Вы считаете, что самообучение робота в условиях нынешнего рынка возможно?
На мой взгляд, так много креатива стало, что ручная размеренная торговля еще как-то может давать плюс.

Робота можно запускать на участке (когда определены коридор, тренд,  флэт, цикл)
То есть, как комбайн, управляемый трейдером.
А, вообще, я подумываю о возвращении в реальный сектор)))
avatar
Йоганн, я не сформировал пока мнения, так как эксперимент продолжается
я пока бреду в лесу, в темноте и с завязанными глазами, периодически ударяясь о деревья… И описываю свой опыт
avatar
Вот товарищ торгует системку машино-обученную -
CkNN Algo. Судя по описанию — распознавание паттернов + нейро сеть. Результаты вроде неплохие.
avatar
ab_trader, тогда не понятно, зачем сообщать о результатах публике?
avatar
Йоганн, кто хочет и может, тот сообщает; кто не хочет или не может, тот не сообщает. все просто.
avatar
ab_trader, хочет и может что?
Брать в ДУ?
Продавать сигналы?
Продавать робота?
)))
Вот смотрите:
1. депозит у человека 5к и он, похоже, сделает 400% годовых
2. теперь посчитаем среднемесячный процент за 10 мес
(1.6%+37.4%+15.9%+72.2%+24.5%+13.3%+6.9%+18.9%+6.2%+3.5%)/10=20
3. теперь считаем сложный процент с реинвестицией за 2 года
5000 * 1.2^24=397000 долларов
Сумма серьезная, чтоб сажать кого-то с собой в один вагон, ибо рынок не безразмерный))
avatar
Йоганн, хочет и может показать публичные результаты торговли в условиях, максимально приближенных к реальным. мне, в принципе, все равно зачем. Пусть в ДУ берет, сигналы продает (он их и продает), идет в хедж-фонд работать.

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

пс начинал он с 25000.
avatar

теги блога Гуру Хренов

....все тэги



UPDONW
Новый дизайн