В прошлых статьях мы уже знакомились с таким понятием как позиция. Поговорим об экземплярах класса Position подробнее.
Position — это объектно-ориентированные представления n-го количества ордеров, объединенных вместе общими причинами создания. К таковым относятся: необходимость робота оперировать группами ордеров как единым целым, создавать разнонаправленные позиции, вести несколько позиций в рамках одной стратегии. Сам терминал получает возможность проводить анализ, сопровождать позиций, устанавливать стопы и профиты, использовать режим эмуляции, собирать статистические показатели.
Каждая позиция имеет свой жизненный цикл. В зависимости от действий алгоритма в нормальных условиях состояние позиции изменяется с Opening на Done. Общая схема жизни позиции представлена на следующей диаграмме:
Рис. 1. Жизненный цикл позиции.
В OsEngine есть такая полезная функциональность, как торговля в режиме эмуляции. Данный режим позволяет проверить стратегию в ситуациях, максимально приближенных к реальной торговле. По сути, робот работает в боевом режиме, получает реальные данные с биржи. Единственное отличие от реалтайм торговли заключается в том, что ордера не высылаются на биржу, а эмулируются системой. При этом робот оперирует только позициями, ничего не подозревая об эмуляции.
Из кода включить/выключить режим эмуляции можно при помощи свойства:
public bool OnOffEmulatorsInTabs
Оно находится в базовом для всех роботов классе BotPanel. Также можно включать эмуляцию отдельно для каждой вкладки при помощи свойства:
public bool EmulatorIsOn
Из пользовательского интерфейса так же есть доступ к этой функциональности:
Рис. 2. Настройка режима эмуляции.
Необходимо различать позиции на бирже и позиции в терминале. Биржевая позиция отображает совокупный объем по инструменту, принадлежащий клиенту. В OsEngine описывается классом PositionOnBoard, по сути, используется только для предоставления информации и никакой функциональной нагрузки не несет. Объект Position же в свою очередь является неотъемлемой частью любого робота и содержит только тот объем, который был набран его открывающими ордерами.
Комментарии