private void SetOrderPrice(Order order, DeviationInfo info) { switch (info.PriceAdjustMethod) { case OrderPriceAdjustMethod.UpperLowerLimit: order.Price = order.Side == OrderSide.Buy ? GetUpperLimitPrice() : GetLowerLimitPrice(); break; case OrderPriceAdjustMethod.MatchPrice: order.Price = order.Side == OrderSide.Buy ? order.Instrument.Ask.Price + info.Slippage : order.Instrument.Bid.Price - info.Slippage; break; } }
private void SetOrderPrice(Order order, DeviationInfo info, bool marketToLimit = true) { if (marketToLimit) { order.Type = OrderType.Limit; } switch (info.PriceAdjustMethod) { case OrderPriceAdjustMethod.UpperLowerLimit: if (_rules.MarketOrder) { _logger.Debug($"{Order.Id}, adjust to market"); order.Type = OrderType.Market; order.Price = 0; } else { _logger.Debug($"{Order.Id}, adjust to lower_upper_limit"); order.Price = GetUpperLowerPrice(); } break; case OrderPriceAdjustMethod.MatchPrice: _logger.Debug($"{Order.Id}, adjust to match"); order.Price = GetMatchPrice(); break; } double GetUpperLowerPrice() { return(order.Side == OrderSide.Buy ? GetUpperLimitPrice() : GetLowerLimitPrice()); } double GetMatchPrice() { if (order.Side == OrderSide.Buy) { return(order.Instrument.Ask.Price + info.Slippage); } return(order.Instrument.Bid.Price - info.Slippage); } }