/// <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">amount of coin</param> /// <param name="price">price of coin</param> /// <param name="sideType">type of buy(bid) or sell(ask)</param> /// <param name="args">Add additional attributes for each exchange</param> /// <returns></returns> public override async ValueTask <MyOrder> CreateMarketOrder(string base_name, string quote_name, decimal quantity, decimal price, SideType sideType, Dictionary <string, object> args = null) { var _result = new MyOrder(base_name, quote_name); var _market = await publicApi.LoadMarket(_result.marketId); if (_market.success == true) { tradeClient.ExchangeInfo.ApiCallWait(TradeType.Trade); var _buy_sell = sideType == SideType.Bid ? "buy" : "sell"; var _params = new Dictionary <string, object>(); { _params.Add("currency", _market.result.baseId); _params.Add("units", quantity); tradeClient.MergeParamsAndArgs(_params, args); } var _json_value = await tradeClient.CallApiPost1Async($"/trade/market_{_buy_sell}", _params); #if RAWJSON _result.rawJson = _json_value.Content; #endif var _json_result = tradeClient.GetResponseMessage(_json_value.Response); if (_json_result.success == true) { var _json_data = tradeClient.DeserializeObject <BPlaceOrders>(_json_value.Content); if (_json_data.success == true) { var _market_order = new BPlaceOrderItem { orderId = _json_data.orderId, sideType = sideType, orderType = OrderType.Market, orderStatus = OrderStatus.Open, timestamp = Convert.ToInt64(_json_data.orderId), price = price, quantity = quantity, amount = quantity * price, //fee = quantity * price * publicApi.ExchangeInfo.Fees.trading.maker, filled = 0m, cost = 0m }; foreach (var _trade in _json_data.data) { _market_order.filled += _trade.quantity; _market_order.cost += _trade.amount + _trade.fee; } _result.result = _market_order; } else { _json_result.SetResult(_json_data); } } _result.SetResult(_json_result); } else { _result.SetResult(_market); } return(_result); }
/// <summary> /// bithumb 회원 판/구매 거래 취소 /// </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="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="sideType">type of buy(bid) or sell(ask)</param> /// <param name="args">Add additional attributes for each exchange</param> /// <returns></returns> public override async ValueTask <MyOrder> CancelOrder(string base_name, string quote_name, string order_id, decimal quantity, decimal price, SideType sideType, Dictionary <string, object> args = null) { var _result = new MyOrder(base_name, quote_name); var _market = await publicApi.LoadMarket(_result.marketId); if (_market.success == true) { tradeClient.ExchangeInfo.ApiCallWait(TradeType.Trade); var _buy_sell = sideType == SideType.Bid ? "bid" : "ask"; var _params = new Dictionary <string, object>(); { _params.Add("currency", _market.result.symbol); _params.Add("order_id", order_id); _params.Add("type", _buy_sell); tradeClient.MergeParamsAndArgs(_params, args); } var _json_value = await tradeClient.CallApiPost1Async("/trade/cancel", _params); #if RAWJSON _result.rawJson = _json_value.Content; #endif var _json_result = tradeClient.GetResponseMessage(_json_value.Response); if (_json_result.success == true) { var _json_data = tradeClient.DeserializeObject <BPlaceOrder>(_json_value.Content); if (_json_data.success == true) { var _cancel_order = new BPlaceOrderItem { orderId = order_id, symbol = _market.result.symbol, orderStatus = OrderStatus.Canceled, sideType = sideType, quantity = quantity, price = price, amount = quantity * price }; _result.result = _cancel_order; } else { _json_result.SetResult(_json_data); } } _result.SetResult(_json_result); } else { _result.SetResult(_market); } return(_result); }
/// <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">amount of coin</param> /// <param name="price">fiat rate of coin</param> /// <param name="sideType">type of buy(bid) or sell(ask)</param> /// <param name="args">Add additional attributes for each exchange</param> /// <returns></returns> public override async Task <MyOrder> CreateLimitOrder(string base_name, string quote_name, decimal quantity, decimal price, SideType sideType, Dictionary <string, object> args = null) { var _result = new MyOrder(base_name, quote_name); var _market = await publicApi.LoadMarket(_result.marketId); if (_market.success == true) { tradeClient.ExchangeInfo.ApiCallWait(TradeType.Trade); var _buy_sell = sideType == SideType.Bid ? "bid" : "ask"; var _params = new Dictionary <string, object>(); { _params.Add("order_currency", _market.result.baseId); _params.Add("payment_currency", _market.result.quoteId); _params.Add("units", quantity); _params.Add("price", price); _params.Add("type", _buy_sell); if (args != null) { foreach (var _a in args) { if (_params.ContainsKey(_a.Key) == true) { _params.Remove(_a.Key); } _params.Add(_a.Key, _a.Value); } } } var _json_value = await tradeClient.CallApiPost1Async("/trade/place", _params); #if DEBUG _result.rawJson = _json_value.Content; #endif var _json_result = tradeClient.GetResponseMessage(_json_value.Response); if (_json_result.success == true) { var _json_data = tradeClient.DeserializeObject <BPlaceOrders>(_json_value.Content); if (_json_data.success == true) { var _limit_order = new BPlaceOrderItem { orderId = _json_data.orderId, sideType = sideType, orderType = OrderType.Limit, orderStatus = OrderStatus.Open, timestamp = Convert.ToInt64(_json_data.orderId), price = price, quantity = quantity, amount = quantity * price, //fee = quantity * price * publicApi.ExchangeInfo.Fees.trading.maker, filled = 0m, cost = 0m }; foreach (var _trade in _json_data.data) { _limit_order.filled += _trade.quantity; _limit_order.cost += _trade.amount + _trade.fee; } _result.result = _limit_order; } else { _json_result.SetResult(_json_data); } } _result.SetResult(_json_result); } else { _result.SetResult(_market); } return(_result); }