Skip to content

mmletgo/HFtrade

Repository files navigation

HFtrade - 加密货币跨交易所做市套利交易系统

基于参考交易所定价的加密货币量化交易系统,结合**做市(Market Making)统计套利(Statistical Arbitrage)**策略,通过跟踪主流交易所价格,在小交易所挂单做市并捕捉价差回归收益。

声明:这是开源版本,仅供学习和研究使用。开源版本的策略参数和逻辑相对保守,收益率有限。实际盈利高度依赖找到合适的交易品种(需要品种具备充足的波动性、适当的流动性、以及两个交易所间的价差特征),并非所有品种和行情都能盈利。请在充分理解策略原理和风险后谨慎使用。

项目演示

hftrade.mp4

目录


系统架构

┌─────────────────────────────────────────────────────────────────┐
│                         Quant (核心引擎)                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐      │
│  │   Strategy   │◄───│   Predictor  │◄───│  Reference   │      │
│  │   (策略层)    │    │   (定价器)    │    │   Exchange   │      │
│  └──────┬───────┘    └──────────────┘    │    (参考盘)    │      │
│         │                                └──────────────┘      │
│         ▼                                                      │
│  ┌──────────────┐                        ┌──────────────┐      │
│  │    REST      │───────────────────────►│    Trade     │      │
│  │   (下单接口)  │                        │   Exchange   │      │
│  └──────────────┘                        │    (交易盘)    │      │
│         ▲                                └──────────────┘      │
│         │                                                      │
│  ┌──────────────┐                                             │
│  │  WebSocket   │ (实时行情、订单、仓位推送)                    │
│  └──────────────┘                                             │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

数据流

参考交易所 WS ──► Predictor ──► 计算定价 ──► Strategy ──► 生成订单信号
                                                        │
交易交易所 WS ──► 更新仓位/订单状态 ◄──────────────────────┘
                        │
                        ▼
                    REST 执行订单

策略原理

核心思想

本策略是一种跨交易所做市 + 统计套利策略,核心思想是:

  1. 参考定价:使用流动性更好、价格发现能力更强的大交易所作为"参考盘"
  2. 价差跟踪:计算交易盘与参考盘之间的平均价差(bias)
  3. 动态定价定价 = 参考盘最新价 - 平均价差
  4. 挂单做市:在定价附近的不同价位挂限价单,同时提供买卖双边报价,赚取价差回归利润

做市属性:策略在定价上下对称地挂出买卖限价单,本质上是在小交易所提供双边流动性,做市赚取价差回归的利润。

套利属性:定价基于大交易所的实时价格,当小交易所价格因信息滞后、流动性不足等原因偏离定价时,策略捕捉这种偏离后的回归。

为什么有效?

  • 价格发现:大交易所价格变动领先于小交易所
  • 流动性差异:小交易所流动性差,价格波动更大
  • 均值回归:短期价差会波动,但长期趋于稳定

策略盈利来源分析

策略本质

本策略是一个跨交易所的均值回归做市策略,兼具做市和统计套利双重属性:

  • 做市:在定价上下方对称挂出买卖限价单,为市场提供双边流动性,等待价格触及挂单成交
  • 统计套利:利用大交易所的价格发现优势,捕捉小交易所价格的短期偏离和回归

交易场景示例

假设配置: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%)

注意:实际利润不是 (开仓距离 - 平仓距离)
      而是取决于价格实际波动幅度

风险点

  1. 定价动态变化

    • 定价跟随参考交易所实时变动
    • 如果参考盘单边运动,开仓条件可能不触发
    • 或触发后定价移走,导致无法平仓
  2. 平仓区间较窄

    • 平仓距离只有 0.02%~0.04%
    • 价格稍有回归就平仓
    • 可能错过更大的回归行情
    • 手续费可能吃掉部分利润
  3. 不适合单边趋势

    • 策略依赖价格回归
    • 单边趋势行情中可能被套牢

适用条件

市场环境 适用性 说明
震荡行情 适用 价格反复波动,多次开平仓
单边趋势 不适用 价格单向运动,无法回归
高相关性 适用 两个交易所价格高度相关
价格脱钩 不适用 价差持续扩大,无法回归

重要提示:并非所有品种都适合本策略。品种选择是盈利的关键因素之一,需要满足以下条件:

  • 两个交易所间价差有均值回归特征(不会持续单方向扩大)
  • 有足够的波动性触发开仓条件
  • 有适度的流动性保证挂单能成交
  • 建议使用回测系统筛选品种后再实盘

