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);
            }
        }
Beispiel #3
0
        /// <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);
            }
        }