# 股票量化回测_第9组 **Repository Path**: wcxhs/stock-quantitative-back-test_G9 ## Basic Information - **Project Name**: 股票量化回测_第9组 - **Description**: 股票量化回测大作业~ - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 10 - **Created**: 2021-12-15 - **Last Updated**: 2021-12-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 股票量化回测——Python解决方案 > 组员:杨智昊、罗婧渝、谢文杰、郑荟鑫、徐福佳 ## 类的划分 - **数据读取类**:```ReadFile``` - 所在文件:```fileRW.py``` - 读入pickle类型的原始数据。 - **单只股票信息管理类**:```StockInfo``` - 所在文件:```stockInfo.py``` - 给定股票ID,用户可访问单只股票的所有信息; - 可以根据需要扩展设计函数。 - **回测类**:```BackTest``` - 所在文件:```backTest.py``` - 需要调用策略类,在历史数据中根据策略进行交易; - 记录和更新每天的资产变化、持仓详情,并计算每天的收益率; - 会调用日志纪录类记录每日持仓。 - 支持自定义**回测时间段、初始资金、持仓周期**和**持有股票数**等参数。 - **数据预处理类**:```PreHandle``` - 所在文件:```pre_handle.py``` - 函数: - ```prehandle(self, dict) ```:用于涨幅策略数据预处理 - ```prehandle_db_avg_stgy(self,dict) ```:用于双均线策略数据预处理 - **策略类**:```Strategy``` - 所在文件:```strategies.py``` - 设定交易策略,需要根据历史数据更新持仓; - 交易策略目前实现了涨幅策略和双均线策略; - **涨幅策略**: - 根据前n天股票的涨幅进行交易; - 支持自定义**回测时间段、初始资金、持仓周期**和**持有股票数**。 - 将前n天股票的涨幅进行从高到低排序,取涨幅在前k名的股票进行建仓换仓,每过一个特定周期就进行调仓换股票 - **双均线策略**: ![双均线的一个例子](./figure/双均线的一个例子.png) - 双均线,一条是长周期均线(自行设置周期),一条是短周期均线(自行设置周期),当短期均线从下往上穿越长周期均线时(交点为**金叉**),进行买入。当短周期均线从上往下穿越长周期均线时(交点为**死叉**),进行卖出。 - 双均线金叉的时候,表示股票很强势;反之很弱势。那么就在强势的时候买入,弱势的时候卖出即可。 - 支持自定义**回测时间段、初始资金、短期均线、长期均线**和**持有股票数**。 - 每只股票相互独立,各自采用双均线策略进行建仓买入以及调仓卖出 - **待加策略**: - 机器学习策略 - 因为因子数据是时间序列数据,并且因子之间的关系比较复杂,所以尝试使用长短时记忆网络(LSTM)来学习历史因子数据与未来收盘价时间序列的关系。 - 与涨幅策略类似,区别在于机器学习策略基于预测的未来涨幅,涨幅策略基于历史涨幅。 - 目前实现了模型训练,暂时还没有将预测功能加入策略中,后期有时间会加入。 - 评论数选股策略 ​ 1、从东方财富网股吧上爬取相应股票的评论数和发帖时间; ​ 2、将在同一天发帖的帖子的评论数求和,得出每只股票每天的帖子评论数; ​ 3、评论数体现了投资者关注度,可以根据评论数进行选股。 - **日志记录类**:```LogRecording``` - 所在文件:```logRecording.py``` - 将每天的**持仓详情**和**每支所持有股票相对于所在持仓周期第一天的涨幅**写入本地文件。 - **可视化类**:```Visualization``` - 所在文件:```visualization.py``` - 可绘制基准收益曲线和策略收益曲线,基准收益为一直持有上证指数或沪深300指数的收益变化; - 可根据给定的**执行策略**和**回测时间**进行绘制; - 可通过调用结果分析类中的函数,绘制**分组对比柱状图**。 - **结果分析类**:```ResultAnalysis``` - 所在文件:```resultAnalysis.py``` - 可计算的评价指标有: - **总收益** - **总收益率** - **年化收益率** - 将回测的股票(组合)的总收益率换算成以年为单位的几何平均收益率。数值越高代表不考虑风险的情况下股票的表现越好。 - **最大回撤、最大回撤率、最大回撤天数** - 最大回撤是衡量策略风险的重要指标,可理解为可能发生的最大亏损幅度,其值等于策略收益曲线上,高点到后期最低点的回撤幅度的最大值。 - 最大回撤率越小,说明投资策略越稳定。 - **击败基准比率(日胜率)** - 统计日收益率打败基准收益的概率。数值越大越好,表示策略收益能力越强。 - **夏普比率** - 其数值意思为在承受单位风险的情况下,所能获取的回报。 - 通过该类,可以与一直持有基准指数的策略做对比。 - **神经网络训练类**:```TrainModel``` - 所在文件:```train_model.py``` - 用前m天全部因子的时间序列数据来预测后n天的收盘价; - 需要构造训练集和验证集,需要调用单只股票信息管理类; - 划分数据集:可以通过参数定义来设置划分比例,比如用2010-2015年的数据作为训练集,2016年的数据作为验证集,保存在验证集上预测效果最好的模型; - 设定回测时间为2017-2019年,进行回测; - 将模型应用到策略中:每到一个持仓周期进行调仓,根据历史数据预测所有股票未来的涨幅,选取前k个股票,反馈给回测系统进行买入。 - **main方法** - 总体调用各个类,实现股票量化回测的功能,以及结果分析与可视化。 ## 可视化结果 ![资金变化对比图](./figure/资金变化对比图.png) ![双均线资金变化曲线图](./figure/双均线资金变化曲线图.png) ![各项指标对比图](./figure/各项指标对比图.png) ![各项指标对比图_两个策略](./figure/各项指标对比图_两个策略.png)