前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)) / deltaprint(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)) / deltaprint(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量化交易学习笔记(45)——深度学习挖短线股5相关推荐

  1. 学习笔记:深度学习(6)——基于深度学习的语言模型

    学习时间:2022.04.22~2022.04.25 文章目录 5. 基于深度学习的语言模型 5.1 从NNLM到词嵌入 5.1.1 神经网络语言模型 NNLM 5.1.2 基于循环神经网络的语言模型 ...

  2. 【长篇博文】Docker学习笔记与深度学习环境的搭建和部署(二)

    长篇博文记录学习流程不容易,请关注.转发.点赞.评论,谢谢! 上一篇文章:Docker学习笔记与深度学习环境的搭建和部署(一) 文章末尾附加nvidia455.23.cuda11.1.cudnn8.0 ...

  3. 学习笔记:深度学习(3)——卷积神经网络(CNN)理论篇

    学习时间:2022.04.10~2022.04.12 文章目录 3. 卷积神经网络CNN 3.1 卷积神经网络的概念 3.1.1 什么是CNN? 3.1.2 为什么要用CNN? 3.1.3 人类的视觉 ...

  4. 深度学习入门之PyTorch学习笔记:深度学习介绍

    深度学习入门之PyTorch学习笔记:深度学习介绍 绪论 1 深度学习介绍 1.1 人工智能 1.2 数据挖掘.机器学习.深度学习 1.2.1 数据挖掘 1.2.2 机器学习 1.2.3 深度学习 第 ...

  5. ScalersTalk 机器学习小组第 21 周学习笔记(深度学习-10)

    ScalersTalk 机器学习小组第 21 周学习笔记(深度学习-10) Scalers点评:机器学习小组是成长会的内部小组,这是成长会机器学习小组第21周学习笔记,也是深度学习第10次的复盘笔记 ...

  6. 深度学习入门之PyTorch学习笔记:深度学习框架

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 2.1 深度学习框架介绍 2.1.1 TensorFlow 2.1.2 Caffe 2.1.3 Theano 2.1.4 ...

  7. [深度学习笔记(1)]深度学习入门

    本系列是博主刚开始接触深度学习时写的一些笔记,写的很早了一直没有上传,趁着假期上传一下,作为分享,希望能帮助到你. 目录 前言 一.什么是深度学习 二.深度学习的应用 三.深度神经网络的难题 3.1 ...

  8. 量化交易有因子动物园 深度学习里有模型动物园(ModelZoo)又叫模型市场基于深度学习的增量学习,迁移学习等技术发展而来【调研】

    前言 随着迁移模型的概念流行起来,就像快乐会传染样,自然语言处理,计算机视觉,生成模型,强化学习,非监监督学习,语音识别 这几个领域内部产生了大量的可复用可迁移学习的基础模型,领域之间的方法也在互相学 ...

  9. 吴恩达深度学习代码_吴恩达深度学习笔记(58)-深度学习框架Tensorflow

    TensorFlow 有很多很棒的深度学习编程框架,其中一个是TensorFlow,很期待帮助你开始学习使用TensorFlow,我想在这个笔记中向你展示TensorFlow程序的基本结构,然后让你自 ...

  10. 2.1)深度学习笔记:深度学习的实践层面

    目录 1)Train/Dev/Test sets 2)Bias/Variance 3)Regularization(重点) 4)Why regularization reduces overfitti ...

最新文章

  1. db browser连接mysql_MyEclipse DB Browser 连接 MySQL 配置 mysql select
  2. Elasticsearch概述、ES概念、什么是搜索、全文检索、Elasticsearch功能,什么是distributed document store(来自网络+学习资料)
  3. 打开 igv java_必备可视化Integrative Genomic Viewer(IGV)
  4. Python机器学习:评价分类结果002精准率和召回率
  5. 用计算机程序求n,计算机编程 算法 求n!.doc
  6. PHP利用smarty生成静态页详解
  7. ECMAScript6(17):Class类
  8. 必知必会MYSQL下篇
  9. Android ninja介绍
  10. c语言六级,2017年英语六级写作谚语(C开头)
  11. LaTeX排版(二)
  12. mosquitto服务器搭建及配置
  13. UDK Stat命令
  14. 使用sortable的踩坑记录
  15. 线段的数量 51Nod - 3208
  16. t20天正建筑软件服务器为空,天正建筑T20常见问题(四)
  17. 使用Retrofit+RxJava下载文件并实现APP更新
  18. 于飞SEO:seo优化如何正确的布局关键词?
  19. PC端和移动端网页特效,fastclick插件,Swiper插件,Bootstrap等框架,本地存储
  20. 阿里OceanBase破茧成蝶 跃升DB界宠儿

热门文章

  1. 【饭谈】扔掉心中的拐杖吧~
  2. 考研数学-数学概率4主讲人:葛睿-2020年06月20日
  3. 用java编写关于母亲节的代码,java编纂图形用户界面程序-实例2:母亲节快乐!o~ 努力...
  4. 京东公布国庆大数据:旅游目的地异地消费增长 北方消费后劲足(附图表)
  5. 从VC6到VC9移植代码问题总结 from 吹泡泡的小猫
  6. gif图片制作工具Ulead GIF Animator
  7. 如何让电脑可以同时用公司内网和手机热点上网。(针对WIN10)
  8. Infoblox DDI NIOS 8.5.2 -- DDI 核心网络服务管理
  9. 云智慧智能研究院实习生招聘信息~只等优秀的你!
  10. python并发锁,分布式锁,redis分布式锁