Блог им. SciFi

Мои шаги в сторону машинного обучения на R и немного про Si, Brent

    • 15 апреля 2016, 21:14
    • |
    • SciFi
  • Еще

Копался в статьях по алготрейдингу, решил присмотреться в сторону машинного обучения. Но это в моем случае не про какой-то искусственный интеллект с нейросетями, в нейросети пока не хочу лезть, слишком сложно. Для начала хочу использовать простые алгоритмы для классификации и оценки хороших точек входа на основе обучения модели на истории.

Я исходил из того, как сам разрабатываю обычно торговую систему: ищу хорошие точки входа на истории и классифицирую их. Но так как человеческие возможности ограничены, использую только 3 таймфрейма и около 10 индикаторов в сумме. Кроме этого, история в точности никогда не повторяется и нужна какая-то более умная модель, которая не просто сравнивает индикаторы, как делают сейчас мои роботы, а дает оценку данной рыночной ситуации на основе всей совокупности индикаторов.

С помощью машинного обучения можно создать и обучить много моделей по разным алгоритмам, эта область уже хорошо развита (Logistic regression, Linear discriminate analysis, Stochastic gradient boosting, Decision trees, Support Vector Machine, KNN и другие). Можно быстро попробовать разные модели (Spot-checking algorithms). Модели могут работать вместе и делать предсказания. Можно улучшать точность моделей (Algorithm parameter tuning, Ensemble methods). Можно посчитать точность предсказаний по модели, обучив сначала модель на части выборки, а затем протестировав ее на другой части выборки (resampling). 

Как я понял, R для машинного обучения идеально подходит. Сделал первые шаги сегодня: cоздал модель по туториалу, которая определяет по размеру чашелистиков и лепестков растения ирис точный вид (всего 4 вида) какого-то одного растения(особи) на основе обучения по выборке из 500 других растений(особей). 

Код: 

# Скачивание и инициализация библиотек mlbench(используется для machine learning), caret (используется для нормализации данных)
install.packages("mlbench") 
library(mlbench)
install.packages("caret") 
library(caret)

# Краткая информация про базу данных iris
data(iris)
summary(iris)

# Определение тренировочной выборки
trainControl <- trainControl(method="cv", number=10)

# Оценка точности алгоритма Naive Bayes на данном dataset
fit <- train(Species~., data=iris, trControl=trainControl, method="nb")

# Вывод оценки точности
print(fit)

Сейчас я точно так же хочу сделать модель, которая на основе 30-300 хороших точек входа на истории определяет, насколько хороша данная пятиминутка для входа в лонг или шорт. 

Что скажете? Есть ли там грааль? Есть ли у кого-то опыт использования машинного обучения для торговли? Что посоветуете? 

Также представляю вашему вниманию грубую оценку того, на сколько в среднем ходят нефть Brent и Si за час и 1 день. Посчитал с использованием библиотеки rusquant на R. Также делюсь элементарным кодом. 

Я взял данные за последние 15 дней для BRK6 и 30 дней для SiM6. Затем посчитал доходности и их среднеквадратичное отклонение. Затем отклонение умножил на среднюю цену. 

Получилось:

Brent
за час: 0.25$
за день: 1.15$

Si
за час: 235 руб.
за день: 757 руб. 

Код на R: 

# Инициализация библиотеки rusquant (русская версия от quantmod, поддерживает все функции quantmod)
library(rusquant)

# Получение исторических данных с Финама
getSymbols("SiM6", from=Sys.Date()-30, src="Finam", period="day")

# Рисуем график, чтобы увидеть данные
candleChart(SIM6)

# Расчет доходностей встроенной функцией библиотеки rusquant (унаследована от quantmod)
rr <- OpCl(SIM6)

# Цены закрытия
p <- Cl(SIM6)

# Получение абсолютного значения среднеквадратичного отклонения доходности
sd(rr)*mean(p)

[1] 757.7013

# Аналогично для часовика
getSymbols("SiM6", from=Sys.Date()-30, src="Finam", period="hour")
candleChart(SIM6)
rr <- OpCl(SIM6)
p <- Cl(SIM6)
sd(rr)*mean(p)

[1] 234.9929

#Аналогично для BRK6. 

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.

