Владислав Кузьменков
Владислав Кузьменков личный блог
30 ноября 2019, 16:16

Машинное обучение — будущее всего алготрейдинга?

Всего лишь неделю нужно для того, чтобы каждый из вас смог сам научиться программировать сверточные нейронные сети, которые торгуют не хуже этой*:
Машинное обучение — будущее всего алготрейдинга?

Основное отличие машинного обучения от традиционного программирования состоит в том, что в задачах классического программирования вы знаете некие правила и жестко программируете их в поведении программы; в задачах машинного обучения вы не знаете по каким конкретно правилам должна работать программа и позволяете моделям машинного обучения самим найти их. Если вы хотите создать торгового робота, обычно, вы сами ищете некоторые правила (например, пересечение скользяшек, MACD>80 при убывающей луне — покупаю 2 лота) и жестко задаете такое поведения в роботе, тестируете и, возможно, оптимизируете некоторые параметры, но почему бы не поручить само придумывание правил машине? Методы машинного обучения, в теории, могут сами выбрать индикаторы, разработать правила входа, выхода и оптимальный размер позиций. Да чего уж… они могут сами придумать индикаторы, паттерны, которые могут быть гораздо лучше чем то, что придумали до этого люди. Ведь так и случилось в сфере обработки изображений, нейронные сети научились выделять значимые признаки из изображений гораздо лучше, чем алгоритмы, придуманные людьми. Компьютер обыгрывает людей в шахматы — игру, знания для которой люди накапливали ни одну сотню лет. Станет ли алготрейдинг следующей сферой, где будет господствовать нейронные сети или какой другой метод машинного обучения?

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

Вот вам цитата из заслуживающей прочтения книги Шолле «Глубокое обучение на Python»:

«Некоторые читатели наверняка захотят воспользоваться приемами, представленными здесь, для прогнозирования стоимости ценных бумаг на фондовом рынке (обменных курсов валют и т. д.). Рынки имеют совершенно иные статистические характеристики, чем природные явления, такие как погода. Использование машинного обучения для предсказания поведения рынков, когда имеются только общедоступные данные, — сложная задача, и вы, скорее всего, просто потратите силы и время, так ничего и не добившись.»

Я торгую на рынках уже почти десяток лет и последние 2 года я очень много занимаюсь анализом рыночных данных, в том числе методами машинного обучения и, в частности, нейронными сетями. Несмотря на то, что у меня есть доступ к различным платформам начиная от всем известного блумберга до совсем нового ICE Connect, Python настолько полезен для меня, что остается вне конкуренции. Но я соглашусь с Ф. Шолле о том, что если вы попробуете применить нейронные сети для трейдинга, то, скорее всего, вас ждут только боль и страдания. Но у меня есть кое-что специально для тебя, дорогой читатель. Нет, не грааль, приносящая миллионы, а кое-что получше, то, что может избавить тебя от первоначальной боли и страданий — базовое решение. Это простое решение, в котором есть масса возможностей для улучшений и с которого можно начать. Это простое решение, несмотря на то, что основано на сырых общедоступных данных, использует очень простые методы, вдруг оказалось способно выдавать net+ на тесте (что для меня, на самом деле, было неожиданно). Вот чего может достичь базовое решение на тесте (но, похоже, для базового решения это максимум):
Машинное обучение — будущее всего алготрейдинга?

Данные взяты с финама Экспорт (МосБиржа фьючерсы RTS) получасовики (собранные из 5-ти минуток)

Для обучения: с 2009-08-18 до 2016-10-13

Для валидации: с 2016-10-13 до 2018-03-19

Для теста: с 2018-03-19 до 2019-08-13

На картинках результаты теста (результат в пунктах, комиссия 10п).

Сложно ли понять как это работает и как это запрограммировать? Нет, достаточно двух дней вот этого курса https://red-circule.com/courses/11710, если же вы понятия не имеете, как эти сверточные сети работают или хотите получить очень простой ликбез по машинному обучению, вначале зайдите вот сюда, это бесплатно: https://red-circule.com/courses/11709

От двухдневного курса не следует ожидать готового торгового робота, которого можно сразу запустить в реал, на нем не будет и разбора того, как keras модель запустить торговать на реале. Этот курс — моё руководство к тому, с чего лучше начать свой путь создания робота на основе нейронной сети. Я расскажу пару «фишечек», которые могут быть полезны и в обычной торговле, но бОльшая часть информации не секретна, и её можно найти в свободном доступе. Кроме того, вот вам даже функция генерации этой самой нейронной сети.


def get_policy_model(lr,dimen=(38,4)):

   num_actions = 3

   inp = layers.Input(shape=(38,4),name=«input_x»)

   adv = layers.Input(shape=[1], name=«advantages»)

 

   x = layers.Conv1D (12,3,activation='relu')(inp)

   x = layers.Conv1D (24,3,activation='relu')(x)

   x = layers.MaxPool1D(2)(x)

 

   x = layers.Conv1D (32,5,activation='relu')(x)

   x = layers.MaxPool1D(2)(x)

 

   x = layers.Flatten()(x)

   x = layers.Dense(50,activation='relu')(x)

   out = layers.Dense(3,activation='softmax')(x)

 

 

   def custom_loss(y_true, y_pred):

      log_lik = K.log(y_true * (y_true — y_pred) + (1 — y_true) * (y_true + y_pred) + K.epsilon())

      return K.mean(log_lik * adv, keepdims=True)

 

   model_train = Model(inputs=[inp, adv], outputs=out)

   model_train.compile(loss=custom_loss, optimizer=Adam(lr))

   model_predict = Model(inputs=[inp], outputs=out)

   return model_train, model_predict


Надеюсь, это никого не отпугнуло, код гораздо проще, чем может показаться. Метод обучения — Policy Gradient, выход соответствует трем действиям: шорт, нет позиции, лонг. Открытие позиции происходит по цене открытия следующего бара, закрытие — по цене закрытия бара. Gym-окружение я выложу чуть позже.

И пока на этом всё, успейте заработать, пока всю прибыль ещё не забирал ИИ.

 

*но автор данной статьи этого гарантировать не может





100 Комментариев
  • aqr
    30 ноября 2019, 16:23
    Жаль нельзя минусовать
  • chizhan
    30 ноября 2019, 16:41
    Так что да, можно гордиться, что у нас (трейдеров) очень сложная профессия.
    Давайте будем реалистами. Мы ищем золото в почти пустой породе, где его почти нет. Вместо того чтобы ехать на Клондайк и столбить участок там. Сами подумайте, если толпы домохозяек на доступных платформах начнут применять нейросети, то никаких закономерностей не будет вообще. Фактически так и есть, нейросетям сто лет в обед, а все более менее богатые инвест банки могут позволить себе и вычислительные ресурсы и квалифицированный персонал для них.
  • ezomm
    30 ноября 2019, 17:42
    Открытие сделки проявляет в авторе мастера торговли.Но закрытие в прибыль  можно делать по любому поводу.Закрытие сделки в убыток -средний размер свечи тайма. Про вход в сделку знают волновики. Мораль- учим волновой анализ Эллиота и торгуем свечной график.
  • А. Г.
    30 ноября 2019, 18:07
    Да уж сколько раз писалось, что современное машинное обучение — это лишь метод поиска нелинейной регрессии. Для нестационарных рядов, каковыми являются приращения цен, использование постоянной нелинейной регрессии — это изначально ошибка. А для статистически достоверного периодического перестроения нелинейной  регрессии явно не хватит отрезка почти стационарности в данных цен. Если и применять нейросети на рынке, то явно не для задачи построения систем по прошлым ценам. 

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

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