示例#1
0
        /// <summary>
        /// 주문 취소 접수: 주문 UUID를 통해 해당 주문에 대한 취소 접수를 한다.
        /// </summary>
        /// <param name="order_id">주문 UUID</param>
        /// <returns></returns>
        public async ValueTask <MyOrder> CancelOrder(string order_id)
        {
            var _result = new MyOrder();

            var _params = new Dictionary <string, object>();
            {
                _params.Add("uuid", order_id);
            }

            var _response = await privateClient.CallApiDelete2Async("/order", _params);

            if (_response != null)
            {
#if RAWJSON
                _result.rawJson = _response.Content;
#endif
                if (_response.IsSuccessful == true)
                {
                    var _order = privateClient.DeserializeObject <UPlaceOrderItem>(_response.Content);
                    {
                        _order.amount  = _order.price * _order.quantity;
                        _result.result = _order;
                    }
                    _result.SetSuccess();
                }
                else
                {
                    var _message = privateClient.GetResponseMessage(_response);
                    _result.SetFailure(_message.message);
                }
            }

            return(_result);
        }
示例#2
0
        /// <summary>
        /// Cancel an order.
        /// </summary>
        /// <param name="order_id">Order number registered for sale or purchase</param>
        /// <returns></returns>
        public async ValueTask <MyOrder> CancelOrder(string order_id)
        {
            var _result = new MyOrder();

            var _params = new Dictionary <string, object>();
            {
                _params.Add("orderID", order_id);
            }

            var _response = await privateClient.CallApiDelete2Async("/api/v1/order", _params);

            if (_response != null)
            {
#if RAWJSON
                _result.rawJson = _response.Content;
#endif
                if (_response.IsSuccessful == true)
                {
                    var _orders = privateClient.DeserializeObject <List <BPlaceOrderItem> >(_response.Content);
                    if (_orders != null)
                    {
                        _result.result = _orders.FirstOrDefault();
                        _result.SetSuccess();
                    }
                }
                else
                {
                    var _message = privateClient.GetResponseMessage(_response);
                    _result.SetFailure(_message.message);
                }
            }

            return(_result);
        }
示例#3
0
        /// <summary>
        /// Create a new limit order.
        /// </summary>
        /// <param name="symbol">Instrument symbol. e.g. 'XBTUSD'.</param>
        /// <param name="quantity">amount of coin</param>
        /// <param name="price">price of coin</param>
        /// <param name="sideType">type of buy(bid) or sell(ask)</param>
        /// <param name="execInst">Optional execution instructions.</param>
        /// <returns></returns>
        public async ValueTask <MyOrder> CreateLimitOrder(string symbol, decimal quantity, decimal price, SideType sideType, string execInst = "")
        {
            var _result = new MyOrder();

            var _params = new Dictionary <string, object>();
            {
                _params.Add("symbol", symbol);
                _params.Add("side", sideType == SideType.Bid ? "Buy" : "Sell");
                _params.Add("ordType", "Limit");
                _params.Add("orderQty", quantity);
                _params.Add("price", price);
                if (String.IsNullOrEmpty(execInst) == false)
                {
                    _params.Add("execInst", execInst);
                }
            }

            var _response = await privateClient.CallApiPost2Async("/api/v1/order", _params);

            if (_response != null)
            {
#if RAWJSON
                _result.rawJson = _response.Content;
#endif
                if (_response.IsSuccessful == true)
                {
                    var _order = privateClient.DeserializeObject <BPlaceOrderItem>(_response.Content);
                    if (_order != null)
                    {
                        _order.orderType = OrderType.Limit;

                        _order.remaining = Math.Max(_order.quantity - _order.filled, 0);
                        _order.cost      = _order.price * _order.filled;

                        _result.result = _order;
                        _result.SetSuccess();
                    }
                }
                else
                {
                    var _message = privateClient.GetResponseMessage(_response);
                    _result.SetFailure(_message.message);
                }
            }

            return(_result);
        }
