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

Основное отличие машинного обучения от традиционного программирования состоит в том, что в задачах классического программирования вы знаете некие правила и жестко программируете их в поведении программы; в задачах машинного обучения вы не знаете по каким конкретно правилам должна работать программа и позволяете моделям машинного обучения самим найти их. Если вы хотите создать торгового робота, обычно, вы сами ищете некоторые правила (например, пересечение скользяшек, 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-окружение я выложу чуть позже.
И пока на этом всё, успейте заработать, пока всю прибыль ещё не забирал ИИ.
*но автор данной статьи этого гарантировать не может