/// <summary> /// Generates an Oanda order request /// </summary> /// <param name="order">The LEAN order</param> /// <returns>The request in JSON format</returns> private string GenerateOrderRequest(Order order) { var instrument = SymbolMapper.GetBrokerageSymbol(order.Symbol); string request; switch (order.Type) { case OrderType.Market: var marketOrderRequest = new MarketOrderRequest { Type = MarketOrderRequest.TypeEnum.MARKET, Instrument = instrument, Units = order.Quantity.ToStringInvariant() }; request = JsonConvert.SerializeObject(new { order = marketOrderRequest }); break; case OrderType.Limit: var limitOrderRequest = new LimitOrderRequest { Type = LimitOrderRequest.TypeEnum.LIMIT, Instrument = instrument, Units = order.Quantity.ToStringInvariant(), Price = ((LimitOrder)order).LimitPrice.ToString(CultureInfo.InvariantCulture) }; request = JsonConvert.SerializeObject(new { order = limitOrderRequest }); break; case OrderType.StopMarket: var marketIfTouchedOrderRequest = new MarketIfTouchedOrderRequest { Type = MarketIfTouchedOrderRequest.TypeEnum.MARKETIFTOUCHED, Instrument = instrument, Units = order.Quantity.ToStringInvariant(), Price = ((StopMarketOrder)order).StopPrice.ToString(CultureInfo.InvariantCulture) }; request = JsonConvert.SerializeObject(new { order = marketIfTouchedOrderRequest }); break; case OrderType.StopLimit: var stopOrderRequest = new StopOrderRequest { Type = StopOrderRequest.TypeEnum.STOP, Instrument = instrument, Units = order.Quantity.ToStringInvariant(), Price = ((StopLimitOrder)order).StopPrice.ToString(CultureInfo.InvariantCulture), PriceBound = ((StopLimitOrder)order).LimitPrice.ToString(CultureInfo.InvariantCulture) }; request = JsonConvert.SerializeObject(new { order = stopOrderRequest }); break; default: throw new NotSupportedException("The order type " + order.Type + " is not supported."); } return(request); }
public void SendPendingSellCommand(int p_Volume, double p_Price, double p_Stoploss, double p_TakeProfit) { Print("Pending Sell command"); PendingOrderRequest l_Request = null; if (p_Price < Symbol.Bid) l_Request = new StopOrderRequest(TradeType.Sell, p_Volume, p_Price); else l_Request = new LimitOrderRequest(TradeType.Sell, p_Volume, p_Price); l_Request.StopLoss = p_Stoploss; l_Request.TakeProfit = p_TakeProfit; Trade.Send(l_Request); }
private void openTrade() { TradeType tradeType = TradeType.Buy; if (signal.direction == "SELL") tradeType = TradeType.Sell; var lot_size = (int)(signal.lot_size * 10); var request = new StopOrderRequest(tradeType, lot_size * 10000, signal.entry) { Label = "signal_id=" + signal.signal_id, StopLoss = signal.sl, TakeProfit = signal.tp, Expiration = signal.expiration }; Trade.Send(request); signal.signalStored(); }