策略优化方向

  1. 动态参数:根据市场波动率调整开平仓距离
  2. 趋势过滤:识别单边趋势,暂停开仓
  3. 多参考盘:使用多个交易所加权定价,提高稳定性
  4. 价差异常检测:当价差异常扩大时降低仓位

核心逻辑详解

1. 定价计算 (Predictor)

# 每个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 计算
  • 窗口越大,定价越平滑,但反应越慢

2. 挂单区间计算

价格轴 (从低到高)
                    ▲
                    │
    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] 平空上界
]

3. 订单方向说明

方向代码 含义 交易所Side PositionSide 说明
kd 开多 BUY LONG 买入开多仓
kk 开空 SELL SHORT 卖出开空仓
pd 平多 SELL LONG 卖出平多仓
pk 平空 BUY SHORT 买入平空仓

4. 策略触发机制

触发器 触发条件 主要动作
onTime 定时触发 (interval间隔) 完整策略逻辑:撤单、开仓、平仓
onTick 价格变动触发 快速响应价格变化
onOrder 订单状态变动 订单成交后立即重新挂单
onTake 大单成交触发 跟随大资金方向
onExit 程序退出时 清空所有仓位和挂单

5. 开仓逻辑 (_post_open)

# 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

6. 平仓逻辑 (_post_close)

# 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  # 空头

7. 撤单逻辑 (_cancel_open, _cancel_close)

# 撤销超出区间的挂单
for order in local_orders:
    if 开多单 and (价格 > 开多上界 or 价格 < 开多下界):
        撤销订单
    if 开空单 and (价格 < 开空下界 or 价格 > 开空上界):
        撤销订单
    if 平多单 and (价格 < 平多下界 or 价格 > 平多上界):
        撤销订单
    if 平空单 and (价格 > 平空上界 or 价格 < 平空下界):
        撤销订单

8. 交易方向判断 (tradeway)

# 根据买卖力量判断短期趋势
buy_q = 买入量
sell_q = 卖出量

if buy_q > sell_q * 2:
    tradeway = 1    # 买方强势,倾向于做多
elif sell_q > buy_q * 2:
    tradeway = -1   # 卖方强势,倾向于做空
else:
    tradeway = 0    # 中性

配置说明

config.toml

# ── 敏感凭证 ──
[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

Cython 扩展编译(推荐,加速回测和 Monitor)

回测引擎和 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接口

程序启动后会开放 HTTP 接口用于监控:

# 获取账户信息
curl http://localhost:6000/account

# 获取运行状态
curl http://localhost:6000/info

回测系统

完整的回测流程:下载历史数据 → 逆推 orderbook → 筛选品种 → 事件驱动回测。

Stage 1: 数据下载

# 下载全量品种最近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

独立逆推 Orderbook

# 从已下载的 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=物理核心数

Stage 2+3: 品种筛选

# 筛选 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 交易所列表

Stage 4: 回测

# 默认按天并行回测(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"

Web Dashboard

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

Telegram 配置

config.toml[secrets] 分区中设置 telegram_tokentelegram_chat_id。创建 Bot 和获取 Chat ID 的详细步骤见 monitor/README.md

百度网盘配置

需要先安装 pip install bypy 并完成 OAuth 授权(首次运行 bypy info 按提示操作)。授权信息保存在 ~/.bypy/,服务器部署时需复制该目录。详细步骤见 monitor/README.md

Monitor 参数

参数 默认值 说明
--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          #   策略详细文档

注意事项

  1. 开源版本声明:本项目为开源版本,策略参数和逻辑相对保守,收益率有限。实际盈利需要找到合适的交易品种和行情条件
  2. 品种选择:策略盈利高度依赖品种选择,建议先通过回测系统(backtest/run_screen.py)筛选品种,再小资金实盘验证
  3. 风险提示:量化交易存在亏损风险,请谨慎配置参数并做好风控
  4. API权限:确保API Key具有交易权限,建议限制IP白名单
  5. 网络环境:稳定的低延迟网络环境对本策略至关重要
  6. 资金管理:建议先使用小资金测试,确认策略稳定后再放大
  7. 监控告警:建议配置钉钉webhook接收异常通知

License

MIT License

About

加密货币跨交易所做市+套利量化交易系统 | Cross-exchange market making & statistical arbitrage system

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors