/// <summary>
        /// Place a stop limit trade
        /// </summary>
        /// <param name="tradeParams">GDAXStopLostParams for setting the SL</param>
        /// <returns>GDAXOrderResponse object</returns>
        public async Task <GDAXOrderResponse> PlaceStopLimit(GDAXStopLossParams tradeParams)
        {
            var gdaxPair = _helper.CreateDashedPair(tradeParams.product_id);

            tradeParams.product_id = gdaxPair;
            var req = new Request
            {
                method = "POST",
                path   = "/orders",
                body   = ""
            };
            var url = baseUrl + req.path;

            var response = await _restRepo.PostApi <GDAXOrderResponse, GDAXStopLossParams>(url, tradeParams, GetRequestHeaders(true, req));

            return(response);
        }
예제 #2
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);
            }
        }