173 lines
4.4 KiB
Markdown
173 lines
4.4 KiB
Markdown
|
|
# A股纯信号量化交易系统
|
|||
|
|
|
|||
|
|
## 策略说明
|
|||
|
|
|
|||
|
|
纯信号交易策略(固定参数):
|
|||
|
|
- **不做定期换仓**,只根据止损/止盈信号卖出
|
|||
|
|
- 卖出后立即因子选股补仓,每10天扫描补充新标的
|
|||
|
|
- 止损 -8% / 止盈 +25%
|
|||
|
|
- 单只仓位 ≤20%,最多持有5只
|
|||
|
|
- 股票池:沪深300+中证500(约800-900只)
|
|||
|
|
|
|||
|
|
## 系统架构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
trading-system/
|
|||
|
|
├── config/
|
|||
|
|
│ └── config.json # 策略配置
|
|||
|
|
├── scripts/
|
|||
|
|
│ ├── engine.py # 核心交易引擎 + 因子评分
|
|||
|
|
│ ├── scheduler.py # APScheduler定时调度
|
|||
|
|
│ ├── trade_tool.py # 命令行工具
|
|||
|
|
│ ├── start.sh # Host模式启动
|
|||
|
|
│ └── docker-start.sh # Docker模式启动
|
|||
|
|
├── data/ # 运行数据(gitignore)
|
|||
|
|
│ ├── state.json # 策略状态(持仓/现金/净值)
|
|||
|
|
│ ├── trading.db # SQLite交易日志
|
|||
|
|
│ └── pool_codes.json # 股票池缓存
|
|||
|
|
├── logs/ # 运行日志
|
|||
|
|
│ ├── engine.log # 引擎日志(按日轮转,保留90天)
|
|||
|
|
│ ├── scheduler.log # 调度日志
|
|||
|
|
│ └── daily_YYYYMMDD.txt # 日终报告
|
|||
|
|
├── Dockerfile # Docker构建
|
|||
|
|
├── docker-compose.yml
|
|||
|
|
└── requirements.txt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 快速开始
|
|||
|
|
|
|||
|
|
### Host模式(推荐NAS使用)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 启动调度器(后台运行)
|
|||
|
|
nohup bash scripts/start.sh > logs/startup.log 2>&1 &
|
|||
|
|
|
|||
|
|
# 或手动运行一天
|
|||
|
|
python3 scripts/trade_tool.py run --date 20260403
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Docker模式
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 构建 & 启动
|
|||
|
|
bash scripts/docker-start.sh
|
|||
|
|
|
|||
|
|
# 查看日志
|
|||
|
|
docker logs -f trading-signal
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 命令行工具
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看状态
|
|||
|
|
python3 scripts/trade_tool.py status
|
|||
|
|
|
|||
|
|
# 初始化(重置资金)
|
|||
|
|
python3 scripts/trade_tool.py init --cash 100000
|
|||
|
|
|
|||
|
|
# 手动买入
|
|||
|
|
python3 scripts/trade_tool.py buy 600519.SH --price 1700 --qty 100
|
|||
|
|
|
|||
|
|
# 手动卖出
|
|||
|
|
python3 scripts/trade_tool.py sell 600519.SH --price 1750
|
|||
|
|
|
|||
|
|
# 交易历史
|
|||
|
|
python3 scripts/trade_tool.py history --limit 20
|
|||
|
|
|
|||
|
|
# 净值曲线
|
|||
|
|
python3 scripts/trade_tool.py nav
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 定时任务
|
|||
|
|
|
|||
|
|
| 时间 | 任务 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| 09:00 | 盘前准备 | 刷新股票池 |
|
|||
|
|
| 9:30-14:30 | 每30分钟 | 止损止盈检查 + 补仓 |
|
|||
|
|
| 15:10 | 日终报告 | 更新收盘价 + 生成报告 |
|
|||
|
|
| 周六 10:00 | 周报 | 本周交易统计 |
|
|||
|
|
|
|||
|
|
## HTTP接口
|
|||
|
|
|
|||
|
|
- `http://localhost:8888/status` — JSON状态
|
|||
|
|
- `http://localhost:8888/report` — 文本报告
|
|||
|
|
|
|||
|
|
## 日志系统
|
|||
|
|
|
|||
|
|
### 文件日志
|
|||
|
|
- `logs/engine.log` — 每日轮转,保留90天
|
|||
|
|
- `logs/daily_YYYYMMDD.txt` — 每日报告
|
|||
|
|
|
|||
|
|
### SQLite日志表
|
|||
|
|
|
|||
|
|
| 表名 | 内容 |
|
|||
|
|
|------|------|
|
|||
|
|
| trades | 交易记录(买卖方向/价格/盈亏/原因) |
|
|||
|
|
| daily_log | 每日净值快照 |
|
|||
|
|
| signal_log | 信号记录(买入评分/卖出原因) |
|
|||
|
|
| system_log | 系统事件日志 |
|
|||
|
|
|
|||
|
|
### 查询示例
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import sqlite3
|
|||
|
|
db = sqlite3.connect('data/trading.db')
|
|||
|
|
|
|||
|
|
# 最近交易
|
|||
|
|
db.execute('SELECT date,name,direction,qty,price,pnl,pnl_pct,reason FROM trades ORDER BY id DESC LIMIT 10').fetchall()
|
|||
|
|
|
|||
|
|
# 净值曲线
|
|||
|
|
db.execute('SELECT date,total_nav,return_pct FROM daily_log ORDER BY date').fetchall()
|
|||
|
|
|
|||
|
|
# 交易胜率
|
|||
|
|
db.execute('SELECT COUNT(*), SUM(CASE WHEN pnl>0 THEN 1 END) FROM trades WHERE direction="sell"').fetchall()
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 配置说明
|
|||
|
|
|
|||
|
|
`config/config.json`:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"initial_cash": 100000, // 初始资金
|
|||
|
|
"position": {
|
|||
|
|
"max_position_pct": 0.20, // 单只上限20%
|
|||
|
|
"max_holdings": 5, // 最多5只
|
|||
|
|
"top_n_buy": 3 // 每次最多买3只
|
|||
|
|
},
|
|||
|
|
"exit": {
|
|||
|
|
"stop_loss_pct": -0.08, // 止损-8%
|
|||
|
|
"take_profit_pct": 0.25 // 止盈+25%
|
|||
|
|
},
|
|||
|
|
"scan": {
|
|||
|
|
"interval_days": 10, // 10天扫描间隔
|
|||
|
|
"factor_pool_size": 50 // 因子Top N
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 因子评分
|
|||
|
|
|
|||
|
|
10维纯量价因子:
|
|||
|
|
| 因子 | 权重 | 方向 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| 历史波动率(20日) | 20% | 低波动好 |
|
|||
|
|
| ATR比率 | 18% | 低ATR好 |
|
|||
|
|
| 量比(5/20日) | 10% | 缩量好 |
|
|||
|
|
| 放量突破 | 8% | — |
|
|||
|
|
| MACD柱趋势 | 6% | — |
|
|||
|
|
| 60日动量 | 4% | 低动量好 |
|
|||
|
|
| MA20斜率 | 4% | — |
|
|||
|
|
| RSI(14) | 10% | 低RSI好 |
|
|||
|
|
| MA距离 | 10% | 均线下方好 |
|
|||
|
|
| 换手率 | 10% | 适中好 |
|
|||
|
|
|
|||
|
|
## 回测表现(5年)
|
|||
|
|
|
|||
|
|
| 指标 | 数值 |
|
|||
|
|
|------|------|
|
|||
|
|
| 总收益 | +371.7% |
|
|||
|
|
| 年化收益 | 21.3% |
|
|||
|
|
| 最大回撤 | -35.0% |
|
|||
|
|
| 夏普比率 | 0.82 |
|