StrategyPositionManager
Управляет стратегическими позициями (по финансовому инструменту + портфелю) и рассчитывает количество позиций, среднюю цену, реализованную PnL и комиссию, возрастающую от исполнения ордеров. Кроме того, поддерживается кэширование агрегатов по позициям (заблокированный объем и количество активных ордеров на покупку/продажу) посредством инкрементных обновлений (O(1) на каждое обновление ордера, без повторного сканирования).
Конструкторы
public StrategyPositionManager(Func<string> strategyIdGetter)
strategyPositionManager = StrategyPositionManager(strategyIdGetter)
Управляет стратегическими позициями (по финансовому инструменту + портфелю) и рассчитывает количество позиций, среднюю цену, реализованную PnL и комиссию, возрастающую от исполнения ордеров. Кроме того, поддерживается кэширование агрегатов по позициям (заблокированный объем и количество активных ордеров на покупку/продажу) посредством инкрементных обновлений (O(1) на каждое обновление ордера, без повторного сканирования).
- strategyIdGetter
- Делегируйте возврат идентификатора стратегии для отметки во вновь созданном StrategyId.
Свойства
public Position[] Positions { get; }
value = strategyPositionManager.Positions
Снимок массива управляемых позиций (поточно-безопасная копия).
public Func<string> StrategyIdGetter { get; }
value = strategyPositionManager.StrategyIdGetter
Делегат возвращает стратегию id для назначения на новые должности.
public int TrackedAggsCount { get; }
value = strategyPositionManager.TrackedAggsCount
public int TrackedOrderExecInfosCount { get; }
value = strategyPositionManager.TrackedOrderExecInfosCount
public int TrackedOrderTracksCount { get; }
value = strategyPositionManager.TrackedOrderTracksCount
Методы
public OrderResults ProcessOrder(Order order)
result = strategyPositionManager.ProcessOrder(order)
Процесс изменения состояния заказа (регистрация, изменение баланса, частичное/полное исполнение, отмена, выполнено).
- order
- Заказ на обработку.
Возвращает: OrderResults
public void Reset()
strategyPositionManager.Reset()
Сбросьте все внутренние кеши (позиции, информацию об исполнении, агрегаты, треки ордеров).
public void SetPosition(Security security, Portfolio portfolio, decimal value, DateTime time)
strategyPositionManager.SetPosition(security, portfolio, value, time)
Явно установить текущее значение позиции (утилита для ручного восстановления/переопределения).
- security
- финансовый инструмент.
- portfolio
- Портфолио.
- value
- Новое подписанное количество.
- time
- Временная метка, которая будет присвоена LocalTime и ServerTime, если позиция создается заново.
public Position TryGetPosition(Security security, Portfolio portfolio)
result = strategyPositionManager.TryGetPosition(security, portfolio)
Попробуйте получить существующий экземпляр позиции для и .
- security
- финансовый инструмент.
- portfolio
- Портфолио.
Возвращает: Существующая позиция или .
private void UpdateAggregates(Order order, Position position)
strategyPositionManager.UpdateAggregates(order, position)
Постепенно обновляйте агрегаты для заказа (заблокированный объем и количество) и помещайте их в файл .
public void UpdateCurrentPrice(SecurityId secId, decimal price, DateTime serverTime, DateTime localTime)
strategyPositionManager.UpdateCurrentPrice(secId, price, serverTime, localTime)
Обновить текущую (рыночную) цену для всех позиций указанного .
- secId
- идентификатор финансового инструмента, позиции которого требуют обновления цен.
- price
- Новая рыночная цена.
- serverTime
- Серверное время моментального снимка цен.
- localTime
- Местное время, когда цена была обработана.
События
public event Action<Position, bool> PositionProcessed
strategyPositionManager.PositionProcessed += handler
Происходит после обработки позиции (созданной или обновленной в результате исполнения ордера или изменения состояния ордера, влияющего на агрегаты).