基于DDPG算法的股票量化交易

项目源码获取方式见文章末尾! 回复暗号:13,免费获取600多个深度学习项目资料,快来加入社群一起学习吧。

        **《------往期经典推荐------》**

项目名称
1.【基于PyQT+FaceNet卷积神经网络实现的学生人脸识别考勤系统】
2.【卫星图像道路检测DeepLabV3Plus模型】
3.【GAN模型实现二次元头像生成】
4.【CNN模型实现mnist手写数字识别】
5.【fasterRCNN模型实现飞机类目标检测】
6.【CNN-LSTM住宅用电量预测】
7.【VGG16模型实现新冠肺炎图片多分类】
8.【AlexNet模型实现鸟类识别】
9.【DIN模型实现推荐算法】
10.【FiBiNET模型实现推荐算法】
11.【钢板表面缺陷检测基于HRNET模型】

1. 项目简介

项目“A064-基于DDPG算法的股票量化交易”旨在利用深度强化学习技术构建智能化股票交易系统,优化投资组合管理和交易策略。该项目基于深度确定性策略梯度(DDPG)算法,它是一种结合了策略梯度和Q学习的深度强化学习方法,适用于连续动作空间的任务。在金融交易领域,股票市场的复杂性和波动性使得传统的交易策略往往难以应对,因此通过机器学习尤其是深度强化学习模型,能够在未知的环境中自主学习并执行复杂的交易策略,提升长期收益和风险管理能力。项目的主要目标是通过对历史数据的学习,训练一个智能体,能够在实际市场中进行自动化交易,决策买卖时机并优化投资回报。DDPG模型通过引入演员-评论家框架,利用深度神经网络来评估状态和选择最佳行动,并通过与环境的交互不断优化交易策略。该模型的应用场景广泛,包括量化交易、投资组合优化以及其他金融决策领域。

在这里插入图片描述

2.技术创新点摘要

基于DDPG算法的强化学习环境设计:该项目采用了深度确定性策略梯度(DDPG)算法,专门针对股票市场这一复杂且具有连续动作空间的场景进行优化。DDPG算法结合了策略梯度方法和Q学习,能够处理股票交易中复杂的连续决策问题。特别是在交易过程中,股票的买卖动作是连续的,通过DDPG的连续动作选择能力,能够实现对股票买卖决策的精细化控制。

专为金融市场定制的强化学习环境:项目定义了一个专门用于股票交易的强化学习环境,利用Gym库进行了扩展。这一环境的状态空间包含20个属性变量,反映了股票的多维度特征,涵盖了历史股价、成交量、财务数据等。这些变量经过归一化处理,以确保算法的稳定性。此外,动作空间被定义为连续动作,即智能体可以根据市场状态选择买入、卖出或者观望,每一个动作都对应具体的百分比操作。这种设计充分考虑了股票市场的特点,能够模拟出更加真实的交易场景。

高效的经验回放机制:该项目实现了一个经验回放缓冲池(ReplayBuffer),用于存储智能体与环境交互过程中的经验。这种机制能够让智能体从过往经验中进行多次学习,从而提高学习效率,并避免强化学习中因样本相关性导致的不稳定性。通过对经验的随机抽样,打破了时间上的相关性,使得算法在训练过程中表现得更加稳定。

多策略网络架构:项目采用了演员-评论家架构,分别使用两个神经网络来执行不同的任务。演员网络用于生成股票买卖的策略,而评论家网络则评估当前策略的价值。通过这种双网络的设置,能够有效地分离策略评估和策略生成的过程,从而使得模型在复杂的金融环境中表现得更加灵活和高效。

3. 数据集与预处理

本项目使用的股票数据集来源于第三方金融数据平台baostock,这是一款免费的股票数据API接口,提供了多维度的股票历史数据,包括每日开盘价、收盘价、最高价、最低价、成交量、成交额等关键指标。该数据集覆盖了较长时间跨度的股票市场历史数据,为模型的训练和验证提供了可靠的数据支持。

