public OrderBookDepth GetOrderBookDepth(string symbol, int limit = 5)
        {
            var resultString = $"api/markets/{symbol}/orderbook?depth={limit}";
            var result       = Call(HttpMethod.Get, resultString);
            var res          = FtxRestDataParser.ParseOrderBookDepth(result, limit);

            return(res);
        }
        public CancelOrderInfo CancelOrder(string id)
        {
            var resultString = $"api/orders/{id}";
            var sign         = GenerateSignature(HttpMethod.Delete, $"/api/orders/{id}", "");
            var result       = CallSign(HttpMethod.Delete, resultString, sign);
            var res          = FtxRestDataParser.ParseCancelOrderInfo(result);

            return(res);
        }
        public AccountInfo GetAccountInfo()
        {
            var resultString = $"api/account";

            var sign   = GenerateSignature(HttpMethod.Get, "/api/account", "");
            var result = CallSign(HttpMethod.Get, resultString, sign);

            var res = FtxRestDataParser.ParseAccountInfo(result);

            return(res);
        }
        public PlaceOrderInfo EditOrder(string orderId, string clientId, decimal price, decimal size)
        {
            var path = $"api/orders/{orderId}/modify";

            var body = "{";

            if (!string.IsNullOrEmpty(clientId))
            {
                body += $"\"clientId\": {clientId}";
            }
            body += $"\"price\": {price},";
            body += $"\"size\": {size}}}";

            var sign   = GenerateSignature(HttpMethod.Post, $"/{path}", body);
            var result = CallSign(HttpMethod.Post, path, sign, body);
            var res    = FtxRestDataParser.ParseOrderInfo(result);

            return(res);
        }
        public PlaceOrderInfo PlaceOrder(string market, SideType side, decimal?price, OrderType orderType, decimal size, bool reduceOnly, bool ioc, bool postOnly, string clientOrderId)
        {
            var path     = $"api/orders";
            var priceStr = (price == null || orderType == OrderType.Market) ? "null" : price.ToString();
            var body     = "";

            if (string.IsNullOrEmpty(clientOrderId))
            {
                body = $"{{\"market\": \"{market}\"," +
                       $"\"side\": \"{side.ToString().ToLower()}\"," +
                       $"\"price\": {priceStr}," +
                       $"\"type\": \"{orderType.ToString().ToLower()}\"," +
                       $"\"size\": {size}," +
                       $"\"reduceOnly\": {reduceOnly.ToString().ToLower()}," +
                       $"\"ioc\": {ioc.ToString().ToLower()}," +
                       $"\"postOnly\": {postOnly.ToString().ToLower()}}}";
            }
            else
            {
                body = $"{{\"market\": \"{market}\"," +
                       $"\"side\": \"{side.ToString().ToLower()}\"," +
                       $"\"price\": {priceStr}," +
                       $"\"type\": \"{orderType.ToString().ToLower()}\"," +
                       $"\"size\": {size}," +
                       $"\"clientId\": {clientOrderId}," +
                       $"\"reduceOnly\": {reduceOnly.ToString().ToLower()}," +
                       $"\"ioc\": {ioc.ToString().ToLower()}," +
                       $"\"postOnly\": {postOnly.ToString().ToLower()}}}";
            }

            var sign   = GenerateSignature(HttpMethod.Post, "/api/orders", body);
            var result = CallSign(HttpMethod.Post, path, sign, body);
            var res    = FtxRestDataParser.ParseOrderInfo(result);

            return(res);
        }