量化择时——LSTM深度学习量化择时(第1部分—因子测算)

news2024/12/24 0:54:33

之前我们尝试使用SVM,将时序数据转为横截面的数据,使用机器学习的方法进行预测

量化择时——SVM机器学习量化择时(第1部分—因子测算):
https://blog.csdn.net/weixin_35757704/article/details/129909497

但是因为股票序列本身就是时序数据,因此在计量经济学中很早就以股票数据为例,讲解时间序列数据的分析的案例。这里我们使用LSTM,一种很常用的时间序列数据的分析模型,对股价进行预测。

文章目录

  • 时间序列数据处理的特点
  • LSTM量化建模
    • LSTM模型介绍
    • LSTM训练流程
    • 特征构造
    • LSTM建模代码
  • 模型训练/验证效果
    • 最终预测效果

时间序列数据处理的特点

时间序列的数据通常被认为是由以下几个因素构成的:

  • 趋势:长期的趋势
  • 季节性:存在固定且已知的周期变化趋势
  • 周期性:存在不固定的周期变化趋势
  • 噪声:一定的随机性

时序数据的基本假设称为“平稳时间序列假设”:

  • 平稳的时间序列数据需要满足以下三个条件:

    1. 滑动窗口内的序列值均值为固定常数: E x t = e E_{xt} = e Ext=e
    2. 滑动窗口内的序列值方差为固定常数: V a r x t = v Var_{xt}=v Varxt=v
    3. 序列存在自相关性,协方差只与时间间隔有关: C o v ( x t , x t + k ) = c ∗ k Cov(xt,xt+k)=c*k Cov(xt,xt+k)=ck

    其中,e,v,c都是常数;k代表时间间隔也是常数

  • 非平稳的时间序列数据:与平稳相对的,统计指标会随时间变化

传统的线性模型,由于需要使用最小二乘法与最大似然估计对数据进行拟合,因此前提假设需要满足“序列平稳”,而相对于使用截面数据,机器学习的前提假设是样本点之间“独立同分布”。而对于金融数据来讲,截面因子逻辑上讲其实并不满足独立同分布,序列想要满足相对平稳的要求往往要用到周线数据+2阶差分,因此在应用层面,无法满足我们细粒度的研究,尤其是在量化应用上,交易机会瞬息万变,研究粒度越小越好。

这里我们选择LSTM(等深度学习)模型来进行建模,原因是深度学习中类似LSTM结构与激活函数等非线性变化,可以很好的突破“平稳”的前提假设,用魔法打败魔法。但与之对应的,我们需要尽可能多的构造有效性较高的数据,以提升模型的效果。

LSTM量化建模

LSTM是一种逻辑结构,就像贪吃蛇首尾相连一样,LSTM可以尝试从不同的时序变化中找到共性特征,这篇博客中不过多的介绍,主要讲解在量化中的应用场景

Pytorch LSTM参考链接:https://pytorch.org/docs/stable/generated/torch.nn.LSTM.html
ps:有兴趣可以学习一下LSTM反向传播的计算方法,博主觉得反向传播是设计LSTM的精髓

LSTM模型这篇博客就不详细介绍了,大家可以参考下面的图,这篇博客主要讲解LSTM在量化中的应用

LSTM模型介绍

在这里插入图片描述

  • input_size:x的特征维度
  • hidden_size:隐藏层的特征维度
  • num_layers:lstm隐层的层数,默认为1

LSTM训练流程

使用全部的特征进行预测,预处理流程如下:

  1. 对全部数据进行标准化
  2. 切分数据:
    • 训练集:2015-2020年的后复权股票数据
    • 验证集:训练集中最后的10%的数据(留一验证)
    • 测试集:2020-2023年的后复权股票数据
  3. 优化器:Adam
  4. loss函数:MSE
  5. Batch size:64

特征构造

这里我们构造的特征简单一些,与使用SVM的特征一样:

  1. 过去5日换手率均值
  2. 过去10日换手率均值
  3. 过去5日涨跌幅
  4. 过去10日涨跌幅
  5. MACD指标DIF值
  6. MACD指标DEA值
  7. MACD值
  8. 阿隆指标(一种动量指标)DOWN值
  9. 阿隆指标UP值

LSTM建模代码

博主使用pytorch构造LSTM模型,模型代码如下:

