vlad1024
vlad1024 личный блог
09 апреля 2016, 12:33

Отдаю грааль в добрые руки

Картинка для затравки, Out of Sample perfomance (то есть результаты получены на выборке на которой не производилось построение модели):
Отдаю грааль в добрые руки

Сбербанк MOEX 15106 трейдов прибыль 140 руб на одну акцию, периодичность трейдов где-то 15 минут, equity где-то за год.
То же самое для Ri, 22237 трейдов прибыль 100000 пунктов на один контракт, или 5 пунктов на трейд, периодичность такая же 15 минут.
Отдаю грааль в добрые руки
Кому не терпится, выложил исходный код с остальными кратинками (каталог ./img) на github.
github.com/xmvlad/stock_trade_datamine

В чем собственно суть подхода. Начну немного из далека, по большому счету, когда вы пишите стратегия в каком ни буть Wealth-Lab или TS-Lab, она по сути состоит из двух частей Факторов (то есть к примеру индикаторов RSI, ADX или еще чего-то более своеобразного) и некоторой Логики которая на основе факторов принимает решения о том какую позицию занимать.

VC-dimensions и проклятие размерности

Основная проблема построения систем в ручную, то что при увиличении факторов написать для них логику принятия решения становится практически нереально. С другой стороны при построении систем часто используют оптимизацию, но как многим хорошо известно при увиличении количества параметров оптимизации In-Sample и Out-Of-Sample перфоманс системы начинает сильно расходится. Но мало кто понимает что на самом деле проблема не в количестве свободных параметров, а в способе которым они находятся. В статистике есть область, которая изучает способы извлечения зависимостей по данным, это область машинного обучения. Так вот, в ней есть интересные результаты, показывающие почему на самом дели для модели построенной на обучающей выборке(In-sample) ее результаты могут сильно отличаться тестовой(Out-of-sample), при условии что обучаем мы ее некоторой стационарной плотности вероятности. И связано оно со способностью модели разделять точки во входном пространстве параметров, и называется эта метрика VC dimensions(Vapnik–Chervonenkis dimension). В чем ее суть, если мы возьме простейшую линейную модель, например логистическую регрессию, то она будет представлять из себя разделяющую плоскость в N-мерном пространстве входных параметров, для конкретности возьмем что N=10. Что это означает, если в обучающей выборке, меньше 10 точек, то мы всегда можем построить плоскость через эти 10 точек и получить великолепную предсказательную способность на обучающей выборке, которая не будет распросраняться на тестовую. Так же очевидно, что если мы взяли 500 точек, и получили для них хорошую предсказательную способность модели, то есть они все лежат в одной плоскости, то чем больше соотношение количество входных точек к размерности модели, тем больше вероятность, что результат обучающей и тестовой выборки будут сближаться (при условии что мы их считаем на одной и той же плотности). Так вот если для линейной модели, хорошо понятно что при размерности N=10 она задает плоскость в 10-мерном пространстве, и чем ближе к этой плоскости лежат точки тем лучше, то для более сложных моделей этот момент неочевиден, VC-размерность по сути являются расширением понятия «размерности модели» на произвольный случай. Так вот возвращаясь к исходному вопросу, в чем проблема оптимизации алгоритмических стратегий путем перебора параметров, в том что при низком фактическом количестве параметров они имеют очень высокую «размерность модели» (VC-размерность), то есть перебирая некоторые параметры(например индикаторов), мы всегда можем разделить «хорошие» точки от «плохих». Это нас приводит к мысли, что проблема ни в самих свободных параметрах, а в способе построения модели, и хорошо бы найти какой-то «средний» вариант, между простотой линеных статистических моделей и стратегиями имеющими высокую VC-размерность. И такой вариант давно найден и используется в области машинного обучения

Decision trees(Дерева принятия решений)

en.wikipedia.org/wiki/Decision_tree

Не буду расписывать подробно, так как можно прочитать в википедии. Но суть в том, что дерева приняти решения примерно эквивалентны той логики которую можно написать на языке программирования с использованием вложенных if условий использующих различные Факторы. Есть различные способы их построения, но все сводятся примерно к следующему, они пытаются апроксимировать входную плотность вероятности. На основе деревьев принятия решений, строятся некоторые более сложные модели например Random Forest(которые и использовались в данной модели), но суть их остаеться той же. Хотя деревья принятия решений и имеют VC-размерность большую, чем у линейных моделей, которая пропорциональна O(n*d), где — n количестов факторов, d — глубина дерева (для линейных моделей O(n)), но все равно она остается достаточно ограниченной, чтобы при наличии достаточного количества данных модель не переобучалась. В общем, можно применять различные модели, главное сохранять баланс между ее «размерностью», описывающей способностью, и количеством входных данных.

Результат

Собственно, если в двух словах, то как получились картинки из начала поста, по 1 минутным данным строилось большое количество факторов, инидикаторы (RSi, ADX), свечные паттерны, полиномиальная апроксимация скользящим окном. Затем на основе факторов, строилась модель Random Forest с жестко ограниченной VC-размерностью, и регуляризацией. Исходный код доступен по ссылке. Торговать это конечно, из-за профитов съедаемых комиссией нельзя, но возможно кому-то будет интересно как пример работающего low-frequency подхода.
43 Комментария
  • спидараминепью
    09 апреля 2016, 12:43
    для здешней публики нужно последнее предложение сделать первым, а то мозг с непривычки сломают)
  • Gospodin
    09 апреля 2016, 12:53
    Средний доход на сделку (при среднем курсе $ 60 рублей) 6 рублей. А комиссии средние 3,2-4.
  • dvoris
    09 апреля 2016, 12:53

    "… большое количество факторов, инидикаторы (RSi, ADX), свечные паттерны, полиномиальная апроксимация скользящим окном" 

    в итоге, какие факторы оказались самыми полезными/значимыми? 

      • ch5oh
        09 апреля 2016, 13:05

        vlad1024, кубический полином по ценам закрытия??? Интересно!

        А сколько точек брали в «окно» для вычисления коэффициентов?

    • Vitty
      09 апреля 2016, 20:52
      Иван Дворцов, генератор случайных чисел вестимо ;)
  • ch5oh
    09 апреля 2016, 13:01

    Предлагаю Вам учесть комиссии и повторить. Тогда Вы сразу получите рабочий вариант.

    Без комиссий зарабатывает очень много стратегий с большим числом сделок.

  • ch5oh
    09 апреля 2016, 13:03
    В картинках для РТС видно, что Вы сделали переподгонку: инсемпл у Вас идеальный, а аутофсемпл — как обычно средней паршивости.
      • ch5oh
        09 апреля 2016, 13:08
        vlad1024, на джитхабе и посмотрел.
  • Spekyl
    09 апреля 2016, 13:03
    Я ничё не понял. «Random Forest model with 30 minute price delta as target for prediction» — таргет полчаса и всё коммиссы сжирают?

  • dvoris
    09 апреля 2016, 13:11

    полистал проект, в img вроде бы нашёл.

    вопрос, japanese pattern на минутных свечах анализировались? всегда к паттернам прохладно относился, тем более на мелком ТФ, а там смотрю doji вылез как значимый фактор.

  • Spekyl
    09 апреля 2016, 13:13
    А что за фича — timestamp?
  • dvoris
    09 апреля 2016, 13:13
     в общем, интересно, спасибо.  надо погонять на привычном с#)
    • KonstantinLong
      09 апреля 2016, 14:11
      Иван Дворцов,  а через че  запускать файлы?

  • finstrateg
    09 апреля 2016, 13:29
    тут одних добрых рук не достаточно, нужна еще и умная голова )))
    — из написанного ничего понял (((
  • Sergey Pavlov
    09 апреля 2016, 13:39
    Машинное обучение — коварная штука...

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

    Из этого также следует вывод, что реальной информативности в выбранных факторах мало. Также надо учитывать, что приведенные факторы на 80% это одно да потому. Можно было случайно выбрать любые иные факторы и получить за счет данного обучения подобные картинки.

    Интересно другое. Как всё это меняется, если уменьшить кол-во сделок на порядок?
      • Sergey Pavlov
        09 апреля 2016, 14:05
        vlad1024, 
        из этого набора факторов любыми другими методами большего не выжать
        а нужно ли?

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

        Переобучение зависит объема данных лишь частично. На самом деле можно легко добиться переобучения и в случае, когда кол-во обучаемых примеров превосходит кол-во выбранных факторов скажем в 10 тысяч раз. Всё дело в том, насколько обучение осмысленно. Нельзя обучиться всему из ничего… Когда мы обучаем ребетенка чему-то мы ведь ему не всякий мусор подсовываем в качестве учебного материала. Тут такая же история… Подавая на вход обучающейся системе всякие RSI и MA, на самом деле мы подаем ту же самую исходную ценовую информацию. В этом два «жирных» минуса:
        1. Мы дублируем исходную информацию, ибо все эти машки, емашки и пр и пр — суть простые линейные преобразование исходного ряда по типу первой производной.
        2. (следствие из первого) Мы подаем на вход практически случайный набор данных… ибо ценовые последовательности весьма близки к случайным, хотя таковым не являются.
        Поэтому неудивительно, что обучающаяся система либо тупо запоминает то, что от неё требуется на обучающей выборке, а потом уже как получится что-то выдает на тестовой. Либо же результатом обучения становятся некие средние прогнозы — средняя температура по больнице. И то и другое не очень полезно практически, хотя для понимания многих нюансов ваши исследования весьма полезны!
          • Sergey Pavlov
            09 апреля 2016, 14:28
            vlad1024, в порядке личного мнения: думаю, что вы переоцениваете машинное обучение в следующем
            По поводу мусора — методы машинного обучения сами его отбрасывают
  • KonstantinLong
    09 апреля 2016, 13:53
    и как Пользоваться  этими Файлами?
  • goga
    09 апреля 2016, 13:58
    "… Торговать это конечно, из-за профитов съедаемых комиссией нельзя" !!!
    Автор, ну ты даешь, это 100 уровень цинизма.
  • bard5
    09 апреля 2016, 14:05
    Зачем так мозги себе парить? Жизнь и так не сахар:) начну с начала: люди! Не стройте иллюзий.пока не потратите 4-6 лет на обучение и практику( сливы в том числе) вы не увидите те закономерности которые позволяют стабильно работать в плюс.тут один чудак писал что правило10000 часов не работает.как раз наоборот: это самое главное.просто далеко не у всех хватает терпения или возможностейдойти до конца.отсюда и статистика о 95 процентов слившихся.
  • Vitty
    09 апреля 2016, 20:39
    Это не грааль, это иллюзия. фирменные грабли для любителей математики. 

    P.S. вы таки правда считаете что по 500 точкам можно обучить модель с 10 параметрами? ;)  если да, то жизнь готовит вам много сюрпризов. неприятных.
      • Vitty
        10 апреля 2016, 09:29
        vlad1024, да не обучите вы ничего. 
        пусть у каждого параметра всего 10 возможных значений (очень грубая оптимизация); вы получаете 10^10 = 10 миллиардов как провести гиперплоскость и попилить свои несчастные 500 точек. среди этих 10 миллиардов найдется, навскидку, с миллион неплохих вариантов и из них 1000 очень хороших. только это все фигня, ибо никакой предсказательной силы не имеет.

        попробуйте форвардное тестирование, желательно на деньги и желательно большие (так уроки лучше усваиваются) — и все сразу станет понятно.
          • Vitty
            10 апреля 2016, 09:56
            vlad1024, о хосподи… чтоб провести 10мерную гиперплоскость, да 10 точек достаточно. кста, остальные 490 ничего не должны и лежат почти случайно — пробовали хоть визуализировать?

            а можно вообще без точек — по старинке, на кофейной гуще, результат тот же + напиток вкусный. 

            вот, видимо, поэтому у математиков торговля получается поначалу хуже чем по идее должно было быть. Ваша цель — не гиперплоскости проводить, а построить модель, имеющую ПРЕДСКАЗАТЕЛЬНУЮ силу. и по 500ам точкам вы ее не построите.

              • Vitty
                10 апреля 2016, 10:04
                vlad1024, ну отдельная песнь что такое медицинский ресеч, особенно если речь о россии ;)

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

                короче, начинайте торговать на деньги, рынок всему научит.
  • Vitty
    10 апреля 2016, 09:31
    Stanislav Korolev, справедливости ради бывает.  редко, но бывает. пирамида Маслоу в действии. когда вопрос с деньгами закрывается, возникает потребность в признании.
  • ALEXEY BURNAKOV
    13 апреля 2016, 16:00
    Вопрос vlad1024.

    С VC-размерностью немного знаком, свои стратегии искал и машинным обучением (предпочитаю boosted trees) и перебором параметров в тестере стратегий.

    Что, вообще, значит в контексте обсуждения провести гиперплоскость через 10 или иное количество точек? Это значит, плосткость будет отделять точки, соответствующие приказам Buy от приказов Sell. Я не имею ничего против того, что перебрать координаты этой плоскости, при условии, что количество точек, будет «не маленьким».

    Далее. А как, собственно, формируется логика приказов? У меня, при переборе параметров, она была такая: 

    if (param1 > threshold 1
    & param2 > threshold 2
    & param3 < threshold 3
    & ...
    & param(n) between 2 and 24) then 'buy'

    То есть, простыми словами, логика строит прямоугольник в n-мерном пространстве. Что в этом плохого или сомнительного? В прямоугольнике VC-размерность будет конечна, не?

    Вернемся к деревьям решений, их логика:

    if (param1 > best_threshold 1
    & case count > min count) then
    'create subsapce 1 and look for next param in given subspace else stop'

    if (param1.1 > best_threshold 1.1
    & case count > min count) then 
    'create subsapce 1.1 and look for next param in given subspace else stop'

    Похоже, не правда ли? Деревья решений также аппроксимируют пространство исходов прямоугольниками. Так чем они лучше?

    Просто подискутировать…
      • ALEXEY BURNAKOV
        13 апреля 2016, 18:01
        vlad1024, 
        Вы можете привести пример оптимизации (скажем, подбор оптимального порога чего-либо), когда VC-размерность не растет?

        Я, честно, не совсем понимаю вас, когда вы говорите, что изменяя окно, например, МАшки, имеем мультипликативный рост. Поясню: у нас есть 10 параметров, часть из них связано с погружением в лаговое пространство (например, ширина окон), часть с порогами отсечения. Почему ряд значений параметра окна будет равнозначен ряду факторов?

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

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

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