这是一个基于Python的均值回归策略实现,支持MySQL数据库和CSV文件两种数据源。
- 支持MySQL数据库和CSV文件两种数据源
- 实现均值回归策略算法
- 计算多种技术指标(移动平均线、布林带、RSI等)
- 生成买入卖出信号
- 计算策略收益和风险指标
- 提供详细的策略分析报告
quant_list/
├── config.py # 配置文件
├── mean_reversion_mysql.py # MySQL版本的均值回归策略
├── mean_reversion_csv.py # CSV版本的均值回归策略
├── main.py # 主程序
├── requirements.txt # 项目依赖
├── README.md # 项目说明
└── data/ # 数据目录
└── stock_history.csv # CSV数据文件
- 创建conda虚拟环境:
conda create -n quant_list python=3.11
conda activate quant_list- 安装依赖包:
pip install -r requirements.txt在 config.py 文件中配置MySQL数据库连接信息:
DATABASE_CONFIG = {
'database': 'stock_cursor',
'host': 'localhost',
'password': 'root',
'port': 3306,
'username': 'root'
}# 运行MySQL版本的策略
python main.py --ts_code 000001.SZ --start_date 2023-01-01 --end_date 2023-12-31 --data_source mysql
# 运行CSV版本的策略
python main.py --ts_code 000001.SZ --start_date 2023-01-01 --end_date 2023-12-31 --data_source csv
# 同时运行两个版本的策略
python main.py --ts_code 000001.SZ --start_date 2023-01-01 --end_date 2023-12-31 --data_source both--ts_code: 股票代码(必填)--start_date: 开始日期,格式为YYYY-MM-DD(必填)--end_date: 结束日期,格式为YYYY-MM-DD(必填)--data_source: 数据源选择,可选值:mysql、csv、both(默认:both)
- 移动平均线:计算5日、10日、20日、60日移动平均线
- 布林带:基于20日移动平均线和标准差计算上下轨
- RSI指标:14日相对强弱指标
- 价格偏离度:当前价格相对于20日均线的偏离百分比
买入信号(满足以下任一条件):
- 价格低于布林带下轨
- RSI < 30(超卖)
- 价格偏离度 < -5%
卖出信号(满足以下任一条件):
- 价格高于布林带上轨
- RSI > 70(超买)
- 价格偏离度 > 5%
- 策略总收益:基于交易信号的累计收益
- 买入持有收益:简单买入持有策略的收益
- 超额收益:策略收益减去买入持有收益
- 夏普比率:风险调整后的收益指标
- 最大回撤:策略运行期间的最大亏损幅度
策略运行后会输出以下信息:
- 基本信息:股票代码、时间范围、数据点数
- 收益统计:总收益、买入持有收益、超额收益、夏普比率、最大回撤
- 交易统计:买入信号数、卖出信号数、总交易次数
MySQL数据库需要包含以下表结构:
CREATE TABLE stock_daily_history (
ts_code varchar(20) NOT NULL COMMENT '股票代码',
trade_date date NOT NULL COMMENT '交易日期',
open decimal(10,2) DEFAULT NULL COMMENT '开盘价',
high decimal(10,2) DEFAULT NULL COMMENT '最高价',
low decimal(10,2) DEFAULT NULL COMMENT '最低价',
close decimal(10,2) DEFAULT NULL COMMENT '收盘价',
pre_close decimal(10,2) DEFAULT NULL COMMENT '昨收价',
change_c decimal(10,2) DEFAULT NULL COMMENT '涨跌额',
pct_chg decimal(10,2) DEFAULT NULL COMMENT '涨跌幅',
vol bigint DEFAULT NULL COMMENT '成交量',
amount decimal(20,2) DEFAULT NULL COMMENT '成交额',
PRIMARY KEY (ts_code,trade_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CSV文件应包含以下列:
- ts_code: 股票代码
- trade_date: 交易日期
- open: 开盘价
- high: 最高价
- low: 最低价
- close: 收盘价
- pre_close: 昨收价
- change_c: 涨跌额
- pct_chg: 涨跌幅
- vol: 成交量
- amount: 成交额
- 确保MySQL数据库服务正在运行
- 确保CSV文件路径正确且文件存在
- 股票代码格式应与数据库/CSV文件中的格式一致
- 日期范围应在数据可用范围内
可以根据需要扩展以下功能:
- 添加更多技术指标
- 优化交易信号生成逻辑
- 增加风险管理模块
- 添加可视化图表
- 支持多股票组合策略