public async Task <string[]> CancelAllStopOrders(string symbol = null, TradeType?tradeType = null, IEnumerable <string> orderIds = null) { // /api/v1/orders var dict = new Dictionary <string, object>(); if (orderIds != null) { var sb = new StringBuilder(); foreach (var o in orderIds) { if (sb.Length > 0) { sb.Append(","); } sb.Append(o); } dict.Add("orderIds", sb.ToString()); } if (symbol != null) { dict.Add("symbol", symbol); } if (tradeType != null) { dict.Add("tradeType", EnumToStringConverter <TradeType> .GetEnumName((TradeType)tradeType)); } var jobj = await MakeRequest(HttpMethod.Delete, "/api/v1/stop-order/cancel", reqParams : dict); return(jobj["cancelledOrderIds"].ToObject <string[]>()); }
public async Task <IList <AccountLedgerItem> > GetAccountLedger(string currency = null, BizType?bizType = null, TransactionDirection?direction = null, DateTime?startTime = null, DateTime?endTime = null, int pageSize = 50) { var l = new List <AccountLedgerItem>(); long st, et; int cp = 1; DateTime d; var param = new Dictionary <string, object>(); param.Add("pageSize", pageSize); param.Add("currentPage", cp); if (currency != null) { param.Add("currency", currency); } if (bizType != null) { param.Add("bizType", EnumToStringConverter <BizType> .GetEnumName((BizType)bizType)); } if (direction != null) { param.Add("direction", EnumToStringConverter <TransactionDirection> .GetEnumName((TransactionDirection)bizType)); } if (startTime == null) { st = 0; } else { d = (DateTime)startTime; st = EpochTime.DateToSeconds(d); param.Add("startAt", st); } if (endTime == null) { et = 0; } else { d = (DateTime)endTime; et = EpochTime.DateToSeconds(d); param.Add("endAt", et); } if (startTime != null && endTime != null && et < st) { throw new ArgumentException("End time must be greater than start time"); } return(await GetAllPaginatedResults <AccountLedgerItem, AccountLedgerPage>(HttpMethod.Get, $"/api/v1/accounts/ledgers", reqParams : param)); }
public async Task <IList <Withdrawal> > GetWithdrawalList(string currency = null, DateTime?startTime = null, DateTime?endTime = null, WithdrawalStatus?status = null, int pageSize = 50) { var l = new List <Withdrawal>(); long st, et; int cp = 1; DateTime d; var param = new Dictionary <string, object>(); param.Add("pageSize", pageSize); param.Add("currentPage", cp); if (currency != null) { param.Add("currency", currency); } if (startTime == null) { st = 0; } else { d = (DateTime)startTime; st = EpochTime.DateToSeconds(d); param.Add("startAt", st); } if (endTime == null) { et = 0; } else { d = (DateTime)endTime; et = EpochTime.DateToSeconds(d); param.Add("endAt", et); } if (status != null) { param.Add("status", EnumToStringConverter <WithdrawalStatus> .GetEnumName((WithdrawalStatus)status)); } if (startTime != null && endTime != null && et < st) { throw new ArgumentException("End time must be greater than start time"); } return(await GetAllPaginatedResults <Withdrawal, WithdrawalListPage>(HttpMethod.Get, $"/api/v1/withdrawals", reqParams : param)); }
public async Task <string[]> CancelAllOrders(string symbol = null, TradeType?tradeType = null) { // /api/v1/orders var dict = new Dictionary <string, object>(); if (symbol != null) { dict.Add("symbol", symbol); } if (tradeType != null) { dict.Add("tradeType", EnumToStringConverter <TradeType> .GetEnumName((TradeType)tradeType)); } var jobj = await MakeRequest(HttpMethod.Delete, "/api/v1/orders", reqParams : dict); return(jobj["cancelledOrderIds"].ToObject <string[]>()); }
/// <summary> /// Make a new request to the API endpoint. /// </summary> /// <param name="method">The <see cref="HttpMethod"/> of the new call.</param> /// <param name="uri">The relative path of the endpoint.</param> /// <param name="timeout">Timeout value, in seconds.</param> /// <param name="auth">True if the call is authenticated.</param> /// <param name="reqParams">Optional parameters for the call.</param> /// <param name="wholeResponseJson">True to return the whole response, or false to just return the 'data' portion.</param> /// <returns>A <see cref="JToken"/> object that can be deserialized to suit members in the derived class.</returns> protected async Task <JToken> MakeRequest( HttpMethod method, string uri, int timeout = 10, bool auth = true, IDictionary <string, object> reqParams = null, bool wholeResponseJson = false) { string token; string json_data = reqParams != null?JsonConvert.SerializeObject(reqParams) : ""; if (method == HttpMethod.Get || method == HttpMethod.Delete) { if (reqParams != null && reqParams.Count > 0) { // sort the keys as per the Python API var sdict = new SortedDictionary <string, object>(reqParams); var sb = new StringBuilder(); foreach (var kv in sdict) { if (sb.Length != 0) { sb.Append("&"); } string sval; if (kv.Value is Enum) { sval = EnumToStringConverter <Enum> .GetEnumName((Enum)kv.Value); } else { sval = kv.Value.ToString(); } sb.Append(string.Format("{0}={1}", kv.Key, sval)); } uri += "?" + sb.ToString(); } token = uri; } else { token = uri + json_data; } Uri requri = UriJoin(this.url, uri); HttpRequestMessage req = new HttpRequestMessage(method, requri); req.Headers.Clear(); // KuCoin API Authentication Magic ICredentialsProvider cred = ResolveCredentials(); if (auth && cred != null) { var now_time = EpochTime.DateToSeconds(DateTime.Now) * 1000; var str_to_sign = now_time.ToString() + method.Method + token; var sign = CreateToken(str_to_sign, cred.GetSecret()); if (isv1api) { req.Headers.Add("KC-API-SIGN", sign); req.Headers.Add("KC-API-TIMESTAMP", now_time.ToString()); req.Headers.Add("KC-API-KEY", cred.GetKey()); req.Headers.Add("KC-API-PASSPHRASE", cred.GetPassphrase()); } else { var passphrase = CreateToken(cred.GetPassphrase(), cred.GetSecret()); req.Headers.Add("KC-API-SIGN", sign); req.Headers.Add("KC-API-TIMESTAMP", now_time.ToString()); req.Headers.Add("KC-API-KEY", cred.GetKey()); req.Headers.Add("KC-API-PASSPHRASE", passphrase); req.Headers.Add("KC-API-KEY-VERSION", "2"); } } using (HttpClient httpClient = new HttpClient()) { httpClient.Timeout = new TimeSpan(0, 0, timeout); if (method == HttpMethod.Get) { json_data = ""; } req.Content = new StringContent(json_data, Encoding.UTF8, "application/json"); long nt = DateTime.UtcNow.Ticks; lock (requestLockObject) { if (nt - lastTime < 2_500_000) { Thread.Sleep(250); } lastTime = nt; } var resp = await httpClient.SendAsync(req); var result = await CheckResponseData(resp, wholeResponseJson); return(result); } }