private void OrderEventAction(TradingEvent e) { try { switch (e.Type) { case ExecType.ExecNew: ProcessSend(e.Order); break; case ExecType.ExecTrade: ProcessTrade(e.Trade); break; case ExecType.ExecCancelled: ProcessCancel(e.Order); break; case ExecType.ExecOrderStatus: ProcessReturnOrder(e.OrderReturn); break; } } catch (Exception ex) { _provider.OnProviderError(-1, ex.Message); } }
public override void CancelPendingOrder(PendingOrder order) { if (_orders.Contains(order)) { _orders.Remove(order); } var tradingEvent = new TradingEvent(Server.CurrentTime, TradingEventType.PendingOrderCanceled, order, string.Empty); _journal.Add(tradingEvent); }
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); }
protected virtual void TriggerPendingOrder(PendingOrder order) { if (_orders.Contains(order)) { _orders.Remove(order); } var marketOrderParameters = new MarketOrderParameters(order.Symbol) { Volume = order.Volume, TradeType = order.TradeType, StopLossInTicks = order.StopLossPrice.HasValue ? (double?)Math.Abs(order.TargetPrice - order.StopLossPrice.Value) : null, TakeProfitInTicks = order.TakeProfitPrice.HasValue ? (double?)Math.Abs(order.TargetPrice - order.TakeProfitPrice.Value) : null, Comment = order.Comment, }; var tradingEvent = new TradingEvent(Server.CurrentTime, TradingEventType.PendingOrderFilled, order, string.Empty); _journal.Add(tradingEvent); Execute(marketOrderParameters); }
protected void AddOrder(IOrder order) { _orders.Add(order); switch (order.OrderType) { case OrderType.Market: var tradingEvent = new TradingEvent(Server.CurrentTime, TradingEventType.MarketOrderExecuted, order, string.Empty); _journal.Add(tradingEvent); break; case OrderType.Limit: case OrderType.Stop: tradingEvent = new TradingEvent(Server.CurrentTime, TradingEventType.PendingOrderPlaced, order, string.Empty); _journal.Add(tradingEvent); break; } }