前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相关推荐

  1. Python量化交易学习笔记(45)——深度学习挖短线股5

    前4篇文章分别记录了利用深度学习挖短线股的数据预处理.模型训练.结果预测及策略回测过程,本文记录根据筛选短线股票的过程. 选股流程 1.股票数据下载更新 例如现在是2020年11月23日19:00,我 ...

  2. python原理书籍_python书籍推荐:《深入浅出深度学习:原理剖析与Python实践》

    在过去的这十年,深度学习已经席卷了整个科技界和工业界,2016年谷歌阿尔法狗打败围棋世界冠军李世石,更是使其成为备受瞩目的技术焦点. 今日,小编就为大家推荐一本能让初学者和"老司机" ...

  3. 《Python深度学习》读书笔记:第1章 什么是深度学习

    目录 第1章 什么是深度学习 1.1 人工智能.机器学习与深度学习 1.1.1 人工智能 1.1.2 机器学习 1.1.3 从数据中学习表示 1.1.4 深度学习之"深度" 1.1 ...

  4. 【CS231n 课程笔记】第八讲-----常见的深度学习框架,以及GPU和CPU介绍。

    目录 0.写在前面 1.CPU VS GPU 1.1GPU 与CPU的比较 1.2性能测试 1.3实践中的问题 2.深度学习框架 2.1 计算图思想和深度学习框架 2.2 tensorflow 2.2 ...

  5. 如何用Python一门语言通吃高性能并发、GPU计算和深度学习

    [CTO讲堂]如何用Python一门语言通吃高性能并发.GPU计算和深度学习 发表于2016-01-04 15:11| 4374次阅读| 来源CSDN| 4 条评论| 作者蒲婧 CTO俱乐部CTOCT ...

  6. 化学人学python有前途吗-Java之父点赞的开源Java深度学习框架,你不学下吗?

    深度学习领域中有很多面向Python开发者的资源与教程,比如使用NumPy进行数据分析.使用MatPlotlib进行可视化等:深度学习框架方面,TensorFlow.PyTorch.MXNet等常用框 ...

  7. Python黑马头条推荐系统第四天 TensorFlow框架介绍和深度学习

    深度学习与推荐系统 6.1 推荐系统与深度学习关联 学习目标 目标 无 应用 无 6.1.1 深度学习到推荐系统 深度学习发展成功与局限 最近几年深度学习的流行,大家一般认为是从2012年 AlexN ...

  8. 最全Python培训课程,基础班+高级就业班+课件(数据分析、深度学习、爬虫、人工智能等) 精品课程

    最新版Python全套培训课程视频,绝对零基础到Python大牛.包括:零基础得python基础班, 高阶进阶就业篇完整版(含:数据分析.机器学习.网络爬虫.数据挖掘.深度学习.人工智能等)课程共10 ...

  9. 基于Python+百度语音的智能语音ChatGPT聊天机器人(机器学习+深度学习+语义识别)含全部工程源码 适合个人二次开发

    目录 前言 总体设计 系统整体结构图 系统流程图 运行环境 Python 环境 Pycharm 环境 ChatterBot 环境 模块实现 1. 模型构建 2. 服务器端 3. 客户端 4. 语音录入 ...

最新文章

  1. 70佳精美的PSD素材免费下载(上篇)
  2. 信息网络安全技术知识
  3. python将非0数视为false_python 面试题
  4. python choice添加下拉框_自定义Django Form中choicefield下拉菜单选取数据库内容实例...
  5. CodeIgniter配置之config
  6. 数据访问增删改查之单项查询
  7. 数字0-9的数量(51Nod-1042)
  8. java程序员_哪些书是不可错过的?Java程序员书单分享
  9. 解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题
  10. 编程之美——题目2 : 回文字符序列
  11. ThinkPHP 数据库操作,插入,更新,删除,查询
  12. ArcGIS操作小技巧(七)之制作漂亮的萤火虫图
  13. POI设置单元格颜色及枚举颜色对照
  14. 小米mini路由器刷breed不死鸟和潘多拉固件
  15. Arcgis空间自相关Moran I(莫兰指数)
  16. Unity一键修改NGUI字体的编辑器脚本
  17. Ant-design 源码分析之数据展示(八)Descriptions
  18. 判断BIOS的启动模式和磁盘分区格式
  19. [附源码]计算机毕业设计基于Springboot校园运动会管理系统
  20. linux执行脚本提示文件忙,linux定时执行脚本文件fgo 封号吗

热门文章

  1. 游戏停车场管理系统 (c语言)
  2. edHat linux光盘引导,RHEL6通过安装光盘或ISO文件制作本地yum源的方法
  3. qt5 textedit怎么改变鼠标响应_聊聊鼠标的前世今生
  4. js 日期加一年_?Day.js 2KB时间库 和Moment.js一样的API
  5. 最小二乘法用于直线,多项式,圆,椭圆的拟合及程序实现
  6. linux 内核 权限,linux – 内核模块执行中的不同权限
  7. UnityShader-素描铅笔画风格 实现详解
  8. 2022年高压电工考试技巧及高压电工复审考试
  9. 广青linux用户和组-课后答案-centos7
  10. MATLAB GUI设计 图像处理基本操作(一)