在这里插入图片描述

模型训练/验证效果

训练150次

其中,训练集训练效果如下图所示:

在这里插入图片描述

验证集的效果如下图所示:
在这里插入图片描述

最终预测效果

预测之后,我们对测试集的结果与预测的结果分别进行等频的数据分箱,分为10个有固定数量的区间,然后绘制的胜率图效果如下:

在这里插入图片描述

我们发现,预测效果相对较好的地方呈现“X”的形状,产生这个原因的解释是:

  1. 中间部分的值相对密集,比如类别4与类别5之间差距不如类别0与类别1大,因此中间区域的效果相对边缘较为集中
  2. 主对角线是正确的结果,而副对角线的预测相对密集,说明在模型的视角下,相同的特征走势后续上涨或下跌区分度并不明显,同样的特征后续极有可能上涨,也同样极有可能下跌

基于模型构建的策略通常会选择模型预测最高的前N%买入,即上图中最右边一列是真正会用于交易的地方,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/446850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

轻松解决ChatGPT网络报错,畅享沟通

ChatGPT的确很不错,无论是在什么岗位,使用它都可以让工作的你提升效率,可是我们经常会遇到一个神奇的网络报错(当我们一会不使用就来个这样的效果提示),是不是头大? 好了,开始进入正…

实验二:华为云ModelArts订阅口罩检测模型

华为云ModelArts订阅口罩检测模型 1、通过实验提示的网址进入口罩检测模型;拖动窗口找到并点击订阅按钮;勾选温馨提示中复选框内容; 2、点击红色“前往控制台”按钮,选择华北-北京四,并确定; 3、等待同步完…

Jakarta EE - Java EE的又一个名字

Jakarta EE并不是新技术,他的前身就是大家熟悉的Java EE,老一辈的程序员可能还记得J2EE,是的,他们都是同一个东西,至于为什么会改来改去,这里面就有很多故事了。 1998年12月,SUN公司发布了JDK1…

PySide6/PyQT多线程之 线程锁/线程安全

前言 PySide6/PyQT多线程同时访问同一个共享资源或对象,程序可能会出现预期之外的结果。所以需要考虑线程安全问题。 使用PySide6/PyQT开发GUI应用程序,在多个线程同时访问同一个共享对象时候,如果没有进行同步处理那就可能会导致数据不一致或…

HTML5 <q> 标签、HTML5 <rp> 标签

HTML5 <q> 标签 实例 HTML5 <q>标签用于定义一个短引用。请参考一下内容&#xff1a; 标记一个短的引用&#xff1a; <p>WWFs goal is to: <q>Build a future where people live in harmony with nature.</q> We hope they succeed.</p&g…

019:Mapbox GL加载天地图(影像瓦片图)

第019个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载天地图(影像瓦片图)。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共80行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:h…

2023年定向增发研究报告

第一章 行业概况 定向增发是增发的一种&#xff0c;是指上市公司向符合条件的少数特定投资者非公开发行股份的行为&#xff0c;有时也称“定向募集”或“私募”。定向增发的发行价格由参与增发的投资者竞价决定&#xff0c;发行程序与公开增发相比较为灵活。一般认为&#xff…

中国地图标准坐标和投影参数

目录 一、地理坐标 二、投影坐标 三、ArcGIS投影变换 四、说明 一、地理坐标 GCS_Krasovsky_1940&#xff08;克拉索夫斯基_1940椭球体&#xff09; 具体参数如下图&#xff1a; 每个国家或地区都有各自的基准面&#xff0c;我们通常所说的北京54坐标系、西安80坐标系实际上…

天梯赛练习题集

L2-005 集合相似度 find函数&#xff0c;Nt用集合关系求 #include <bits/stdc.h> #define ios ios::sync_with_stdio(0),cin.tie(0) #define PII pair<int,int> typedef long long ll; const int N1e610; const int inf0x3f3f3f3f;using namespace std; int n,k;…

深度学习(9)之 easyOCR使用详解

easyOCR使用详解 本文在 OCR-easyocr初识 基础上进行修改EasyOCR 是一个python版的文字识别工具。目前支持80中语言的识别。其对应的 github 地址&#xff1a;EasyOCR可以在网站版测试 demo 测试效果&#xff1a;https://www.jaided.ai/easyocr/其在字符识别上的效果如下&…

