时光飞逝,一晃眼十年就过去了。07年底,想去金融行业做开发,从matlab到python,从网络爬虫、语义分析、大数据到现在的深度学习,从证券业资格到投资分析师认证,绕了一大圈。一觉醒来,还在IT圈。
闲话不说,一直想做个软件,现在总算是完成了。这些年零零碎碎的想法,凑成下面这张图:
各模块主要功能是:
1. 准备数据:
虽然从类似tushare网站可以获取相关数据,但在深度和广度上,不能很好满足自己的想法,所以干脆自己造车了。
1)通过爬虫软件从几个主要的财经网站获取资料并进行校验,包括交易数据、基本面数据、宏观数据、机构研报、资金面数据、舆情消息等;
2)建立股票和相应指数、行业的关联;
3)处理交易数据和其他数据的时间匹配问题;
2. 识别因子:
1)计算因子变量:可自定义因子的计算脚本,脚本公式选自文华和通达信软件,重新实现了一遍;
2)打标签:绝对值方式或相对值方式;
3)做截面处理;
4)标准化处理:均值-标准差方式或排序值方式;
5)样本抽样:按时间维度或个股进行抽样;
6)特征变量降维:PCA模型;
3. 选股模型:
选股方式包含以下几种,可进行模型的自由组合,实现择时与选股:
1)技术指标选股:传统技术指标,比如均线组合、KDJ、MACD等,也可以通过公式脚本进行自定义;
2)普通算法:包括KNN、SVM、DT、贝叶斯等分类算法,以及AdaBoost、GradientBoost、RandomForest等强化算法;
3)深度学习:包括CNN、LSTM模型;
4)模型的评价指标:综合考虑召回率和准确率
4. 风控模型:
基于选股模型的结果,计算组合权重,可采用三种方式,最终得到带权重的组合清单:
1)平均权重;
2)运用二次规划模型,设定约束条件(如收益目标、组合风险、个股权重、行业权重等),根据组合风险协方差矩阵,优化组合权重:
A. 在一定的组合风险下,获得最大收益;
B. 在一定的组合收益下,取得最小风险;
3)模型的评价指标:由所有截面期组成的简易分析结果,包括年化收益率、最大回撤比和信息比率
5. 回测模型:
根据风控模型的结果,逐日进行模拟交易:
1)可以通过公式脚本自定义止盈、止损条件;
2)可以设定杠杆比率、手续费、滑点;
3)消除停牌、涨跌停等干扰因素,使得回测模型更加贴近实盘。
4)模型的评价指标:最终得到包括年化收益率、最大回撤比、信息比率、夏普比率在内的50个统计指标。
6. 技术环境:
1)平台环境:阿里云ECS云服务器
2)主机环境:Ubuntu系统
3)开发语言:Python为主,Shell、SQL、Javascript、H5
4)数据采集:Scrapy框架
5)数据存储:MySQL、Hdfs文件系统
6)数据分析:Sklearn、Scipy、Keras+Tensorflow
7)数据展示:后端Matplotlib,前端ECharts
8)WEB服务:Flask+Gunicorn+Nginx
7. 其他:
针对以上3、4、5三个环节,采用了遗传算法进行优化,可逐层优化、也可以组合起来优化。
基本上,整个软件就是这个逻辑架构。目前软件已经完成,后续工作就是寻找更广泛的数据、希望能找到更多的有效因子。
第一次写博文,感谢hylas的鼓励!在此,也要推荐他的两篇博文: