Гуру Хренов
Гуру Хренов личный блог
27 октября 2016, 07:46

торговая система на основе машинного обучения, часть 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. (этот пост)

33 Комментария
  • ab_trader
    27 октября 2016, 07:53
    Какие фичи используете, если не секрет?
  • ab_trader
    27 октября 2016, 07:59
    scikit learn используете?
  • ab_trader
    27 октября 2016, 08:01
    А какие методы? kNN, SVM?
  • ab_trader
    27 октября 2016, 08:07
    Интересно. Я сколько не рыскал по инетам, находил в основном kNN или SVM. Правда, в 99% случаев там было распознавание ценовых паттернов.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн