|
1 |
| -using System; |
| 1 | +using System; |
2 | 2 | using System.Collections.Generic;
|
3 | 3 | using System.Linq;
|
4 | 4 | using System.Threading.Tasks;
|
@@ -238,7 +238,6 @@ protected override async Task<Dictionary<string, decimal>> OnGetAmountsAvailable
|
238 | 238 | {
|
239 | 239 | Currency = x["asset"].Value<string>(),
|
240 | 240 | AvailableBalance = x["free"].Value<decimal>()
|
241 |
| - + x["locked"].Value<decimal>() |
242 | 241 | }
|
243 | 242 | )
|
244 | 243 | .ToDictionary(k => k.Currency, v => v.AvailableBalance);
|
@@ -369,6 +368,51 @@ protected override async Task OnCancelOrderAsync(string orderId, string marketSy
|
369 | 368 | await MakeJsonRequestAsync<JToken>("/order", BaseUrl, payload, "DELETE");
|
370 | 369 | }
|
371 | 370 |
|
| 371 | + protected override Task ProcessRequestAsync( |
| 372 | + IHttpWebRequest request, |
| 373 | + Dictionary<string, object>? payload |
| 374 | + ) |
| 375 | + { |
| 376 | + if ( |
| 377 | + CanMakeAuthenticatedRequest(payload) |
| 378 | + || (payload == null && request.RequestUri.AbsoluteUri.Contains("userDataStream")) |
| 379 | + ) |
| 380 | + { |
| 381 | + request.AddHeader("X-MEXC-APIKEY", PublicApiKey!.ToUnsecureString()); |
| 382 | + } |
| 383 | + return base.ProcessRequestAsync(request, payload); |
| 384 | + } |
| 385 | + |
| 386 | + protected override Uri ProcessRequestUrl( |
| 387 | + UriBuilder url, |
| 388 | + Dictionary<string, object>? payload, |
| 389 | + string? method |
| 390 | + ) |
| 391 | + { |
| 392 | + if (CanMakeAuthenticatedRequest(payload)) |
| 393 | + { |
| 394 | + // payload is ignored, except for the nonce which is added to the url query - bittrex puts all the "post" parameters in the url query instead of the request body |
| 395 | + var query = (url.Query ?? string.Empty).Trim('?', '&'); |
| 396 | + string newQuery = |
| 397 | + "timestamp=" |
| 398 | + + payload!["nonce"].ToStringInvariant() |
| 399 | + + (query.Length != 0 ? "&" + query : string.Empty) |
| 400 | + + ( |
| 401 | + payload.Count > 1 |
| 402 | + ? "&" + CryptoUtility.GetFormForPayload(payload, false) |
| 403 | + : string.Empty |
| 404 | + ); |
| 405 | + string signature = CryptoUtility.SHA256Sign( |
| 406 | + newQuery, |
| 407 | + CryptoUtility.ToUnsecureBytesUTF8(PrivateApiKey) |
| 408 | + ); |
| 409 | + newQuery += "&signature=" + signature; |
| 410 | + url.Query = newQuery; |
| 411 | + return url.Uri; |
| 412 | + } |
| 413 | + return base.ProcessRequestUrl(url, payload, method); |
| 414 | + } |
| 415 | + |
372 | 416 | private async Task<JToken> GetBalance()
|
373 | 417 | {
|
374 | 418 | var token = await MakeJsonRequestAsync<JToken>("/account", payload: await GetNoncePayloadAsync());
|
@@ -408,6 +452,7 @@ private static ExchangeOrderResult ParseOrder(JToken token)
|
408 | 452 | Amount = token["origQty"].ConvertInvariant<decimal>(),
|
409 | 453 | AmountFilled = token["executedQty"].ConvertInvariant<decimal>(),
|
410 | 454 | Price = token["price"].ConvertInvariant<decimal>(),
|
| 455 | + AveragePrice = token["price"].ConvertInvariant<decimal>(), |
411 | 456 | IsBuy = token["side"].ToStringInvariant() == "BUY",
|
412 | 457 | OrderDate = token["time"].ConvertInvariant<long>().UnixTimeStampToDateTimeMilliseconds(),
|
413 | 458 | Result = ParseOrderStatus(token["status"].ToStringInvariant())
|
|
0 commit comments