Всего лишь неделю нужно для того, чтобы каждый из вас смог сам научиться программировать сверточные нейронные сети, которые торгуют не хуже этой*:
Основное отличие машинного обучения от традиционного программирования состоит в том, что в задачах классического программирования вы знаете некие правила и жестко программируете их в поведении программы; в задачах машинного обучения вы не знаете по каким конкретно правилам должна работать программа и позволяете моделям машинного обучения самим найти их. Если вы хотите создать торгового робота, обычно, вы сами ищете некоторые правила (например, пересечение скользяшек, 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-окружение я выложу чуть позже.
И пока на этом всё, успейте заработать, пока всю прибыль ещё не забирал ИИ.
*но автор данной статьи этого гарантировать не может
Таким образом, получается, что ВР всё же стационарен, если сама линейная регрессия — стационарна в широком смысле.
Вероятно, если бы цены были нестационарны, то нейросети нашли бы что-то получше, я правильно вас понимаю?
Но в любом случае надо предварительно корректно решить задачу конечной формализации до обучения нейросетей.
А. Г., Может из-за того, что я не шарю в нейросетях (а я не шарю), может из-за того, что мы где-то понятийно разошлись...
В общем, о чем говорю я: обучение любой модели — это уже то самое выявление паттернов, для каких-то типов моделей это самые что ни на есть типичные паттерны, которые трейдер имеет в виду, для каких-то что-то что можно назвать паттернами только если сильно обобщить это понятие. Например, дерево решение, на выходе каждый путь, ведущий к True по сути это паттерн, т.е. паттерн_1: a>5, b<3.5, c>9 — вполне себе паттерн, разве нет? Нейросети, подозреваю, тоже в процессе обучения выявляют паттерны, используемая модель, её тип и признаковое пространство определяет характер паттернов — это да. Соответственно, обучение модели — выявление паттернов, использование поиск выявленных.
Формализация в конечное множество (уход от поля действительны чисел в другую структуру) может дать результат, но без неё ничего не получится.
Базовые архитектуры сетей для вероятностного анализа временных рядов можно посмотреть в этой библиотечке https://gluon-ts.mxnet.io/index.html
Про конкретное применение ML для предсказания будущих котировок по динамике стакана слушал только в эти выходные (видио):
Победителем было построено 50 моделей с помощью градиентного бустинга (на базе LightGBM)
Предсказание этих моделей было объединено с помощью ElasticNet (на базе sklearn)
Это характерный пример, как сильно современные архитектуры отличаются от перцептрона. Ну и да нужно много данных.
А. Г., во-первых ваше допущение о соотношении количества данных и параметров не совсем верно. Оно работает для классических статистических методов, но не действует для сетей — DenseNet тренировали на в 1 млн изображений, то есть параметров в нем в 20 раз больше, чем обучающих примеров. Если грубо, то там зашито очень много регулиризации (за счет Batch Normalization, DropOut, Weight Sharing, Residual connection и прямой L2 регуляризации на веса), потому эффективное количество параметров существенно меньше.
Во-вторых, вас никто не заставляет делать сеть такого размера. Допустим вы захотите заглянуть в историю на 3 сотни значений котировок назад, допустим вы еще объем подтяните — входной вектор данных у вас 300х2 = 600, а у DenseNet около 150 тысяч, то есть в 250 раз меньше — параметров у вас будет не 20 млн, а 80 тысяч при сопоставимой архитектуре.
А. Г., в вашем экстремальном примере большого смысла нет, кроме как поизвращаться и показать, как работают некоторые методы ML.
На практике очень много сетей имеет количество параметров существенно большее количества примеров и в этом нет никаких проблем. Более того есть совсем экстремальные методы, как обучить сеть с десятками миллионов параметров на нескольких сотнях примеров.
Если посчитать количество параметров в каком-нибудь GBM, то там легко окажется около 10 тысяч решающих деревьев и порядка 1000 листьев в каждом, для задания которых потребуется порядка 10 млн параметров. Но GBM отлично работает всего на нескольких тысячах примеров.
Эти методы вполне применяются для прогнозирования цен, в том числе при недостатке данных. На последнем конкурсе Сибура нужно было прогнозировать цены на сырье по очень коротким рядам порядка 100 точек — обычные регрессии, ARIMA и т.д. как-то быстро ушли на второй план уступив место градиентному бустингу (лучшее решение было на catboost).
А насчет Тихонова, дайте ссылку на эту его теорему, чтобы понять что там математически.
Наберите регуляризация Тихонова.
Получил вот это
https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%A2%D0%B8%D1%85%D0%BE%D0%BD%D0%BE%D0%B2%D0%B0#%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A2%D0%B8%D1%85%D0%BE%D0%BD%D0%BE%D0%B2%D0%B0
Где здесь число переменных больше числа уравнений?
Давно (лично я) не видел чтобы вот так, двумя фразами, да ещё и «просто по ходу», можно было описать проблему, которую большинство принимает за «успех».
На этих машинных моделях автор уже в Форбс?
Прогнозы и реальные цены выглядят примерно так и не важно какими методами они осуществляются.
Принцип получился «Завтра будет то же, что и сегодня»
Пока учусь в данной области, пока простые модели использую, скоро и нейронные сети будут. Что-нить наобучаю интересного, думаю. Но ожидания все больше сдвигаются в сторону реалистичных), что хорошо.
Я во многом согласен с А.Г., поэтому крайне удивлен такими результатами. Настолько удивлен, что приобрел новые кошмары, в которых все модели переобучаются, повсюду лики в данных и «заглядывание в будущее».
К сожалению, у меня нет ни времени, ни сил, чтобы всё аккуратно протестировать и уйти от базового решение к более продвинутой модели, но, если бы сделал всё это, этого и курса бы не было или цена была бы порядка на 2 больше.
К тому же, весь этот подход не столь эффективный для торговли теми инструментами, с которыми сейчас работаю я. Поэтому мне не жалко вам про него рассказать, мне даже интересно, что у вас может получиться.
Чтобы не разочароваться, следует ожидать, что этот курс — это очень простое введение в обучение с подкреплением, а не раздача зарабатывающего торгового агента.
Владислав Кузьменков, наверное, поэтому платный «околорынок» так не любят. Потому что априорно ожидается, что ничего путного прибыльного никто не расскажет. Одно дело встретиться на бесплатном вебинаре и «просто потрындеть», обменяться мнениями и т.п. Другое дело, когда Автор просит деньги за право послушать свой скучный голос, который ещё и не окупится никогда с высокой вероятностью.
Ладно, это всё лирика.
Курс начинается уже завтра надеюсь.
Репозиторий доделали?
Уже можно скачать GYM-окружение и т.д.?
Хотелось бы не в последний момент бегать и судорожно устанавливать зависимости. Опять же чем более подготовленные будут слушатели, тем больше идей и полезной пользы прилетит Вам лично.
Кстати, при том, что график эквити отвратителен, он явно построен в программе типа TSLab или велса.
Хотелось бы одним из пунктов программы услышать, как Вы состыковали нейронку с торговой программой.
Ведь не просто же забили в шарпном коде "В этот день покупаю, в этот день продаю"?..
главная доступная аномалия рынка в трендах связанных с распространением информации, но для этого вся эта машин леня не нужна…
но когда начинается фукусима, горелкин или еще какой нибудь кипиш, в это достаточно короткий промежуток времени цена становится более стационарной и тогда можно включать молотилку. все это моя фантазия так, что без претензий…
Иван Файртрейдов, практика показывает, что проблема именно в том, что нас никто заранее не предупреждает о начале хорошего тренда. Поэтому молотилка должна быть всегда включена.
Вопрос только, чтобы она не слила депозит пока ждет своего счастья.