StrategyPositionManager
Manages strategy positions (per Security + Portfolio) and calculates position quantity, average price, realized PnL and commission incrementally from order executions. Additionally maintains cached per-position aggregates (blocked volume and active buy/sell orders count) via incremental updates (O(1) per order update, no rescans).
Constructors
public StrategyPositionManager(Func<string> strategyIdGetter)
strategyPositionManager = StrategyPositionManager(strategyIdGetter)
Manages strategy positions (per Security + Portfolio) and calculates position quantity, average price, realized PnL and commission incrementally from order executions. Additionally maintains cached per-position aggregates (blocked volume and active buy/sell orders count) via incremental updates (O(1) per order update, no rescans).
- strategyIdGetter
- Delegate returning strategy identifier to stamp into newly created StrategyId.
Properties
public Position[] Positions { get; }
value = strategyPositionManager.Positions
Snapshot array of managed positions (thread-safe copy).
public Func<string> StrategyIdGetter { get; }
value = strategyPositionManager.StrategyIdGetter
Delegate returning strategy id to assign into new positions.
public int TrackedAggsCount { get; }
value = strategyPositionManager.TrackedAggsCount
public int TrackedOrderExecInfosCount { get; }
value = strategyPositionManager.TrackedOrderExecInfosCount
public int TrackedOrderTracksCount { get; }
value = strategyPositionManager.TrackedOrderTracksCount
Methods
public OrderResults ProcessOrder(Order order)
result = strategyPositionManager.ProcessOrder(order)
Process order state change (registration, balance change, partial/full execution, cancellation, done).
- order
- Order to process.
Returns: OrderResults
public void Reset()
strategyPositionManager.Reset()
Reset all internal caches (positions, execution info, aggregates, order tracks).
public void SetPosition(Security security, Portfolio portfolio, decimal value, DateTime time)
strategyPositionManager.SetPosition(security, portfolio, value, time)
Set current position value explicitly (utility for manual restoration / overrides).
- security
- Security.
- portfolio
- Portfolio.
- value
- New signed quantity.
- time
- Timestamp to assign into LocalTime and ServerTime if position is created anew.
public Position TryGetPosition(Security security, Portfolio portfolio)
result = strategyPositionManager.TryGetPosition(security, portfolio)
Try get existing position instance for and .
- security
- Security.
- portfolio
- Portfolio.
Returns: Existing Position or .
private void UpdateAggregates(Order order, Position position)
strategyPositionManager.UpdateAggregates(order, position)
Incrementally update aggregates for the order (blocked volume and counts) and push them into the .
public void UpdateCurrentPrice(SecurityId secId, decimal price, DateTime serverTime, DateTime localTime)
strategyPositionManager.UpdateCurrentPrice(secId, price, serverTime, localTime)
Update current (market) price for all positions of the specified .
- secId
- Security identifier whose positions need price update.
- price
- New market price.
- serverTime
- Server time of the price snapshot.
- localTime
- Local time when the price was processed.
Events
public event Action<Position, bool> PositionProcessed
strategyPositionManager.PositionProcessed += handler
Occurs after position was processed (created or updated by an order execution or order state change affecting aggregates).