python量化交易学习笔记_Python量化交易学习笔记(45)——深度学习挖短线股5
前4篇文章分别记录了利用深度学习挖短线股的数据预处理、模型训练、结果预测及策略回测过程,本文记录根据筛选短线股票的过程。
选股流程
1.股票数据下载更新
例如现在是2020年11月23日19:00,我们想找到按深度学习策略,明天应该买什么股票。那么首先将股票日线数据更新至2020年11月23日,日线数据下载可参考笔记(39)。
2.股票扩展数据计算
计算股票的扩展指标,参考笔记(41)第2部分内容。
这里可以做进一步优化,如果每天都进行扩展数据计算,实际只需要对更新的当日数据进行计算,而无需对历史数据进行重新计算,这样可以大幅减少计算时间。
对比第1步数据下载更新,如果每天都进行更新下载,则实际每天只需下载当日K线数据,所需时间也会相应减少。
3.预测数据处理
完成扩展指标计算后,需要将近10日的指标都合并到当天数据上(参考笔记(41)),将数据转为输入特征。
# 准备特征数据
# 删除无效数据列,保留特征数据
df.drop(columns=['date', 'buy'], inplace=True)
# 取后FEATURE_N行数据
df = df.iloc[-FEATURE_N:]
# 生成用于预测的特征
arr = df.values.reshape(1, -1)
# 将数据导入输入字典
input_dict = {}
for i in range(arr.shape[1]):
input_dict[i] = arr[0][i]
input_dict = {name: tf.convert_to_tensor([value]) for name, value in input_dict.items()}
4.加载模型进行预测
加载笔记(42)训练得到的模型,对上一步的输入做预测。
# 加载模型
loaded_model = keras.models.load_model('./model/{}'.format(stk_code))
# 进行预测
predictions = loaded_model.predict(input_dict)
5.正则化选股
参考笔记(44)中使用的正则化,读取笔记(43)所得到的预测数据,对当前预测结果进行正则化,排序选出预测数值最大的股票,即为优选股票。
# 正则化
# 读入批量预测值
df = pd.read_csv('./baostock/predict_results/{}res.csv'.format(stk_code))
res_list = df['predict_result'].tolist()
# 添加当日预测结果
res_list.append(predictions[0][0])
# 正则化当日预测结果
delta = max(res_list) - min(res_list)
result_dict[stk_code] = (predictions[0][0] - min(res_list)) / delta
print(sorted(result_dict.items(), key=lambda x: x[1], reverse=True))
输出结果
程序会不断输出类似这样的结果:
[('sh.600104', 1.0), ('sh.600114', 1.0), ('sh.600168', 1.0), ('sh.600219', 1.0), ('sh.600257', 1.0), ('sh.600507', 1.0), ('sh.600570', 1.0), ('sh.600589', 1.0), ('sh.600616', 1.0),...
即,按正则化预测值从大到小的顺序输出股票代码及其预测值。但是速度是超级慢,24小时只处理了1000多只股票。
分析思考
利用深度学习去挖个股的路线已经走通,但是效果和效率上都有待提升。
输入特征方面,目前仅使用了几个简单维度的指标作为特征,可以通过计算其他指标来增加收入特征,也可以通过分析剔除作用较小的特征。
网络模型方面,目前使用的神经网络层数较少,节点数固定,可通过增加网络层数、调整节点树木进一步调优。
样本处理方面,短期暴涨显然是小概率事件,也就导致我们训练时,暴涨的样本数量较少。所以我们的问题成为一个不平衡分类问题。这就是虽然在训练中看到准确率高达近90%,但是回测结果依然有限的原因。需要对此类问题进行针对性处理。
模型的训练及预测时间过长,缺乏实用性,除了升级硬件、改进代码外,可以考虑选择部分股票作为选股范围。
选股代码:
import tensorflow as tf
import numpy as np
import pandas as pd
import os
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras import backend
# 使用前FEATURE_N的K线数据作为输入特征
FEATURE_N = 10
# 存储预测结果字典
result_dict = {}
# 存储参与深度学习策略的股票
stk_code_file = './stk_data/dp_stock_list.csv'
# 读取股票列表
stk_list = pd.read_csv(stk_code_file)['code'].tolist()
# 对每只股票分别进行预测,计算归一化后的预测值
for stk_code in stk_list:
print('processing {}...'.format(stk_code))
# 读取扩展指标
df = pd.read_csv('./baostock/data_ext/{}.csv'.format(stk_code))
# 没有足够的特征数据就跳过
if df.shape[0] < FEATURE_N:
continue
# 准备特征数据
# 删除无效数据列,保留特征数据
df.drop(columns=['date', 'buy'], inplace=True)
# 取后FEATURE_N行数据
df = df.iloc[-FEATURE_N:]
# 生成用于预测的特征
arr = df.values.reshape(1, -1)
# 预测
# 将数据导入输入字典
input_dict = {}
for i in range(arr.shape[1]):
input_dict[i] = arr[0][i]
input_dict = {name: tf.convert_to_tensor([value]) for name, value in input_dict.items()}
# 加载模型
loaded_model = keras.models.load_model('./model/{}'.format(stk_code))
# 进行预测
predictions = loaded_model.predict(input_dict)
# 正则化
# 读入批量预测值
df = pd.read_csv('./baostock/predict_results/{}res.csv'.format(stk_code))
res_list = df['predict_result'].tolist()
# 添加当日预测结果
res_list.append(predictions[0][0])
# 正则化当日预测结果
delta = max(res_list) - min(res_list)
result_dict[stk_code] = (predictions[0][0] - min(res_list)) / delta
print(sorted(result_dict.items(), key=lambda x: x[1], reverse=True))
# 清理内存
backend.clear_session()
print(sorted(result_dict.items(), key=lambda x: x[1], reverse=True))
欢迎大家关注、点赞、转发、留言,感谢支持!
为了便于相互交流学习,已建微信群,感兴趣的读者请加微信。
近期新建QQ群:676186743,方便资料共享,定期发布学习任务,欢迎加入!
python量化交易学习笔记_Python量化交易学习笔记(45)——深度学习挖短线股5相关推荐
- Python量化交易学习笔记(45)——深度学习挖短线股5
前4篇文章分别记录了利用深度学习挖短线股的数据预处理.模型训练.结果预测及策略回测过程,本文记录根据筛选短线股票的过程. 选股流程 1.股票数据下载更新 例如现在是2020年11月23日19:00,我 ...
- python原理书籍_python书籍推荐:《深入浅出深度学习:原理剖析与Python实践》
在过去的这十年,深度学习已经席卷了整个科技界和工业界,2016年谷歌阿尔法狗打败围棋世界冠军李世石,更是使其成为备受瞩目的技术焦点. 今日,小编就为大家推荐一本能让初学者和"老司机" ...
- 《Python深度学习》读书笔记:第1章 什么是深度学习
目录 第1章 什么是深度学习 1.1 人工智能.机器学习与深度学习 1.1.1 人工智能 1.1.2 机器学习 1.1.3 从数据中学习表示 1.1.4 深度学习之"深度" 1.1 ...
- 【CS231n 课程笔记】第八讲-----常见的深度学习框架,以及GPU和CPU介绍。
目录 0.写在前面 1.CPU VS GPU 1.1GPU 与CPU的比较 1.2性能测试 1.3实践中的问题 2.深度学习框架 2.1 计算图思想和深度学习框架 2.2 tensorflow 2.2 ...
- 如何用Python一门语言通吃高性能并发、GPU计算和深度学习
[CTO讲堂]如何用Python一门语言通吃高性能并发.GPU计算和深度学习 发表于2016-01-04 15:11| 4374次阅读| 来源CSDN| 4 条评论| 作者蒲婧 CTO俱乐部CTOCT ...
- 化学人学python有前途吗-Java之父点赞的开源Java深度学习框架,你不学下吗?
深度学习领域中有很多面向Python开发者的资源与教程,比如使用NumPy进行数据分析.使用MatPlotlib进行可视化等:深度学习框架方面,TensorFlow.PyTorch.MXNet等常用框 ...
- Python黑马头条推荐系统第四天 TensorFlow框架介绍和深度学习
深度学习与推荐系统 6.1 推荐系统与深度学习关联 学习目标 目标 无 应用 无 6.1.1 深度学习到推荐系统 深度学习发展成功与局限 最近几年深度学习的流行,大家一般认为是从2012年 AlexN ...
- 最全Python培训课程,基础班+高级就业班+课件(数据分析、深度学习、爬虫、人工智能等) 精品课程
最新版Python全套培训课程视频,绝对零基础到Python大牛.包括:零基础得python基础班, 高阶进阶就业篇完整版(含:数据分析.机器学习.网络爬虫.数据挖掘.深度学习.人工智能等)课程共10 ...
- 基于Python+百度语音的智能语音ChatGPT聊天机器人(机器学习+深度学习+语义识别)含全部工程源码 适合个人二次开发
目录 前言 总体设计 系统整体结构图 系统流程图 运行环境 Python 环境 Pycharm 环境 ChatterBot 环境 模块实现 1. 模型构建 2. 服务器端 3. 客户端 4. 语音录入 ...
最新文章
- 70佳精美的PSD素材免费下载(上篇)
- 信息网络安全技术知识
- python将非0数视为false_python 面试题
- python choice添加下拉框_自定义Django Form中choicefield下拉菜单选取数据库内容实例...
- CodeIgniter配置之config
- 数据访问增删改查之单项查询
- 数字0-9的数量(51Nod-1042)
- java程序员_哪些书是不可错过的?Java程序员书单分享
- 解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题
- 编程之美——题目2 : 回文字符序列
- ThinkPHP 数据库操作,插入,更新,删除,查询
- ArcGIS操作小技巧(七)之制作漂亮的萤火虫图
- POI设置单元格颜色及枚举颜色对照
- 小米mini路由器刷breed不死鸟和潘多拉固件
- Arcgis空间自相关Moran I(莫兰指数)
- Unity一键修改NGUI字体的编辑器脚本
- Ant-design 源码分析之数据展示(八)Descriptions
- 判断BIOS的启动模式和磁盘分区格式
- [附源码]计算机毕业设计基于Springboot校园运动会管理系统
- linux执行脚本提示文件忙,linux定时执行脚本文件fgo 封号吗
热门文章
- 游戏停车场管理系统 (c语言)
- edHat linux光盘引导,RHEL6通过安装光盘或ISO文件制作本地yum源的方法
- qt5 textedit怎么改变鼠标响应_聊聊鼠标的前世今生
- js 日期加一年_?Day.js 2KB时间库 和Moment.js一样的API
- 最小二乘法用于直线,多项式,圆,椭圆的拟合及程序实现
- linux 内核 权限,linux – 内核模块执行中的不同权限
- UnityShader-素描铅笔画风格 实现详解
- 2022年高压电工考试技巧及高压电工复审考试
- 广青linux用户和组-课后答案-centos7
- MATLAB GUI设计 图像处理基本操作(一)