575 | ★15
34 комментария
Поменьше уродов, побольше таких, как Вы. СПАСИБО!!!
«Сейчас я точно так же хочу сделать модель, которая на основе 30-300 хороших точек входа на истории определяет, насколько хороша данная пятиминутка для входа в лонг или шорт. » — удачи. Даже на очень длинной истории такой как S&P500 например вы получите сравнительно маленькие выборки для конкретной формации, т. к. они на самом деле сравнительно редко повторяются… И точность предсказаний такой модели будет невысока (60 на 40 например получите), в общем грааль тут если и есть, то только для долгожителя торгующего лет 50…
avatar
Удачи Вам, буду следить. Это лишь начало пути, как много прекрасного у Вас впереди :)
avatar
на техностриме mail.ru неплохие лекции по дата майнингу
avatar
Mr_X, спасибо! 
avatar
Код:

это весь алгоритм? Вы что шутите, или издеваетесь?:)
avatar
sortarray sortarray, при использовании готовых библиотек любой код становится простым ) Вся сложность скрыта. 
avatar
Это да. Можно все посчитать. Но как из R транслировать заявки в QUIK?
avatar
IliaM, почему именно в квик?
avatar
Андрей, Как-то так сложилось
avatar
IliaM, пока хочу просто проверить, работает ли это. Можно написать функцию на R, которая будет использовать готовую модель и сразу давать ответ в виде отчета для последней рыночной ситуации, например, в виде текстового файла. Также можно на R все это проверить, найти рабочую систему. А запрограммировать уже отдельно алгоритм под терминал. 
avatar
Машинное обучение это интересная и полезная штука, когда обучение строится сверху-вниз, если логически заранее известно, что точно имеется то, чему возможно обучиться. По-простому говоря, машинное обучение, это не подход, а инструментарий поиска решения. Если заранее известно, что это решение существует, то машинное обучение справится.

Как обстоит дело в случае с этими измученными исследователями ирисками? Они весьма неплохо разделяются линейными границами — многомерными плоскостями, ну т.е. это шикарная задача, в которой решение имеется… грубо говоря, 80% ирисок из каждого класса достаточно компактны и не пересекаются с другими классами. Дальше вопрос — как найти эту границу? Можно написать уравнение разделяющей плоскости аля LDA и потом решить систему уравнений — получите результат. Можно сделать случайный поиск коэффициентов разделяющей плоскости — опять получится результат. Можно науськать обычный перцепртрон… он сделает то же самое… Потому что решение имеется. Иными словами, конкретные методы машинного обучения в данном случае являются не методом решения исходной задачи, а лишь средством её решения.

Что в случае с ценовыми последовательностями? Кому удавалось видеть, чтобы общий набор почти случайных баров за счет какого-то преобразования давал условное и безусловное распределения, в которых мы бы видели, чтобы разделялись плохие и хорошие или покупки и продажи хотя бы в пропорции 60 на 40%? Кстати, в HFT обычно граали начинаются от пропорции 45 на 55 — этого достаточно уже.

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

А как отличить на этой стадии переобучение от не-переобучения? Реальный критерий один — если по этому удается зарабатывать на реальном счете.

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

