31 public event EventHandler<SecurityHoldingQuantityChangedEventArgs>
QuantityChanged;
34 private bool _invested;
35 private decimal _averagePrice;
36 private decimal _quantity;
37 private decimal _price;
38 private decimal _totalSaleVolume;
39 private decimal _profit;
40 private decimal _lastTradeProfit;
41 private decimal _totalFees;
42 private decimal _totalDividends;
57 _currencyConverter = currencyConverter;
66 _security = holding._security;
67 _averagePrice = holding._averagePrice;
69 _price = holding._price;
70 _totalSaleVolume = holding._totalSaleVolume;
71 _profit = holding._profit;
72 _lastTradeProfit = holding._lastTradeProfit;
73 _totalFees = holding._totalFees;
74 _currencyConverter = holding._currencyConverter;
103 return _averagePrice;
107 _averagePrice = value;
124 _invested = value != 0;
147 return _security.Type;
158 return _security.BuyingPowerModel.GetLeverage(_security);
188 public virtual decimal
Price
265 get {
return _totalSaleVolume; }
273 get {
return _totalFees; }
281 get {
return _totalDividends; }
288 public virtual bool IsLong
327 return _lastTradeProfit;
335 public virtual decimal
Profit
337 get {
return _profit + _totalDividends; }
379 _totalFees += newFee;
388 _profit += profitLoss;
397 _totalSaleVolume += saleValue;
406 _totalDividends += dividend;
415 _lastTradeProfit = lastTradeProfit;
421 public virtual void SetHoldings(decimal averagePrice,
int quantity)
429 public virtual void SetHoldings(decimal averagePrice, decimal quantity)
431 var previousQuantity = _quantity;
432 var previousAveragePrice = _averagePrice;
435 _averagePrice = averagePrice;
446 _price = closingPrice;
469 var amount = price * quantity * _security.SymbolProperties.ContractMultiplier;
477 public virtual decimal
TotalCloseProfit(
bool includeFees =
true, decimal? exitPrice =
null, decimal? entryPrice =
null, decimal? quantity =
null)
479 var quantityToUse = quantity ??
Quantity;
480 if (quantityToUse == 0)
486 var marketOrder =
new MarketOrder(_security.Symbol, -quantityToUse, _security.LocalTime.ConvertToUtc(_security.Exchange.TimeZone));
488 var feesInAccountCurrency = 0m;
491 var orderFee = _security.FeeModel.GetOrderFee(
493 feesInAccountCurrency = _currencyConverter.ConvertToAccountCurrency(orderFee).Amount;
496 var price = marketOrder.Direction ==
OrderDirection.Sell ? _security.BidPrice : _security.AskPrice;
501 price = _security.Price;
506 return potentialExitValue - entryValue - feesInAccountCurrency;
520 protected virtual void OnQuantityChanged(decimal previousAveragePrice, decimal previousQuantity)
523 _security, previousAveragePrice, previousQuantity