README.md
# 超短线量化选股程序(插件化架构)
## 项目概述
交易日14:30基于当日未收盘实时数据+历史日线数据选股,当日买入、次日卖出(T日买T+1日卖),由大模型主导挖掘规律,程序全自动历史回测全样本股票、迭代优化参数,最终实现每日自调整、高胜率选股,可对接OpenClaw做持续实时迭代。
## 架构设计
### 核心架构
采用**插件化、解耦架构**,整体分为两层:
1. **选股器(核心调度层)**:通用唯一入口
- 负责从股票数据库中循环读取每一只股票的数据
- 负责加载、管理、切换不同策略
- 负责最终汇总结果
2. **策略(纯判断层)**:独立模块
- 每个策略只做一件事:传入一只股票的数据 → 返回是否符合条件(True/False)
- 策略内部绝对不做循环遍历股票
- 策略之间互相独立,可随时增删、替换、切换
### 项目结构
```
quant_trading/
├── src/ # 源代码目录
│ ├── strategies/ # 策略插件目录
│ │ ├── base_strategy.py # 策略基类(定义统一接口)
│ │ ├── vcp_strategy.py # VCP策略实现
│ │ ├── model_strategy.py # 大模型选股策略实现
│ │ ├── test_strategy.py # 测试策略实现
│ │ └── __init__.py # 策略模块包
│ ├── strategy_manager.py # 策略管理模块(加载、管理、切换策略)
│ ├── stock_selector.py # 选股器核心调度器(通用唯一入口)
│ ├── data_manager.py # 数据管理模块
│ ├── model_api.py # 大模型调用模块
│ ├── backtester.py # 全样本回测模块
│ ├── parameter_optimizer.py # 参数迭代优化模块
│ ├── daily_adjuster.py # 每日自调整模块
│ ├── scheduler.py # 调度模块
│ ├── config_manager.py # 配置管理
│ └── utils.py # 工具函数
├── config/ # 配置文件目录
├── data/ # 数据存储目录
├── logs/ # 日志目录
├── results/ # 结果输出目录
├── .env.example # 环境变量示例文件
├── requirements.txt # 依赖清单
├── main.py # 主程序入口
└── README.md # 项目说明文档
```
## 安装与运行
### 1. 安装依赖
```bash
pip install -r requirements.txt
```
### 2. 配置环境变量
复制 `.env.example` 为 `.env` 并填写相应配置:
```bash
cp .env.example .env
```
编辑 `.env` 文件:
```env
# Tushare API配置
TUSHARE_TOKEN=your_tushare_token
# 火山引擎API配置
VOLCENGINE_API_KEY=your_volcengine_api_key
VOLCENGINE_API_BASE=https://ark.cn-beijing.volces.com/api/v3/chat/completions
VOLCENGINE_MODEL=doubao-pro-32k
# 数据库配置
DB_PATH=data/stock_data.db
# 日志配置
LOG_PATH=logs/quant_trading.log
# 选股参数
SELECTION_TIME=14:30
STOCK_SELECTION_COUNT=10
MIN_TURNOVER_RATE=1.0
MAX_STOCK_COUNT=3000
# 回测参数
BACKTEST_START_DATE=20200101
BACKTEST_END_DATE=20241231
# 大模型参数
TEMPERATURE=0.1
TOP_P=0.9
MAX_TOKENS=8192
```
### 3. 初始化项目
```bash
python main.py --init
```
### 4. 运行程序
#### 手动触发选股
```bash
# 使用单个策略选股
python main.py --select --strategies vcp
# 使用多个策略组合选股(逻辑与,同时符合所有策略条件)
python main.py --select --strategies vcp,model
# 使用所有策略选股
python main.py --select --strategies vcp,model,test
```
#### 手动触发回测
```bash
python main.py --backtest
```
#### 手动触发参数优化
```bash
python main.py --optimize
```
#### 启动调度服务
```bash
python main.py --schedule
```
#### 一键测试程序功能
```bash
python main.py --test
```
#### 手动更新历史数据
```bash
python main.py --update
```
## 策略说明
### 现有策略
#### 1. VCP策略(`VCPStrategy`)
**策略描述**:VCP(波动率收缩模式)策略:通过寻找股价波动率持续收缩的股票
**核心原理**:
- 寻找价格波动率持续收缩的时期
- 检查收缩期长度和幅度
- 验证突破幅度和成交量变化
- 结合RSI和MACD指标进行确认
**默认参数**:
```json
{
"min_contraction_period": 20,
"max_contraction_period": 60,
"volatility_threshold": 0.15,
"breakout_threshold": 0.05,
"min_price": 5,
"max_price": 200,
"min_volume_ratio": 1.5,
"min_macd_signal": 0.01,
"rsi_upper_bound": 70,
"rsi_lower_bound": 30
}
```
#### 2. 大模型选股策略(`ModelStrategy`)
**策略描述**:大模型选股策略:基于AI模型分析股票数据
**核心原理**:
- 计算股票的基本指标和选股因素
- 调用火山引擎大模型进行分析
- 基于模型评分判断股票是否符合条件
**默认参数**:
```json
{
"learning_window": "90日",
"profit_threshold": "3%",
"stock_count": "10只",
"volume_ratio_threshold": "1.5倍"
}
```
#### 3. 测试策略(`TestStrategy`)
**策略描述**:测试策略:简单的均线交叉策略,用于开发和测试
**核心原理**:
- 计算短期和长期移动平均线
- 检查均线交叉情况
- 验证价格范围和成交量条件
**默认参数**:
```json
{
"short_ma_period": 5,
"long_ma_period": 20,
"min_price": 10,
"max_price": 100,
"min_volume": 1000000,
"min_turnover": 10000000
}
```
## 添加新策略
### 1. 创建策略类
在 `src/strategies/` 目录下创建新的策略文件(例如 `my_strategy.py`):
```python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
我的策略实现类 - 描述策略功能
"""
import logging
import pandas as pd
from typing import Dict, Any
from src.strategies.base_strategy import BaseStrategy
# 配置日志
logger = logging.getLogger(__name__)
class MyStrategy(BaseStrategy):
"""我的策略实现"""
def _get_description(self) -> str:
"""获取策略描述"""
return "我的策略:描述策略功能"
def _get_default_params(self) -> Dict[str, Any]:
"""获取策略默认参数"""
return {
"param1": 10,
"param2": 0.5,
"param3": "value"
}
def check_stock(self, ts_code: str, df_stock: pd.DataFrame) -> bool:
"""
检查单只股票是否符合策略条件
参数:
ts_code: 股票代码
df_stock: 股票历史数据
返回:
bool: 是否符合条件
"""
try:
# 策略逻辑实现
# 检查股票数据是否符合策略条件
# 返回 True 或 False
return True
except Exception as e:
logger.error(f"检查股票 {ts_code} 时出错: {e}")
return False
```
### 2. 更新策略模块包
在 `src/strategies/__init__.py` 中添加新策略类:
```python
from src.strategies.my_strategy import MyStrategy
__all__ = [
"BaseStrategy",
"VCPStrategy",
"ModelStrategy",
"TestStrategy",
"MyStrategy"
]
```
### 3. 使用新策略
```bash
python main.py --select --strategies my,other_strategy
```
## 核心模块说明
### 策略管理模块 (`strategy_manager.py`)
负责策略的加载、管理和切换,支持:
- 自动加载策略目录下的所有策略
- 策略的注册和取消注册
- 策略参数的获取和设置
- 策略列表的查询
### 选股器核心调度器 (`stock_selector.py`)
作为通用唯一入口,负责:
- 从股票数据库中循环读取每一只股票的数据
- 加载、管理、切换不同策略
- 最终汇总结果
- 支持策略组合选股
### 数据管理模块 (`data_manager.py`)
负责历史日线数据下载、增量更新、当日14:30实时数据获取、SQLite数据库管理等功能。
### 大模型调用模块 (`model_api.py`)
封装火山引擎API调用,支持传入历史双数据、当日双数据、实时消息和最优参数,返回标准化JSON结果。
### 全样本回测模块 (`backtester.py`)
严格模拟真实交易,对历史每一个交易日做全样本回测,输出详细回测报告。
### 参数迭代优化模块 (`parameter_optimizer.py`)
自动遍历参数池、筛选最优参数、触发大模型规律重挖掘,实现闭环优化。
### 每日自调整模块 (`daily_adjuster.py`)
每日收盘后自动触发,完成当日数据回测、参数微调、规律有效性验证。
### 调度模块 (`scheduler.py`)
实现每日14:30自动选股、每日收盘后自动回测/迭代、非交易时间定时数据更新。
## 输出文件说明
### 选股结果
- `results/selections/YYYYMMDD_{strategy_name}_selected_stocks.csv`:每日选股结果
- `results/selections/YYYYMMDD_{strategy_name}_selected_stocks.json`:每日选股结果(JSON格式)
### 回测报告
- `results/backtests/YYYYMMDD_backtest_report.csv`:回测报告(CSV格式)
- `results/backtests/YYYYMMDD_backtest_report.txt`:回测报告(文本格式)
### 优化结果
- `results/optimization/best_parameters.json`:最优参数配置
- `results/optimization/parameter_optimization_log.csv`:参数优化日志
### 大模型规律
- `results/models/trading_rules_YYYYMMDD.json`:大模型挖掘的交易规律
## OpenClaw对接说明
### 前置准备
1. 确保程序已正确配置并能正常运行
2. 安装OpenClaw并配置好运行环境
3. 将程序部署到OpenClaw可访问的目录
### 调用方式
OpenClaw可通过命令行调用程序的各个功能:
```python
# 自动选股
run_command("python /path/to/quant_trading/main.py --select --strategies vcp,model")
# 自动回测
run_command("python /path/to/quant_trading/main.py --backtest")
# 自动参数优化
run_command("python /path/to/quant_trading/main.py --optimize")
```
### 结果读取
OpenClaw可直接读取程序输出的CSV、JSON和文本文件,进行二次分析和迭代。
## 注意事项
1. **API额度限制**:Tushare和火山引擎API都有额度限制,使用时请注意控制调用频率
2. **数据更新**:首次运行需要下载大量历史数据,可能需要较长时间
3. **回测时间**:全样本回测需要处理大量数据,时间较长,请耐心等待
4. **风险提示**:量化交易有风险,回测结果仅供参考,实盘交易需谨慎