第一章:概述与安装
🌟 CCXT 概述
CCXT (CryptoCurrency eXchange Trading) 是一个功能强大的开源加密货币交易库,为开发者提供了统一的API接口来访问多家交易所。
核心特性
- 🏛️ 广泛支持:120+ 主流加密货币交易所
- 🔧 统一接口:所有交易所使用相同的方法调用
- 🌍 多语言:JavaScript、Python、PHP、C#、Go 等
- 📊 全功能:行情数据、交易、账户管理、WebSocket
- ⚡ 实时数据:CCXT Pro 提供低延迟实时数据流
- 🛡️ 生产就绪:完善的错误处理和限速机制
支持的主要交易所
交易所 | 现货交易 | 期货交易 | WebSocket | 国家/地区 |
---|---|---|---|---|
Binance | ✅ | ✅ | ✅ | 马耳他 |
Coinbase Pro | ✅ | ❌ | ✅ | 美国 |
Kraken | ✅ | ✅ | ✅ | 美国 |
Huobi | ✅ | ✅ | ✅ | 塞舌尔 |
OKX | ✅ | ✅ | ✅ | 塞舌尔 |
Bybit | ✅ | ✅ | ✅ | 阿联酋 |
Gate.io | ✅ | ✅ | ✅ | 开曼群岛 |
KuCoin | ✅ | ✅ | ✅ | 塞舌尔 |
Bitfinex | ✅ | ❌ | ✅ | 英属维京群岛 |
Bitget | ✅ | ✅ | ✅ | 新加坡 |
查看完整列表:访问 CCXT 官方文档 获取所有支持的交易所列表
🚀 安装与设置
JavaScript/Node.js 环境
基础版本安装
bash
# 使用 npm 安装
npm install ccxt
# 或使用 yarn
yarn add ccxt
# 或使用 pnpm
pnpm add ccxt
CCXT Pro 安装(支持 WebSocket)
bash
# 安装 Pro 版本
npm install ccxt.pro
# 或
yarn add ccxt.pro
验证安装
javascript
// 基础版本
const ccxt = require('ccxt');
console.log('CCXT版本:', ccxt.version);
console.log('支持的交易所数量:', ccxt.exchanges.length);
console.log('前10个交易所:', ccxt.exchanges.slice(0, 10));
// Pro 版本
const ccxtpro = require('ccxt.pro');
console.log('CCXT Pro版本:', ccxtpro.__version__);
console.log('Pro支持的交易所:', ccxtpro.exchanges);
TypeScript 支持
bash
# 安装类型定义(如需要)
npm install @types/ccxt
# TypeScript 中使用
typescript
import * as ccxt from 'ccxt';
const exchange: ccxt.Exchange = new ccxt.binance({
apiKey: 'your-api-key',
secret: 'your-secret',
enableRateLimit: true,
});
Python 环境
基础版本安装
bash
# 使用 pip 安装
pip install ccxt
# 或使用 pip3
pip3 install ccxt
# 升级到最新版本
pip install --upgrade ccxt
CCXT Pro 安装
bash
# 安装 Pro 版本
pip install ccxtpro
# 升级 Pro 版本
pip install --upgrade ccxtpro
验证安装
python
# 基础版本测试
import ccxt
print(f'CCXT版本: {ccxt.__version__}')
print(f'支持的交易所数量: {len(ccxt.exchanges)}')
print(f'前10个交易所: {ccxt.exchanges[:10]}')
# 测试特定交易所
binance = ccxt.binance()
print(f'Binance ID: {binance.id}')
print(f'Binance 有效: {binance.name}')
python
# Pro 版本测试
import ccxtpro
print(f'CCXT Pro版本: {ccxtpro.__version__}')
print(f'Pro支持的交易所: {ccxtpro.exchanges}')
# 测试 WebSocket 支持
binance_pro = ccxtpro.binance()
print(f'支持 watchTicker: {binance_pro.has["watchTicker"]}')
Conda 环境安装
bash
# 使用 conda 安装
conda install -c conda-forge ccxt
# 或创建专用环境
conda create -n crypto-trading python=3.9
conda activate crypto-trading
conda install -c conda-forge ccxt
PHP 环境
使用 Composer 安装
bash
# 安装基础版本
composer require ccxt/ccxt
# 更新到最新版本
composer update ccxt/ccxt
验证安装
php
<?php
require_once 'vendor/autoload.php';
// 显示版本信息
echo "CCXT for PHP installed successfully\n";
// 列出所有支持的交易所
$exchanges = \ccxt\Exchange::$exchanges;
echo "支持的交易所数量: " . count($exchanges) . "\n";
echo "前10个交易所: " . implode(', ', array_slice($exchanges, 0, 10)) . "\n";
// 测试创建交易所实例
$binance = new \ccxt\binance();
echo "Binance实例创建成功: " . $binance->id . "\n";
?>
手动安装(无 Composer)
bash
# 下载源码
git clone https://github.com/ccxt/ccxt.git
cd ccxt
# 使用 PHP 文件
php
<?php
// 引入 CCXT 库
require_once 'ccxt.php';
// 正常使用
$exchange = new \ccxt\binance();
?>
🔧 开发环境配置
环境变量设置
创建 .env
文件来安全存储 API 密钥:
bash
# .env 文件示例
BINANCE_API_KEY=your_binance_api_key_here
BINANCE_SECRET=your_binance_secret_here
COINBASE_API_KEY=your_coinbase_api_key_here
COINBASE_SECRET=your_coinbase_secret_here
COINBASE_PASSPHRASE=your_coinbase_passphrase_here
# 可选配置
NODE_ENV=development
DEBUG=true
LOG_LEVEL=info
Node.js 环境变量加载
bash
# 安装 dotenv
npm install dotenv
javascript
// 在应用开始时加载环境变量
require('dotenv').config();
const ccxt = require('ccxt');
const binance = new ccxt.binance({
apiKey: process.env.BINANCE_API_KEY,
secret: process.env.BINANCE_SECRET,
enableRateLimit: true,
sandbox: process.env.NODE_ENV !== 'production', // 开发环境使用沙盒
});
Python 环境变量加载
bash
# 安装 python-dotenv
pip install python-dotenv
python
import os
from dotenv import load_dotenv
import ccxt
# 加载 .env 文件
load_dotenv()
binance = ccxt.binance({
'apiKey': os.getenv('BINANCE_API_KEY'),
'secret': os.getenv('BINANCE_SECRET'),
'enableRateLimit': True,
'sandbox': os.getenv('NODE_ENV') != 'production',
})
IDE 配置建议
VS Code 配置
创建 .vscode/settings.json
:
json
{
"python.defaultInterpreterPath": "./venv/bin/python",
"typescript.preferences.importModuleSpecifier": "relative",
"eslint.workingDirectories": ["./"],
"files.associations": {
"*.env": "dotenv"
},
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true
}
}
推荐的 VS Code 扩展
json
{
"recommendations": [
"ms-python.python",
"ms-vscode.vscode-typescript-next",
"bradlc.vscode-tailwindcss",
"esbenp.prettier-vscode",
"ms-vscode.vscode-eslint",
"mikestead.dotenv"
]
}
Docker 环境
Dockerfile 示例
dockerfile
# Node.js 环境
FROM node:18-alpine
WORKDIR /app
# 复制 package.json 和安装依赖
COPY package*.json ./
RUN npm install
# 复制源代码
COPY . .
# 暴露端口
EXPOSE 3000
# 启动命令
CMD ["node", "app.js"]
dockerfile
# Python 环境
FROM python:3.11-slim
WORKDIR /app
# 安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制源代码
COPY . .
# 启动命令
CMD ["python", "main.py"]
docker-compose.yml
yaml
version: '3.8'
services:
crypto-bot:
build: .
environment:
- NODE_ENV=development
env_file:
- .env
volumes:
- ./src:/app/src
- ./logs:/app/logs
restart: unless-stopped
depends_on:
- redis
- postgres
redis:
image: redis:7-alpine
ports:
- "6379:6379"
postgres:
image: postgres:15
environment:
POSTGRES_DB: crypto_trading
POSTGRES_USER: trader
POSTGRES_PASSWORD: secure_password
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
volumes:
postgres_data:
🧪 测试安装
基础连接测试
javascript
// Node.js 测试脚本
const ccxt = require('ccxt');
async function testInstallation() {
console.log('🚀 开始测试 CCXT 安装...\n');
try {
// 测试基础功能
console.log('✅ CCXT 基础库加载成功');
console.log(`📦 版本: ${ccxt.version}`);
console.log(`🏛️ 支持交易所: ${ccxt.exchanges.length} 个\n`);
// 测试创建交易所实例
const binance = new ccxt.binance();
console.log('✅ Binance 实例创建成功');
// 测试获取市场数据(无需 API 密钥)
const ticker = await binance.fetchTicker('BTC/USDT');
console.log('✅ 市场数据获取成功');
console.log(`💰 BTC/USDT 价格: $${ticker.last}\n`);
// 测试 CCXT Pro(如果已安装)
try {
const ccxtpro = require('ccxt.pro');
console.log('✅ CCXT Pro 已安装');
console.log(`📦 Pro 版本: ${ccxtpro.__version__}\n`);
} catch (error) {
console.log('ℹ️ CCXT Pro 未安装(可选)\n');
}
console.log('🎉 安装测试完成!所有功能正常');
} catch (error) {
console.error('❌ 测试失败:', error.message);
console.error('\n🔧 请检查:');
console.error('1. 网络连接是否正常');
console.error('2. CCXT 是否正确安装');
console.error('3. Node.js 版本是否兼容(建议 v14+)');
}
}
testInstallation();
python
# Python 测试脚本
import ccxt
import asyncio
async def test_installation():
print('🚀 开始测试 CCXT 安装...\n')
try:
# 测试基础功能
print('✅ CCXT 基础库加载成功')
print(f'📦 版本: {ccxt.__version__}')
print(f'🏛️ 支持交易所: {len(ccxt.exchanges)} 个\n')
# 测试创建交易所实例
binance = ccxt.binance()
print('✅ Binance 实例创建成功')
# 测试获取市场数据
ticker = binance.fetch_ticker('BTC/USDT')
print('✅ 市场数据获取成功')
print(f'💰 BTC/USDT 价格: ${ticker["last"]}\n')
# 测试 CCXT Pro
try:
import ccxtpro
print('✅ CCXT Pro 已安装')
print(f'📦 Pro 版本: {ccxtpro.__version__}\n')
except ImportError:
print('ℹ️ CCXT Pro 未安装(可选)\n')
print('🎉 安装测试完成!所有功能正常')
except Exception as error:
print(f'❌ 测试失败: {error}')
print('\n🔧 请检查:')
print('1. 网络连接是否正常')
print('2. CCXT 是否正确安装')
print('3. Python 版本是否兼容(建议 v3.8+)')
# 运行测试
if __name__ == '__main__':
asyncio.run(test_installation())
交易所可用性测试
javascript
// 批量测试多个交易所
const ccxt = require('ccxt');
async function testMultipleExchanges() {
const exchangesToTest = ['binance', 'coinbasepro', 'kraken', 'huobi'];
console.log('🧪 测试多个交易所连接性...\n');
for (const exchangeId of exchangesToTest) {
try {
const ExchangeClass = ccxt[exchangeId];
const exchange = new ExchangeClass({ enableRateLimit: true });
// 测试获取服务器时间
const serverTime = await exchange.fetchTime();
const localTime = Date.now();
const timeDiff = Math.abs(serverTime - localTime);
console.log(`✅ ${exchange.name}:`);
console.log(` 服务器时间: ${new Date(serverTime).toISOString()}`);
console.log(` 时间差: ${timeDiff}ms`);
// 测试获取市场列表
await exchange.loadMarkets();
console.log(` 支持交易对: ${exchange.symbols.length} 个`);
// 测试获取行情
if (exchange.symbols.includes('BTC/USDT')) {
const ticker = await exchange.fetchTicker('BTC/USDT');
console.log(` BTC/USDT: $${ticker.last}\n`);
}
} catch (error) {
console.error(`❌ ${exchangeId} 测试失败:`, error.message);
}
// 避免频率限制
await new Promise(resolve => setTimeout(resolve, 1000));
}
}
testMultipleExchanges();
🎯 下一步
安装完成后,您可以:
🔍 故障排除
常见安装问题
1. Node.js 版本过低
bash
# 检查 Node.js 版本
node --version
# 推荐使用 Node.js v14 或更高版本
# 使用 nvm 升级
nvm install node
nvm use node
2. Python 版本兼容性
bash
# 检查 Python 版本
python --version
# 推荐使用 Python 3.8 或更高版本
# 如果需要,使用 pyenv 管理版本
pyenv install 3.11.0
pyenv global 3.11.0
3. 网络连接问题
bash
# 测试网络连接
curl -I https://api.binance.com/api/v3/time
# 如果需要代理,设置环境变量
export HTTP_PROXY=http://proxy-server:port
export HTTPS_PROXY=https://proxy-server:port
4. 权限问题(npm)
bash
# 修复 npm 权限问题
npm config set prefix ~/.npm-global
export PATH=~/.npm-global/bin:$PATH
下一章:基础概念与快速开始