数据预处理流程

该问题可以被建模为一个强化学习问题。在此场景下,人即为智能体,股票市场为环境,人通过对股票做出决策,即与环境交互后,会获得股票当前的状态。在此项目中,股票状态包含20个属性变量,包含所采用第三方股票数据包baostock的一些股票属性和基于此计算得到的一些属性变量,分别为:

属性名含义
open当天开盘价格
high最高价格
low最低价格
close收盘价格
volume成交量
amount成交额
adjustflag赋权状态(1:后复权,2:前复权,3:不复权)
tradestatus交易状态(1:正常交易,0:停牌)
pctChg涨跌幅(百分比)
peTTM滚动市盈率
pbMRQ市净率
psTTM滚动市销率
balance当前拥有的金钱
max_net_worth最大资产净值
net_worth当前资产净值
shares_held持有的手数
cost_basis即时买入价格
total_shares_sold总共抛出的手数
total_sales_value总共抛出的价值

NOTE:上述属性值均会经过归一化处理,因此在此项目中,状态为一个长度为20的一维向量,其中每一个值的值域均为 [ 0 , 1 ] [0,1] [0,1]

  1. 缺失值处理:在股票数据中,某些财务指标或历史价格可能存在缺失值(例如市盈率、市净率等)。在项目中,首先对这些缺失值进行了处理,通过简单的填充或剔除的方式来确保数据的完整性。比如,当市盈率或市净率等指标为NaN时,用0替代。
  2. 归一化处理:为了使数据在神经网络中能够更好地被处理,所有数值型的特征(如开盘价、收盘价等)都经过了归一化处理。归一化的范围为0到1,通过将原始数据除以预设的最大值(如最大股价、最大成交量等),确保模型在训练过程中数值的稳定性,防止因数值差异过大而导致的梯度爆炸或消失问题。
  3. 特征选择与构建:项目的输入特征不仅包含了基本的股票价格、成交量等常见的交易数据,还通过财务数据扩展了额外的特征,如市盈率(PE)、市净率(PB)、市销率(PS)等财务指标。这些财务特征为模型提供了更加全面的股票状态描述,帮助智能体在决策时能够更好地判断股票的内在价值和市场趋势。此外,还计算了若干技术指标(如移动平均线、相对强弱指数等)以增强特征工程,提升模型的决策能力。
  4. 时间序列处理:由于股票交易本质上是一个时间序列决策问题,项目将历史时间点的数据作为当前状态的一部分。通过这种方式,智能体能够基于过去的趋势来预测未来的市场变化,从而做出更加合理的交易决策。

4. 模型架构

1) 模型结构的逻辑

在这里插入图片描述

本项目采用了DDPG(深度确定性策略梯度)算法,它是一种基于Actor-Critic架构的强化学习模型,特别适用于连续动作空间的问题。在该架构中,模型由两个主要部分组成:

  • Actor(演员)网络:负责生成动作,即在股票交易场景中,它输出买入、卖出或观望的策略。网络输入的是当前股票的状态(如价格、成交量等),输出动作是一个连续值,表示不同的交易行为及其比例。
  • Critic(评论家)网络:用于评估Actor所采取的动作的价值,即Q值。它通过评估当前的状态-动作对来计算该策略的长期预期回报。通过Q值的反馈,Actor网络会逐步更新策略,使其更符合最优的交易决策。

此外,项目还设计了两个目标网络(Target Networks)用于稳定训练:分别为目标Actor网络和目标Critic网络,用于软更新,以避免策略的剧烈变化影响模型的稳定性。

2) 模型的整体训练流程