Применение машинного обучения снизу-вверх — удел совсем романтичных романтиков:)
avatar
Sergey Pavlov, +, а еще классические алгоритмы хорошо приспособлены для поиска оптимальной модели по всем данным сразу т.е. каждая точка данных весит примерно одинаково. Это годится для торговых моделей которые все время в рынке. А значит в основном торгует шум. Торговые алгоритмы которые выжидают момента, а потом входят не на долго в рынок, требуют чтобы мы сильно по разному относились в областям где позиция открыта и где нет. Т.е. алгоритм учить надо с учетом этого, а в классике это сложно, включая нейросети.
avatar
ivanovr, на мой скромный взгляд, обучаемые системы в трейдинге полезны для одного — поиска закономерности в исходных данных. Логически такая постановка обоснована, поскольку человеческий глаз многое не увидит сразу, а многое вообще не сможет увидеть. Плюс к этому машина проведет намного больше экспериментов нежели человек. Но потом все равно перед человеком встанет вопрос о принятии или отклонении гипотезы о том, можно ли считать найденное нечто закономерностью.
avatar
Sergey Pavlov, это да, но я про то, что классические алгоритмы ищут не совсем то. Не рост эквити а какой-то там свой показатель качества да еще в предположении что все данные одинаково важны. Потому куда правильнее искать алгоритм, а качество оценивать по эквити. Тут лучше всего подходит какая ни будь эволюционная оптимизация.
avatar
ivanovr, подозреваю, что всё это — игра слов. Любое из средств машинного обучения вполне можно назвать эволюционной оптимизацией:) Вообще было бы интересно посмотреть… необязательно применительно к ценовым последовательностям… в любой области… где машинное обучение из исходного хаоса само чему-нибудь таки взяло да научилось:) Может у кого есть информация о таких примерах?
avatar
Sergey Pavlov, можно назвать оптимизацией, но не эволюционной (так называется вполне определенный класс алгоритмов). Но важно какую функцию оптимизируем. В случае большинства алгоритмов максимизируется некий показатель качества, который напрямую с качеством эквити не связан. 
Про хаос вопрос не понял. Что там за хаос. Всегда решение ищется на ограниченном объеме входных данный и форма решения тоже ограничивается. Если пространство решений будет бесконечно, то вероятность получить переобучение стремится к 1.
avatar
ivanovr, либо минимизируется функция потерь, например, сумма квадратов ошибок. Либо максимизируется информация или разница в энтропии. 
avatar
Sergey Pavlov, возможно, вот такой пример имеется в виду? http://smart-lab.ru/blog/307172.php
avatar
ivanovr, интересный пример, спасибо!
avatar
Sergey Pavlov, сверточные сети и фильтры габора например
avatar
Mr_X, названий много, а есть ли успешные внедрения?
avatar
Sergey Pavlov, да, поиск по картинке
avatar
Sergey Pavlov, именно для этого я и начал все это изучать. Когда я смотрю глазами и торгую руками, я склонен переоценивать какой-то один фактор или вообще вступать в ступор. Например, пусть тренд по нефти на часовике вверх, а последний отчет по запасам при этом показал, что запасы выросли. Вот что делать? Надеюсь, машинное обучение поможет принимать решения в таких ситуациях. 
avatar
SciFi, если у вас это получится, это будет очень здорово:) не забудьте похвастаться потом!
avatar
Что скажете? Есть ли там грааль? Есть ли у кого-то опыт использования машинного обучения для торговли? Что посоветуете? 

Грааля нету.  
А мораль проста -
Нельзя просто так взять и  обучить машину делать то, чего сам делать не умеешь.
avatar
машинное обучение полностью зависит от того, какие данные ты ему будешь скармливать. если ты найдешь такую альфу — то да, возможно это и есть твой грааль. но обучение — это метод, не более того. ну и оверфиттинг, конечно, возможен, особенно, если входных классификаторов очень много
avatar
Alex Hurko, Алекс не криви душой) это же полный бред, сам то ты не работаешь с упакованными данными.
Попробовал R и сделал вывод что для выборок большого объема он не приспособлен. А это, пожалуй, противоречит задаче.
Python для этой цели интереснее.
Но на деле использую нормально компилируемый язык ;)
avatar
Это не обучение, это запоминание.  Запомнит цены и будет выдавать прогнозы, когда они будут совпадать. Если у вас есть опровержение — готов выслушать.
MyKey, не запоминание, а поиск скрытых закономерностей. Для меня главное, чтобы обучение позволило распознавать с повышенной вероятностью хорошие точки входа. При использовании какого-нибудь TSLab, который позволяет проверять алгоритмы на истории, мы задаем зависимости (например, гипотезу о том, что скользящие средние влияют на цену в будущем) и проверяем их статистически. При использовании же машинного обучения мы пытаемся найти эти зависимости. В этом отношении машинное обучение, на мой взгляд, круче. Правда, логически объяснить, почему Газпром именно так влияет на Сбербанк будет сложно. Но если влияет, почему бы это не торговать? )
avatar
SciFi, вот это правильный подход, но есть же спец ПО для этого, зачем что-то писать…

Читайте на SMART-LAB:
Фото
ФСК-Россети. Новая инвестпрограмма. Капекс по прогнозу растёт, а дивиденды нет… да уж
Компания ФСК-Россети опубликовала отчет РСБУ за Q1 2026г.: 👉Выручка — 102,00 млрд руб. (+14,6% г/г) 👉Себестоимость — 59,98 млрд руб....
Циан продолжает обеспечивать высокую дивдоходность
Совет директоров Циан рекомендовал годовому общему собранию, которое назначено на 11 июня, утвердить дивиденд за первый квартал в размере 53 руб....
Фото
Длинные ОФЗ ― в фокусе внимания инвесторов
Длинные ОФЗ сейчас выглядят одним из самых интересных инструментов для инвестора, который хочет получить не только купонный доход, но и...

теги блога SciFi

....все тэги



UPDONW
Новый дизайн