EmulatedPortfolio
Emulated portfolio implementation that tracks positions and money in-memory.
Implements: IPortfolio
Constructors
public EmulatedPortfolio(string name)
emulatedPortfolio = EmulatedPortfolio(name)
Initializes a new instance.
- name
- Portfolio name.
Properties
public decimal AvailableMoney { get; }
value = emulatedPortfolio.AvailableMoney
Available money (current - blocked).
public decimal BeginMoney { get; }
value = emulatedPortfolio.BeginMoney
Initial money amount.
public decimal BlockedMoney { get; }
value = emulatedPortfolio.BlockedMoney
Blocked money for pending orders.
public decimal Commission { get; }
value = emulatedPortfolio.Commission
Total commission paid.
public decimal CurrentMoney { get; }
value = emulatedPortfolio.CurrentMoney
Current money (begin + PnL).
public bool EnableStopOut { get; set; }
value = emulatedPortfolio.EnableStopOut
emulatedPortfolio.EnableStopOut = value
Enable automatic position liquidation on stop-out.
public decimal MarginCallLevel { get; set; }
value = emulatedPortfolio.MarginCallLevel
emulatedPortfolio.MarginCallLevel = value
Margin call level threshold. When margin level falls to this value, a warning is triggered.
public decimal RealizedPnL { get; }
value = emulatedPortfolio.RealizedPnL
Total realized PnL.
public decimal StopOutLevel { get; set; }
value = emulatedPortfolio.StopOutLevel
emulatedPortfolio.StopOutLevel = value
Stop-out level threshold. When margin level falls to this value, positions are liquidated.
public decimal TotalPnL { get; }
value = emulatedPortfolio.TotalPnL
Total PnL (realized - commission).
Methods
public decimal CalculateUnrealizedPnL(Func<SecurityId, decimal?> getCurrentPrice)
result = emulatedPortfolio.CalculateUnrealizedPnL(getCurrentPrice)
Calculate unrealized PnL across all positions.
- getCurrentPrice
- Function to get current market price for a security. Returns null if price unavailable.
Returns: Total unrealized PnL.
public IEnumerable<PositionInfo> GetAllPositions()
result = emulatedPortfolio.GetAllPositions()
Get all position info objects.
public PositionInfo GetPosition(SecurityId securityId)
result = emulatedPortfolio.GetPosition(securityId)
Get position for security.
- securityId
- Security ID.
Returns: Position info or null.
public IEnumerable<ValueTuple<SecurityId, decimal, decimal>> GetPositions()
result = emulatedPortfolio.GetPositions()
Get all positions.
Returns: Enumeration of positions.
public void ProcessOrderCancellation(SecurityId securityId, Sides side, decimal volume, decimal price)
emulatedPortfolio.ProcessOrderCancellation(securityId, side, volume, price)
Process order cancellation (unblock funds).
- securityId
- Security ID.
- side
- Order side.
- volume
- Cancelled volume.
- price
- Price used for margin calculation.
public void ProcessOrderRegistration(SecurityId securityId, Sides side, decimal volume, decimal price)
emulatedPortfolio.ProcessOrderRegistration(securityId, side, volume, price)
Process order registration (block funds).
- securityId
- Security ID.
- side
- Order side.
- volume
- Order volume.
- price
- Order price for margin calculation.
public TradeProcessingResult ProcessTrade(SecurityId securityId, Sides side, decimal price, decimal volume, decimal? commission)
result = emulatedPortfolio.ProcessTrade(securityId, side, price, volume, commission)
Process a trade execution.
- securityId
- Security ID.
- side
- Trade side.
- price
- Trade price.
- volume
- Trade volume.
- commission
- Commission amount.
Returns: Trade processing result.
public void SetMoney(decimal money)
emulatedPortfolio.SetMoney(money)
Set initial money.
- money
- Money amount.
public void SetPosition(SecurityId securityId, decimal volume, decimal avgPrice)
emulatedPortfolio.SetPosition(securityId, volume, avgPrice)
Set initial position.
- securityId
- Security ID.
- volume
- Position volume.
- avgPrice
- Average entry price.