用 btrccts 一键回测并实盘运行加密货币交易策略

Posted by Hiky 加密观察 on September 5, 2025

关键词: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 .

👉 立即上手 btrccts:5 分钟完成公测并对比盈亏


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

实盘注意事项:

  1. config/kraken.json 存放真实 API Key:
    {"apiKey":"your_key","secret":"your_secret"}
    
  2. 不会自动加载 markets,建议你首次连接时手动 load_markets()
  3. 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-tatalibbt 等任何指标库。

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