Files
Grid_Trading/README.md
2026-07-14 16:21:32 +08:00

217 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Grid Trading本地网格交易管理器
一个使用 Python 和 PySide6 开发的本地桌面工具,用于管理 A 股、ETF 的账户、标的与手工成交,并辅助计算持仓成本、网格收益、回本价和网格档位。
> 本项目只提供交易记录与策略辅助功能,不会连接券商账户,也不会自动下单。所有计算结果仅供参考,不构成投资建议。
## 功能特性
- **账户概览**:展示账户权益、现金、持仓市值、浮动盈亏和资金使用率。
- **标的管理**:维护股票或 ETF 的代码、名称、市场、交易单位及零股规则。
- **成交管理**:手工录入、编辑和删除买卖记录,并区分底仓、网格仓和其他仓位。
- **费用估算**:按内置费率估算佣金、印花税和过户费,估算后仍可手工调整。
- **持仓分析**计算总持仓、T+1 可用数量、剩余成本、已实现盈亏、浮动盈亏及网格利润。
- **回本价计算**:同时提供持仓回本价与账户回本价,便于观察网格收益对成本的影响。
- **实时行情**:异步获取腾讯行情,刷新过程中不会阻塞主界面。
- **网格建议**:根据实时价格和默认策略,生成最多 100 档的买入价、建议数量、卖出价与预计毛利润。
- **待卖网格**:按批次展示尚未卖出的网格买入及其目标卖出价、当前状态。
- **成交配对**:使用 FIFO先进先出将网格卖出与历史网格买入配对一笔卖出可拆分匹配多笔买入。
- **本地存储**:账户、标的、策略和成交数据均保存在 SQLite 数据库中。
## 技术栈
- Python 3.11+
- PySide6
- SQLite
- pytest
## 快速开始
### 1. 进入项目目录
```powershell
cd Grid_Trading
```
请先下载或克隆项目,再进入项目根目录。
### 2. 创建虚拟环境并安装依赖
Windows PowerShell
```powershell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
```
macOS / Linux
```bash
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
```
### 3. 启动程序
```powershell
python -m grid_trading.app
```
安装后也可以使用命令行入口:
```powershell
grid-trading
```
默认数据库位置为 `data/grid_trading.db`。如需使用其他数据库文件:
```powershell
python -m grid_trading.app --db data/dev.db
```
首次启动时,程序会自动创建:
- 初始资金为 `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 # 项目及依赖配置
```
## 测试
运行完整测试:
```powershell
pytest -v
```
只验证界面可在无显示环境下正常构造:
```powershell
pytest tests/test_ui.py -v
```
检查命令行参数:
```powershell
python -m grid_trading.app --help
```
## 当前限制
- 当前定位为单机、单用户的手工交易管理工具。
- 不包含券商登录、自动下单、条件单或实盘同步功能。
- 行情接口不是正式授权的数据服务,其可用性、实时性和准确性不作保证。
- 网格建议未考虑手续费、滑点、涨跌停、停牌和流动性等实际交易约束。
- 使用本项目产生的任何交易决策与风险均由使用者自行承担。