public override T Clone <T>() { var result = (Offer)MemberwiseClone(); result.Trades = new List <Trade>(); result.Trades = Trades.Select(t => t.Clone()).ToList(); return((T)((BaseMessage)result)); }
public Offer Convert(decimal price) { var result = (Offer)MemberwiseClone(); result.Trades = new List <Trade>(); result.Trades = Trades.Select(t => t.Clone().Convert(price)).ToList(); result.Price = result.Price / price; return(result); }
public override void CloseMarketOrder(MarketOrder order, CloseReason closeReason) { if (_orders.Contains(order)) { _orders.Remove(order); } var exitPrice = order.TradeType == TradeType.Buy ? order.Symbol.GetPrice(TradeType.Sell) : order.Symbol.GetPrice(TradeType.Buy); var barsPeriod = order.Symbol.Bars.Time.Where(iBarTime => iBarTime >= order.OpenTime).Count(); var tradingEvent = new TradingEvent(Server.CurrentTime, TradingEventType.MarketOrderClosed, order, string.Empty); _journal.Add(tradingEvent); Account.ChangeMargin(-order.MarginUsed, Server.CurrentTime, string.Empty, AccountChangeType.Trading); Account.ChangeBalance(order.NetProfit, Server.CurrentTime, string.Empty, AccountChangeType.Trading); var tradeData = Trades.Select(iTrade => iTrade.Order.NetProfit); var sharpeRatio = SharpeRatioCalculator.GetSharpeRatio(tradeData); var sortinoRatio = SortinoRatioCalculator.GetSortinoRatio(tradeData); var equityMaxDrawDown = MaxDrawdownCalculator.GetMaxDrawdown(Account.EquityChanges); var balanceMaxDrawDown = MaxDrawdownCalculator.GetMaxDrawdown(Account.BalanceChanges); var id = _trades.Count + 1; var tradeParameters = new TradeParameters { Id = id, Order = order, ExitTime = Server.CurrentTime, ExitPrice = exitPrice, Balance = Account.CurrentBalance, Equity = Account.Equity, BalanceMaxDrawDown = balanceMaxDrawDown, EquityMaxDrawDown = equityMaxDrawDown, BarsPeriod = barsPeriod, CloseReason = closeReason, SharpeRatio = sharpeRatio, SortinoRatio = sortinoRatio }; var trade = new Trade(tradeParameters); _trades.Add(trade); }