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