/// <summary> /// OnBuyEvent /// </summary> /// <param name="eventArgs">eventArgs</param> public void OnBuyEvent(object sender, BuyEventArgs eventArgs) { var totalValue = eventArgs.Shares * eventArgs.MarketData.Close; if (totalValue >= Cash) { eventArgs.Cancel = true; return; } else if (eventArgs.Cancel) { return; } if (PositionData.Add(eventArgs)) { NumberOfTrades++; Cash -= totalValue; } else { eventArgs.Cancel = true; } }
/// <summary> /// PositionData Copy Constructor /// </summary> /// <param name="positionData">Position Data</param> public PositionData(PositionData positionData) : this() { foreach (var position in positionData) { this.AddPosition(new Position(position)); } }
/// <summary> /// OnSellEvent /// </summary> /// <param name="eventArgs">eventArgs</param> public void OnSellEvent(object sender, SellEventArgs eventArgs) { if (eventArgs.Shares <= 0) { eventArgs.Cancel = true; return; } // adding to cash is predicated on safe removal; this really means you // can't sell more than you have. if (PositionData.Remove(eventArgs)) { Cash += eventArgs.Price * eventArgs.Shares; NumberOfTrades++; } else { eventArgs.Cancel = true; } }