学系统集成项目管理工程师(中项)系列07_信息(文档)管理

1. 信息系统相关信息&#xff08;文档&#xff09; 1.1. 是指某种数据媒体和其中所记录的数据 1.2. 永久性 1.3. 由人或机器阅读 1.4. 仅用于描述人工可读的东西 2. 分类 2.1. 开发文档 2.1.1. 可行性研究报告和项目任务书 2.1.2. 需求规格说明 2.1.3. 功能规格说明 …

MapReduce高级-读写数据库

MapReduce 读取数据库 为什么要读写数据库 本质上讲数据库是存储数据的介质&#xff0c;MapReduce是处理数据的计算引擎。通常企业会使用关系型数据库&#xff08;RDBMS&#xff09;来存储业务的相关数据&#xff0c;随着业务数据的规模越来越大&#xff0c;不可避免的存在性…

C++ -3- 类和对象 (中) | 拷贝构造函数 赋值运算符重载(二)

文章目录 4.拷贝构造函数什么是拷贝构造函数&#xff1f;应用——示例&#xff1a;日期计算器什么情况下需要自己实现拷贝构造函数&#xff1f; 5.赋值运算符重载运算符重载&#xff08;重要&#xff09;赋值运算符重载 拷贝构造函数和赋值重载函数 4.拷贝构造函数 什么是拷贝…

【进阶C语言】静态版通讯录的实现(详细讲解+全部源码)

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;正在学习C/C、Java、Python等。 &#x1f4d7;本文收录于C语言进阶系列&#xff0c;本专栏主要内容为数据的存储、指针的进阶、字符串和内存函数的介绍、自定义类型结构、动态内存管理、文件操作等&#xff0…

Javaee Spring JdbcTemplate基本使用查询数据库表的内容 基于xml配置方式

目录 哈哈哈哈&#xff0c;说好是要写一篇关于jdbcTemplate的基本使用&#xff0c;貌似说跑题了&#xff0c;但是主体还是用jdbctemplate实现的&#xff0c;有耐心看完的话相信能有点点收获的哦&#xff01; 项目结构&#xff1a; 用到的数据库: 小结&#xff1a; 遇到了个小…

【Python_Opencv图像处理框架】图像基本操作

写在前面 很幸运能选择Python语言进行学习&#xff0c;这是有关Opencv的图像处理的第一篇文章&#xff0c;讲解了有关图像处理的一些基础操作&#xff0c;作为初学者&#xff0c;我尽己所能&#xff0c;但仍会存在疏漏的地方&#xff0c;希望各位看官不吝指正❤️ 写在中间 1…

Docker容器---介绍、安装

Docker基本管理 一、Docker概述1、IT架构2、什么是docker3、Docker特点4、Docker与KVM区别 二、Docker核心概念1、镜像 容器 仓库2、虚拟架构有哪些 三、Docker使用场景1、Docker在内核中支持的2种重要技术2、应用场景 四、Docker安装1、YUM安装docker2、设置阿里云镜像源3、查…

Java多线程初阶(一)(图片+源码+超详细)

线程的概念参照以往的这篇文章&#x1f43b; 目录 1.创建线程 1.1 继承Thread类 1.2 实现Runnable接口 eg&#xff1a;常用的简写方式 2.Thread类中的常用API 3. start方法和run方法 4. 继承Thread类启动新线程的逻辑 5. 实现Runnable接口启动新线程的逻辑 6. 线程相关…

Linux基础—日志分析

Linux基础—日志分析 一、日志的功能1.日志消息的级别2.设备字段说明 二、日志文件的分类1.内核及系统日志2.用户日志3.程序日志 三、日志文件1.日志文件查看2.主要日志文件介绍3.日志管理策略 一、日志的功能 用于记录系统、程序运行中发生的各种事件 通过阅读日志&#xff0c…

图像描述算法排位赛:SceneXplain与MiniGPT-4谁将夺得桂冠?

如果你对 AI 前沿感兴趣&#xff0c;本场「图像描述算法排位赛」绝对是你不能错过的&#xff01;在这场较量中&#xff0c;SceneXplain 和 MiniGPT-4 将会比试&#xff0c;谁将摘得这场比赛的桂冠&#xff1f; &#x1f4ce; 直接上手体验&#xff1a;scenex.jina.ai 背景介绍 …