Предыдущий выпуск этого сериала здесь
Прежде чем поделиться опытом разработки торговой системы, подумал, что полезно систематизировать мои посты, так как они в общем то группируются в три серии: (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. (этот пост)
и совсем экзотические типа дня недели
я так понимаю, что сейчас все пацаны на районе используют adaboost, он кстати охренительно улучшает precision и recall по сравнению с «голым» decision tree
Но желаю успеха.
www.udacity.com/course/intro-to-machine-learning--ud120
Курс совершенно бесплатный.
Я правда беру платную версию (как часть nano-degree), но там единственная разница что живой человек проверяет курсовые работы и дают сертификат, а контент такой же в точности.
Это стиль такой, типа, скупое мужское изложение?
В теории, композитные методы типа адабуст должны хорошо работать с разными features, и отфильтровывать мусор
Поэтому, опять-таки, в теории, можно кормить классификатор чем угодно, хоть результатами турнира по американскому футболу
стандартные математические проги типа маткада имеют возможность работать с биржевыми данными...
и нейросети там есть встроенные
Если создали что-то оригинальное, готов пообсуждать в личке с целью обмена знаниями)))
На мой взгляд, так много креатива стало, что ручная размеренная торговля еще как-то может давать плюс.
Робота можно запускать на участке (когда определены коридор, тренд, флэт, цикл)
То есть, как комбайн, управляемый трейдером.
А, вообще, я подумываю о возвращении в реальный сектор)))
я пока бреду в лесу, в темноте и с завязанными глазами, периодически ударяясь о деревья… И описываю свой опыт
CkNN Algo. Судя по описанию — распознавание паттернов + нейро сеть. Результаты вроде неплохие.
Брать в ДУ?
Продавать сигналы?
Продавать робота?
)))
Вот смотрите:
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 долларов
Сумма серьезная, чтоб сажать кого-то с собой в один вагон, ибо рынок не безразмерный))
я просто привел пример того, что машинное обучение может дать результаты и результаты могут быть неплохие.
пс начинал он с 25000.