From 9d36596b2d160c3ddacb1882395bfca643d2806d Mon Sep 17 00:00:00 2001 From: BZ-CO <30245815+BZ-CO@users.noreply.github.com> Date: Sun, 5 Mar 2023 20:12:30 +0200 Subject: [PATCH 1/4] Fix typo in CryptoUtiliy.SecondsToPeriodStringLongReverse XML tag summary --- src/ExchangeSharp/Utility/CryptoUtility.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ExchangeSharp/Utility/CryptoUtility.cs b/src/ExchangeSharp/Utility/CryptoUtility.cs index 2b93776d..8b3bedd7 100644 --- a/src/ExchangeSharp/Utility/CryptoUtility.cs +++ b/src/ExchangeSharp/Utility/CryptoUtility.cs @@ -1220,7 +1220,7 @@ public static string SecondsToPeriodStringLong(int seconds) } /// - /// Convert seconds to a period string, i.e. SECOND_5, MINUTE_1, HOUR_2, DAY_3, WEEK_1week, MONTH_1, YEAR_1 etc. + /// Convert seconds to a period string, i.e. SECOND_5, MINUTE_1, HOUR_2, DAY_3, WEEK_1, MONTH_1, YEAR_1 etc. /// /// Seconds. Use 60 for minute, 3600 for hour, 3600*24 for day, 3600*24*30 for month. /// Period string From beee232a5ab90194ccd7d267f43af6eec205e050 Mon Sep 17 00:00:00 2001 From: BZ-CO <30245815+BZ-CO@users.noreply.github.com> Date: Sun, 5 Mar 2023 22:38:28 +0200 Subject: [PATCH 2/4] Grouping websocket methods --- .../Exchanges/Poloniex/ExchangePoloniexAPI.cs | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs b/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs index 4766c671..be4c97e4 100644 --- a/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs +++ b/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs @@ -456,51 +456,6 @@ protected override async Task>> return tickers; } - protected override async Task OnGetTickersWebSocketAsync( - Action>> callback, - params string[] symbols) => - await ConnectWebsocketPublicAsync( - async (socket) => { await SubscribeToChannel(socket, "ticker", symbols); }, - async (socket, symbol, sArray, token) => - { - var tickers = new List> - { - new KeyValuePair(symbol, - await this.ParseTickerWebSocketAsync(symbol, token)) - }; - callback(tickers); - }); - - protected override async Task OnGetTradesWebSocketAsync( - Func, Task> callback, - params string[] marketSymbols) => - await ConnectWebsocketPublicAsync( - async (socket) => { await SubscribeToChannel(socket, "trades", marketSymbols); }, - async (socket, symbol, sArray, token) => - { - var trade = token.ParseTrade(amountKey: "quantity", priceKey: "price", typeKey: "takerSide", - timestampKey: "ts", TimestampType.UnixMilliseconds, idKey: "id"); - await callback(new KeyValuePair(symbol, trade)); - }); - - protected override async Task OnGetDeltaOrderBookWebSocketAsync( - Action callback, - int maxCount = 20, - params string[] marketSymbols) - { - return await ConnectWebsocketPublicAsync( - async (socket) => - { - await SubscribeToOrderBookDepthChannel(socket, marketSymbols, maxCount); - }, (socket, symbol, sArray, token) => - { - var book = token.ParseOrderBookFromJTokenArrays(); - book.MarketSymbol = symbol; - callback(book); - return Task.CompletedTask; - }); - } - protected override async Task OnGetOrderBookAsync(string marketSymbol, int maxCount = 100) { //https://api.poloniex.com/markets/{symbol}/orderBook?scale={scale}&limit={limit} @@ -853,6 +808,51 @@ protected override async Task> OnGetDepositHist return transactions; } + protected override async Task OnGetTickersWebSocketAsync( + Action>> callback, + params string[] symbols) => + await ConnectWebsocketPublicAsync( + async (socket) => { await SubscribeToChannel(socket, "ticker", symbols); }, + async (socket, symbol, sArray, token) => + { + var tickers = new List> + { + new KeyValuePair(symbol, + await this.ParseTickerWebSocketAsync(symbol, token)) + }; + callback(tickers); + }); + + protected override async Task OnGetTradesWebSocketAsync( + Func, Task> callback, + params string[] marketSymbols) => + await ConnectWebsocketPublicAsync( + async (socket) => { await SubscribeToChannel(socket, "trades", marketSymbols); }, + async (socket, symbol, sArray, token) => + { + var trade = token.ParseTrade(amountKey: "quantity", priceKey: "price", typeKey: "takerSide", + timestampKey: "ts", TimestampType.UnixMilliseconds, idKey: "id"); + await callback(new KeyValuePair(symbol, trade)); + }); + + protected override async Task OnGetDeltaOrderBookWebSocketAsync( + Action callback, + int maxCount = 20, + params string[] marketSymbols) + { + return await ConnectWebsocketPublicAsync( + async (socket) => + { + await SubscribeToOrderBookDepthChannel(socket, marketSymbols, maxCount); + }, (socket, symbol, sArray, token) => + { + var book = token.ParseOrderBookFromJTokenArrays(); + book.MarketSymbol = symbol; + callback(book); + return Task.CompletedTask; + }); + } + private static string ParseFeesCurrency(bool isBuy, string symbol) { string feesCurrency = null; From 821548b6e309ef6e09b7a00e2f559effbe1755d9 Mon Sep 17 00:00:00 2001 From: BZ-CO <30245815+BZ-CO@users.noreply.github.com> Date: Sun, 5 Mar 2023 22:42:14 +0200 Subject: [PATCH 3/4] OnGetDeltaOrderBookWebSocketAsync to expression body --- .../API/Exchanges/Poloniex/ExchangePoloniexAPI.cs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs b/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs index be4c97e4..9ad706a4 100644 --- a/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs +++ b/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs @@ -838,20 +838,16 @@ await ConnectWebsocketPublicAsync( protected override async Task OnGetDeltaOrderBookWebSocketAsync( Action callback, int maxCount = 20, - params string[] marketSymbols) - { - return await ConnectWebsocketPublicAsync( - async (socket) => - { - await SubscribeToOrderBookDepthChannel(socket, marketSymbols, maxCount); - }, (socket, symbol, sArray, token) => + params string[] marketSymbols) => + await ConnectWebsocketPublicAsync( + async (socket) => { await SubscribeToOrderBookDepthChannel(socket, marketSymbols, maxCount); }, + (socket, symbol, sArray, token) => { var book = token.ParseOrderBookFromJTokenArrays(); book.MarketSymbol = symbol; callback(book); return Task.CompletedTask; }); - } private static string ParseFeesCurrency(bool isBuy, string symbol) { From 2d35038891d5065eb15b85959872426bb27d9b1a Mon Sep 17 00:00:00 2001 From: BZ-CO <30245815+BZ-CO@users.noreply.github.com> Date: Sun, 5 Mar 2023 23:09:16 +0200 Subject: [PATCH 4/4] Implement GetCandlesWebSocketAsync --- .../Exchanges/Poloniex/ExchangePoloniexAPI.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs b/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs index 9ad706a4..0d080b5a 100644 --- a/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs +++ b/src/ExchangeSharp/API/Exchanges/Poloniex/ExchangePoloniexAPI.cs @@ -849,6 +849,24 @@ await ConnectWebsocketPublicAsync( return Task.CompletedTask; }); + protected override async Task OnGetCandlesWebSocketAsync( + Func callback, + int periodSeconds, + params string[] marketSymbols) => + await ConnectWebsocketPublicAsync( + async (socket) => + { + await SubscribeToChannel(socket, + $"candles_{CryptoUtility.SecondsToPeriodStringLongReverse(periodSeconds).ToLowerInvariant()}", + marketSymbols); + }, async (socket, symbol, sArray, token) => + { + var candle = this.ParseCandle(token, symbol, periodSeconds, "open", "high", "low", "close", + "ts", TimestampType.UnixMilliseconds, "quantity", "amount", null, "tradeCount"); + + await callback(candle); + }); + private static string ParseFeesCurrency(bool isBuy, string symbol) { string feesCurrency = null;