public void GDAXPlaceRestTrade_QueryRestTrade_CancelRestTrade_Test() { // Arrange IFileRepository fileRepo = new FileRepository(); var apiInfo = fileRepo.GetConfig(); IGdaxRepository repo = new GdaxRepository(); repo.SetExchangeApi(apiInfo, false); _gdaxTradeParams = new GDAXTradeParams { side = "sell", price = 6285.76M, size = 0.01984100M, product_id = "BTC-USD" }; // Act var response = repo.PlaceRestTrade(_gdaxTradeParams).Result; // Assert Assert.True(response != null); // Act var orderResponse = repo.GetRestOrder(response.id).Result; // Assert Assert.True(orderResponse != null); // Act var cancelResponse = repo.CancelAllTradesRest().Result; // Assert Assert.True(cancelResponse == null); }
/// <summary> /// Place a limit order trade /// </summary> /// <param name="tradeParams">GDAXTradeParams for setting the trade</param> /// <returns>GDAXOrderResponse object</returns> public async Task <GDAXOrderResponse> PlaceRestTrade(GDAXTradeParams tradeParams) { var gdaxPair = _helper.CreateDashedPair(tradeParams.product_id); tradeParams.product_id = gdaxPair; tradeParams.post_only = true; var req = new Request { method = "POST", path = "/orders", body = JsonConvert.SerializeObject(tradeParams) }; var url = baseUrl + req.path; try { var response = await _restRepo.PostApi <GDAXOrderResponse, GDAXTradeParams>(url, tradeParams, GetRequestHeaders(true, req)); return(response); } catch (Exception ex) { _fileRepo.LogError(ex.Message, tradeParams); return(null); } }
/// <summary> /// Place a Trade /// </summary> /// <param name="tradeParams">TradeParams object</param> /// <returns>TradeResponse object</returns> public TradeResponse PlaceTrade(TradeParams tradeParams) { if (_thisExchange == Exchange.BINANCE) { var response = _bianceRepo.PostTrade(tradeParams).Result; return(response); } else if (_thisExchange == Exchange.GDAX) { // TODO use new trade api if (tradeParams.type == "STOPLOSS") { var gdaxParams = new GDAXStopLossParams { stop = "loss", stop_price = tradeParams.price, price = tradeParams.price, product_id = tradeParams.symbol, side = tradeParams.side.ToLower(), size = tradeParams.quantity, post_only = true }; GDAXOrderResponse response = _gdaxRepo.PlaceStopLimit(gdaxParams).Result; return(GdaxRestOrderResponseToTradeResponse(response)); } else { var gdaxParams = new GDAXTradeParams { price = tradeParams.price, product_id = tradeParams.symbol, side = tradeParams.side.ToLower(), size = tradeParams.quantity, type = "limit", post_only = true }; GDAXOrderResponse response = _gdaxRepo.PlaceRestTrade(gdaxParams).Result; return(GdaxRestOrderResponseToTradeResponse(response)); } } else if (_thisExchange == Exchange.KUCOIN) { var response = _kuRepo.PostTrade(tradeParams).Result; if (response.msg.Equals("Operation succeeded.") || response.msg.Equals("OK")) { var tradeResponse = new TradeResponse { clientOrderId = response.data["orderOid"], origQty = tradeParams.quantity, price = tradeParams.price, side = (TradeType)Enum.Parse(typeof(TradeType), tradeParams.side), symbol = tradeParams.symbol, type = (OrderType)Enum.Parse(typeof(OrderType), tradeParams.type) }; return(tradeResponse); } return(null); } else { return(null); } }