Разберемся, зачем в терминалах для алго нужна такая абстракция, как «Позиция» или Position.
1. OsEngine – идейный наследник Wealth-Lab.
Механика управления позициями, способы их открытия и способы их закрытия пришли в OsEngine из Wealth Lab. Не целиком, но почти, и на данный момент слой увеличен раз в пять. Когда-то этот терминал был очень популярен в России и имел приятный на тот момент интерфейс.
Если посмотреть на скрипт в Wealth-Lab, то можно обнаружить много общего с тем, что в скриптах OsEngine:
1. Язык – СиШарп.
2. Похожий синтаксис объявления параметра.
3. Параметры сразу создаются под оптимизацию!
4. Отложенный метод закрытия позиции через продажу, когда цена опуститься ниже. SellAtStop. Есть такие же и на открытие позиции.
5. Запрос к позициям! Wealth Lab тоже в рамках робота ведёт свои позиции, по которым потом строит статистику и прочее. В данном случае все открытые позиции бросаются в метод закрытия позиции по стопу. Их может быть и одна и несколько.
6. BuyAtMarket. Метод открытия позиции по рынку. И если вглядеться в условия, здесь у нас открываются целых ТРИ позиции по одному условию, но в разное время. НЕ ТРИ ОРДЕРА! А ТРИ ПОЗИЦИИ! И потом три позиции же и закрываются по стопу.
7. ShortAtMarket. У нас это SellAtMarket. Тоже самое.
У большинства платформ для алготрейдинга это является базой.
2. Основной единицей осуществления торгового менеджмента во многих терминалах для Алго (с тестерами, журналами и оптимизаторами) является ПОЗИЦИЯ.
Для роботов в алготрейдинге это необходимо т.к. у позиции есть:
A. Точка входа, даже если она состоит из нескольких ордеров.
B. Точка выхода, даже если она состоит из нескольких ордеров.
C. По ним удобно составлять статистику по Позициям, понимать, какая точка входа твоего алгоритма прибыльна, а какая убыточна.
С точки зрения сбора статистики в тестере это жизненная необходимость. Т.к. именно так можно понять прибыльность отдельных точек входа и отдельных точек выхода.
3. Надо управлять позициями, а не ордерами.
Потому-что по позиции получается делать срез статистики по разным инструментам разным стратегиям, разным типам входов и выходов параллельно и настолько часто, насколько это возможно. Было 10 позиций за день или за минуту, по каждой у нас будет отдельная статистика:
При этом, если позиции отдельно не вести и просто использовать ордера, статистику получится собирать не точно и не всегда. На срочном рынке, если Вы сами не знаете своих позиций и торгуете на разных инструментах разные стратегии, за Вас прибыль будет считаться биржей во время клирингов. Будете видеть общий прирост/убыток по счёту пару раз в день:
Понятное дело, такой вариант для сбора статистики торговли и алготрейдинга ни в коем случае не подходит.
4. ПОЗИЦИЯ и её точки входа/выхода заставляют мыслить системно.
Вот робот зафиксировал какую-то ситуацию на рынке. Возьмём самое простое. Пробой канала боллинджера:
Это точное событие, которое нельзя никак иначе интерпретировать. Есть индикатор, у него есть границы, пробили канал – вошли в позицию! У робота такой исходный код.
Бессистемное мышление может заставить вас подумать, что если позиция в итоге убыточна, то надо дополнительно усредниться, упирамидиться, отодвинуть стоп, закрыть руками. Что угодно. Это то, чему люди обучаются, торгуя руками в QUIK десятилетиями!
К сожалению, в алготрейдинге так нельзя.
СЛУЧИЛОСЬ СОБЫТИЕ ВХОДА В ПОЗИЦИЮ, НУЖНО ЧТОБЫ РОБОТ ВОШЁЛ рядом с этим событием. Потом по другому событию СЛУЧИЛСЯ ВЫХОД ИЗ ПОЗИЦИИ. Так мы сможем собрать статистический материал, и никак иначе.
Можно оптимизировать ширину канала в тестере или оптимизаторе, подобрать тайм-фрейм, сделать кросс-тесты. Что угодно! Но нельзя во время торгов, когда робот запущен в бою, делать вид, что позиции не существует, и точки входа нет, или её можно «додумать», как вам хочется. Нельзя оставлять без внимания статистику, которую без позиций не собрать.
Стратегия BollingerTrailing на акциях сбербанка. И статистика позиций по ней в журнале:
Если нужно размазать точку входа, то мы должны определиться, что это будут за сигналы. Например, в публичной сборке есть робот AlligatorTrendAverage, который входит и потом может ещё несколько раз «разбавить» позицию. Итого получается, что у позиции может быть несколько ордеров:
При этом журнал будет собирать статистику по каждой позиции отдельно:
5. Бывают редкие случаи, когда кажется, что позиции не нужны.
Например, такие типы роботов:
1. Сеточники. Роботы, которые входят не по сигналам, а по расстоянию. И в целом, собирать статистику с них якобы не надо, ибо сигналы равноценны, тогда достаточно смотреть на статистику один раз в день на бирже.
2. Различные типы индексных арбитражей для работы с шириной спреда между инструментами и группами инструментов. У таких роботов тоже есть кнопка «включить, когда ширина спреда здесь», «разгрузить, когда ширина спреда здесь». И здесь спред может раз в неделю условно менять своё состояние с «пора покупать» на «пора продавать».
Для алготрейдеров, делающих такие типы алгоритмов, у которых сигналы растянуты во времени, будет тяжело понять смысл использования позиций, но реализовать и сеточник, и индексные арбитражи тоже в OsEngine можно, хотя вероятно это в данном случае не очень удобно.
Удачных алгоритмов!
Поддержка OsEngine: https://t.me/osengine_official_support
Комментарии