7.8 KiB
7.8 KiB
Grid Trading:本地网格交易管理器
一个使用 Python 和 PySide6 开发的本地桌面工具,用于管理 A 股、ETF 的账户、标的与手工成交,并辅助计算持仓成本、网格收益、回本价和网格档位。
本项目只提供交易记录与策略辅助功能,不会连接券商账户,也不会自动下单。所有计算结果仅供参考,不构成投资建议。
功能特性
- 账户概览:展示账户权益、现金、持仓市值、浮动盈亏和资金使用率。
- 标的管理:维护股票或 ETF 的代码、名称、市场、交易单位及零股规则。
- 成交管理:手工录入、编辑和删除买卖记录,并区分底仓、网格仓和其他仓位。
- 费用估算:按内置费率估算佣金、印花税和过户费,估算后仍可手工调整。
- 持仓分析:计算总持仓、T+1 可用数量、剩余成本、已实现盈亏、浮动盈亏及网格利润。
- 回本价计算:同时提供持仓回本价与账户回本价,便于观察网格收益对成本的影响。
- 实时行情:异步获取腾讯行情,刷新过程中不会阻塞主界面。
- 网格建议:根据实时价格和默认策略,生成最多 100 档的买入价、建议数量、卖出价与预计毛利润。
- 待卖网格:按批次展示尚未卖出的网格买入及其目标卖出价、当前状态。
- 成交配对:使用 FIFO(先进先出)将网格卖出与历史网格买入配对,一笔卖出可拆分匹配多笔买入。
- 本地存储:账户、标的、策略和成交数据均保存在 SQLite 数据库中。
技术栈
- Python 3.11+
- PySide6
- SQLite
- pytest
快速开始
1. 进入项目目录
cd Grid_Trading
请先下载或克隆项目,再进入项目根目录。
2. 创建虚拟环境并安装依赖
Windows PowerShell:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
macOS / Linux:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
3. 启动程序
python -m grid_trading.app
安装后也可以使用命令行入口:
grid-trading
默认数据库位置为 data/grid_trading.db。如需使用其他数据库文件:
python -m grid_trading.app --db data/dev.db
首次启动时,程序会自动创建:
- 初始资金为
0的“默认账户”; - 间距为
3%、每格金额为5000元的“默认网格模板”; - 数据库及所需数据表。
基本使用流程
- 点击“账户设置”,填写账户名称和初始资金。
- 点击“添加标的”,填写证券代码、名称、市场和交易单位。
- 点击“策略设置”,调整网格间距、每格金额等参数。
- 点击“录入成交”,选择买卖方向、仓位分组并填写实际成交信息。
- 点击“刷新行情”,获取现价并更新持仓市值、浮动盈亏和账户摘要。
- 在持仓表中选择一个标的,查看“网格档位”“待卖网格”“配对明细”和“最近成交”。
行情说明
行情数据来自腾讯接口:
http://qt.gtimg.cn/q=<symbol>
程序会根据六位证券代码推断交易所前缀,例如:
| 输入代码 | 请求代码 |
|---|---|
000001 |
sz000001 |
600000 |
sh600000 |
510300 |
sh510300 |
430047 |
bj430047 |
需要注意:
- 行情刷新需要网络连接,单次请求超时时间为 5 秒,失败后会自动重试一次。
- 行情快照只保存在当前进程内存中,不会写入 SQLite。
- 重新启动程序后,需要再次点击“刷新行情”。
- 未刷新行情时,不使用手工价格或最近成交价代替现价,因此市值、浮动盈亏和网格档位可能为空。
计算口径
持仓与盈亏
- 买入成本 = 成交金额 + 交易费用。
- 卖出净收入 = 成交金额 - 交易费用。
- 同一仓位分组内的卖出成本按移动平均成本释放。
- 已实现盈亏 = 卖出净收入 - 被释放的持仓成本。
- 网格利润只统计“网格”分组的已实现盈亏。
- T+1 可用数量会扣除计算当日的买入数量;卖出数量不得超过可用数量,也不得超过对应分组的持仓数量。
- 修改或删除历史成交后,程序会重新校验后续成交,避免形成负持仓。
回本价与账户摘要
- 持仓回本价 =(剩余持仓成本 - 已实现网格利润)/ 当前持仓数量。
- 账户回本价 = 标的累计净投入 / 当前持仓数量。
- 账户权益 = 现金 + 持仓市值。
- 资金使用率 = 持仓市值 /(持仓市值 + 非负现金);现金为负时最高显示为 100%。
网格档位
第 1 档买入价按下式计算,之后逐档复合递减:
买入价 = 上一档参考价 × (1 - 网格间距)
卖出价 = 买入价 × (1 + 网格间距)
建议数量 = 每格金额 ÷ 买入价,并按交易单位向下取整
档位表中的“预计单轮毛利润”不扣除交易费用,且建议结果只用于展示,不会自动生成成交记录或下单。
待卖网格与配对明细
- 只有“网格”分组的成交参与待卖批次和配对计算。
- 网格卖出按照成交日期和记录顺序,优先抵消最早的网格买入。
- 待卖批次状态包括“未刷新行情”“未到价”和“可卖”。
- 配对明细展示历史买卖的对应关系和毛利润,不扣除费用。
默认费用参数
点击成交窗口中的“估算费用”时,程序使用以下默认参数:
| 项目 | 默认值 | 说明 |
|---|---|---|
| 佣金 | 0.025% | 最低 5 元,买卖双向收取 |
| 印花税 | 0.05% | 仅卖出时收取 |
| 过户费 | 0.001% | 买卖双向收取 |
不同券商、市场和交易品种的实际费用可能不同,请以实际交割单为准,并在保存成交前手工修正。
数据与隐私
- 默认数据文件:
data/grid_trading.db - 账户、成交和策略数据仅存放在本机;刷新行情时只会向腾讯行情接口发送证券代码。
data/*.db、data/*.sqlite和data/backups/已在.gitignore中忽略。- 建议定期备份数据库文件;复制数据库前请先退出程序,避免备份到尚未提交的写入状态。
项目结构
Grid_Trading/
├── src/grid_trading/
│ ├── app.py # 命令行入口
│ ├── config.py # 默认路径与费用配置
│ ├── domain/ # 数据模型、持仓和网格计算
│ ├── market/ # 腾讯行情适配
│ ├── services/ # 业务编排与校验
│ ├── storage/ # SQLite 数据库与仓储层
│ └── ui/ # PySide6 主窗口、对话框与格式化
├── tests/ # 自动化测试
├── docs/ # 设计说明与开发计划
├── data/ # 本地数据库目录
└── pyproject.toml # 项目及依赖配置
测试
运行完整测试:
pytest -v
只验证界面可在无显示环境下正常构造:
pytest tests/test_ui.py -v
检查命令行参数:
python -m grid_trading.app --help
当前限制
- 当前定位为单机、单用户的手工交易管理工具。
- 不包含券商登录、自动下单、条件单或实盘同步功能。
- 行情接口不是正式授权的数据服务,其可用性、实时性和准确性不作保证。
- 网格建议未考虑手续费、滑点、涨跌停、停牌和流动性等实际交易约束。
- 使用本项目产生的任何交易决策与风险均由使用者自行承担。