Exemple #1
0
        protected override async Task <ExchangeOrderResult> OnPlaceOrderAsync(ExchangeOrderRequest order)
        {
            ExchangeOrderResult result = new ExchangeOrderResult()
            {
                Result = ExchangeAPIOrderResult.Error
            };
            var payload = await GetNoncePayloadAsync();

            order.ExtraParameters.CopyTo(payload);

            // Only limit order is supported - no indication on how it is filled
            JToken token = await MakeJsonRequestAsync <JToken>((order.IsBuy ? "/market/buylimit?" : "market/selllimit?") + "market=" + order.MarketSymbol +
                                                               "&rate=" + order.Price.ToStringInvariant() + "&quantity=" + order.RoundAmount().ToStringInvariant(), null, payload);

            if (token.HasValues)
            {
                // Only the orderid is returned on success
                result.OrderId = token["orderid"].ToStringInvariant();
                result.Result  = ExchangeAPIOrderResult.Filled;
            }
            return(result);
        }
Exemple #2
0
        /// <inheritdoc />
        protected async override Task <ExchangeOrderResult> OnPlaceOrderAsync(ExchangeOrderRequest order)
        {
            //{
            //	"market": "XRP-PERP",
            //  "side": "sell",
            //  "price": 0.306525,
            //  "type": "limit",
            //  "size": 31431.0,
            //  "reduceOnly": false,
            //  "ioc": false,
            //  "postOnly": false,
            //  "clientId": null
            //}

            IEnumerable <ExchangeMarket> markets = await OnGetMarketSymbolsMetadataAsync();

            ExchangeMarket market = markets.Where(m => m.MarketSymbol == order.MarketSymbol).First();

            var payload = await GetNoncePayloadAsync();

            var parameters = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase)
            {
                { "market", market.MarketSymbol },
                { "side", order.IsBuy ? "buy" : "sell" },
                { "type", order.OrderType.ToStringLowerInvariant() },
                { "size", order.RoundAmount() }
            };

            if (!string.IsNullOrEmpty(order.ClientOrderId))
            {
                parameters.Add("clientId", order.ClientOrderId);
            }

            if (order.IsPostOnly != null)
            {
                parameters.Add("postOnly", order.IsPostOnly);
            }

            if (order.OrderType != OrderType.Market)
            {
                int precision = BitConverter.GetBytes(decimal.GetBits((decimal)market.PriceStepSize)[3])[2];

                if (order.Price == null)
                {
                    throw new ArgumentNullException(nameof(order.Price));
                }

                parameters.Add("price", Math.Round(order.Price.Value, precision));
            }
            else
            {
                parameters.Add("price", null);
            }

            parameters.CopyTo(payload);

            order.ExtraParameters.CopyTo(payload);

            var response = await MakeJsonRequestAsync <JToken>("/orders", null, payload, "POST");

            ExchangeOrderResult result = new ExchangeOrderResult
            {
                OrderId       = response["id"].ToStringInvariant(),
                ClientOrderId = response["clientId"].ToStringInvariant(),
                OrderDate     = CryptoUtility.ToDateTimeInvariant(response["createdAt"]),
                Price         = CryptoUtility.ConvertInvariant <decimal>(response["price"]),
                AmountFilled  = CryptoUtility.ConvertInvariant <decimal>(response["filledSize"]),
                AveragePrice  = CryptoUtility.ConvertInvariant <decimal>(response["avgFillPrice"]),
                Amount        = CryptoUtility.ConvertInvariant <decimal>(response["size"]),
                MarketSymbol  = response["market"].ToStringInvariant(),
                IsBuy         = response["side"].ToStringInvariant() == "buy"
            };

            return(result);
        }
        protected override async Task <ExchangeOrderResult> OnPlaceOrderAsync(ExchangeOrderRequest order)
        {
            string orderType = "/exchange/";

            if (order.OrderType == OrderType.Market)
            {
                orderType += order.IsBuy ? "buymarket" : "sellmarket";
            }
            else
            {
                orderType += order.IsBuy ? "buylimit" : "selllimit";
            }

            //{ "success": true, "added": true, "orderId": 4912
            JToken token = await MakeJsonRequestAsync <JToken>(string.Format("{0}?currencyPair={1}&price={2}&quantity={3}",
                                                                             orderType, WebUtility.UrlEncode(NormalizeSymbol(order.Symbol)), order.Price.ToStringInvariant(), order.RoundAmount().ToStringInvariant()), null, GetNoncePayload(), "POST");

            token = CheckError(token);
            return(new ExchangeOrderResult()
            {
                OrderId = token["orderId"].ToStringInvariant(), Result = ExchangeAPIOrderResult.Pending
            });
        }