DDPG应用于股票交易项目流程包含如下6个步骤:

  1. 环境构建:继承gym.env,构建股票交易环境StockEnv
  2. 容器构建:设计带有存储数据和随机采样的容器buffer
  3. 模型构建:设计model,定义具体的算法,其中包括设计前向网络,指定损失函数及优化器;
  4. 训练配置:定义超参数,加载实验环境,实例化模型;
  5. 模型训练:执行多轮训练,不断调整参数,以达到较好的效果;
  6. 模型评估:对训练好的模型进行评估测试,观察reward;
  7. 模型保存:将模型保存到指定位置,以便后续推理或继续训练使用;
  8. 模型测试:在测试集数据中测试模型的表现。

在这里插入图片描述

5. 核心代码详细讲解

1. Actor网络(动作网络)
class Actor(nn.Layer):def init(self, state_dim, action_dim, max_action):super(Actor, self).
__init__
()self.l1 = nn.Linear(state_dim, 400)self.l2 = nn.Linear(400, 300)self.l3 = nn.Linear(300, action_dim)self.max_action = max_action
def forward(self, state):a = F.relu(self.l1(state))  # 第一层线性变换,使用ReLU激活函数a = F.relu(self.l2(a))  # 第二层线性变换,使用ReLU激活函数a = self.max_action * F.tanh(self.l3(a))  # 输出层使用Tanh激活函数,将输出动作归一化至[-1, 1]之间a = (a + 1.) / 2.  # 将输出映射至[0, 1]区间,符合股票交易场景return a
  • 作用:Actor网络负责根据输入的状态生成交易策略(即买入、卖出或观望的动作)。

  • 解释

    • 通过两层全连接网络,将状态特征转换为隐藏层。
    • 最后一层使用Tanh函数对输出进行压缩,再将值归一化至[0,1]范围,用于表示交易比例。
2. Critic网络(值函数网络)
class Critic(nn.Layer):def init(self, state_dim, action_dim):super(Critic, self).
__init__
()self.l1 = nn.Linear(state_dim + action_dim, 400)self.l2 = nn.Linear(400, 300)self.l3 = nn.Linear(300, 1)
def forward(self, state, action):q = F.relu(self.l1(paddle.concat([state, action], 1)))  # 将状态和动作拼接在一起后,输入到Critic网络q = F.relu(self.l2(q))  # 第二层线性变换,ReLU激活函数return self.l3(q)  # 输出一个标量值Q值,用于评估状态-动作对的价值
  • 作用:Critic网络用于评估Actor网络生成的动作的价值(即Q值),帮助Actor网络优化策略。

  • 解释

    • 将状态和动作作为输入,评估当前动作的价值,输出单一的Q值。
3. DDPG模型的训练与评估
def train(self, replay_buffer, batch_size=100):state, action, next_state, reward, done = replay_buffer.sample(batch_size)
# Critic网络优化target_Q = self.critic_target(next_state, self.actor_target(next_state))target_Q = reward + (1 - done) * self.gamma * target_Qcurrent_Q = self.critic(state, action)critic_loss = F.mse_loss(current_Q, target_Q)self.critic_optimizer.clear_grad()critic_loss.backward()  # 反向传播计算梯度self.critic_optimizer.step()  # 更新Critic网络参数# Actor网络优化actor_loss = -self.critic(state, self.actor(state)).mean()  # 策略梯度反向优化self.actor_optimizer.clear_grad()actor_loss.backward()  # 反向传播更新Actor网络self.actor_optimizer.step()
# 软更新目标网络参数for param, target_param in zip(self.critic.parameters(), self.critic_target.parameters()):target_param.set_value(target_param * (1.0 - self.tau) + param * self.tau)for param, target_param in zip(self.actor.parameters(), self.actor_target.parameters()):target_param.set_value(target_param * (1.0 - self.tau) + param * self.tau)
  • 作用

    • 训练流程分为两个部分:更新Critic网络和更新Actor网络。
    • Critic网络:通过最小化当前Q值和目标Q值之间的均方误差,更新评估网络参数。
    • Actor网络:通过反向传播Actor损失,优化策略网络,使得生成的动作能够最大化未来奖励。
  • 软更新:使用参数tau对Actor和Critic的目标网络进行软更新,逐步靠近主网络,从而提高训练的稳定性。

