
用 ccxt 和 vectorbt 搭一个 Python 交易脚本
一个能跑的 Python 交易脚本模板,ccxt 取数据、vectorbt 做向量化快速回测,附带可改的具体代码。
交互工具在翻译视图中可能无法使用。
用 ccxt 和 vectorbt 搭一个 Python 交易脚本
一个 Python 脚本就能拉实时行情、毫秒级回测策略、把订单路由到交易所。ccxt(数据和执行)加 vectorbt(向量化回测)覆盖了多数散户加密工作流,不需要事件驱动引擎的开销。
为什么用 ccxt 和 vectorbt
ccxt 把 100 多家交易所的 API 统一到一个接口后。一次库调用就能从 Binance、Kraken 或 Bybit 用相同语法拉 OHLCV。vectorbt 把回测当成数组运算跑,而不是逐根 K 线循环,5 年参数扫描几秒完成而不是几分钟。
用 ccxt 拉数据
import ccxt
ex = ccxt.binance()
ohlcv = ex.fetch_ohlcv("BTC/USDT", "1h", limit=1000)
永远尊重频率限制。Binance 每分钟 1,200 次请求,ccxt 内置的 enableRateLimit: True 会自动节流。显式设上避免被封。
在 vectorbt 里搭回测
import vectorbt as vbt
import pandas as pd
df = pd.DataFrame(ohlcv, columns=["ts","open","high","low","close","volume"])
df["ts"] = pd.to_datetime(df["ts"], unit="ms")
df.set_index("ts", inplace=True)
fast = vbt.MA.run(df["close"], 20)
slow = vbt.MA.run(df["close"], 50)
entries = fast.ma_crossed_above(slow)
exits = fast.ma_crossed_below(slow)
pf = vbt.Portfolio.from_signals(df["close"], entries, exits,
init_cash=10000, fees=0.001, slippage=0.0005)
print(pf.total_return(), pf.sharpe_ratio())
注意 fees 和 slippage 参数:短持仓周期上省掉它们会让收益虚高 30–60%。
从回测到实盘下单
ex = ccxt.binance({"apiKey": KEY, "secret": SECRET, "enableRateLimit": True})
ex.create_order("BTC/USDT", "market", "buy", 0.001)
实操护栏
- 永远别硬编码密钥;从环境变量加载。
- 上实盘前永远先模拟 2 周。用 testnet 端点(
ccxt.binance({"urls": ...}))。 - 每次拉取后验证 OHLCV 时间戳对齐——交易所的数据空洞会静默污染指标。
- 单笔下单封在权益的 1%,并在脚本里加硬止损,不只是脑子里。
什么时候换 backtrader
vectorbt 擅长干净数据上的快速扫描。一旦你需要逐笔成交、部分成交、或多资产组合带交叉保证金,转 backtrader 或 QuantConnect Lean。向量化速度在不现实的成交模型面前一文不值。
耐用的工作流:vectorbt 里原型、验证逻辑、然后移植到事件驱动引擎做最终生产测试。让实盘和回测代码路径共享同一个信号函数,结果才可比;两者分叉是静默 bug 的第一个信号。上面这个脚本 50 行内带你从想法到测试过的信号。
实时行情
打开完整图表 →相关市场数据由 TradingView 提供。
我的笔记
登录后可在本文保存笔记并与社区分享。
下一篇推荐
Quant Research Workflow: Jupyter Notebooks and Feature Engineering
A repeatable quant research workflow using Jupyter notebooks covers feature engineering, validation, and notebook hygiene that produces deployable signals.
阅读更多 →Smart Recommendations