コード例 #1
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);
        }