CCXT is a comprehensive cryptocurrency trading library that provides a unified API for accessing over 100 cryptocurrency exchanges. It enables developers to access market data, manage portfolios, execute trades, and handle account operations across multiple exchanges using a consistent interface. The library supports both REST API calls for standard operations and WebSocket connections for real-time data streaming.
npm install @iam4x/ccxtimport ccxt from '@iam4x/ccxt';For CommonJS:
const ccxt = require('@iam4x/ccxt');For specific exchanges and utilities:
import ccxt, { binance, Exchange, NetworkError } from '@iam4x/ccxt';import ccxt from '@iam4x/ccxt';
// Create exchange instance
const exchange = new ccxt.binance({
apiKey: 'your-api-key',
secret: 'your-secret',
sandbox: true, // Enable sandbox mode for testing
});
// Fetch market data
const ticker = await exchange.fetchTicker('BTC/USDT');
const orderbook = await exchange.fetchOrderBook('BTC/USDT');
const trades = await exchange.fetchTrades('BTC/USDT');
// Account operations (requires API credentials)
const balance = await exchange.fetchBalance();
const order = await exchange.createLimitBuyOrder('BTC/USDT', 0.001, 50000);
// Handle errors
try {
const result = await exchange.fetchBalance();
} catch (error) {
if (error instanceof ccxt.NetworkError) {
console.log('Network error:', error.message);
} else if (error instanceof ccxt.ExchangeError) {
console.log('Exchange error:', error.message);
}
}CCXT is built around several key components:
Core functionality for creating and configuring exchange instances, with support for 100+ cryptocurrency exchanges including major ones like Binance, Coinbase, Kraken, and OKX.
// Individual exchange classes (100+ available)
class binance extends Exchange { }
class coinbase extends Exchange { }
class kraken extends Exchange { }
class okx extends Exchange { }
// ... and 96+ more exchanges
// Exchange constructor options
interface ExchangeOptions {
apiKey?: string;
secret?: string;
password?: string;
uid?: string;
login?: string;
privateKey?: string;
walletAddress?: string;
token?: string;
sandbox?: boolean;
timeout?: number;
rateLimit?: number;
enableRateLimit?: boolean;
userAgent?: string;
headers?: { [key: string]: string };
proxy?: string;
httpsProxy?: string;
socksProxy?: string;
}Comprehensive market data access including tickers, order books, trade history, OHLCV candlestick data, and market information across all supported exchanges.
// Market data methods
fetchMarkets(params?: Dict): Promise<Market[]>;
fetchTicker(symbol: string, params?: Dict): Promise<Ticker>;
fetchTickers(symbols?: string[], params?: Dict): Promise<Tickers>;
fetchOrderBook(symbol: string, limit?: number, params?: Dict): Promise<OrderBook>;
fetchOHLCV(symbol: string, timeframe?: string, since?: number, limit?: number, params?: Dict): Promise<OHLCV[]>;
fetchTrades(symbol: string, since?: number, limit?: number, params?: Dict): Promise<Trade[]>;
// Market data structures
interface Market {
id: string;
symbol: string;
base: string;
quote: string;
active: boolean;
type: 'spot' | 'margin' | 'swap' | 'future' | 'option';
spot: boolean;
margin: boolean;
swap: boolean;
future: boolean;
option: boolean;
contract: boolean;
contractSize?: number;
expiry?: number;
strike?: number;
precision: {
amount: number;
price: number;
};
limits: {
amount?: { min: number; max: number };
price?: { min: number; max: number };
cost?: { min: number; max: number };
};
info: any;
}
interface Ticker {
symbol: string;
timestamp: number;
datetime: string;
high: number;
low: number;
bid: number;
bidVolume?: number;
ask: number;
askVolume?: number;
vwap?: number;
open: number;
close: number;
last: number;
previousClose?: number;
change?: number;
percentage?: number;
average?: number;
baseVolume: number;
quoteVolume: number;
info: any;
}Account operations including balance retrieval, account information, deposit addresses, withdrawal management, and multi-account support for exchanges that offer sub-accounts.
fetchBalance(params?: Dict): Promise<Balances>;
fetchAccounts(params?: Dict): Promise<Account[]>;
fetchPositions(symbols?: string[], params?: Dict): Promise<Position[]>;
fetchLedger(code?: string, since?: number, limit?: number, params?: Dict): Promise<LedgerEntry[]>;
createDepositAddress(code: string, params?: Dict): Promise<DepositAddress>;
fetchDepositAddress(code: string, params?: Dict): Promise<DepositAddress>;
fetchDeposits(code?: string, since?: number, limit?: number, params?: Dict): Promise<Transaction[]>;
fetchWithdrawals(code?: string, since?: number, limit?: number, params?: Dict): Promise<Transaction[]>;
interface Balances {
[currency: string]: {
free: number;
used: number;
total: number;
};
info: any;
}
interface Position {
id?: string;
symbol: string;
side: 'long' | 'short';
amount: number;
contracts?: number;
contractSize?: number;
unrealizedPnl?: number;
percentage?: number;
timestamp?: number;
info: any;
}Complete order lifecycle management including creation, modification, cancellation, and monitoring of different order types across spot, margin, and derivatives trading.
createOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: number, params?: Dict): Promise<Order>;
createLimitBuyOrder(symbol: string, amount: number, price: number, params?: Dict): Promise<Order>;
createLimitSellOrder(symbol: string, amount: number, price: number, params?: Dict): Promise<Order>;
createMarketBuyOrder(symbol: string, amount: number, price?: number, params?: Dict): Promise<Order>;
createMarketSellOrder(symbol: string, amount: number, price?: number, params?: Dict): Promise<Order>;
createStopOrder(symbol: string, side: OrderSide, amount: number, price: number, stopPrice: number, params?: Dict): Promise<Order>;
editOrder(id: string, symbol: string, type: OrderType, side: OrderSide, amount?: number, price?: number, params?: Dict): Promise<Order>;
cancelOrder(id: string, symbol?: string, params?: Dict): Promise<Order>;
cancelAllOrders(symbol?: string, params?: Dict): Promise<Order[]>;
fetchOrder(id: string, symbol?: string, params?: Dict): Promise<Order>;
fetchOrders(symbol?: string, since?: number, limit?: number, params?: Dict): Promise<Order[]>;
fetchOpenOrders(symbol?: string, since?: number, limit?: number, params?: Dict): Promise<Order[]>;
fetchClosedOrders(symbol?: string, since?: number, limit?: number, params?: Dict): Promise<Order[]>;
type OrderType = 'limit' | 'market' | 'stop' | 'stop_limit' | 'trailing_stop';
type OrderSide = 'buy' | 'sell';
interface Order {
id: string;
clientOrderId?: string;
timestamp: number;
datetime: string;
lastTradeTimestamp?: number;
symbol: string;
type: OrderType;
side: OrderSide;
amount: number;
price?: number;
stopPrice?: number;
filled: number;
remaining: number;
cost: number;
trades?: Trade[];
fee?: {
currency: string;
cost: number;
rate?: number;
};
status: 'open' | 'closed' | 'canceled' | 'expired' | 'rejected';
info: any;
}Trading execution and history including trade fetching, order-trade relationships, and portfolio management operations for active trading workflows.
fetchMyTrades(symbol?: string, since?: number, limit?: number, params?: Dict): Promise<Trade[]>;
fetchOrderTrades(id: string, symbol?: string, since?: number, limit?: number, params?: Dict): Promise<Trade[]>;
interface Trade {
id: string;
order?: string;
timestamp: number;
datetime: string;
symbol: string;
type?: OrderType;
side: OrderSide;
amount: number;
price: number;
cost: number;
fee?: {
currency: string;
cost: number;
rate?: number;
};
info: any;
}Comprehensive funding management including deposits, withdrawals, internal transfers, and address management for moving funds between exchanges and external wallets.
withdraw(code: string, amount: number, address: string, tag?: string, params?: Dict): Promise<WithdrawalResponse>;
transfer(code: string, amount: number, fromAccount: string, toAccount: string, params?: Dict): Promise<TransferEntry>;
interface WithdrawalResponse {
id: string;
txid?: string;
timestamp: number;
datetime: string;
currency: string;
amount: number;
address: string;
tag?: string;
status: 'pending' | 'ok' | 'failed' | 'canceled';
fee?: {
currency: string;
cost: number;
};
info: any;
}
interface DepositAddress {
currency: string;
address: string;
tag?: string;
network?: string;
info: any;
}Real-time data streaming capabilities for live market data, order updates, balance changes, and position monitoring through WebSocket connections.
// WebSocket methods (available on pro exchanges)
watchTicker(symbol: string, params?: Dict): Promise<Ticker>;
watchOrderBook(symbol: string, limit?: number, params?: Dict): Promise<OrderBook>;
watchOHLCV(symbol: string, timeframe?: string, since?: number, limit?: number, params?: Dict): Promise<OHLCV[]>;
watchTrades(symbol: string, since?: number, limit?: number, params?: Dict): Promise<Trade[]>;
watchOrders(symbol?: string, since?: number, limit?: number, params?: Dict): Promise<Order[]>;
watchBalance(params?: Dict): Promise<Balances>;
watchPositions(symbols?: string[], since?: number, limit?: number, params?: Dict): Promise<Position[]>;Comprehensive utility functions for cryptocurrency operations including mathematical precision, cryptographic operations, time handling, and data manipulation.
// Precision arithmetic
class Precise {
constructor(number: string | number);
toString(): string;
static stringAdd(a: string, b: string): string;
static stringMul(a: string, b: string): string;
static stringDiv(a: string, b: string): string;
static stringSub(a: string, b: string): string;
}
// Time functions
function iso8601(timestamp?: number): string;
function parse8601(timestamp: string): number;
function seconds(): number;
function milliseconds(): number;
function now(): number;
// Cryptographic functions
function hash(request: string | Uint8Array, algorithm: string): string;
function hmac(request: string | Uint8Array, secret: string | Uint8Array, algorithm: string): string;
function ecdsa(request: string, secret: string, algorithm: string): string;
// Encoding functions
function base64ToBinary(str: string): Uint8Array;
function binaryToBase64(bytes: Uint8Array): string;
function urlencode(params: Dict): string;Comprehensive error hierarchy providing specific exception types for different failure scenarios, enabling precise error handling and recovery strategies.
// Base error classes
class BaseError extends Error { }
class ExchangeError extends BaseError { }
class OperationFailed extends BaseError { }
// Authentication errors
class AuthenticationError extends ExchangeError { }
class PermissionDenied extends ExchangeError { }
class AccountNotEnabled extends ExchangeError { }
class AccountSuspended extends ExchangeError { }
// Request errors
class ArgumentsRequired extends ExchangeError { }
class BadRequest extends ExchangeError { }
class BadSymbol extends BadRequest { }
class InvalidAddress extends ExchangeError { }
// Order errors
class InvalidOrder extends ExchangeError { }
class OrderNotFound extends ExchangeError { }
class OrderNotCached extends ExchangeError { }
class InsufficientFunds extends ExchangeError { }
// Network errors
class NetworkError extends BaseError { }
class DDoSProtection extends NetworkError { }
class RateLimitExceeded extends NetworkError { }
class ExchangeNotAvailable extends NetworkError { }
class RequestTimeout extends NetworkError { }
// Response errors
class BadResponse extends ExchangeError { }
class NullResponse extends BadResponse { }// Core data types
type Dict = { [key: string]: any };
type Strings = string[] | undefined;
type OrderBook = {
symbol: string;
bids: [number, number][];
asks: [number, number][];
timestamp: number;
datetime: string;
nonce?: number;
};
type OHLCV = [number, number, number, number, number, number]; // [timestamp, open, high, low, close, volume]
// Exchange capabilities
interface ExchangeCapabilities {
CORS?: boolean;
spot?: boolean;
margin?: boolean;
swap?: boolean;
future?: boolean;
option?: boolean;
addMargin?: boolean;
cancelAllOrders?: boolean;
cancelOrder?: boolean;
cancelOrders?: boolean;
createDepositAddress?: boolean;
createLimitOrder?: boolean;
createMarketOrder?: boolean;
createOrder?: boolean;
deposit?: boolean;
editOrder?: boolean;
fetchBalance?: boolean;
fetchClosedOrders?: boolean;
fetchCurrencies?: boolean;
fetchDepositAddress?: boolean;
fetchDeposits?: boolean;
fetchMarkets?: boolean;
fetchMyTrades?: boolean;
fetchOHLCV?: boolean;
fetchOpenOrders?: boolean;
fetchOrder?: boolean;
fetchOrderBook?: boolean;
fetchOrders?: boolean;
fetchStatus?: boolean;
fetchTicker?: boolean;
fetchTickers?: boolean;
fetchTime?: boolean;
fetchTrades?: boolean;
fetchTradingFee?: boolean;
fetchTradingFees?: boolean;
fetchWithdrawals?: boolean;
reduceMargin?: boolean;
setLeverage?: boolean;
setMargin?: boolean;
setMarginMode?: boolean;
setPositionMode?: boolean;
signIn?: boolean;
withdraw?: boolean;
}