关键词:btrccts、加密货币策略回测、量化交易框架、CCXT、Python 量化、策略实盘、加密货币回测引擎、Kraken API、交易所模拟撮合
想在本地低成本地完成加密货币策略的回测与实盘切换?开源库 btrccts
借助 CCXT 标准接口,将历史行情回放与实时撮合无缝连接,帮你专注策略本身。下文带你从安装、数据准备到实盘部署一次打通。
1. 安装与开发环境
最简 Python 3 安装(已支持 Linux/macOS/Windows):
python3 -m venv .venv
source .venv/bin/activate
pip install btrccts
若需二次开发,可直接源码安装:
git clone https://github.com/btrccts/btrccts.git
cd btrccts
pip install -r requirements.txt
pip install -e .
2. 一条命令跑起回测
btrccts
将策略执行流程抽象成四个阶段:
阶段 | 作用 | btrccts 风格 |
---|---|---|
初始化 | 解析参数、建立交易所对象 | __init__ |
每一 tick | 执行买卖逻辑 | next_iteration |
异常处理 | 网络、API 异常重试或报警 | handle_exception |
结束清理 | 挂单撤销、日志导出 | exit |
范例:定义追踪 10 分钟均线的极简策略
from btrccts import AlgorithmBase, parse_params_and_execute_algorithm
class MyMA(AlgorithmBase):
def __init__(self, context, args):
self.ex = context.create_exchange('kraken', async_ccxt=True)
self.short = args.short
self.long = args.long
async def next_iteration(self):
await self.ex.load_markets()
candles = await self.ex.fetch_ohlcv('BTC/USD', '1m', limit=self.long)
close = [c[4] for c in candles]
ma_short = sum(close[-self.short:]) / self.short
ma_long = sum(close[-self.long:]) / self.long
if ma_short > ma_long:
await self.ex.create_order('BTC/USD', 'market', 'buy', 0.01)
elif ma_short < ma_long:
await self.ex.create_order('BTC/USD', 'market', 'sell', 0.01)
parse_params_and_execute_algorithm(MyMA)
保存后一行启动回测:
python ma_strategy.py \
--start-date 2024-01-01 --end-date 2024-06-01 \
--interval 1m --exchanges kraken --symbols BTC/USD \
--start-balances '{"kraken":{"USD":10000}}' \
--short 5 --long 30
3. 数据目录规范
btrccts
自带“虚拟交易所”,不会抓取任何实时行情;你需要提前准备 1 分钟粒度 OHLCV CSV,默认存放路径:
data/ohlcv/EXCHANGE/BASE/QUOTE.csv
示例文件片段:
,open,high,low,close,volume
2024-05-28 08:00:00+00:00,68500,68600,68400,68550,1200
2024-05-28 08:01:00+00:00,68550,68700,68520,68680,1400
笔记:数据必须覆盖回测起止日期,并保证无缺失,否则会在回测阶段报错。
4. 实盘模式仅需一个开关
切换到实盘,仅需追加 --live
:
python ma_strategy.py --live
实盘注意事项:
- 在
config/kraken.json
存放真实 API Key:{"apiKey":"your_key","secret":"your_secret"}
- 库不会自动加载 markets,建议你首次连接时手动
load_markets()
。 btrccts
对异常做了默认隔离,生产环境可在handle_exception
内接入钉钉、Slack、邮箱等告警通道。
5. 撮合机制深度解读
了解细节可避免过度拟合。
5.1 市价单撮合
- 回溯阶段:使用当前 K 线的 最高/最低价 成交,防止未来函数,但仍立即成交。
- 实盘:直接交由交易所撮合,与回测逻辑一致。
5.2 限价单
- 回测时,只要价格触及限价即 一次性全部成交,暂时不支持分批成交模拟。
- 挂单量大、深度薄时应自行加入滑点模型。
6. 高频场景 vs 低频策略时间控制
- 回测:按您指定的
--interval
推进时钟,固定节奏。 - 实盘:首次运行后立刻触发
next_iteration
,随后按该间隔循环。若本次执行耗时超过 interval,则立即补发下一次,防止漏单。
7. FAQ(高频问题速查)
Q1:可以将 OKX 的 API 直接对接吗?
A:可以,OKX 在 CCXT 中标识为 okx
,只需在策略参数里传入即可。
👉 查看 OKX API 文档与示例
Q2:如何接入自定义指标库?
A:next_iteration
完全由你掌控,可调用 pandas-ta
、talib
、bt
等任何指标库。
Q3:能否多交易所同时回测?
A:调用 context.create_exchange()
任意次数即可。数据源需为 data/ohlcv/
下对应子目录 CSV。
Q4:实盘时延迟有多大?
A:取决于交易所 REST / WebSocket 延迟、本地网络及策略本身耗时;可在 log 中打印 time.time()
自行评估。
Q5:官网示例太简单,如何扩展为多资产多周期?
A:
- 参数用
--symbols BTC/USD,ETH/USD --intervals 1m,5m,15m
传入; - 在策略内用
asyncio.gather()
并行并行拉取行情、推送信号。 - 建议拆分子策略类,降低单文件复杂度。
8. 扩展阅读与社区
- 源码仓库:https://github.com/btrccts/btrccts