4. 经验回放机制
class SimpleReplayBuffer(object):def init(self, state_dim, action_dim, max_size=int(1e5)):self.max_size = max_sizeself.cur = 0self.size = 0self.states = np.zeros((max_size, state_dim))self.actions = np.zeros((max_size, action_dim))self.next_states = np.zeros((max_size, state_dim))self.rewards = np.zeros((max_size, 1))self.dones = np.zeros((max_size, 1))
def add(self, state, action, next_state, reward, done):self.states[self.cur] = stateself.actions[self.cur] = actionself.next_states[self.cur] = next_stateself.rewards[self.cur] = rewardself.dones[self.cur] = doneself.cur = (self.cur + 1) % self.max_sizeself.size = min(self.size + 1, self.max_size)
def sample(self, batch):ids = np.random.randint(0, self.size, size=batch)return (paddle.to_tensor(self.states[ids], dtype='float32'),paddle.to_tensor(self.actions[ids], dtype='float32'),paddle.to_tensor(self.next_states[ids], dtype='float32'),paddle.to_tensor(self.rewards[ids], dtype='float32'),paddle.to_tensor(self.dones[ids], dtype='float32'))
  • 作用:经验回放缓冲区用于存储智能体与环境交互的经验(状态、动作、奖励、下一状态、是否结束)。

  • 解释

    • 存储经验后,模型从缓冲区中随机采样一批数据,用于训练Critic和Actor网络。这样做可以打破时间相关性,提高模型泛化能力。

6. 模型优缺点评价

模型优点:

  1. 适应连续动作空间:DDPG算法结合了策略梯度和Q学习,能够有效处理股票交易中的连续动作决策问题,如不同买入卖出的比例。
  2. Actor-Critic架构:该架构通过分离策略生成(Actor)和策略评估(Critic),提高了模型的稳定性和效率,特别适用于动态和复杂的金融环境。
  3. 经验回放机制:通过经验回放缓冲区存储和随机采样,打破了样本间的时间相关性,提升了训练的效率和泛化能力。
  4. 软更新机制:目标网络的软更新避免了策略的剧烈变化,增强了训练过程的稳定性,减少了由于网络参数变化导致的振荡问题。

模型缺点:

  1. 探索性不足:DDPG使用确定性策略,容易陷入局部最优,导致在复杂的市场环境中策略的探索能力不足。缺乏足够的随机性来探索更多潜在的交易策略。
  2. 数据依赖强:模型对于数据的依赖较强,历史数据中的非平稳性和噪声会对模型性能产生较大影响,特别是数据分布与实际市场存在差异时,模型表现可能下降。
  3. 超参数敏感:模型的性能对超参数(如学习率、探索噪声等)较为敏感,参数选择不当可能导致训练过程不稳定或者收敛速度较慢。

改进方向:

  1. 改进探索机制:可以引入如熵正则化随机噪声策略等方法,增加策略的随机性,提升模型的探索能力,避免陷入局部最优。
  2. 超参数优化:采用自动化超参数调优方法,如网格搜索、贝叶斯优化,来找到更合适的超参数组合,提高模型的训练效率和稳定性。
  3. 数据增强:通过对历史数据进行数据增强,如随机时间扰动、模拟不同市场条件等,提升模型的泛化能力,使其能够更好地应对实际市场波动。

👍感谢小伙伴们点赞、关注! 如有其他项目需求的,可以在评论区留言,抽空制作更新!
✌粉丝福利:点击下方名片↓↓↓ 回复暗号:13,免费获取600多个深度学习项目资料,快来加入社群一起学习吧。

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

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

相关文章

计算机强校99+分《数据库》课设

