Блог им. HsergeyF
Объемные ящики с усами или новый индикатор объемов.
В статье описывается концепция нового (наверное), но до безумия простого индикатора объемов, а точнее их визуального представления, — через boxplot-ы; описываются сильные и слабые стороны и принципы применения индикатора.
Со времен появления ИТС разработчики, ученые, да и простые пользователи изобрели множество индикаторов объемов: от PVT до OBV и прочих. Сегодня разнообразные платформы включают эти индикаторы в свой инструментарий, однако о многих можно наверняка сказать, что они абсолютно бесполезны как для алгоритмиста, так и для обычного трейдера. Насколько мне известно, чаще всего используют обычные объемы (вертикальные или горизонтальные) и Big Trades, из которых реально можно вычленить хоть какую-то полезную информацию внутри дня. Удивительно, но до сих пор я еще нигде не встречал представление объемов в виде графика boxplot (ящик с усами).
Суть boxplot-а проста: он показывает распределение выборки, все его элементы можно увидеть на картинке ниже. В целом, выборка делится медианой на две равные части (половина значений под ней и половина над). Далее делим выборку на квантили. Усы, штрихованные линии, показывают 25 % самых больших и самых малых значений в рамках распределения. Девиантные значения выбрасываются за пределы усов. Останавливаться на описании квантилей не буду, оно есть, например, тут: http://www.machinelearning.ru/wiki/index.php?title=%D0%9A%D0%B2%D0%B0%D0%BD%D1%82%D0%B8%D0%BB%D1%8C
Как же можно использовать такой график применительно к объемам? Мы просто создаем массив, состоящий из тиковых объемов, сумма которых равна объему за минуту. Получаем, соответственно распределение тиковых объемов за минуту. Теперь вопрос: как читать и интерпретировать получившиеся boxplot-ы?
Так называемый «выброс», — это Big Trade, он показывает крупные объемы, которые в момент прошли по рынку. Возможно, я неправильно интерпретирую суть изначального индикатора, но смысл Big Trade-ов заключается в выявлении больших консолидированных объемов, которые как раз и показывают выбросы. Как использовать выбросы уже персональное дело каждого.
Есть теоретические идеи по поводу использования индикатора:
Применений и интерпретаций данного индикатора можно найти массу. С технической точки зрения у индикатора есть лишь один параметр, — какие объемы не включать в выборку. Тут действует принцип: чем больше фильтр объема, тем меньше выбросов. Например, на первой картинке я не включаю в выборку объемы, равные 1, на картинке ниже я отфильтровал объемы меньше 10. Разница налицо.
Если же мы не будем задавать параметр фильтрации объемов, то интерквартильный размах почти исчезнет и мы не сможем ничего разобрать внутри него. Это происходит потому что объемы в 1 контракт занимают ~ 75 % всех объемов за минуту, а то и больше. По прикидкам, если брать в выборку объемы больше 10 контрактов (по SI), то получается вполне адекватное отображение.
Теперь перейдем к плюсам и минусам данного изобретения.
Минусы:
Плюсы:
Итак, подведем итоги. Индикатор в теории хорош, но требует некоторого времени для того, чтобы исследовать гипотезы, связанные с ним. В принципе, индикатор консолидирует в себе уже существующие, а некоторые модифицирует и дает шанс взглянуть на объем под принципиально другим углом. Было бы круто в перспективе увидеть что-то подобное в Tiger Trade, например.
Если есть вопросы, то меня всегда можно найти в онлайн диллинге Instrate team. Получить приглашение и узнать о проекте подробнее тут: https://vk.com/instrate_team
Сергей Фролов, для невекторизируемых операций как раз нужен будет Rcpp. Все встроенные операции, проводимые над векторами или матрицами, работают крайне быстро. Далее, для целей организации циклов проще использовать foreach или *apply циклы — они работают куда быстрее классического for в R. Вместо dplyr лучше использовать data.table — скорость работы последнего выше, на r-bloggers можно найти пруфы. Ну, и ещё много интересностей есть в R. Рекомендую поискать на английском ресурсы по трюкам эффективного программирования на R. А написать неэффективный код можно на любом языке — на С++ или C# тоже можно написать код, который выдаст неслабую задержку при подключении какого-либо модуля к терминалу.)))
В целом, есть на r-bloggers'ах разделы, посвящённые тем или иным особенностям языка или решению тех или иных задач. На хабре тоже бывает интересная инфа, вот соответствующий хаб - https://habrahabr.ru/hub/r/
Сюда тоже рекомендую заглянуть - http://adv-r.had.co.nz/
В принципе, конкретную прикладную задачу можно сначала на хабах поискать (те или иные реализации, указание на бутылочные горлышки и т.п.), потом уже пытаться делать самому. Очень, очень много материала сейчас по R в сети, позволяющего не изобретать велосипед, а писать достаточно эффективный код.