Skip to content

第一章:概述与安装

🌟 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. 学习基础概念 - 了解 CCXT 的核心概念
  2. 编写第一个程序 - 获取您的第一个行情数据
  3. 探索市场数据 - 深入了解各种市场数据获取方法

🔍 故障排除

常见安装问题

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

下一章:基础概念与快速开始

基于 VitePress 构建的现代化知识库