高校成绩数据库系统设计与实现 1、需求分析 1.1 数据需求描述 1.2 系统功能需求 1.3 其他性能需求 2、概念结构设计 2.1 局部E-R图 2.2 全局E-R图 2.3 优化E-R图 3、逻辑结构设计 3.1 关系模式设计 3.2 数据类型定义 3.3 关系模式的优化 4、物理结构…

川渝地区软件工程考研择校分析

C哥专业提供——计软考研院校选择分析专业课备考指南规划 通过最新数据分析,5所高校软件工程专业2025年考研难度从高到低预计为: 电子科技大学 >> 四川大学 > 重庆大学 ≈ 西南交通大学 > 西南大学 对于想考川渝地区985但核心目标为优先上岸的考生,建议重点考虑西…

Spring Boot助力的厨艺互动平台开发指南

2 相关技术 2.1 Spring Boot框架简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Sprin…

在浏览器里就可以运行的本地AI模型 - 一键去除图片背景AI

前言 浏览器的功能越来越强大, 从Chrome 113 开始, 谷歌把WebGPU引入到了浏览器中, 通过WebGPU的API, 可以直接访问本机电脑的GPU资源. 既然GPU资源可以在浏览器里运行, 给AI模型推理等带来了便利, 使得一些AI模型可以直接在浏览器里运行. 本文主要介绍介绍以下WebGPU的基本概…

【前端开发入门】JavaScript快速入门--js变量

目录 引言一、为什么要定义变量二、定义变量的一些技巧1. 解构赋值1.1 Object解构赋值1.2 Array解构赋值1.3 总结规律 2. 字符串拼接 三、变量作用域四、总结 引言 本系列教程旨在帮助一些零基础的玩家快速上手前端开发。基于我自学的经验会删减部分使用频率不高的内容&#xf…

uniapp 发起post和get请求!uni.request(OBJECT)

在uni-app中&#xff0c;发起HTTP请求主要通过uni.request方法实现。 Get请求 使用uni.request请求api&#xff0c;并且将 method参数设置为GET&#xff0c;有参数的话直接data&#xff1a;{}传递&#xff0c; success是请求成功回调函数&#xff0c;fail是失败函数 <but…

ipv6地址子网划分

IPv6 从左至右一共有8段地址,每一段用16进制表示&#xff0c;共128位。 例如&#xff1a;2001:0DB8:0001:0000:0000:0000:0000:0000 每一段的子网掩码如下&#xff1a; 第1段的掩码为是 0~16 01616 第2段的掩码为是 17~32 161632 第3段的掩码为是 33~48 …

QQ音乐绿钻音效+DTS音效解锁

​ 工具 mt管理器 simplehook QQ音乐&#xff08;自行下载&#xff09; DTS音效修改方法&#xff1a;com.tencent.qqmusic.business.user.a.r1 赋值为1 绿钻音效修改方法&#xff1a; com.tencent.qqmusic.business.user.a.q1 赋值为1 建议使用hook实现&#xff0c;这里贴上si…

动态IP是什么?

随着互联网成为人们生活的重要组成部分&#xff0c;以信息传递为主导的时代种&#xff0c;网络连接质量对我们的工作效率、学习进度以及娱乐体验等方面都有很大影响。 动态IP&#xff0c;作为网络连接中的一种重要IP代理形式&#xff0c;越来越受到用户的欢迎。本文将深入解析…

关于 Linux 内核“合规要求”与俄罗斯制裁的一些澄清

原文&#xff1a;Michael Larabel - 2024.10.24 当 一些俄罗斯的 Linux 开发者被从内核的 MAINTAINERS 文件中移除 时&#xff0c;原因被描述为“合规要求”&#xff0c;但并未明确这些要求具体涉及什么内容。随后&#xff0c;Linus Torvalds 对此发表了评论&#xff0c;明确指…

计算机网络(十二) —— 高级IO

#1024程序员节 | 征文# 目录 一&#xff0c;预备 1.1 重新理解IO 1.2 五种IO模型 1.3 非阻塞IO 二&#xff0c;select 2.1 关于select 2.2 select接口参数解释 2.3 timeval结构体和fd_set类型 2.4 socket就绪条件 2.5 select基本工作流程 2.6 简单select的服务器代…

