SciFi
SciFi личный блог
15 апреля 2016, 21:14

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

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

Я исходил из того, как сам разрабатываю обычно торговую систему: ищу хорошие точки входа на истории и классифицирую их. Но так как человеческие возможности ограничены, использую только 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. 
34 Комментария
  • Русский Иван (LOSSBOY)
    15 апреля 2016, 21:31
    Поменьше уродов, побольше таких, как Вы. СПАСИБО!!!
  • speculair
    15 апреля 2016, 21:54
    «Сейчас я точно так же хочу сделать модель, которая на основе 30-300 хороших точек входа на истории определяет, насколько хороша данная пятиминутка для входа в лонг или шорт. » — удачи. Даже на очень длинной истории такой как S&P500 например вы получите сравнительно маленькие выборки для конкретной формации, т. к. они на самом деле сравнительно редко повторяются… И точность предсказаний такой модели будет невысока (60 на 40 например получите), в общем грааль тут если и есть, то только для долгожителя торгующего лет 50…
  • shprots
    15 апреля 2016, 22:41
    Удачи Вам, буду следить. Это лишь начало пути, как много прекрасного у Вас впереди :)
  • Mr_X
    15 апреля 2016, 23:03
    на техностриме mail.ru неплохие лекции по дата майнингу
  • sortarray sortarray
    15 апреля 2016, 23:41
    Код:

    это весь алгоритм? Вы что шутите, или издеваетесь?:)
  • IliaM
    16 апреля 2016, 00:06
    Это да. Можно все посчитать. Но как из R транслировать заявки в QUIK?
    • Андрей
      16 апреля 2016, 01:26
      IliaM, почему именно в квик?
      • IliaM
        16 апреля 2016, 19:59
        Андрей, Как-то так сложилось
  • Sergey Pavlov
    16 апреля 2016, 04:44
    Машинное обучение это интересная и полезная штука, когда обучение строится сверху-вниз, если логически заранее известно, что точно имеется то, чему возможно обучиться. По-простому говоря, машинное обучение, это не подход, а инструментарий поиска решения. Если заранее известно, что это решение существует, то машинное обучение справится.

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

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

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

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

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

    Применение машинного обучения снизу-вверх — удел совсем романтичных романтиков:)
    • Roman Ivanov
      16 апреля 2016, 12:36
      Sergey Pavlov, +, а еще классические алгоритмы хорошо приспособлены для поиска оптимальной модели по всем данным сразу т.е. каждая точка данных весит примерно одинаково. Это годится для торговых моделей которые все время в рынке. А значит в основном торгует шум. Торговые алгоритмы которые выжидают момента, а потом входят не на долго в рынок, требуют чтобы мы сильно по разному относились в областям где позиция открыта и где нет. Т.е. алгоритм учить надо с учетом этого, а в классике это сложно, включая нейросети.
      • Sergey Pavlov
        16 апреля 2016, 12:49
        ivanovr, на мой скромный взгляд, обучаемые системы в трейдинге полезны для одного — поиска закономерности в исходных данных. Логически такая постановка обоснована, поскольку человеческий глаз многое не увидит сразу, а многое вообще не сможет увидеть. Плюс к этому машина проведет намного больше экспериментов нежели человек. Но потом все равно перед человеком встанет вопрос о принятии или отклонении гипотезы о том, можно ли считать найденное нечто закономерностью.
        • Roman Ivanov
          16 апреля 2016, 12:57
          Sergey Pavlov, это да, но я про то, что классические алгоритмы ищут не совсем то. Не рост эквити а какой-то там свой показатель качества да еще в предположении что все данные одинаково важны. Потому куда правильнее искать алгоритм, а качество оценивать по эквити. Тут лучше всего подходит какая ни будь эволюционная оптимизация.
          • Sergey Pavlov
            17 апреля 2016, 04:37
            ivanovr, подозреваю, что всё это — игра слов. Любое из средств машинного обучения вполне можно назвать эволюционной оптимизацией:) Вообще было бы интересно посмотреть… необязательно применительно к ценовым последовательностям… в любой области… где машинное обучение из исходного хаоса само чему-нибудь таки взяло да научилось:) Может у кого есть информация о таких примерах?
            • Roman Ivanov
              17 апреля 2016, 21:03
              Sergey Pavlov, можно назвать оптимизацией, но не эволюционной (так называется вполне определенный класс алгоритмов). Но важно какую функцию оптимизируем. В случае большинства алгоритмов максимизируется некий показатель качества, который напрямую с качеством эквити не связан. 
              Про хаос вопрос не понял. Что там за хаос. Всегда решение ищется на ограниченном объеме входных данный и форма решения тоже ограничивается. Если пространство решений будет бесконечно, то вероятность получить переобучение стремится к 1.
            • Roman Ivanov
              17 апреля 2016, 21:06
              Sergey Pavlov, возможно, вот такой пример имеется в виду? http://smart-lab.ru/blog/307172.php
              • Sergey Pavlov
                18 апреля 2016, 04:24
                ivanovr, интересный пример, спасибо!
            • Mr_X
              18 апреля 2016, 17:30
              Sergey Pavlov, сверточные сети и фильтры габора например
              • Sergey Pavlov
                18 апреля 2016, 19:01
                Mr_X, названий много, а есть ли успешные внедрения?
                • Mr_X
                  18 апреля 2016, 19:45
                  Sergey Pavlov, да, поиск по картинке
          • Sergey Pavlov
            18 апреля 2016, 15:44
            SciFi, если у вас это получится, это будет очень здорово:) не забудьте похвастаться потом!
  • SMT
    16 апреля 2016, 04:54
    Что скажете? Есть ли там грааль? Есть ли у кого-то опыт использования машинного обучения для торговли? Что посоветуете? 

    Грааля нету.  
    А мораль проста -
    Нельзя просто так взять и  обучить машину делать то, чего сам делать не умеешь.
  • day0markets.ru
    16 апреля 2016, 08:57
    машинное обучение полностью зависит от того, какие данные ты ему будешь скармливать. если ты найдешь такую альфу — то да, возможно это и есть твой грааль. но обучение — это метод, не более того. ну и оверфиттинг, конечно, возможен, особенно, если входных классификаторов очень много
    • спидараминепью
      16 апреля 2016, 11:13
      Alex Hurko, Алекс не криви душой) это же полный бред, сам то ты не работаешь с упакованными данными.
  • Roman Ivanov
    16 апреля 2016, 12:28
    Попробовал R и сделал вывод что для выборок большого объема он не приспособлен. А это, пожалуй, противоречит задаче.
    Python для этой цели интереснее.
    Но на деле использую нормально компилируемый язык ;)
  • Чарльз Маккей
    16 апреля 2016, 23:44
    Это не обучение, это запоминание.  Запомнит цены и будет выдавать прогнозы, когда они будут совпадать. Если у вас есть опровержение — готов выслушать.
      • Чарльз Маккей
        20 апреля 2016, 11:55
        SciFi, вот это правильный подход, но есть же спец ПО для этого, зачем что-то писать…

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

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