binance
無料Use binance-cli for Binance Spot, Futures (USD-S), and Convert. Requires auth.
日本語の概要は準備中です。原文の説明を表示しています。
CCXT cryptocurrency exchange library for Java developers. Covers both REST API (standard) and WebSocket API (real-time). Helps install CCXT, connect to exchanges, fetch market data, place orders, stream live tickers/orderbooks, handle authentication, and manage errors in Java projects. Use when working with crypto exchanges in Java applications, trading systems, or financial software. Requires Java 21+.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
A comprehensive guide to using CCXT in Java projects for cryptocurrency exchange integration.
// build.gradle
repositories {
mavenCentral()
}
dependencies {
implementation 'io.github.ccxt:ccxt:latest.release'
}
<dependency>
<groupId>io.github.ccxt</groupId>
<artifactId>ccxt</artifactId>
<version>LATEST</version>
</dependency>
import io.github.ccxt.exchanges.Binance;
import io.github.ccxt.types.Ticker;
Binance exchange = new Binance();
exchange.loadMarkets(false);
Ticker ticker = exchange.fetchTicker("BTC/USDT");
System.out.println(ticker.last);
import io.github.ccxt.exchanges.pro.Binance;
var exchange = new Binance();
exchange.loadMarkets(false);
while (true) {
Ticker ticker = exchange.watchTicker("BTC/USDT"); // typed sync, blocks for one update
System.out.println(ticker.last);
}
Each exchange has two classes following the Go pattern:
BinanceCore - transpiled untyped class (internal, extends BinanceApi extends Exchange)Binance - typed wrapper extending Core with typed overloads (user-facing)// User-facing typed class (recommended)
Binance exchange = new Binance();
Ticker ticker = exchange.fetchTicker("BTC/USDT"); // returns Ticker
List<Trade> trades = exchange.fetchTrades("BTC/USDT"); // returns List<Trade>
// Exchange-specific implicit API methods are also accessible
Object raw = exchange.publicGetTicker24hr(params).join(); // Binance-specific endpoint
// Properties accessible directly
exchange.apiKey = "...";
exchange.secret = "...";
The typed methods use Java method overloading. They coexist safely with untyped methods because Java resolves overloads at compile time: BinanceCore.java is compiled without knowledge of Binance.java's typed overloads, so internal calls always bind to untyped varargs.
| Feature | REST API | WebSocket API |
|---|---|---|
| Use for | One-time queries, placing orders | Real-time monitoring, live price feeds |
| Import | io.github.ccxt.exchanges.Binance | io.github.ccxt.exchanges.pro.Binance |
| Methods | fetch* (fetchTicker, fetchOrderBook) | watch* (watchTicker, watchOrderBook) |
| Returns | Typed objects (Ticker, List<Trade>) | CompletableFuture<Object> (call .join()) |
| Speed | Slower (HTTP request/response) | Faster (persistent connection) |
| Rate limits | Strict (1-2 req/sec) | More lenient (continuous stream) |
| Best for | Trading, account management | Price monitoring, arbitrage detection |
import io.github.ccxt.exchanges.Binance;
import java.util.Map;
import java.util.HashMap;
// Public API (no authentication)
Binance exchange = new Binance();
// Private API (with authentication)
Map<String, Object> config = new HashMap<>();
config.put("apiKey", "YOUR_API_KEY");
config.put("secret", "YOUR_SECRET");
Binance exchange = new Binance(config);
import io.github.ccxt.exchanges.pro.Binance;
// Public WebSocket
var exchange = new Binance();
// Private WebSocket (with authentication)
Map<String, Object> config = new HashMap<>();
config.put("apiKey", "YOUR_API_KEY");
config.put("secret", "YOUR_SECRET");
var exchange = new Binance(config);
import io.github.ccxt.Exchange;
// Returns Exchange type - no typed methods, but works for any exchange
Exchange exchange = Exchange.dynamicallyCreateInstance("binance", config);
Object ticker = exchange.fetchTicker("BTC/USDT").join(); // untyped, returns CompletableFuture
// Load all available trading pairs (typed)
Map<String, MarketInterface> markets = exchange.loadMarkets(false);
// Access market information
MarketInterface btcMarket = markets.get("BTC/USDT");
System.out.println(btcMarket.base); // "BTC"
System.out.println(btcMarket.quote); // "USDT"
System.out.println(btcMarket.active); // true
// Single ticker (typed)
Ticker ticker = exchange.fetchTicker("BTC/USDT");
System.out.println(ticker.last); // Last price
System.out.println(ticker.bid); // Best bid
System.out.println(ticker.ask); // Best ask
System.out.println(ticker.baseVolume); // 24h volume
// Async variant
CompletableFuture<Ticker> future = exchange.fetchTickerAsync("BTC/USDT", null);
// Full orderbook (typed)
OrderBook orderbook = exchange.fetchOrderBook("BTC/USDT", null, null);
System.out.println(orderbook.bids.get(0)); // [price, amount]
System.out.println(orderbook.asks.get(0)); // [price, amount]
// Limited depth
OrderBook orderbook = exchange.fetchOrderBook("BTC/USDT", 5L, null);
// Recent public trades (typed)
List<Trade> trades = exchange.fetchTrades("BTC/USDT");
for (Trade t : trades) {
System.out.println(t.datetime + " " + t.side + " " + t.price + " x " + t.amount);
}
// With optional params (pass null to skip)
List<Trade> trades = exchange.fetchTrades("BTC/USDT", null, 20L, null);
List<OHLCV> candles = exchange.fetchOHLCV("BTC/USDT", "1h", null, 10L, null);
for (OHLCV c : candles) {
System.out.println(c.timestamp + " O:" + c.open + " H:" + c.high + " L:" + c.low + " C:" + c.close);
}
// Buy limit order (typed)
Order order = exchange.createOrder("BTC/USDT", "limit", "buy", 0.01, 50000.0, null);
System.out.println(order.id);
// Sell limit order
Order order = exchange.createOrder("BTC/USDT", "limit", "sell", 0.01, 60000.0, null);
// Buy market order
Order order = exchange.createOrder("BTC/USDT", "market", "buy", 0.01, null, null);
// Sell market order
Order order = exchange.createOrder("BTC/USDT", "market", "sell", 0.01, null, null);
Balances balance = exchange.fetchBalance((Map<String, Object>) null);
// Access via the info map
System.out.println(balance);
// Open orders
List<Order> openOrders = exchange.fetchOpenOrders("BTC/USDT");
// Closed orders
List<Order> closedOrders = exchange.fetchClosedOrders("BTC/USDT");
// Single order by ID
Order order = exchange.fetchOrder("orderId123", "BTC/USDT", null);
// Cancel single order
Order cancelled = exchange.cancelOrder("orderId123", "BTC/USDT", null);
// Cancel all orders for a symbol
List<Order> cancelled = exchange.cancelAllOrders("BTC/USDT", null);
Each exchange class inherits exchange-specific endpoint methods from its Api class. These return CompletableFuture<Object> (untyped):
import io.github.ccxt.exchanges.Binance;
Binance exchange = new Binance();
exchange.loadMarkets(false);
// Binance-specific public endpoints
Map<String, Object> params = new HashMap<>();
params.put("symbol", "BTCUSDT");
Object rawTicker = exchange.publicGetTicker24hr(params).join();
// Binance-specific private endpoints (requires auth)
Object accountInfo = exchange.sapiGetAccountInfo(null).join();
// Access raw exchange info
Object exchangeInfo = exchange.publicGetExchangeInfo(null).join();
WebSocket classes are in io.github.ccxt.exchanges.pro. They return CompletableFuture<Object>:
import io.github.ccxt.exchanges.pro.Binance;
var exchange = new Binance();
exchange.loadMarkets(false);
while (true) {
Ticker ticker = exchange.watchTicker("BTC/USDT"); // typed sync, blocks for one update
System.out.println("Last: " + ticker.last);
}
var exchange = new Binance();
exchange.loadMarkets(false);
while (true) {
OrderBook ob = exchange.watchOrderBook("BTC/USDT");
System.out.println("Best bid: " + ob.bids.get(0));
}
var exchange = new Binance();
exchange.loadMarkets(false);
while (true) {
List<Trade> trades = exchange.watchTrades("BTC/USDT");
for (Trade t : trades) {
System.out.println(t.price + " " + t.amount + " " + t.side);
}
}
Map<String, Object> config = Map.of("apiKey", "KEY", "secret", "SECRET");
var exchange = new Binance(config);
exchange.loadMarkets(false);
while (true) {
List<Order> orders = exchange.watchOrders("BTC/USDT");
System.out.println(orders);
}
Java CCXT provides three patterns — and the symmetry applies to both REST fetch* and WS watch* methods.
// REST — blocks until one HTTP response
Binance exchange = new Binance();
Ticker ticker = exchange.fetchTicker("BTC/USDT");
// WS — blocks until one streaming update
var wsExchange = new io.github.ccxt.exchanges.pro.Binance();
Ticker tick = wsExchange.watchTicker("BTC/USDT");
// REST async
CompletableFuture<Ticker> future = exchange.fetchTickerAsync("BTC/USDT", null);
future.thenAccept(ticker -> System.out.println(ticker.last));
// WS async — same shape, returns CompletableFuture<Ticker> that completes on next update
CompletableFuture<Ticker> wsFuture = wsExchange.watchTickerAsync("BTC/USDT", null);
wsFuture.thenAccept(tick -> System.out.println(tick.last));
// Compose multiple watches without blocking the calling thread:
CompletableFuture.allOf(
wsExchange.watchTickerAsync("BTC/USDT", null),
wsExchange.watchOrderBookAsync("ETH/USDT", null, null)
).join();
Every typed fetch* and watch* method has a matching *Async overload at every supported arity, including zero-arg (where the method allows it). Same return-type symmetry: Ticker fetchTicker(...) ↔ CompletableFuture<Ticker> fetchTickerAsync(...); Tickers watchTickers(...) ↔ CompletableFuture<Tickers> watchTickersAsync(...).
Exchange exchange = Exchange.dynamicallyCreateInstance("binance", null);
Object result = exchange.fetchTicker("BTC/USDT").join();
fetchTicker(symbol) - Fetch ticker for one symbolfetchTickers(symbols, params) - Fetch multiple tickersfetchBidsAsks(symbols, params) - Fetch best bid/askfetchLastPrices(symbols, params) - Fetch last pricesfetchMarkPrice(symbol, params) - Fetch mark price (derivatives)fetchOrderBook(symbol, limit, params) - Fetch order bookfetchTrades(symbol, since, limit, params) - Fetch public tradesfetchMyTrades(symbol, since, limit, params) - Fetch your trades (auth required)fetchOHLCV(symbol, timeframe, since, limit, params) - Fetch candlestick datafetchBalance(params) - Fetch account balance (auth required)fetchAccounts(params) - Fetch sub-accountsfetchLedger(code, since, limit, params) - Fetch ledger historycreateOrder(symbol, type, side, amount, price, params) - Create ordercreateOrders(orders, params) - Create multiple orderseditOrder(id, symbol, type, side, amount, price, params) - Modify orderfetchOrder(id, symbol, params) - Fetch single orderfetchOrders(symbol, since, limit, params) - Fetch all ordersfetchOpenOrders(symbol, since, limit, params) - Fetch open ordersfetchClosedOrders(symbol, since, limit, params) - Fetch closed orderscancelOrder(id, symbol, params) - Cancel single ordercancelAllOrders(symbol, params) - Cancel all ordersfetchPosition(symbol, params) - Fetch single positionfetchPositions(symbols, params) - Fetch all positionsfetchFundingRate(symbol, params) - Current funding ratefetchFundingRateHistory(symbol, since, limit, params) - Funding rate historysetLeverage(leverage, symbol, params) - Set leveragesetMarginMode(marginMode, symbol, params) - Set margin modefetchDepositAddress(code, params) - Get deposit addresswithdraw(code, amount, address, tag, params) - Withdraw fundstransfer(code, amount, fromAccount, toAccount, params) - Internal transferfetchDeposits(code, since, limit, params) - Fetch deposit historyfetchWithdrawals(code, since, limit, params) - Fetch withdrawal historyfetchTradingFee(symbol, params) - Trading fee for symbolfetchTradingFees(params) - All trading feesAll REST methods have WebSocket equivalents with watch* prefix:
watchTicker(symbol) - Watch single tickerwatchTickers(symbols) - Watch multiple tickerswatchOrderBook(symbol) - Watch order book updateswatchTrades(symbol) - Watch public tradeswatchOHLCV(symbol, timeframe) - Watch candlestick updateswatchBalance() - Watch balance updates (auth required)watchOrders(symbol) - Watch your order updates (auth required)watchMyTrades(symbol) - Watch your trade updates (auth required)Java typed methods use null for optional parameters:
// Full params
List<Trade> trades = exchange.fetchTrades("BTC/USDT", sinceTimestamp, 100L, extraParams);
// Skip optional params with null
List<Trade> trades = exchange.fetchTrades("BTC/USDT", null, 100L, null);
// Convenience overload (required params only)
List<Trade> trades = exchange.fetchTrades("BTC/USDT");
Map<String, Object> config = new HashMap<>();
config.put("apiKey", System.getenv("BINANCE_API_KEY"));
config.put("secret", System.getenv("BINANCE_SECRET"));
Binance exchange = new Binance(config);
// Or set after creation
exchange.apiKey = System.getenv("BINANCE_API_KEY");
exchange.secret = System.getenv("BINANCE_SECRET");
try {
Balances balance = exchange.fetchBalance((Map<String, Object>) null);
System.out.println("Authentication successful!");
} catch (CompletionException e) {
if (e.getCause() instanceof AuthenticationError) {
System.out.println("Invalid API credentials");
}
}
BaseError
+- NetworkError (recoverable - retry)
| +- RequestTimeout
| +- ExchangeNotAvailable
| +- RateLimitExceeded
| +- DDoSProtection
+- ExchangeError (non-recoverable - don't retry)
+- AuthenticationError
+- InsufficientFunds
+- InvalidOrder
+- BadSymbol
+- NotSupported
Typed sync methods (fetchTicker, createOrder, fetchBalance, etc.) unwrap
CompletionException internally and rethrow the underlying typed ccxt error,
so users write idiomatic Java try/catch with multiple typed catch blocks
in most-specific → least-specific order — same shape as catching
ArrayIndexOutOfBoundsException / IOException from the JDK:
import io.github.ccxt.errors.*;
import io.github.ccxt.exchanges.Binance;
import io.github.ccxt.types.Ticker;
Binance exchange = new Binance();
try {
Ticker ticker = exchange.fetchTicker("BTC/USDT");
} catch (NetworkError e) {
System.out.println("Network error - retry: " + e.getMessage());
} catch (ExchangeError e) {
System.out.println("Exchange error - do not retry: " + e.getMessage());
}
No CompletionException boilerplate, no .getCause() unwrap needed.
You cannot multi-catch a parent and child error together. Java forbids it:
// ❌ compile error — BaseError is parent of NetworkError
catch (NetworkError | BaseError e) { ... }
// ✅ separate clauses, most-specific first
catch (NetworkError e) { ... }
catch (BaseError e) { ... }
Passing null to a sync method can be ambiguous for the 13 zero-required-param methods
(fetchBalance, fetchOrders, fetchMyTrades, fetchOpenOrders, fetchClosedOrders,
fetchCanceledOrders, fetchTime, fetchStatus, fetchTickers, fetchPositions,
fetchAccounts, fetchCurrencies, fetchMarkets) plus their *Ws siblings. These ship both
a typed fetchX(Map<String, Object> params) and the base fetchX(Object...) varargs, so a
bare null matches both:
// ❌ "reference to fetchBalance is ambiguous"
exchange.fetchBalance(null);
// ✅ use the typed zero-arg overload (these 13 methods ship one)
exchange.fetchBalance();
// ✅ or cast to disambiguate (always works)
exchange.fetchBalance((Map<String, Object>) null);
Same applies to fetchBalanceAsync(null) etc. For methods outside the list, the typed
zero-arg form doesn't exist — pass an explicit argument or use the cast form.
The JVM stays alive after main() returns because of internal HTTP/scheduler threads
(Netty event loop, virtual-thread executors per WS connection). Call exchange.close() to
release them; as a last resort System.exit(0) will force-exit. Avoid Runtime.addShutdownHook
— a shutdown hook runs during JVM shutdown, it doesn't trigger one.
Multi-catch and ordering work exactly as JDK conventions expect:
try {
Order order = exchange.createOrder("BTC/USDT", "limit", "buy", 0.01, 50000.0, null);
} catch (InsufficientFunds e) {
System.out.println("Not enough balance: " + e.getMessage());
} catch (InvalidOrder e) { // covers OrderNotFound, DuplicateOrderId, etc.
System.out.println("Invalid order params: " + e.getMessage());
} catch (AuthenticationError e) {
System.out.println("Check your API credentials: " + e.getMessage());
} catch (RateLimitExceeded | DDoSProtection e) { // multi-catch — same handler for both
Thread.sleep(30_000);
} catch (NetworkError e) { // any other transient: RequestTimeout, ExchangeNotAvailable
Thread.sleep(2_000);
} catch (ExchangeError e) { // any other exchange-side error
System.out.println("Exchange refused: " + e.getMessage());
} catch (BaseError e) { // ccxt catch-all (rare)
System.out.println("CCXT error: " + e.getMessage());
}
Note: each catch clause must be for a single class; you cannot multi-catch
NetworkError | BaseError because BaseError is a parent of NetworkError.
The order above (most-specific to least-specific) is the JDK convention.
For async methods (fetchTickerAsync, createOrderAsync, …), the returned
CompletableFuture wraps exceptions in CompletionException. Use the
Helpers.unwrap() helper inside .exceptionally(...) to peel the wrapper
and pattern-match the underlying ccxt error:
import io.github.ccxt.Helpers;
exchange.fetchTickerAsync("BTC/USDT")
.thenAccept(t -> System.out.println(t.last()))
.exceptionally(throwable -> {
Throwable cause = Helpers.unwrap(throwable); // peels CompletionException
return switch (cause) { // pattern-matching switch (Java 21+)
case RateLimitExceeded e -> { backoff(); yield null; }
case NetworkError e -> { retry(); yield null; }
case AuthenticationError e -> { refreshCredentials(); yield null; }
case ExchangeError e -> { logExchangeError(e); yield null; }
case BaseError e -> { logCcxtError(e); yield null; }
default -> throw new java.util.concurrent.CompletionException(cause);
};
});
If you'd rather block and use the sync exception style, you can also do
Helpers.joinUnwrapped(future) instead of calling .join() directly — that's
the same helper the typed sync wrappers use internally.
// Rate limiting is enabled by default
Binance exchange = new Binance();
System.out.println(exchange.enableRateLimit); // true
System.out.println(exchange.rateLimit); // milliseconds between requests
// HTTP Proxy
exchange.httpProxy = "http://your-proxy-host:port";
// HTTPS Proxy
exchange.httpsProxy = "https://your-proxy-host:port";
// SOCKS Proxy
exchange.socksProxy = "socks://your-proxy-host:port";
// Typed (recommended) - use concrete exchange class
Binance exchange = new Binance();
Ticker ticker = exchange.fetchTicker("BTC/USDT"); // returns Ticker
// Untyped - generic Exchange reference
Exchange exchange = Exchange.dynamicallyCreateInstance("binance", null);
Object result = exchange.fetchTicker("BTC/USDT").join(); // returns Object
// Wrong - ambiguous with varargs
exchange.fetchBalance(null);
// Correct - cast null to specific type
exchange.fetchBalance((Map<String, Object>) null);
// Wrong
"BTCUSDT" // No separator
"BTC-USDT" // Dash separator
"btc/usdt" // Lowercase
// Correct
"BTC/USDT" // Unified CCXT format
// Wrong - wastes rate limits
while (true) {
Ticker ticker = exchange.fetchTicker("BTC/USDT");
Thread.sleep(1000);
}
// Correct - use WebSocket
var wsExchange = new io.github.ccxt.exchanges.pro.Binance();
wsExchange.loadMarkets(false);
while (true) {
Ticker ticker = wsExchange.watchTicker("BTC/USDT"); // typed sync
}
1. "Java 21 required"
2. "RateLimitExceeded"
exchange.enableRateLimit = true3. "AuthenticationError"
4. "NotSupported"
exchange.has map for method availability before calling5. Typed methods not visible
Binance exchange = new Binance()) not the generic Exchange type// Enable verbose logging
exchange.verbose = true;
// Check exchange capabilities
System.out.println(exchange.has);
CCXT supports prediction-market exchanges (Polymarket, Kalshi, Limitless, Myriad, Hyperliquid) under the io.github.ccxt.exchanges.prediction package. They use the same unified API, but prices are quoted 0–1 (USDC per outcome share) and the tradeable unit is an outcome (e.g. a market's YES/NO token), not a regular market symbol.
import io.github.ccxt.exchanges.prediction.Polymarket;
import io.github.ccxt.types.PredictionOrder;
Polymarket exchange = new Polymarket();
exchange.loadMarkets();
// discover events -> markets -> outcomes (each outcome has: outcome (handle),
// outcomeId, market, label); fetchEvents / fetchEvent are available too
// an outcome handle looks like 'TRUMP_OUT_PRESIDENT_2027:YES'
String handle = "TRUMP_OUT_PRESIDENT_2027:YES";
var ticker = exchange.fetchTicker(handle);
var book = exchange.fetchOrderBook(handle);
// limit buy 5 YES shares @ 0.40 USDC (price is 0..1 per share)
PredictionOrder order = exchange.createOrder(handle, "limit", "buy", 5.0, 0.40);
exchange.cancelOrder(order.id, handle);
fetchTicker, fetchOrderBook, fetchOHLCV, fetchTrades, createOrder, cancelOrder, …) take an outcome handle or outcomeId (the outcome parameter), not a market symbol.fetchEvents / fetchEvent (or loadMarkets).まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use binance-cli for Binance Spot, Futures (USD-S), and Convert. Requires auth.
日本語の概要は準備中です。原文の説明を表示しています。
Use when the user mentions connect/disconnect wallet, sign in, sign out, web3 wallet, wallet address, check balance, how much crypto do I have, send BNB/USDT/crypto, transfer tokens, swap tokens, buy/sell token, DEX trade, limit order, market order, cancel order, get a quote, transaction history, wallet settings, daily limit, slippage, MEV protection, supported chains, available networks, prediction market, predict.fun, YES/NO market, place a prediction, redeem winnings, claim payout, prediction portfolio, prediction PnL, x402 payment, HTTP 402 Payment Required, pay a known x402 API, check approvals, view token approvals, revoke approval, manage approvals, wallet approvals, authorization management, token authorization, DeFi protocols, DeFi position, DeFi portfolio, staking, liquidity pool, LP, yield farming, health factor, APY, TVL, DeFi investment, DeFi deposit, DeFi redeem, DeFi stake, DeFi unstake, add liquidity, remove liquidity, claim rewards, claim fees, or any on-chain wallet operation.
日本語の概要は準備中です。原文の説明を表示しています。
Use when users ask for World Cup or 世界杯 AI match predictions, WC assistant probabilities, World Cup news insights, master analysis, recomputing football match win rates with custom correction signals, or trading a related prediction market after reviewing the AI analysis.
日本語の概要は準備中です。原文の説明を表示しています。
Query Ondo tokenized US stock data on Binance Web3. Covers: supported stock token list, RWA metadata (company info, attestation reports), market and per-asset trading status (with corporate action codes for earnings, dividends, splits), real-time on-chain data (token price, holders, circulating supply, market cap), US stock fundamentals (P/E, dividend yield, 52-week range), and token K-Line/candlestick charts. Use this skill when users ask about: - Tokenized stock price, holders, or on-chain data for specific tickers - Whether a stock token is tradable, paused, or halted - Ondo RWA token list or which US stocks are available on-chain - Corporate actions affecting a token (dividends, stock splits, earnings halt) - Stock token K-Line or candlestick chart data - Comparing on-chain token price vs US stock price NOT for general crypto tokens (BTC, ETH, SOL, etc.) — use query-token-info for those.
日本語の概要は準備中です。原文の説明を表示しています。
CCXT command-line interface (ccxt-cli) for interacting with 100+ cryptocurrency exchanges directly from the terminal — no code required. Covers installing the CLI, calling any unified CCXT method (fetchTicker, fetchOHLCV, createOrder, fetchBalance), passing arguments and exchange-specific params, authenticating with API keys, sandbox/testnet mode, streaming live tickers and orderbooks over WebSocket, plotting OHLCV charts, and scripting with raw JSON output. Use when the user wants to query an exchange, test API credentials, place or inspect orders, or debug exchange requests from the command line or in shell scripts.
日本語の概要は準備中です。原文の説明を表示しています。
CCXT cryptocurrency exchange library for C# and .NET developers. Covers both REST API (standard) and WebSocket API (real-time). Helps install CCXT, connect to exchanges, fetch market data, place orders, stream live tickers/orderbooks, handle authentication, and manage errors in .NET projects. Use when working with crypto exchanges in C# applications, trading systems, or financial software. Supports .NET Standard 2.0+.
日本語の概要は準備中です。原文の説明を表示しています。