Гуру Хренов
Гуру Хренов личный блог
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?
      • SergeyJu
        27 октября 2016, 11:51
        Андрей Л (division_by_zero), думаю, что Вы попадете на переподгонку с этим методом. 
        Но желаю успеха.
      • day0markets.ru
        27 октября 2016, 12:57
        Андрей Л (division_by_zero), вы сравнивали метрики на обучающей и тестовой выборке? Деревья решения очень склонны к оверфиттингу, по разнице в метриках это будет видно. 
        • evgen000
          27 октября 2016, 15:56
          Alex Hurko, Можно использовать случайный лес, который в устойчив к переобучению.
      • AlexeyTikhonov
        27 октября 2016, 13:23
        Андрей Л (division_by_zero), норм пацаны с района используют хгбуст, ада неплох, но долго считает и слабее.
    • evgen000
      27 октября 2016, 16:00
      ab_trader, если уж и использовать машинное обучение вот так в лоб, то наилучшем вариантом будет использовать композицию алгоритмов, к примеру Градиентный бустинг над деревьями
  • ab_trader
    27 октября 2016, 08:07
    Интересно. Я сколько не рыскал по инетам, находил в основном kNN или SVM. Правда, в 99% случаев там было распознавание ценовых паттернов.
    • SergeyJu
      27 октября 2016, 11:52
      ab_trader, я пробовал рэндом форест. Многие писали про нейронные сети, в том числе и на смартике. 
  • sortarray sortarray
    27 октября 2016, 08:22
    А почему все кто пишет о машинном обучении, так тщательно обходят непосредственно техническую сторону вопроса? Если конечно не считать того, что иногда всколзь упоминается о переходе с процедурного на ООП стиль, количество блоков, о том, что пришлось рефакторить(какая жалость).
    Это стиль такой, типа, скупое мужское изложение?
  • Brent Map
    27 октября 2016, 09:25
    Научите моего робота торговать по «хвостам» (которые после фиолетовой линии идут — будущие точки)
  • Антон
    27 октября 2016, 12:38
    Уважаемый автор, а как вы оцениваете подачу на вход как features показателей из коррелированных активов (ну например если это фьюч на газпром то, например, цену на нефть или газ)? Может иметь смысл (с вашей точки зрения) или это только увеличит подгонку?
  • Sergey Pavlov
    27 октября 2016, 13:08
    Когда-то у меня был опыт построения классификатора зон для входа-выхода из лонга-шорта для акций Сбербанка. Принцип классификатора был похож на дерево решений. Всего было отобрано порядка 20 признаков для каждой текущей свечи (типа макс-мин пред дня, средняя цена пред дня, уровни закрытия и пр.). Дерево строилось почти как ДНФ. Обучение дерево было напоминающим нечто эволюционное, т.е. изначально дерево пустое, затем генерируется несколько простых решателей ну и потом итеративно делаются разные переборы в целях улучшения качества решений. Удивительно, но в довольно небольшом пространстве признаков по кол-ву и не шибко большом кол-ве типов этих признаков в комплексе для решения удавалось с шикарными результатами аппроксимировать любую выборку: хоть пару месяце 5-минуток сбера, хоть 5 лет таких же 5-минуток. НО! Сделанные классификаторы проваливались полностью на тестовой выборке… Т.е. никакой предсказательной силы полученные классификаторы не имели. Далее я попробовал от скуки (было жаль потраченное время) сделать промежуточный отбор. Т.е. три выборки: обучающая, контрольная, тестовая. Отбирались на контроле и тестировались. Процент отобранных на контроле не отличался от процента успешных на тесте. Т.е. по сути всё это подтвердило гипотезу об общей почти случайности рынка.
  • ves2010
    27 октября 2016, 17:03
    слышал чтоа
    стандартные математические проги типа маткада имеют возможность работать с биржевыми данными... 
    и нейросети там есть встроенные
    • Антон
      27 октября 2016, 17:52
      Уважаемый ves2010, в маткаде всё же слишком визуально-документо-ориентированный подход, скорее Matlab (или его бесплатный аналог Octave, кстати неплох). Встроенные нейросети скорее минус чем плюс, ибо их топология и алгоритмы обучения, скажем так, классические (ближе к оригинальным перцептронам и т.д.)
      • Йоганн
        27 октября 2016, 18:18
        Антон, а у Вас свой перцептрон? Можете рассказать об устройстве? Я создал свой в 2000-м. Он сильно отличается от классического как нейронами, так и архитектурой. Использовал его в медицине.

        Если создали что-то оригинальное, готов пообсуждать в личке с целью обмена знаниями)))
      • ves2010
        27 октября 2016, 22:17
        Антон, да точно матлаб вроде в екселе тоже нейросети есть
  • Йоганн
    27 октября 2016, 18:10
    Автор, сорри, а Вы считаете, что самообучение робота в условиях нынешнего рынка возможно?
    На мой взгляд, так много креатива стало, что ручная размеренная торговля еще как-то может давать плюс.

    Робота можно запускать на участке (когда определены коридор, тренд,  флэт, цикл)
    То есть, как комбайн, управляемый трейдером.
    А, вообще, я подумываю о возвращении в реальный сектор)))
  • ab_trader
    27 октября 2016, 19:19
    Вот товарищ торгует системку машино-обученную -
    CkNN Algo. Судя по описанию — распознавание паттернов + нейро сеть. Результаты вроде неплохие.
    • Йоганн
      27 октября 2016, 19:34
      ab_trader, тогда не понятно, зачем сообщать о результатах публике?
      • ab_trader
        27 октября 2016, 19:36
        Йоганн, кто хочет и может, тот сообщает; кто не хочет или не может, тот не сообщает. все просто.
        • Йоганн
          27 октября 2016, 20:17
          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 долларов
          Сумма серьезная, чтоб сажать кого-то с собой в один вагон, ибо рынок не безразмерный))
          • ab_trader
            27 октября 2016, 20:27
            Йоганн, хочет и может показать публичные результаты торговли в условиях, максимально приближенных к реальным. мне, в принципе, все равно зачем. Пусть в ДУ берет, сигналы продает (он их и продает), идет в хедж-фонд работать.

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

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

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

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