【Linux】信号量,线程池

目录 信号量 初始化​编辑 销毁 等待 发布 基于环形队列的生产消费模型 问题解答&#xff1a; 代码&#xff1a; 线程池 线程池的实现 &#xff08;1&#xff09;初始化&#xff0c;构造大致框架 &#xff08;2&#xff09;创建线程 &#xff08;3&#xff09;创建任…

Unity 世界空间(World Space)UI被模型遮挡的解决办法(Overlay摄像机)

问题&#xff1a; 想要显示掉落的物品名&#xff0c;但是这个世界空间的UI层会被模型遮挡&#xff0c;如下&#xff1a; 解决&#xff1a; 1.新建一个专门的物品名图层&#xff0c;如ItemUI 2.在主摄像机下新建一个子摄像机ItemCamera&#xff0c;渲染类型设置为Overlay&#…

Unity加载界面制作

效果 UI部分 结构 说下思路: 因为是加载界面,所以最上层是一个Panel阻止所有的UI交互,这个Panel如果有图片就加一个图片,如果没有可以把透明度调到最大,颜色设为黑色. 下面最核心的就是一个进度条了,有图片的话,将进度条的底放进来,将进度条锚点设为下中,将滑动块的尺寸设为0.…

迈威通信西安采矿展大放异彩,驱动煤矿智能转型加速跑

金秋十月&#xff0c;一场矿业技术的盛宴如约而至。10月23日至25日&#xff0c;中国(西安)国际采矿技术交流及设备展览会在西安临空会展中心圆满落下帷幕。迈威通信&#xff0c;作为矿业通信与自动化解决方案的卓越提供商&#xff0c;此次以 “布局多元融合网络&#xff0c;赋能…

SwiftUI 中 List 或 Form 子视图关联的 swipeAction 导致展开动画异常的解决

问题现象 小伙伴们都知道,在 SwiftUI 中更快捷的增强 List 或 Form 子视图(Cell)交互功能的方法是使用 swipeAction 修改器。不过,对其使用稍有不慎也会横生枝节。 如上图所示,不适当的设置 Cell 视图布局会使 swipeAction 无法生成正确的收缩和展开动画。对此我们有什么…

微信小程序文字转语音播报案例

插件申请 在小程序官方申请同声传译插件&#xff0c;地址&#xff1a; mp.weixin.qq.com 引入插件 在app.json中加入 "plugins": {"WechatSI": {"version": "0.3.6","provider": "wx069ba97219f66d99"}},封装…

南京林业大学生态学博士在1区top期刊揭示人工林发育促进土壤团聚体的形成与稳定:对土壤碳氮固存的启示

本文首发于“生态学者”微信公众号&#xff01; 文章信息 第一作者&#xff1a;石珂 通讯作者&#xff1a;阮宏华教授 通讯单位&#xff1a;南京林业大学 原文链接&#xff1a;https://doi.org/10.1016/j.catena.2024.108363 亮点 •土壤团聚体的稳定性随着林分发育而增…

接口测试(五)jmeter——get请求

一、get请求——短信验证码&#xff08;示例仅供参考&#xff09; 1. get请求&#xff1a;传参数据直接拼接在地址后面&#xff0c;jmeter不需要设置请求头content-type 注&#xff1a;短信验证码接口&#xff0c;返回结果中不会返回短信验证码&#xff0c;是存在数据库表中&a…

【C++初阶】一文讲通C++内存管理

文章目录 1. C/C内存分布2. C语言中动态内存管理方式3. C内存管理方式3. 1 new/delete操作内置类型3. 2 new和delete操作自定义类型 4. new与delete的原理4. 1 operator new与operator delete函数4. 2 内置类型4. 3 自定义类型 5. 定位new表达式(placement-new)6. malloc/free和…