Files
trade/使用说明.md
2026-05-02 23:34:43 +08:00

5.2 KiB
Raw Blame History

期货行情分析系统 — 使用说明

基于 Docker + Python(tushare) 的中国期货行情分析系统。当前阶段已实现数据采集与三层加权打分模型,运行方式为脚本自动化(宿主机定时器触发 docker-compose run)。

环境准备

  • Docker >= 20.10
  • Docker Compose >= 2.0
  • (可选) sqlite3 CLI 用于本地查库

快速开始

1. 配置 tushare token

将 token 写入 tushare/.env

echo "TUSHARE_TOKEN=你的token" > tushare/.env

该文件已被 gitignore 排除,不会进入版本库。

2. 启动并跑当月主力

docker-compose run --rm tushare

不传参时,按 tushare/src/contracts.pyROLLOVER_RULES 自动选 FG 玻璃当月主力(例如 2026-05 -> FG2609.ZCE),启动后会先打印 [AUTO] FG 当月主力 -> ...,然后:

  1. 从 tushare 拉取合约日线数据
  2. 写入 SQLite data/futures.db
  3. 运行三层打分模型
  4. 保存打分结果并输出到 stdout
  5. 通过 Bark 推送评分摘要

3. 跑其他合约或品种

# 显式指定合约
docker-compose run --rm tushare python -m src.main RB2510.SHF
docker-compose run --rm tushare python -m src.main I2601.DCE

# 按品种代号自动选当月主力(目前只配置了 FG)
docker-compose run --rm tushare python -m src.main --symbol FG

4. 玻璃 FG 主力轮换规则

当前自然月 主力合约
1、2、3 月 当年 05
4、5、6、7 月 当年 09
8、9、10、11 月 次年 01
12 月 次年 05

三层打分模型

综合分数公式

综合分数 = (短期动力 × 0.4) + (中期趋势 × 0.35) + (长期结构 × 0.25)

1. 短期动力7 日窗口,权重 0.4

逐日打分后取均值:

持仓变化 价格方向 得分
增仓 上涨 100多头主动进攻
增仓 下跌 0空头主动进攻
减仓 上涨 70空头撤退
减仓 下跌 30多头撤退
持平(|变化|<1% 上涨 60
持平(|变化|<1% 下跌 40

2. 中期趋势15 日窗口,权重 0.35

价格信号 = (今收 - 15日前收) / 15日前收
价格信号得分 = clamp(50 + 收益率×500, 0, 100)

资金意愿:
  增仓上涨天数 > 增仓下跌天数 → 80
  两者相当 → 50
  增仓下跌天数 > 增仓上涨天数 → 20

模块得分 = 价格信号 × 0.6 + 资金意愿 × 0.4

3. 长期结构30 日窗口,权重 0.25

持仓变化幅度 = (30日日均持仓 - 30日前持仓) / 30日前持仓

> 10%  → 90显著增仓
5%~10% → 70温和增仓
-5%~5% → 50基本持平
-10%~-5% → 30温和减仓
< -10% → 10显著减仓

信号解读

综合分数 信号
80-100 强烈看多 — 价格与资金共振
50-80 偏多/震荡偏强
40-50 偏空/震荡偏弱
0-40 强烈看空 — 资金主动打压

数据查询

SQLite 数据库位于 data/futures.db,可直接用 sqlite3 查询:

# 查看最新打分
sqlite3 data/futures.db "SELECT ts_code, trade_date, composite, signal FROM scores ORDER BY trade_date DESC LIMIT 5;"

# 查看合约日线
sqlite3 data/futures.db "SELECT trade_date, open, high, low, close, vol, oi FROM candles WHERE ts_code='FG2609.ZCE' ORDER BY trade_date DESC LIMIT 10;"

# 查看表结构
sqlite3 data/futures.db ".schema"

项目结构

trade/
├── docker-compose.yml          # Docker Compose 编排
├── 使用说明.md                  # 本文件
├── data/                        # SQLite 数据库目录(gitignored)
│   └── futures.db
├── .gitignore                   # Git 忽略配置
└── tushare/                     # Python 数据服务
    ├── Dockerfile               # 镜像构建
    ├── requirements.txt         # Python 依赖
    ├── .env                     # TUSHARE_TOKEN(本地,不入库)
    └── src/                     # Python 包
        ├── models.py            # 数据模型
        ├── fetcher.py           # tushare 数据拉取
        ├── scorer.py            # 打分模型核心
        ├── storage.py           # SQLite 持久化
        ├── contracts.py         # 主力合约轮换规则
        ├── notifier.py          # Bark 推送
        └── main.py              # CLI 入口

技术栈

  • Python 3.13 (alpine 基础镜像)
  • tushare — 中国金融数据接口
  • pandas — 数据处理
  • SQLite — 本地数据存储
  • Docker / Docker Compose — 容器化部署

常见问题

Q: 为什么某些日期返回空数据?

A: tushare 数据更新有延迟,且不同接口对 token 积分等级有要求。若 fut_daily 返回空但 trade_cal 正常,通常是该日期实际行情数据尚未入库。

Q: 合约代码格式?

A: 郑商所用 .ZCE 后缀(如 FG2609.ZCE),上期所用 .SHF,大商所用 .DCE。注意不是 .CZC

Q: 如何定时自动跑?

A: 通过宿主机 cron / launchd 等定时器调用 docker-compose run --rm tushare ...。打分结束会通过 Bark 推送结果(见 tushare/src/notifier.py)。