public void UpdateCurPos(Cbi.Position position, double averagePrice, int quantity, Cbi.MarketPosition marketPosition) { PosAvgPrice = averagePrice; PosQuantity = quantity; MktPosition = marketPosition; PosUnrealizedPnL = position.GetUnrealizedProfitLoss(PerformanceUnit.Currency, InstStrategy.Close[0]); }
protected override void OnPositionUpdate(Cbi.PositionEventArgs positionUpdate) { if (positionUpdate.Position.Account.Name == AccountName && positionUpdate.Position.Instrument == Instrument) { position = (positionUpdate.Operation == Cbi.Operation.Remove ? null : positionUpdate.Position); CurrentValue = (position == null ? 0 : position.GetUnrealizedProfitLoss(Cbi.PerformanceUnit.Currency)); } }
protected override void OnConnectionStatusUpdate(Cbi.ConnectionStatusEventArgs connectionStatusUpdate) { if (connectionStatusUpdate.Status == Cbi.ConnectionStatus.Connected || connectionStatusUpdate.PreviousStatus == Cbi.ConnectionStatus.Connecting) { Cbi.Account account; lock (connectionStatusUpdate.Connection.Accounts) account = connectionStatusUpdate.Connection.Accounts.FirstOrDefault(o => o.Name == AccountName); if (account != null) { lock (account.Positions) position = account.Positions.FirstOrDefault(o => o.Instrument.FullName == Instrument.FullName); accountDenomination = account.Denomination; executions.Clear(); foreach (Cbi.Execution execution in account.Executions) { if (execution.Instrument == Instrument) { executions.Add(execution); } } realizedPL = Cbi.SystemPerformance.Calculate(executions).AllTrades.TradesPerformance.Currency.CumProfit; } } else if (connectionStatusUpdate.Status == Cbi.ConnectionStatus.Disconnected && connectionStatusUpdate.PreviousStatus == Cbi.ConnectionStatus.Disconnecting) { if (position != null && position.Account.Connection == connectionStatusUpdate.Connection) { CurrentValue = 0; position = null; realizedPL = 0; } } CurrentValue = realizedPL + (position == null ? 0 : position.GetUnrealizedProfitLoss(Cbi.PerformanceUnit.Currency)); }
protected override void OnAccountItemUpdate(Cbi.AccountItemEventArgs accountItemUpdate) { if (AccountName != Account.SimulationAccountName || accountItemUpdate.Account.Name != AccountName || accountItemUpdate.AccountItem != AccountItem.UnrealizedProfitLoss) { return; } lock (accountItemUpdate.Account.Positions) position = accountItemUpdate.Account.Positions.FirstOrDefault(o => o.Instrument.FullName == Instrument.FullName); executions.Clear(); foreach (Cbi.Execution execution in accountItemUpdate.Account.Executions) { if (execution.Instrument == Instrument) { executions.Add(execution); } } realizedPL = Cbi.SystemPerformance.Calculate(executions).AllTrades.TradesPerformance.Currency.CumProfit; CurrentValue = realizedPL + (position == null ? 0 : position.GetUnrealizedProfitLoss(Cbi.PerformanceUnit.Currency)); }
protected override void OnMarketData(Data.MarketDataEventArgs marketDataUpdate) { CurrentValue = (position == null ? 0 : position.GetUnrealizedProfitLoss(Cbi.PerformanceUnit.Currency)); }