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;