private async Task SendClientOrder(Interface.Model.OrderSide orderSide) { try { if (string.IsNullOrWhiteSpace(selectedOrderType)) { throw new Exception("Order not valid: No order type."); } var clientOrder = new Interface.Model.ClientOrder { Symbol = SelectedSymbol?.ExchangeSymbol, Type = SelectedOrderType.GetOrderType(), Side = orderSide, Quantity = Quantity, Price = Price, StopPrice = StopPrice, BaseAccountBalance = BaseAccountBalance?.GetInterfaceAccountBalance(), QuoteAccountBalance = QuoteAccountBalance?.GetInterfaceAccountBalance() }; SelectedSymbol.GetInterfaceSymbol().ValidateClientOrder(clientOrder); await ExchangeService.PlaceOrder(Account.AccountInfo.User.Exchange, Account.AccountInfo.User, clientOrder).ConfigureAwait(false); } catch (Exception e) { OnException("TradeViewModel.SendClientOrder", e); } }
public static ClientOrder GetOrder(Interface.Model.User user, Interface.Model.ClientOrder clientOrder) { var apiUser = new BinanceApiUser(user.ApiKey, user.ApiSecret); var orderType = (OrderType)clientOrder.Type; switch (orderType) { case OrderType.Market: return(new MarketOrder(apiUser) { Symbol = clientOrder.Symbol, Side = (OrderSide)clientOrder.Side, Quantity = clientOrder.Quantity }); case OrderType.StopLoss: return(new StopLossOrder(apiUser) { Symbol = clientOrder.Symbol, Side = (OrderSide)clientOrder.Side, Quantity = clientOrder.Quantity, StopPrice = clientOrder.StopPrice }); case OrderType.TakeProfit: return(new TakeProfitOrder(apiUser) { Symbol = clientOrder.Symbol, Side = (OrderSide)clientOrder.Side, Quantity = clientOrder.Quantity, StopPrice = clientOrder.StopPrice }); case OrderType.Limit: return(new LimitOrder(apiUser) { Symbol = clientOrder.Symbol, Side = (OrderSide)clientOrder.Side, Quantity = clientOrder.Quantity, Price = clientOrder.Price }); case OrderType.LimitMaker: return(new LimitMakerOrder(apiUser) { Symbol = clientOrder.Symbol, Side = (OrderSide)clientOrder.Side, Quantity = clientOrder.Quantity, Price = clientOrder.Price }); case OrderType.StopLossLimit: return(new StopLossLimitOrder(apiUser) { Symbol = clientOrder.Symbol, Side = (OrderSide)clientOrder.Side, Quantity = clientOrder.Quantity, StopPrice = clientOrder.StopPrice, Price = clientOrder.Price }); case OrderType.TakeProfitLimit: return(new TakeProfitLimitOrder(apiUser) { Symbol = clientOrder.Symbol, Side = (OrderSide)clientOrder.Side, Quantity = clientOrder.Quantity, StopPrice = clientOrder.StopPrice, Price = clientOrder.Price }); default: throw new System.Exception("Unknown order type."); } }
public Task <Interface.Model.Order> PlaceOrder(Exchange exchange, Interface.Model.User user, Interface.Model.ClientOrder clientOrder, long recWindow = 0, CancellationToken cancellationToken = default(CancellationToken)) { return(exchangeService.PlaceOrder(exchange, user, clientOrder, recWindow, cancellationToken)); }
public async Task <Interface.Model.Order> PlaceOrder(Interface.Model.User user, Interface.Model.ClientOrder clientOrder, long recWindow = 0, CancellationToken cancellationToken = default(CancellationToken)) { var order = OrderHelper.GetOrder(user, clientOrder); var result = await binanceApi.PlaceAsync(order).ConfigureAwait(false); return(NewOrder(user, result)); }