期货交易盈亏统计系统
期货交易盈亏统计系统
自动化处理 CFMMC(中国期货市场监控中心)结算单,提供成交记录管理、逐笔对冲盈亏计算、可视化统计分析的一站式工具。
功能特性
多期货公司支持
- 多账户管理 — 支持多个期货公司账户,可在 Web 管理界面自由增删改
- CFMMC 账户配置 — 每个账户独立存储期货公司名称、监控中心账号、密码
- 数据隔离 — 各账户的成交记录、持仓、盈亏按期货公司标识存储,互不干扰
- 合并统计 — 首页总览显示全部账户合计数,同时按期货公司拆分显示盈亏卡片
- 持仓区分 — 持仓明细表显示每笔持仓所属的期货公司
数据自动化
- 结算单下载 — Selenium 自动化登录 CFMMC,下载月度/每日结算文件
- 结算单解析 — 自动解析 xlsx/xls 结算单,提取成交明细、持仓明细、资金汇总
- 夜盘处理 — 解析成交时间字段,自动判断日盘/夜盘(21:00-次日6:00),还原实际成交日期
- 平仓明细配对 — 解析结算单「平仓明细」Sheet,精确匹配每笔开平仓
盈亏计算
- 逐笔对冲算法 — 采用 FIFO 先进先出原则进行开平仓配对
- 结算单优先 — 优先使用结算单原始平仓盈亏数据,回退至 FIFO 计算
- 精确手续费分配 — 按每手持仓比例分配手续费,余数补偿法确保总和一致
- 双浮动盈亏 — 同时显示按结算价和按收盘价计算的浮动盈亏
Web 可视化界面
| 标签页 | 功能 |
|---|---|
| 📈 总览 | 统计卡片 + 4 个图表(净盈亏走势、盈亏分布、品种占比、月度趋势) |
| 📅 每日明细 | 按月查看每日资金变动与交易统计 |
| 📋 成交记录 | 可搜索/筛选的成交明细表,标注日盘/夜盘时段(支持分页) |
| 💰 盈亏明细 | 逐笔对冲盈亏详情,底部汇总行(支持分页) |
| 📦 持仓记录 | 每日持仓汇总,显示期货公司、结算价与收盘价两种浮动盈亏(支持分页) |
| 🔍 持仓明细 | 每笔开仓详细记录,按日期筛选,显示期货公司、结算价/收盘价/两种浮动盈亏(支持分页) |
| 🏦 资金曲线 | 资金变动曲线 + 交易日明细表(支持分页) |
| 📑 按合约统计 | 各合约盈亏汇总(支持分页) |
| 🏷️ 按品种统计 | 各品种盈亏汇总,费用与结算单一致(支持分页) |
| ⚙️ 管理 | 多期货公司账户管理、收盘价管理、手工交易录入、数据导出、交易日志、修改密码、系统日志 |
收盘价管理
- 独立存储 —
data/close_prices.json单独保存各合约收盘价,不依赖数据库 - 自动下载 — 点击管理界面的「🌐 从互联网下载」,从新浪财经(AKShares)获取所有历史品种的收盘价
- 刷新机制 — 支持从交易记录刷新当前持仓品种收盘价
- 手动编辑 — 管理界面直接输入修改任意合约收盘价
- 双浮动盈亏 — 持仓页面同时显示「浮动盈亏(结算)」和「浮动盈亏(收盘)」两个指标
数据导出
- XLSX 导出 — 成交记录、盈亏明细、每日结算、品种统计(带隔行色样式)
- PDF 导出 — 带日期范围和账户水印的专业报告(WeasyPrint,支持中文)
交易日志
- 手动记录每笔交易的心得与感受
- 支持星级评分(⭐1-5)、标签分类
- 按日期/合约/方向筛选
用户管理
- 修改密码
- 系统日志查看(Web 服务、每日同步、月度同步、应用日志)
- 管理员账户管理(添加/删除用户)
多期货公司账户管理
- ⚙️ 管理 → 🏦 多账户 中自由添加/编辑/删除 CFMMC 账户
- 每个账户包含:期货公司名称、监控中心账号、密码、别名
- 数据入库时自动关联期货公司,持仓明细和统计按公司区分
- 页面顶部下拉框可按期货公司筛选查看数据
项目结构
1 | |
快速开始
安装依赖
1 | |
启动 Web 界面
1 | |
命令行工具
1 | |
Docker 部署
构建镜像
1 | |
启动容器
1 | |
迁移到其他服务器
1 | |
数据持久化:
data/(数据库+收盘价+品种配置)、output/(导出文件+静态资源)、tmp/(运行时缓存)通过-v挂载到容器外。迁移时复制data/目录即可保留所有历史数据和收盘价配置。
其他用户使用说明
不同用户使用该镜像时,需修改以下配置:
1. CFMMC 账户(自动下载结算单)
编辑 config/settings.py,替换为你的监控中心账号:
1 | |
修改后重新构建镜像,或通过 volume 挂载自定义的 config/settings.py:
1 | |
2. CFMMC 多账户(自动下载结算单)
启动容器后,登录 Web 界面 → ⚙️ 管理 → 🏦 多账户,添加各期货公司的监控中心账号。数据保存在 data/futures.db 的 cfmmc_accounts 表中,容器重启不丢失。
4. 收盘价数据
首次启动后,进入 Web 界面 → ⚙️ 管理 → 📈 收盘价,点击 🌐 从互联网下载 按钮自动获取所有历史品种的最新收盘价。数据保存在 data/close_prices.json,容器重启不丢失,也可手动编辑该文件。
5. 首次启动
空数据库首次启动时,页面会显示空数据。需先执行全量同步(点击页面 🔄 全量同步 按钮),或通过命令行导入结算单。
自动同步
| 任务 | 时间 | 说明 |
|---|---|---|
| 每日结算 | 交易日 19:00 | 下载当日结算单并解析 |
| 月度结算 | 每月1日 08:00 | 下载上月月度结算单并解析 |
1 | |
- 每日:使用
trading_calendar.py(基于chinese_calendar)判断交易日,自动跳过周末和法定公休日 - 月度:每月1日自动下载上个月的月度结算文件,校验笔数/手数/手续费/盈亏是否一致。若发现差异,以月度结算单为准自动修正
- 日志文件:
/tmp/auto_sync.log(每日)、/tmp/auto_monthly_sync.log(月度)
技术栈
- 后端: Python 3, Flask, SQLite, AKShare (财经数据接口)
- 前端: Bootstrap 5(本地文件,无需 CDN), Bootstrap Table(全表分页), ECharts, jQuery
- 数据解析: openpyxl, xlrd, BeautifulSoup
- 自动化: Selenium, ddddocr (验证码识别)
- 报表: openpyxl (XLSX), WeasyPrint (PDF 含中文)
- 部署: Docker 容器化,cron 定时同步
- 行情接口: AKShare(新浪财经/东方财富,免费获取收盘价)
数据说明
- 品种配置存储在
data/varieties.json,覆盖上海、大连、郑州三大商品交易所及中金所 - 合约代码自动生成(当前年度 + 下年度全月份),已到期合约自动过滤
- 所有金额数据以结算单(
daily_summary表)为权威来源 - 月度结算单为最高优先级:每月1日下载上月月度结算单后,自动覆盖修正该月所有每日数据的偏差
- 收盘价独立存储:
data/close_prices.json单独保存各合约收盘价,可由新浪财经(AKShare)自动下载或手动编辑
期货交易盈亏统计系统
https://www.qxz5637.top/2026/06/27/期货交易盈亏统计系统/