基于参考交易所定价的加密货币量化交易系统,结合**做市(Market Making)与统计套利(Statistical Arbitrage)**策略,通过跟踪主流交易所价格,在小交易所挂单做市并捕捉价差回归收益。
声明:这是开源版本,仅供学习和研究使用。开源版本的策略参数和逻辑相对保守,收益率有限。实际盈利高度依赖找到合适的交易品种(需要品种具备充足的波动性、适当的流动性、以及两个交易所间的价差特征),并非所有品种和行情都能盈利。请在充分理解策略原理和风险后谨慎使用。
hftrade.mp4
┌─────────────────────────────────────────────────────────────────┐
│ Quant (核心引擎) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Strategy │◄───│ Predictor │◄───│ Reference │ │
│ │ (策略层) │ │ (定价器) │ │ Exchange │ │
│ └──────┬───────┘ └──────────────┘ │ (参考盘) │ │
│ │ └──────────────┘ │
│ ▼ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ REST │───────────────────────►│ Trade │ │
│ │ (下单接口) │ │ Exchange │ │
│ └──────────────┘ │ (交易盘) │ │
│ ▲ └──────────────┘ │
│ │ │
│ ┌──────────────┐ │
│ │ WebSocket │ (实时行情、订单、仓位推送) │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
参考交易所 WS ──► Predictor ──► 计算定价 ──► Strategy ──► 生成订单信号
│
交易交易所 WS ──► 更新仓位/订单状态 ◄──────────────────────┘
│
▼
REST 执行订单
本策略是一种跨交易所做市 + 统计套利策略,核心思想是:
- 参考定价:使用流动性更好、价格发现能力更强的大交易所作为"参考盘"
- 价差跟踪:计算交易盘与参考盘之间的平均价差(bias)
- 动态定价:
定价 = 参考盘最新价 - 平均价差 - 挂单做市:在定价附近的不同价位挂限价单,同时提供买卖双边报价,赚取价差回归利润
做市属性:策略在定价上下对称地挂出买卖限价单,本质上是在小交易所提供双边流动性,做市赚取价差回归的利润。
套利属性:定价基于大交易所的实时价格,当小交易所价格因信息滞后、流动性不足等原因偏离定价时,策略捕捉这种偏离后的回归。
- 价格发现:大交易所价格变动领先于小交易所
- 流动性差异:小交易所流动性差,价格波动更大
- 均值回归:短期价差会波动,但长期趋于稳定
本策略是一个跨交易所的均值回归做市策略,兼具做市和统计套利双重属性:
- 做市:在定价上下方对称挂出买卖限价单,为市场提供双边流动性,等待价格触及挂单成交
- 统计套利:利用大交易所的价格发现优势,捕捉小交易所价格的短期偏离和回归
假设配置:open_dist=0.01 (1%), close_dist=0.0002 (0.02%)
参考交易所(Binance) BTC价格: 100,000
平均价差: +10 (交易盘通常比参考盘贵10元)
定价: 100,000 - 10 = 99,990
【场景A:开多后平多】
1. 交易盘突然下跌到 98,990 (比定价低1%)
→ 触发开多单成交
2. 交易盘反弹回到 100,010 (比定价高0.02%)
→ 触发平多单成交
3. 盈利: (100,010 - 98,990) / 98,990 ≈ 1.03%
【场景B:开空后平空】
1. 交易盘突然上涨到 100,990 (比定价高1%)
→ 触发开空单成交
2. 交易盘回落到 99,970 (比定价低0.02%)
→ 触发平空单成交
3. 盈利: (100,990 - 99,970) / 100,990 ≈ 1.01%
| 来源 | 说明 | 发生频率 |
|---|---|---|
| 价差回归 | 两个交易所之间的价差暂时偏离,等待回归 | 高 |
| 过度反应修复 | 小交易所价格超调后的均值回归 | 中 |
| 流动性溢价 | 在小交易所提供流动性,赚取买卖价差 | 高 |
┌────────────────────────────────────────────────────────────┐
│ 小交易所价格特征 │
├────────────────────────────────────────────────────────────┤
│ │
│ 1. 流动性差 │
│ └─ 大单冲击导致价格过度波动 │
│ │
│ 2. 信息滞后 │
│ └─ 大交易所价格变动传导到小交易所有延迟 │
│ │
│ 3. 情绪放大 │
│ └─ 散户追涨杀跌导致价格超调 │
│ │
│ 4. 套利不充分 │
│ └─ 跨所套利有成本和门槛,价差不会瞬间抹平 │
│ │
└────────────────────────────────────────────────────────────┘
单笔交易利润计算:
开仓位置: 定价 × (1 ± 1%~2%)
平仓位置: 定价 × (1 ± 0.02%~0.04%)
注意:实际利润不是 (开仓距离 - 平仓距离)
而是取决于价格实际波动幅度
风险点:
-
定价动态变化
- 定价跟随参考交易所实时变动
- 如果参考盘单边运动,开仓条件可能不触发
- 或触发后定价移走,导致无法平仓
-
平仓区间较窄
- 平仓距离只有 0.02%~0.04%
- 价格稍有回归就平仓
- 可能错过更大的回归行情
- 手续费可能吃掉部分利润
-
不适合单边趋势
- 策略依赖价格回归
- 单边趋势行情中可能被套牢
| 市场环境 | 适用性 | 说明 |
|---|---|---|
| 震荡行情 | 适用 | 价格反复波动,多次开平仓 |
| 单边趋势 | 不适用 | 价格单向运动,无法回归 |
| 高相关性 | 适用 | 两个交易所价格高度相关 |
| 价格脱钩 | 不适用 | 价差持续扩大,无法回归 |
重要提示:并非所有品种都适合本策略。品种选择是盈利的关键因素之一,需要满足以下条件:
- 两个交易所间价差有均值回归特征(不会持续单方向扩大)
- 有足够的波动性触发开仓条件
- 有适度的流动性保证挂单能成交
- 建议使用回测系统筛选品种后再实盘
- 动态参数:根据市场波动率调整开平仓距离
- 趋势过滤:识别单边趋势,暂停开仓
- 多参考盘:使用多个交易所加权定价,提高稳定性
- 价差异常检测:当价差异常扩大时降低仓位
# 每个tick计算价差
bias = ref_mp - trade_mp # 参考盘中价 - 交易盘中价
# 维护滑动窗口内的价差序列
bias_series.append(bias)
if len(bias_series) > window:
删除最旧的价差
# 计算平均价差
avg_spread = sum(bias_series) / len(bias_series)
# 获取定价
ref_price = ref_ticker - avg_spread # 参考价 - 平均价差 = 定价参数说明:
window: 滑动窗口大小,由配置window / interval计算- 窗口越大,定价越平滑,但反应越慢
价格轴 (从低到高)
▲
│
open_dist[1] ───┼─────────────────── 开多区间下界 (定价 * 0.98)
│ ╲
│ ╲ 开多挂单区间 (kd)
open_dist[0] ───┼──────╲──────────── 开多区间上界 (定价 * 0.99)
│ ╲
定价 ───────────┼──────────╲──────── 基准价格 (ref_price)
│ ╱
close_dist[2] ───┼──────────╱──────── 平多区间下界 (定价 * 1.0002)
│ ╱ 平多挂单区间 (pd)
close_dist[3] ───┼──────╱──────────── 平多区间上界 (定价 * 1.0018)
│
close_dist[0] ───┼──╱──────────────── 平空区间上界 (定价 * 0.9998)
│╱ 平空挂单区间 (pk)
close_dist[1] ───┼─────────────────── 平空区间下界 (定价 * 0.9996)
│
│
open_dist[3] ────┼──────╱──────────── 开空区间上界 (定价 * 1.02)
│ ╱ 开空挂单区间 (kk)
open_dist[2] ────┼──╱──────────────── 开空区间下界 (定价 * 1.01)
│
▼
计算公式:
# 开仓区间 (距离定价较远,更保守)
open_dist = [
ref_price * (1 - open_dist_pct * 1.0), # [0] 开多上界
ref_price * (1 - open_dist_pct * 2.0), # [1] 开多下界
ref_price * (1 + open_dist_pct * 1.0), # [2] 开空下界
ref_price * (1 + open_dist_pct * 2.0), # [3] 开空上界
]
# 平仓区间 (距离定价较近,更快平仓)
close_dist = [
ref_price * (1 - close_dist_pct * 0.2), # [0] 平多上界
ref_price * (1 - close_dist_pct * 1.8), # [1] 平多下界
ref_price * (1 + close_dist_pct * 0.2), # [2] 平空下界
ref_price * (1 + close_dist_pct * 1.8), # [3] 平空上界
]| 方向代码 | 含义 | 交易所Side | PositionSide | 说明 |
|---|---|---|---|---|
kd |
开多 | BUY | LONG | 买入开多仓 |
kk |
开空 | SELL | SHORT | 卖出开空仓 |
pd |
平多 | SELL | LONG | 卖出平多仓 |
pk |
平空 | BUY | SHORT | 买入平空仓 |
| 触发器 | 触发条件 | 主要动作 |
|---|---|---|
onTime |
定时触发 (interval间隔) | 完整策略逻辑:撤单、开仓、平仓 |
onTick |
价格变动触发 | 快速响应价格变化 |
onOrder |
订单状态变动 | 订单成交后立即重新挂单 |
onTake |
大单成交触发 | 跟随大资金方向 |
onExit |
程序退出时 | 清空所有仓位和挂单 |
# 1. 计算可用资金
if 现货:
long_free_value = min(可用现金, 初始现金) - 已挂买单金额
short_free_value = min(持币价值, 初始持币价值) - 已挂卖单金额
else: # 合约
long_free_value = 总资金 * 杠杆 - 多头持仓 - 已挂买单金额
short_free_value = 总资金 * 杠杆 - 空头持仓 - 已挂卖单金额
# 2. 单笔开仓金额
one_amount = 资金 * 0.33 * 杠杆
# 3. 挂单位置计算
if 没有挂单:
# 首次挂单,放在区间中点
target_price = (上界 + 下界) / 2
else:
# 在现有挂单之间插单
step = (上界 - 下界) / 2
target_price = 现有挂单价格 ± step# 1. 检查是否有持仓
if 多头持仓 > 0:
if 没有平多挂单:
# 在平多区间中点挂平多单
target_price = (平多上界 + 平多下界) / 2
if 空头持仓 > 0:
if 没有平空挂单:
# 在平空区间中点挂平空单
target_price = (平空上界 + 平空下界) / 2
# 2. 如果持仓均价偏离过大(超过开仓距离的10倍)
# 使用更激进的平仓价格(接近市价)
if abs(持仓均价 - 现价) / 现价 > open_dist * 10:
target_price = 现价 * 0.9995 # 多头
target_price = 现价 * 1.0005 # 空头# 撤销超出区间的挂单
for order in local_orders:
if 开多单 and (价格 > 开多上界 or 价格 < 开多下界):
撤销订单
if 开空单 and (价格 < 开空下界 or 价格 > 开空上界):
撤销订单
if 平多单 and (价格 < 平多下界 or 价格 > 平多上界):
撤销订单
if 平空单 and (价格 > 平空上界 or 价格 < 平空下界):
撤销订单# 根据买卖力量判断短期趋势
buy_q = 买入量
sell_q = 卖出量
if buy_q > sell_q * 2:
tradeway = 1 # 买方强势,倾向于做多
elif sell_q > buy_q * 2:
tradeway = -1 # 卖方强势,倾向于做空
else:
tradeway = 0 # 中性# ── 敏感凭证 ──
[secrets]
access_key = "" # API Key
secret_key = "" # Secret Key
pass_key = "" # Passphrase (部分交易所需要)
webhook = "" # 钉钉机器人通知 webhook URL(留空禁用)
telegram_token = "" # Telegram Bot Token(Monitor 使用,留空禁用)
telegram_chat_id = "" # Telegram Chat ID
# ── Broker ID ──
[brokers]
binance = ""
gate = ""
# ── 交易系统 ──
[trading]
account_name = "my_account" # 账户名称(日志标识)
exchange = "binance_usdt_swap" # 交易交易所 (binance_usdt_swap | binance_spot | gate_usdt_swap | gate_spot)
pair = "btc_usdt" # 交易品种
testnet = true # true=测试网,false=正式环境
debug = false # 调试模式(不下单)
server_port = 6000 # HTTP 服务端口
leverrate = 1.0 # 杠杆倍数
interval = 0.2 # 策略触发间隔(秒)
open_dist = 0.001 # 开仓距离
close_dist = 0.0002 # 平仓距离
window = 600.0 # 预测窗口
# 参考交易所(数组格式)
refexchange = ["binance_usdt_swap"]
refpair = ["btc_usdt"]
# 网络
proxy = "" # 例: "http://127.0.0.1:4780"
used_pct = "0.95" # 资金使用比例
# 风控参数(可选,不配置时使用默认值)
# drawback_stop_loss = 0.5 # 吊灯回撤止损
# trade_drawback_stop_loss = -0.05 # 交易回撤止损
# pos_bias_threshold = 5.0 # 持仓均价偏差阈值(%)
# price_deviation_threshold = 0.02 # 定价偏离阈值
# maker_fee = 0.0002 # maker 手续费率| 参数 | 保守设置 | 激进设置 | 说明 |
|---|---|---|---|
open_dist |
0.015~0.02 | 0.005~0.01 | 开仓距离越大,成交概率越低但利润更高 |
close_dist |
0.0001~0.0002 | 0.0005~0.001 | 平仓距离越小,平仓越快但利润越低 |
window |
60~120 | 20~40 | 窗口越大定价越稳定,但反应越慢 |
leverrate |
0.5~1.0 | 2.0~3.0 | 杠杆越高收益和风险都越大 |
- Python 3.9+
- 推荐 Conda 环境,需要
pyarrow >= 23.x(base 环境的 pyarrow 19.x 存在 parquet 兼容性问题)
# 核心依赖
pip install aiohttp numpy toml ujson ccxt pandas pyarrow matplotlib
# 百度网盘上传(可选,仅录制+上传功能需要)
pip install bypy回测引擎和 Monitor 均支持 Cython 加速:
# 安装 Cython 编译依赖
pip install cython setuptools
# 一键编译 Cython 扩展
python backtest/build_cython.py编译成功后,回测引擎和 Monitor 将自动使用 Cython 加速版本。
注意:
.so编译产物已加入.gitignore,不会提交到代码库;但_fast_loop.c源文件会提交,确保用户无需 Cython 也能编译。
# 使用默认配置运行
python main.py
# 指定配置文件
python main.py -c config.toml
# 完整参数运行
python main.py -c config.toml -log_file mybot -num 1
# 指定策略运行
python main.py -c config.toml -s arbitrage
# 查看版本
python main.py -v程序启动后会开放 HTTP 接口用于监控:
# 获取账户信息
curl http://localhost:6000/account
# 获取运行状态
curl http://localhost:6000/info完整的回测流程:下载历史数据 → 逆推 orderbook → 筛选品种 → 事件驱动回测。
# 下载全量品种最近7天并自动逆推 orderbook
python backtest/run_download.py --reconstruct
# 下载指定品种和日期范围
python backtest/run_download.py --pairs btc_usdt eth_usdt --start-date 2026-03-01 --end-date 2026-03-08 --reconstruct
# 使用代理
python backtest/run_download.py --proxy http://127.0.0.1:4780 --max-concurrent 10| 参数 | 默认值 | 说明 |
|---|---|---|
--exchanges |
binance_usdt_swap gate_usdt_swap | 目标交易所列表 |
--pairs |
全部品种 | 指定下载品种 |
--start-date |
7天前 | 开始日期 (YYYY-MM-DD) |
--end-date |
今天 | 结束日期 (YYYY-MM-DD) |
--max-concurrent |
5 | HTTP 并发连接数 |
--proxy |
— | HTTP 代理地址 |
--reconstruct |
false | 下载后自动逆推 orderbook |
--data-dir |
backtest/data | 数据存储目录 |
# 自动补齐本地缺失的 Monitor 录制数据
python backtest/run_download_cloud.py
# 指定品种和日期范围
python backtest/run_download_cloud.py --pairs btc_usdt eth_usdt --start-date 2026-03-15 --end-date 2026-03-20
# 预览缺失文件(不下载)
python backtest/run_download_cloud.py --dry-run# 从已下载的 trade 数据逆推 orderbook(自动使用物理核心数并行)
python backtest/run_reconstruct.py
# 指定交易所和并行进程数
python backtest/run_reconstruct.py --exchanges binance_usdt_swap --workers 4| 参数 | 默认值 | 说明 |
|---|---|---|
--exchanges |
binance_usdt_swap gate_usdt_swap | 交易所列表 |
--data-dir |
backtest/data | 数据目录 |
--workers |
0 (自动) | 并行进程数,0=物理核心数 |
# 筛选 top 20 品种
python backtest/run_screen.py --top-n 20 --output backtest/screen_result.csv
# 先逆推再筛选,自定义参数
python backtest/run_screen.py --reconstruct --min-volume 2000000 --open-dist 0.002| 参数 | 默认值 | 说明 |
|---|---|---|
--min-volume |
5,000,000 | 最低日均成交额 (USD) |
--window |
600 | 预测窗口大小 |
--top-n |
20 | 输出前 N 个品种 |
--open-dist |
0.001 | 开仓距离 |
--close-dist |
0.0002 | 平仓距离 |
--maker-fee |
0.0002 | Maker 费率 |
--taker-fee |
0.0005 | Taker 费率 |
--output |
backtest/screen_result.csv | 输出文件 |
--reconstruct |
false | 筛选前先逆推 |
--workers |
0 (自动) | 并行进程数 |
--exchanges |
binance_usdt_swap gate_usdt_swap | 交易所列表 |
# 默认按天并行回测(workers=0 自动检测物理核心数)
python backtest/run_backtest.py --pair btc_usdt
# 输出权益曲线图
python backtest/run_backtest.py --pair btc_usdt --plot backtest/data/btc_equity.png
# 自定义参数
python backtest/run_backtest.py --pair eth_usdt --trade-exchange gate_usdt_swap --ref-exchange binance_usdt_swap --initial-cash 50000 --leverrate 2.0
# 单线程顺序模式
python backtest/run_backtest.py --pair btc_usdt --workers 1| 参数 | 默认值 | 说明 |
|---|---|---|
--pair |
必需 | 交易品种 (如 btc_usdt) |
--trade-exchange |
binance_usdt_swap | 交易交易所 |
--ref-exchange |
gate_usdt_swap | 参考交易所 |
--initial-cash |
10000 | 初始资金 (USDT) |
--leverrate |
1.0 | 杠杆倍数 |
--open-dist |
0.001 | 开仓距离 |
--close-dist |
0.0002 | 平仓距离 |
--window |
600 | 预测窗口 |
--interval |
0.1 | 策略触发间隔 (秒) |
--maker-fee |
0.0002 | Maker 费率 |
--taker-fee |
0.0005 | Taker 费率 |
--start-date |
全部数据 | 开始日期 |
--end-date |
全部数据 | 结束日期 |
--plot |
自动生成 | 权益曲线输出路径 |
--no-plot |
false | 禁止绘图 |
--strategy |
arbitrage | 策略名称 |
--workers |
0 (自动) | 并行 worker 数,1=单线程 |
--drawback-stop-loss |
0.0 | 吊灯回撤止损阈值(0=禁用) |
--trade-drawback-stop-loss |
-0.05 | 交易回撤止损阈值 |
--pos-bias-threshold |
5.0 | 持仓均价偏差阈值 (%) |
--price-deviation-threshold |
0.02 | 定价偏离阈值 |
--no-cap-equity |
false | 不限制权益上限为 initial_cash |
--proxy |
— | HTTP 代理地址 |
--data-dir |
backtest/data | 数据存储目录 |
监控和录制功能已合并到 monitor/ 模块,共享 WebSocket 连接。详细配置说明见 monitor/README.md。
# 纯监控(不录制,不需要 Telegram 也可运行)
python monitor/run_monitor.py --eval-interval 60
# 使用配置文件
python monitor/run_monitor.py -c config.toml
# 指定品种和评估周期
python monitor/run_monitor.py --pairs btc_usdt eth_usdt --eval-interval 30
# 监控 + 录制(共享 WS 连接)
python monitor/run_monitor.py --record --eval-interval 60
# 监控 + 录制 + 百度网盘上传
python monitor/run_monitor.py --record --upload
# 仅录制 orderbook(不录制 trade)
python monitor/run_monitor.py --record --no-trades
# 完整参数(含 Telegram 推送)
python monitor/run_monitor.py --record --upload \
--eval-interval 60 --pnl-window 1800 --top-n 5 \
--telegram-token "YOUR_TOKEN" --telegram-chat-id "YOUR_CHAT_ID"Monitor 内置 Web Dashboard,提供实时可视化:
- PnL 热力图:按品种展示盈亏分布
- 多参数组 TAB 切换:同时监控不同 open_dist/close_dist 组合的表现
- 费率切换:快速切换 maker/taker 费率查看净收益
# 启动 Monitor(默认开启 Web Dashboard,端口 8080)
python monitor/run_monitor.py --eval-interval 60
# 自定义 Web 端口
python monitor/run_monitor.py --web-port 9090 --eval-interval 60
# 禁用 Web Dashboard
python monitor/run_monitor.py --no-web --eval-interval 60
# 多参数组监控
python monitor/run_monitor.py --param-groups "0.001,0.0002;0.002,0.0004" --eval-interval 60
# 指定交易方向(单向做多/做空/双向)
python monitor/run_monitor.py --trade-exchange binance_usdt_swap --eval-interval 60在 config.toml 的 [secrets] 分区中设置 telegram_token 和 telegram_chat_id。创建 Bot 和获取 Chat ID 的详细步骤见 monitor/README.md。
需要先安装 pip install bypy 并完成 OAuth 授权(首次运行 bypy info 按提示操作)。授权信息保存在 ~/.bypy/,服务器部署时需复制该目录。详细步骤见 monitor/README.md。
| 参数 | 默认值 | 说明 |
|---|---|---|
--record |
false | 启用市场数据录制 |
--record-depth |
20 | 录制 orderbook 档位深度 |
--record-data-dir |
monitor/data | 录制数据存储目录 |
--flush-interval |
60 | 缓冲区刷盘间隔 (秒) |
--no-trades |
false | 不录制 trade 数据 |
--no-orderbooks |
false | 不录制 orderbook 数据 |
--upload |
false | 启用百度网盘上传 |
--upload-remote-dir |
/HFtrade/market_data | 百度网盘远程目录 |
--min-volume |
1,000,000 | 录制白名单最低日均成交额 (USD) |
--param-groups |
自动生成 | 自定义参数组(格式:"open_dist,close_dist;...") |
--trade-exchange |
空(双向) | 指定交易方向偏好 |
--web-port |
8080 | Web Dashboard 端口 |
--no-web |
false | 禁用 Web Dashboard |
--monitor-data-dir |
monitor/data | Monitor 数据目录 |
| 触发条件 | 阈值 | 动作 |
|---|---|---|
| 吊灯止损 | 净值回撤50% | 立即停机 |
| 交易止损 | 策略亏损5% | 立即停机 |
| 延迟过高 | 平均延迟>3秒 | 立即停机 |
| 检测项 | 阈值 | 动作 |
|---|---|---|
| 行情延迟 | >30秒 | 停机 |
| 订单超时 | >1小时未更新 | 停机 |
| 仓位异常 | 推算仓位与实际不符 | 警告 |
| 定价异常 | 定价与现价偏差>10% | 停机 |
| 持仓偏离 | 持仓均价偏离>5% | 停机 |
系统自动根据交易所 API 限制控制请求频率:
| 交易所 | 普通请求/秒 | 下单请求/秒 |
|---|---|---|
| binance_spot | 5 | 2.5 |
| binance_usdt_swap | 40 | 20 |
| gate_spot | 20 | 10 |
| gate_usdt_swap | 300 | 100 |
HFtrade/
├── main.py # 程序入口(解析参数,启动引擎)
├── config.example.toml # 配置文件模板
├── model.py # 数据模型(Order, Position, Config 等)
├── predictor.py # 价格预测器(基于参考交易所定价)
├── utils.py # 工具函数、配置解析、交易所客户端工厂、共享常量
│
├── quant/ # 核心交易引擎(Mixin 多继承组合)
│ ├── __init__.py # Quant 基类 + create_quant() 工厂函数
│ ├── constants.py # 共享常量(超时阈值、风控参数等)
│ ├── cython_adapter.py # Cython 策略适配层(order_id 双向映射)
│ ├── signal.py # 信号编排 + 数据同步 + 限流去重
│ ├── server.py # HTTP API 服务
│ ├── order.py # 订单生命周期管理
│ ├── market.py # 行情数据回调与聚合
│ ├── risk.py # 风控检查
│ ├── lifecycle.py # 交易循环与生命周期
│ ├── strategy_base.py # 策略薄抽象基类
│ ├── swap/ # 合约引擎子类
│ │ ├── __init__.py # SwapQuant 主类
│ │ ├── market.py # 合约行情处理
│ │ ├── order.py # 合约订单处理
│ │ └── risk.py # 合约风控
│ └── spot/ # 现货引擎子类
│ ├── __init__.py # SpotQuant 主类
│ ├── market.py # 现货行情处理
│ ├── order.py # 现货订单处理
│ └── risk.py # 现货风控
│
├── strategy/ # 策略实现
│ ├── __init__.py # 策略注册表 + 工厂方法
│ ├── arbitrage.py # 跨交易所套利策略抽象中间层
│ ├── swap/ # 合约策略
│ │ ├── __init__.py
│ │ └── arbitrage.py # 合约套利策略
│ └── spot/ # 现货策略
│ ├── __init__.py
│ └── arbitrage.py # 现货套利策略
│
├── exchange/ # 交易所接口(CCXT/ccxt.pro 统一客户端)
│ ├── __init__.py # CcxtClient 主类
│ ├── ws.py # WebSocket 数据流监听 + 重连
│ ├── order.py # 订单操作基类
│ ├── position.py # 仓位管理基类
│ ├── data.py # 数据处理与统计
│ ├── swap/ # 合约交易所子类
│ │ ├── __init__.py
│ │ ├── order.py # 合约订单操作
│ │ ├── position.py # 合约仓位管理
│ │ └── ws.py # 合约 WebSocket
│ └── spot/ # 现货交易所子类
│ ├── __init__.py
│ ├── order.py # 现货订单操作
│ ├── position.py # 现货仓位管理
│ └── ws.py # 现货 WebSocket
│
├── monitor/ # 实时监控 + 数据录制系统
│ ├── config.py # 配置 dataclass(监控+录制+上传)
│ ├── monitor.py # 核心监控器(MarketMonitor 基类)
│ ├── monitor_recorder.py # 监控+录制整合类(MonitorRecorder)
│ ├── strategy_mixin.py # 策略逻辑混入
│ ├── strategy_consumer.py # 策略计算消费者进程
│ ├── flush_worker.py # 缓冲区刷盘工作线程
│ ├── shared_buffer.py # 共享内存缓冲区
│ ├── uploader.py # 百度网盘上传器(bypy)
│ ├── run_upload.py # 上传 CLI 入口
│ ├── web_dashboard.py # Web Dashboard(PnL 热力图、多参数组)
│ ├── run_monitor.py # CLI 入口
│ ├── _fast_metrics.pyx # Cython 加速在线统计量
│ └── _fast_buffer.pyx # Cython 加速 SharedMemory 写入
│
├── backtest/ # 回测系统
│ ├── config.py # 配置 dataclass
│ ├── downloader.py # 历史数据批量下载(Binance/Gate)
│ ├── reconstructor.py # Trade → Orderbook 逆推
│ ├── screener.py # 品种向量化筛选
│ ├── sim_exchange.py # 模拟撮合引擎
│ ├── sim_client.py # CcxtClient 替身
│ ├── engine.py # 回测引擎基类
│ ├── analyzer.py # 结果分析与报告
│ ├── whitelist.py # 品种白名单自动筛选
│ ├── _fast_strategy.pyx # Cython 策略+撮合+仓位管理(三系统共用)
│ ├── _fast_strategy.pxd # Cython 声明文件
│ ├── _fast_loop.pyx # Cython 热路径模块(事件分发循环)
│ ├── build_cython.py # Cython 一键编译脚本
│ ├── run_download.py # Stage 1: 数据下载 CLI
│ ├── run_download_cloud.py # 百度网盘数据下载 CLI
│ ├── run_reconstruct.py # 独立 Orderbook 逆推 CLI
│ ├── run_screen.py # Stage 2+3: 品种筛选 CLI
│ ├── run_backtest.py # Stage 4: 回测 CLI
│ ├── run_vectorized_bt.py # 向量化回测 CLI
│ ├── swap/ # 合约回测引擎
│ │ ├── __init__.py
│ │ └── engine.py
│ └── spot/ # 现货回测引擎
│ ├── __init__.py
│ └── engine.py
│
└── docs/ # 文档
├── backtest_logic.md # 回测逻辑详细文档
└── strategy.md # 策略详细文档
- 开源版本声明:本项目为开源版本,策略参数和逻辑相对保守,收益率有限。实际盈利需要找到合适的交易品种和行情条件
- 品种选择:策略盈利高度依赖品种选择,建议先通过回测系统(
backtest/run_screen.py)筛选品种,再小资金实盘验证 - 风险提示:量化交易存在亏损风险,请谨慎配置参数并做好风控
- API权限:确保API Key具有交易权限,建议限制IP白名单
- 网络环境:稳定的低延迟网络环境对本策略至关重要
- 资金管理:建议先使用小资金测试,确认策略稳定后再放大
- 监控告警:建议配置钉钉webhook接收异常通知
MIT License