示例#4
0
        /// <summary>
        /// 주문하기: 주문 요청을 한다.
        /// </summary>
        /// <param name="base_name">The type of trading base-currency of which information you want to query for.</param>
        /// <param name="quote_name">The type of trading quote-currency of which information you want to query for.</param>
        /// <param name="quantity">주문 수량</param>
        /// <param name="price">유닛당 주문 가격</param>
        /// <param name="sideType">주문 타입</param>
        /// <returns></returns>
        public async ValueTask <MyOrder> CreateLimitOrder(string base_name, string quote_name, decimal quantity, decimal price, SideType sideType)
        {
            var _result = new MyOrder();

            var _params = new Dictionary <string, object>();
            {
                _params.Add("market", $"{quote_name}-{base_name}");
                _params.Add("side", sideType == SideType.Bid ? "bid" : "ask");
                _params.Add("volume", quantity);
                _params.Add("price", price);
                _params.Add("ord_type", "limit");
            }

            var _response = await privateClient.CallApiPost2Async("/orders", _params);

            if (_response != null)
            {
#if RAWJSON
                _result.rawJson = _response.Content;
#endif
                if (_response.IsSuccessful == true)
                {
                    var _order = privateClient.DeserializeObject <UPlaceOrderItem>(_response.Content);
                    {
                        _order.orderType = OrderType.Limit;
                        _order.amount    = _order.quantity * _order.price;

                        _result.result = _order;
                    }
                    _result.SetSuccess();
                }
                else
                {
                    var _message = privateClient.GetResponseMessage(_response);
                    _result.SetFailure(_message.message);
                }
            }

            return(_result);
        }
示例#5
0
        /// <summary>
        /// Amend the quantity or price of an open order.
        /// </summary>
        /// <param name="order_id">Order number registered for sale or purchase</param>
        /// <param name="quantity">amount of coin</param>
        /// <param name="price">price of coin</param>
        /// <param name="execInst">Optional execution instructions.</param>
        /// <returns></returns>
        public async ValueTask <MyOrder> UpdateOrder(string order_id, decimal quantity, decimal price, string execInst = "")
        {
            var _result = new MyOrder();

            var _params = new Dictionary <string, object>();
            {
                _params.Add("orderID", order_id);
                _params.Add("orderQty", quantity);
                _params.Add("price", price);
                if (String.IsNullOrEmpty(execInst) == false)
                {
                    _params.Add("execInst", execInst);
                }
            }

            var _response = await privateClient.CallApiPut2Async("/api/v1/order", _params);

            if (_response != null)
            {
#if RAWJSON
                _result.rawJson = _response.Content;
#endif
                if (_response.IsSuccessful == true)
                {
                    var _order = privateClient.DeserializeObject <BPlaceOrderItem>(_response.Content);
                    if (_order != null)
                    {
                        _result.result = _order;
                        _result.SetSuccess();
                    }
                }
                else
                {
                    var _message = privateClient.GetResponseMessage(_response);
                    _result.SetFailure(_message.message);
                }
            }

            return(_result);
        }
示例#6
0
        /// <summary>
        /// Close a position
        /// </summary>
        /// <param name="symbol">Instrument symbol. e.g. 'XBTUSD'.</param>
        /// <param name="orderType">The type of order is limit, market or position</param>
        /// <param name="price">price of coin</param>
        /// <returns></returns>
        public async ValueTask <MyOrder> ClosePosition(string symbol, OrderType orderType, decimal price = 0.0m)
        {
            var _result = new MyOrder();

            var _params = new Dictionary <string, object>();
            {
                _params.Add("symbol", symbol);
                _params.Add("execInst", "Close");

                if (orderType == OrderType.Limit)
                {
                    _params.Add("price", price);
                }
            }

            var _response = await privateClient.CallApiPost2Async("/api/v1/order", _params);

            if (_response != null)
            {
#if RAWJSON
                _result.rawJson = _response.Content;
#endif
                if (_response.IsSuccessful == true)
                {
                    var _order = privateClient.DeserializeObject <BMyOrderItem>(_response.Content);
                    if (_order != null)
                    {
                        _result.result = _order;
                        _result.SetSuccess();
                    }
                }
                else
                {
                    var _message = privateClient.GetResponseMessage(_response);
                    _result.SetFailure(_message.message);
                }
            }

            return(_result);
        }