ccxt 4.5.55 → 4.5.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/README.md +209 -5
  2. package/dist/ccxt.browser.min.js +3 -3
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/aftermath.js +10 -5
  5. package/dist/cjs/src/alpaca.js +2 -2
  6. package/dist/cjs/src/apex.js +25 -16
  7. package/dist/cjs/src/arkham.js +7 -4
  8. package/dist/cjs/src/ascendex.js +6 -3
  9. package/dist/cjs/src/base/Exchange.js +3 -3
  10. package/dist/cjs/src/bigone.js +7 -4
  11. package/dist/cjs/src/binance.js +4 -4
  12. package/dist/cjs/src/bingx.js +4 -4
  13. package/dist/cjs/src/bitflyer.js +2 -1
  14. package/dist/cjs/src/bitget.js +14 -3
  15. package/dist/cjs/src/bitmart.js +5 -4
  16. package/dist/cjs/src/bitmex.js +7 -4
  17. package/dist/cjs/src/bitopro.js +1 -1
  18. package/dist/cjs/src/bitrue.js +2 -1
  19. package/dist/cjs/src/bitso.js +6 -3
  20. package/dist/cjs/src/bitstamp.js +5 -3
  21. package/dist/cjs/src/bittrade.js +2 -1
  22. package/dist/cjs/src/blofin.js +2 -1
  23. package/dist/cjs/src/bybit.js +19 -17
  24. package/dist/cjs/src/bybiteu.js +1 -0
  25. package/dist/cjs/src/coinbaseexchange.js +2 -1
  26. package/dist/cjs/src/coinbaseinternational.js +15 -9
  27. package/dist/cjs/src/coinex.js +5 -3
  28. package/dist/cjs/src/coinsph.js +4 -4
  29. package/dist/cjs/src/cryptocom.js +6 -6
  30. package/dist/cjs/src/deepcoin.js +6 -3
  31. package/dist/cjs/src/delta.js +2 -1
  32. package/dist/cjs/src/deribit.js +4 -2
  33. package/dist/cjs/src/derive.js +5 -3
  34. package/dist/cjs/src/digifinex.js +2 -1
  35. package/dist/cjs/src/exmo.js +12 -39
  36. package/dist/cjs/src/foxbit.js +1 -1
  37. package/dist/cjs/src/gemini.js +4 -2
  38. package/dist/cjs/src/grvt.js +13 -7
  39. package/dist/cjs/src/hashkey.js +4 -4
  40. package/dist/cjs/src/hibachi.js +1 -1
  41. package/dist/cjs/src/hitbtc.js +2 -1
  42. package/dist/cjs/src/htx.js +9 -5
  43. package/dist/cjs/src/hyperliquid.js +19 -13
  44. package/dist/cjs/src/indodax.js +2 -1
  45. package/dist/cjs/src/kraken.js +14 -13
  46. package/dist/cjs/src/krakenfutures.js +2 -1
  47. package/dist/cjs/src/lbank.js +8 -4
  48. package/dist/cjs/src/lighter.js +1 -1
  49. package/dist/cjs/src/luno.js +1 -1
  50. package/dist/cjs/src/mercado.js +2 -1
  51. package/dist/cjs/src/mexc.js +24 -14
  52. package/dist/cjs/src/modetrade.js +1 -1
  53. package/dist/cjs/src/okx.js +6 -3
  54. package/dist/cjs/src/oxfun.js +5 -3
  55. package/dist/cjs/src/p2b.js +8 -4
  56. package/dist/cjs/src/paradex.js +3 -2
  57. package/dist/cjs/src/phemex.js +4 -2
  58. package/dist/cjs/src/poloniex.js +2 -1
  59. package/dist/cjs/src/pro/apex.js +10 -1
  60. package/dist/cjs/src/pro/aster.js +10 -9
  61. package/dist/cjs/src/pro/binance.js +3 -3
  62. package/dist/cjs/src/pro/bingx.js +7 -2
  63. package/dist/cjs/src/pro/bitmart.js +10 -0
  64. package/dist/cjs/src/pro/bitmex.js +1 -1
  65. package/dist/cjs/src/pro/grvt.js +8 -0
  66. package/dist/cjs/src/pro/htx.js +4 -4
  67. package/dist/cjs/src/pro/krakenfutures.js +16 -4
  68. package/dist/cjs/src/pro/modetrade.js +3 -3
  69. package/dist/cjs/src/pro/okx.js +4 -4
  70. package/dist/cjs/src/pro/oxfun.js +4 -4
  71. package/dist/cjs/src/pro/woo.js +4 -4
  72. package/dist/cjs/src/pro/woofipro.js +3 -3
  73. package/dist/cjs/src/pro/xt.js +1 -1
  74. package/dist/cjs/src/toobit.js +1 -1
  75. package/dist/cjs/src/woo.js +1 -1
  76. package/dist/cjs/src/woofipro.js +1 -1
  77. package/dist/cjs/src/xt.js +2 -1
  78. package/dist/cjs/src/yobit.js +4 -2
  79. package/dist/cjs/src/zebpay.js +3 -3
  80. package/js/ccxt.d.ts +1 -1
  81. package/js/ccxt.js +1 -1
  82. package/js/src/abstract/mexc.d.ts +1 -0
  83. package/js/src/aftermath.js +10 -5
  84. package/js/src/alpaca.js +2 -2
  85. package/js/src/apex.d.ts +1 -1
  86. package/js/src/apex.js +25 -16
  87. package/js/src/arkham.js +7 -4
  88. package/js/src/ascendex.js +6 -3
  89. package/js/src/base/Exchange.js +3 -3
  90. package/js/src/bigone.js +7 -4
  91. package/js/src/binance.js +4 -4
  92. package/js/src/bingx.js +4 -4
  93. package/js/src/bitflyer.js +2 -1
  94. package/js/src/bitget.js +14 -3
  95. package/js/src/bitmart.js +5 -4
  96. package/js/src/bitmex.js +7 -4
  97. package/js/src/bitopro.js +1 -1
  98. package/js/src/bitrue.js +2 -1
  99. package/js/src/bitso.js +6 -3
  100. package/js/src/bitstamp.js +5 -3
  101. package/js/src/bittrade.js +2 -1
  102. package/js/src/blofin.js +2 -1
  103. package/js/src/bybit.d.ts +1 -1
  104. package/js/src/bybit.js +19 -17
  105. package/js/src/bybiteu.js +1 -0
  106. package/js/src/coinbaseexchange.js +2 -1
  107. package/js/src/coinbaseinternational.d.ts +1 -1
  108. package/js/src/coinbaseinternational.js +15 -9
  109. package/js/src/coinex.d.ts +1 -1
  110. package/js/src/coinex.js +5 -3
  111. package/js/src/coinsph.js +4 -4
  112. package/js/src/cryptocom.js +6 -6
  113. package/js/src/deepcoin.js +6 -3
  114. package/js/src/delta.js +2 -1
  115. package/js/src/deribit.js +4 -2
  116. package/js/src/derive.js +5 -3
  117. package/js/src/digifinex.js +2 -1
  118. package/js/src/exmo.js +12 -39
  119. package/js/src/foxbit.js +1 -1
  120. package/js/src/gemini.js +4 -2
  121. package/js/src/grvt.d.ts +1 -1
  122. package/js/src/grvt.js +13 -7
  123. package/js/src/hashkey.js +4 -4
  124. package/js/src/hibachi.d.ts +1 -1
  125. package/js/src/hibachi.js +1 -1
  126. package/js/src/hitbtc.js +2 -1
  127. package/js/src/htx.js +9 -5
  128. package/js/src/hyperliquid.d.ts +4 -4
  129. package/js/src/hyperliquid.js +19 -13
  130. package/js/src/indodax.js +2 -1
  131. package/js/src/kraken.js +14 -13
  132. package/js/src/krakenfutures.js +2 -1
  133. package/js/src/lbank.js +8 -4
  134. package/js/src/lighter.d.ts +1 -1
  135. package/js/src/lighter.js +1 -1
  136. package/js/src/luno.js +1 -1
  137. package/js/src/mercado.js +2 -1
  138. package/js/src/mexc.d.ts +2 -2
  139. package/js/src/mexc.js +24 -14
  140. package/js/src/modetrade.js +1 -1
  141. package/js/src/okx.js +6 -3
  142. package/js/src/oxfun.js +5 -3
  143. package/js/src/p2b.js +8 -4
  144. package/js/src/paradex.js +3 -2
  145. package/js/src/phemex.js +4 -2
  146. package/js/src/poloniex.js +2 -1
  147. package/js/src/pro/apex.js +10 -1
  148. package/js/src/pro/aster.js +10 -9
  149. package/js/src/pro/binance.d.ts +1 -1
  150. package/js/src/pro/binance.js +3 -3
  151. package/js/src/pro/bingx.js +7 -2
  152. package/js/src/pro/bitmart.js +10 -0
  153. package/js/src/pro/bitmex.js +1 -1
  154. package/js/src/pro/grvt.js +8 -0
  155. package/js/src/pro/htx.d.ts +4 -4
  156. package/js/src/pro/htx.js +4 -4
  157. package/js/src/pro/krakenfutures.d.ts +4 -4
  158. package/js/src/pro/krakenfutures.js +16 -4
  159. package/js/src/pro/modetrade.d.ts +3 -3
  160. package/js/src/pro/modetrade.js +3 -3
  161. package/js/src/pro/okx.d.ts +4 -4
  162. package/js/src/pro/okx.js +4 -4
  163. package/js/src/pro/oxfun.d.ts +4 -4
  164. package/js/src/pro/oxfun.js +4 -4
  165. package/js/src/pro/woo.d.ts +4 -4
  166. package/js/src/pro/woo.js +4 -4
  167. package/js/src/pro/woofipro.d.ts +3 -3
  168. package/js/src/pro/woofipro.js +3 -3
  169. package/js/src/pro/xt.js +1 -1
  170. package/js/src/toobit.d.ts +1 -1
  171. package/js/src/toobit.js +1 -1
  172. package/js/src/woo.js +1 -1
  173. package/js/src/woofipro.js +1 -1
  174. package/js/src/xt.js +2 -1
  175. package/js/src/yobit.js +4 -2
  176. package/js/src/zebpay.js +3 -3
  177. package/package.json +21 -7
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![NPM Downloads](https://img.shields.io/npm/dy/ccxt.svg)](https://www.npmjs.com/package/ccxt) [![npm](https://img.shields.io/npm/v/ccxt.svg)](https://npmjs.com/package/ccxt) [![PyPI](https://img.shields.io/pypi/v/ccxt.svg)](https://pypi.python.org/pypi/ccxt) [![NuGet version](https://img.shields.io/nuget/v/ccxt)](https://www.nuget.org/packages/ccxt) [![GoDoc](https://pkg.go.dev/badge/github.com/ccxt/ccxt/go/v4?utm_source=godoc)](https://godoc.org/github.com/ccxt/ccxt/go/v4) [![Discord](https://img.shields.io/discord/690203284119617602?logo=discord&logoColor=white)](https://discord.gg/ccxt) [![Supported Exchanges](https://img.shields.io/badge/exchanges-111-blue.svg)](https://github.com/ccxt/ccxt/wiki/Exchange-Markets) [![Follow CCXT at x.com](https://img.shields.io/twitter/follow/ccxt_official.svg?style=social&label=CCXT)](https://x.com/ccxt_official)
4
4
 
5
- A cryptocurrency trading API with more than 100 exchanges in JavaScript / TypeScript / Python / C# / PHP / Go.
5
+ A cryptocurrency trading API with more than 100 exchanges in JavaScript / TypeScript / Python / C# / PHP / Go / Java.
6
6
 
7
7
  ### [Install](#install) · [Usage](#usage) · [Manual](https://github.com/ccxt/ccxt/wiki) · [FAQ](https://github.com/ccxt/ccxt/wiki/FAQ) · [Examples](https://github.com/ccxt/ccxt/tree/master/examples) · [Contributing](https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md) · [Disclaimer](#disclaimer) · [Social](#social)
8
8
 
@@ -16,7 +16,7 @@ Current feature list:
16
16
  - fully implemented public and private APIs
17
17
  - optional normalized data for cross-exchange analytics and arbitrage
18
18
  - an out of the box unified API that is extremely easy to integrate
19
- - works in Node 10.4+, Python 3, PHP 8.1+, netstandard2.0/2.1, Go 1.20+ and web browsers
19
+ - works in Node 10.4+, Python 3, PHP 8.1+, netstandard2.0/2.1, Go 1.20+, Java 21+ and web browsers
20
20
 
21
21
  ## See Also
22
22
 
@@ -198,6 +198,7 @@ The easiest way to install the CCXT library is to use a package manager:
198
198
  - [ccxt in **Packagist/Composer**](https://packagist.org/packages/ccxt/ccxt) (PHP 8.1+)
199
199
  - [ccxt in **Nuget**](https://www.nuget.org/packages/ccxt) (netstandard 2.0)
200
200
  - [ccxt in **GO**](https://pkg.go.dev/github.com/ccxt/ccxt/go/v4)
201
+ - ccxt in **Java** (Java 21+, Gradle)
201
202
 
202
203
  This library is shipped as an all-in-one module implementation with minimalistic dependencies and requirements:
203
204
 
@@ -206,6 +207,7 @@ This library is shipped as an all-in-one module implementation with minimalistic
206
207
  - [php/](https://github.com/ccxt/ccxt/blob/master/php/) in PHP (generated from TS)
207
208
  - [cs/](https://github.com/ccxt/ccxt/blob/master/cs/) in C# (generated from TS)
208
209
  - [go/](https://github.com/ccxt/ccxt/blob/master/go/) in Go (generated from TS)
210
+ - [java/](https://github.com/ccxt/ccxt/blob/master/java/) in Java (generated from TS)
209
211
 
210
212
  You can also clone it into your project directory from [ccxt GitHub repository](https://github.com/ccxt/ccxt):
211
213
 
@@ -242,13 +244,13 @@ console.log(version, Object.keys(exchanges));
242
244
 
243
245
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
244
246
 
245
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.5.55/dist/ccxt.browser.min.js
246
- * unpkg: https://unpkg.com/ccxt@4.5.55/dist/ccxt.browser.min.js
247
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.5.56/dist/ccxt.browser.min.js
248
+ * unpkg: https://unpkg.com/ccxt@4.5.56/dist/ccxt.browser.min.js
247
249
 
248
250
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
249
251
 
250
252
  ```HTML
251
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.5.55/dist/ccxt.browser.min.js"></script>
253
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.5.56/dist/ccxt.browser.min.js"></script>
252
254
  ```
253
255
 
254
256
  Creates a global `ccxt` object:
@@ -337,6 +339,65 @@ import "ccxt"
337
339
  fmt.Println(ccxt.Exchanges)
338
340
  ```
339
341
 
342
+ ### Java
343
+
344
+ Java version of CCXT requires Java 21+ and uses Gradle as its build system.
345
+
346
+ Add the CCXT library as a local dependency in your `build.gradle.kts`:
347
+
348
+ ```kotlin
349
+ dependencies {
350
+ implementation("io.github.ccxt:ccxt:4.5.52")
351
+ }
352
+ ```
353
+
354
+ Or clone and build from source:
355
+
356
+ ```shell
357
+ git clone https://github.com/ccxt/ccxt.git --depth 1
358
+ cd ccxt/java
359
+ ./gradlew :lib:build
360
+ ```
361
+
362
+ ```Java
363
+ import io.github.ccxt.exchanges.Binance;
364
+ import io.github.ccxt.types.Ticker;
365
+
366
+ Binance exchange = new Binance();
367
+ exchange.loadMarkets(false);
368
+
369
+ Ticker ticker = exchange.fetchTicker("BTC/USDT");
370
+ System.out.println(ticker.symbol + " " + ticker.last);
371
+ ```
372
+
373
+ Each exchange has its own typed subclass with strongly-typed return values. Every typed method ships both a blocking sync and a non-blocking `CompletableFuture`-returning async overload — pick the idiom that fits your call site:
374
+
375
+ ```Java
376
+ // Sync — blocks until the response arrives
377
+ Ticker ticker = exchange.fetchTicker("BTC/USDT");
378
+
379
+ // Async — returns immediately, completes when the response arrives
380
+ CompletableFuture<Ticker> future = exchange.fetchTickerAsync("BTC/USDT", null);
381
+ future.thenAccept(t -> System.out.println(t.last));
382
+ ```
383
+
384
+ WebSocket support is available via the pro exchange classes, with the same sync/async symmetry — `watchTicker` blocks for one update; `watchTickerAsync` returns a `CompletableFuture<Ticker>` you can compose:
385
+
386
+ ```Java
387
+ import io.github.ccxt.exchanges.pro.Binance;
388
+
389
+ var exchange = new Binance();
390
+ exchange.loadMarkets(false);
391
+
392
+ // Sync — blocks for one update
393
+ Ticker tick = exchange.watchTicker("BTC/USDT");
394
+
395
+ // Async — returns a typed CompletableFuture (composable with allOf, anyOf, etc.)
396
+ CompletableFuture<Ticker> future = exchange.watchTickerAsync("BTC/USDT", null);
397
+ ```
398
+
399
+ See [java/examples/](https://github.com/ccxt/ccxt/tree/master/java/examples) for more usage examples.
400
+
340
401
  ### Docker
341
402
 
342
403
  You can get CCXT installed in a container along with all the supported languages and dependencies. This may be useful if you want to contribute to CCXT (e.g. run the build scripts and tests — please see the [Contributing](https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md) document for the details on that).
@@ -645,6 +706,149 @@ Lastly, just because the signature dictates that some argument like `symbol` is
645
706
 
646
707
  You can check different examples in the `examples/go` folder.
647
708
 
709
+ ### Java
710
+
711
+ ```Java
712
+ import io.github.ccxt.exchanges.Kraken;
713
+ import io.github.ccxt.exchanges.Bitfinex;
714
+ import io.github.ccxt.exchanges.Binance;
715
+ import io.github.ccxt.types.*;
716
+
717
+ import java.util.HashMap;
718
+ import java.util.Map;
719
+
720
+ public class Example {
721
+ public static void main(String[] args) {
722
+ // Create exchange instances
723
+ Kraken kraken = new Kraken();
724
+ Bitfinex bitfinex = new Bitfinex();
725
+
726
+ Map<String, Object> config = new HashMap<>();
727
+ config.put("apiKey", "YOUR_API_KEY");
728
+ config.put("secret", "YOUR_SECRET");
729
+ Binance binance = new Binance(config);
730
+
731
+ // Load markets
732
+ kraken.loadMarkets(false);
733
+ binance.loadMarkets(false);
734
+
735
+ // Public API
736
+ OrderBook orderBook = kraken.fetchOrderBook("BTC/USDT");
737
+ Ticker ticker = bitfinex.fetchTicker("BTC/USD");
738
+ System.out.println(ticker.symbol + " last=" + ticker.last);
739
+
740
+ // Fetch OHLCV
741
+ var candles = binance.fetchOHLCV("BTC/USDT", "1h", null, 10L, null);
742
+ System.out.println("Got " + candles.size() + " candles");
743
+
744
+ // Private API (requires API keys)
745
+ Balances balance = binance.fetchBalance();
746
+ System.out.println("BTC free: " + balance.free.get("BTC"));
747
+
748
+ // Place a limit buy order
749
+ Order order = binance.createLimitBuyOrder("BTC/USDT", 0.001, 50000.0);
750
+ System.out.println("Order id: " + order.id + " status: " + order.status);
751
+
752
+ // Cancel it
753
+ binance.cancelOrder(order.id, "BTC/USDT", null);
754
+ }
755
+ }
756
+ ```
757
+
758
+ #### Async
759
+
760
+ All methods are also available as async variants returning `CompletableFuture`:
761
+
762
+ ```Java
763
+ import java.util.concurrent.CompletableFuture;
764
+
765
+ // Fire multiple requests concurrently
766
+ CompletableFuture<Ticker> btc = binance.fetchTickerAsync("BTC/USDT", null);
767
+ CompletableFuture<Ticker> eth = binance.fetchTickerAsync("ETH/USDT", null);
768
+ CompletableFuture.allOf(btc, eth).join();
769
+ System.out.println("BTC: " + btc.get().last + " ETH: " + eth.get().last);
770
+ ```
771
+
772
+ #### Error handling
773
+
774
+ Typed sync methods throw the underlying ccxt error directly — no `CompletionException`
775
+ unwrap needed. Catch exceptions in standard JDK order (most-specific first), like you
776
+ would with any other Java library:
777
+
778
+ ```Java
779
+ import io.github.ccxt.errors.*;
780
+ import io.github.ccxt.exchanges.Binance;
781
+ import io.github.ccxt.types.Order;
782
+
783
+ Binance binance = new Binance(Map.of("apiKey", "...", "secret", "..."));
784
+ try {
785
+ Order order = binance.createOrder("BTC/USDT", "limit", "buy", 0.001, 50000.0);
786
+ } catch (InsufficientFunds e) {
787
+ // user error — show balance, don't retry
788
+ } catch (InvalidOrder e) { // covers OrderNotFound, DuplicateOrderId, …
789
+ // user error — fix params
790
+ } catch (AuthenticationError e) { // covers PermissionDenied, AccountSuspended
791
+ // refresh credentials
792
+ } catch (RateLimitExceeded | DDoSProtection e) { // multi-catch (Java 7+)
793
+ Thread.sleep(30_000);
794
+ } catch (NetworkError e) { // RequestTimeout, ExchangeNotAvailable, …
795
+ Thread.sleep(2_000); // transient — retry
796
+ } catch (ExchangeError e) { // any other exchange-side error
797
+ // exchange refused
798
+ } catch (BaseError e) { // ccxt catch-all
799
+ // unknown ccxt error
800
+ }
801
+ ```
802
+
803
+ For async methods, `CompletableFuture` wraps thrown errors in `CompletionException`
804
+ (JDK behaviour). Use `Helpers.unwrap()` inside `.exceptionally(...)` to peel the wrap
805
+ and pattern-match the real cause:
806
+
807
+ ```Java
808
+ import io.github.ccxt.Helpers;
809
+
810
+ binance.createOrderAsync("BTC/USDT", "limit", "buy", 0.001, 50000.0)
811
+ .thenAccept(order -> log.info("placed " + order.id))
812
+ .exceptionally(throwable -> {
813
+ Throwable cause = Helpers.unwrap(throwable);
814
+ return switch (cause) {
815
+ case InsufficientFunds e -> { notifyUser(e); yield null; }
816
+ case AuthenticationError e -> { refreshCreds(); yield null; }
817
+ case RateLimitExceeded e -> { scheduleRetry(); yield null; }
818
+ case NetworkError e -> { scheduleRetry(); yield null; }
819
+ case BaseError e -> { log.error("ccxt", e); yield null; }
820
+ default -> throw new java.util.concurrent.CompletionException(cause);
821
+ };
822
+ });
823
+ ```
824
+
825
+ The full hierarchy lives under `io.github.ccxt.errors` — see the [Error Handling
826
+ section of the Manual](https://github.com/ccxt/ccxt/wiki/Manual#error-handling)
827
+ for the complete tree (NetworkError vs ExchangeError, retry-safe vs user-error
828
+ categories, etc.).
829
+
830
+ #### WebSocket
831
+
832
+ WebSocket support is available via the pro exchange classes:
833
+
834
+ ```Java
835
+ import io.github.ccxt.Exchange;
836
+ import io.github.ccxt.exchanges.pro.Binance;
837
+
838
+ import java.util.concurrent.TimeUnit;
839
+
840
+ Exchange exchange = new Binance();
841
+ exchange.loadMarkets().join();
842
+
843
+ // Stream live ticker updates
844
+ for (int i = 0; i < 10; i++) {
845
+ Object ticker = exchange.watchTicker("BTC/USDT").get(30, TimeUnit.SECONDS);
846
+ System.out.println(ticker);
847
+ }
848
+ ```
849
+
850
+ You can check different examples in the `java/examples` folder.
851
+
648
852
  ## Rate limiting
649
853
 
650
854
  Crypto exchanges enforce rate limits to protect their infrastructure, ensure fair usage across all clients, and prevent abuse that could degrade performance or availability for other users. That means you can't make an unlimited amount of requests to the exchange, there is a rate that needs to be respected.