Skip to content

algo23-Jinzhao/Assignment2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

择时回测系统(向量化框架)

目录

背景

出于对指数增强策略的兴趣,选取指数增强策略中的个股择时增强方法。

  1. 参考研报《基于成分股择时的指数增强策略》的个股择时增强思想,构建择时回测系统,回测各类个股择时策略,构建投资组合并对标沪深300指数。
  2. 择时回测系统目前只运用于日度数据,对于高频数据的择时回测系统需要采用事件驱动框架进一步开发,然后采用机器学习或者强化学习的方法构建策略。

各模块说明

沪深300成分股数据

  • getComponents.py: 通过baostock API得到成分股代码,存入components.csv
  • getData.py: 在components.csv基础上,通过baostock API得到成分股历史行情等特征,存入data和data(adjust)文件夹,其中data(adjust)为后复权数据;
  • getWeights.py: 在components.csv基础上,通过baostock API得到成分股权重,存入weights.csv
  • getIndexData.py: 通过akshare API得到指数收盘价作为业绩基准,存入沪深300.csv

core

  • template.py: 实现策略基类,抽象产生signal的方法,方便strategy文件夹里的策略来继承;
  • backTestEngine.py:回测引擎,负责传参调用策略;
  • running.py: 启动回测的模块,代码运行的核心;
  • getPlot.py: 绘图模块,实现结果可视化;
  • getPerformance.py:计算策略评价指标的模块。

figures

保存getPlot.py生成的图像

stocks return

保存策略回测生成的收益率序列,子文件夹由策略名命名,子文件夹的子文件夹由策略的参数命名,这样存储便于参数敏感性分析

portfolio return

将股票收益率进行组合,便于对比基准,检验择时效果

安装所需依赖包

内容见 requirements.txt

代码运行

  1. /strategy文件夹用于存放策略模块,继承template.py中的基类;
  2. 主要运行/core/running.py里面的函数,调用backTestEngine.py里的函数得到回测结果。

结果分析

参数敏感性分析

BackTrend:[20,50], RUMI:[5,10][20,60],这两个策略对参数不敏感,区间内较为稳定;
VNSP:[40,60]
[20,60],对参数比较敏感,第一个参数越小越好,第二个参数越大越好,具体原因有待探究;
最终得到参数表现较好的一组:BackTrend:40, RUMI:5_60, VNSP:40_60

多信号策略

选取表现较好的参数构建多信号策略。
多信号策略的信号确定主要有两种方法:
一种是所有信号都看多则看多,所有信号都看空则看空,否则跟随趋势。(信号少)
第二种是将信号看多记为+1,看空记为-1,信号进行简单相加后,若大于0,则看多,小于0,则看空。(类似投票)
可以看出简单相加的效果较好。
对于择时信号的组合,第一种方法的适用性在信号较多时会失效,因为出现同向信号的可能性会变得很低;第二种方法还可采用加权的方式,但是权重如何取得,是有待探究的。

不足与改进

  1. 后续引入机器学习方法,将多个择时指标(多个信号)作为特征进行机器学习,需要补充指标,目标为20个。标签目前是考虑采用第二天的收益率;但由于机器学习方法需要大量数据,故可能会考虑采用分钟数据产生signal,这样需要更新回测系统,可能会改进为分钟级别的事件驱动回测系统。
  2. 除了采用机器学习的方法,还可以对策略进行组合,这样能优化每个策略的曲线,使得整体曲线更为平滑,这个策略组合的方法还有待研究;
  3. 在策略构建完成后,需要改变数据集,即对中证500,中证1000这样的样本进行回测,观察效果。

项目主要负责人

@algo23-Jinzhao

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages