(9-5)基于深度强化学习的量化交易策略(OpenAI Baselines +FinRL+DRL+PyPortfolioOpt):深度强化学习算法模型

这篇具有很好参考价值的文章主要介绍了(9-5)基于深度强化学习的量化交易策略(OpenAI Baselines +FinRL+DRL+PyPortfolioOpt):深度强化学习算法模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

9.8  深度强化学习算法模型

本项目的深度强化学习算法的是基于Stable Baselines实现的,Stable Baselines是OpenAI Baselines的一个分支,经过了重大的结构重构和代码清理工作。另外,在库FinRL中包含了经过调优的标准深度强化学习算法,如DQN、DDPG、多智能体DDPG、PPO、SAC、A2C和TD3,并且允许用户通过调整这些深度强化学习算法来设计他们自己的算法。首先通过类DRLAgent初始化了一个深度强化学习(DRL)代理,使用的训练环境是 env_train。

agent = DRLAgent(env=env_train)

1. 模型1:基于A2C算法

A2C(Advantage Actor-Critic)是深度强化学习中的一种算法,是一种基于策略梯度的算法,结合了 Actor-Critic 方法的优点。在本项目中,使用 A2C 算法作为第一个模型。

(1)下面代码首先创建了一个 DRLAgent 的实例 agent,然后使用该实例获取了 A2C 模型,通过 A2C_PARAMS 指定模型参数。其中,n_steps 表示每个环境步骤的时间步数,ent_coef 是熵正则化的系数,learning_rate 是学习率。最终,通过 agent.get_model 获取到 A2C 模型的实例 model_a2c。

agent = DRLAgent(env = env_train)

A2C_PARAMS = {"n_steps": 5, "ent_coef": 0.005, "learning_rate": 0.0002}
model_a2c = agent.get_model(model_name="a2c",model_kwargs = A2C_PARAMS)

执行后会输出:

{'n_steps': 5, 'ent_coef': 0.005, 'learning_rate': 0.0002}

Using cuda device

(2)下面代码使用上面创建的A2C 模型 model_a2c 进行训练。通过调用 agent.train_model 方法,指定了模型、TensorBoard 日志名称 tb_log_name 以及总的训练步数 total_timesteps,这里设置为 50000 步。训练完成后,返回已训练的 A2C 模型 trained_a2c。

trained_a2c = agent.train_model(model=model_a2c,

                                tb_log_name='a2c',

                                total_timesteps=50000)

执行后会输出:

-------------------------------------
| time/                 |           |
|    fps                | 193       |
|    iterations         | 100       |
|    time_elapsed       | 2         |
|    total_timesteps    | 500       |
| train/                |           |
|    entropy_loss       | -39.6     |
|    explained_variance | -1.19e-07 |
|    learning_rate      | 0.0002    |
|    n_updates          | 99        |
|    policy_loss        | 1.67e+08  |
|    reward             | 1517850.5 |
|    std                | 0.996     |
|    value_loss         | 2.43e+13  |
-------------------------------------
-------------------------------------
| time/                 |           |
|    fps                | 237       |
|    iterations         | 200       |
|    time_elapsed       | 4         |
|    total_timesteps    | 1000      |
| train/                |           |
####省略中间的训练过程
=================================
begin_total_asset:1000000
end_total_asset:4309026.642000869
Sharpe:  0.7900726163163222
=================================
-------------------------------------
| time/                 |           |
|    fps                | 277       |
|    iterations         | 9900      |
|    time_elapsed       | 178       |
|    total_timesteps    | 49500     |
| train/                |           |
|    entropy_loss       | -38.6     |
|    explained_variance | 1.19e-07  |
|    learning_rate      | 0.0002    |
|    n_updates          | 9899      |
|    policy_loss        | 1.53e+08  |
|    reward             | 1406130.6 |
|    std                | 0.962     |
|    value_loss         | 2.07e+13  |
-------------------------------------
-------------------------------------
| time/                 |           |
|    fps                | 278       |
|    iterations         | 10000     |
|    time_elapsed       | 179       |
|    total_timesteps    | 50000     |
| train/                |           |
|    entropy_loss       | -38.6     |
|    explained_variance | 0         |
|    learning_rate      | 0.0002    |
|    n_updates          | 9999      |
|    policy_loss        | 1.93e+08  |
|    reward             | 1812970.5 |
|    std                | 0.962     |
|    value_loss         | 3.47e+13  |
-------------------------------------

(3)将已经训练好的 A2C 模型保存到指定的文件路径 /content/trained_models/trained_a2c.zip,保存模型的目的是为了在以后的应用中重新加载和使用。

trained_a2c.save('/content/trained_models/trained_a2c.zip')

2. 模型2: 基于PPO算法

PPO(Proximal Policy Optimization)是一种基于策略的深度强化学习算法,用于解决离散和连续动作空间的强化学习问题。它通过在训练过程中保持较小的更新步长(proximoimal更新)来稳定策略的训练。PPO旨在优化目标函数,同时限制新策略与旧策略之间的差异,以确保训练的稳定性。

(1)使用FinRL库中的DRLAgent类初始化一个强化学习代理(agent),然后创建了一个使用PPO算法的模型,并传递了一些PPO算法的参数。这个模型将用于在环境中训练智能体。

agent = DRLAgent(env = env_train)
PPO_PARAMS = {
    "n_steps": 2048,
    "ent_coef": 0.005,
    "learning_rate": 0.0001,
    "batch_size": 128,
}
model_ppo = agent.get_model("ppo",model_kwargs = PPO_PARAMS)

在上述代码中,各个参数的具体说明如下所示。

  1. n_steps:PPO算法中的步数,表示每次更新时使用的样本数量。
  2. ent_coef:用于控制策略熵的正则化参数,有助于提高探索性。
  3. learning_rate:模型训练的学习率,控制模型参数更新的步长。
  4. batch_size:批次大小,表示每次训练时用于更新模型的样本数量。

执行后会输出:

{'n_steps': 2048, 'ent_coef': 0.005, 'learning_rate': 0.0001, 'batch_size': 128}

Using cuda device

(2)使用上面创建的PPO模型在环境中进行了8万步的训练,这将对模型进行学习,以在股票交易环境中执行交易决策。其中参数tb_log_name用于指定训练日志的名称,方便后续的监视和分析。

trained_ppo = agent.train_model(model=model_ppo,

                             tb_log_name='ppo',

                             total_timesteps=80000)

执行后会输出:

----------------------------------
| time/              |           |
|    fps             | 391       |
|    iterations      | 1         |
|    time_elapsed    | 5         |
|    total_timesteps | 2048      |
| train/             |           |
|    reward          | 3302678.2 |
----------------------------------
=================================
begin_total_asset:1000000
end_total_asset:4343413.17307137
Sharpe:  0.7899039704340352
=================================
######省略后面的输出
=================================
begin_total_asset:1000000
end_total_asset:4565767.653148839
Sharpe:  0.8168274613470233
=================================
-------------------------------------------
| time/                   |               |
|    fps                  | 333           |
|    iterations           | 40            |
|    time_elapsed         | 245           |
|    total_timesteps      | 81920         |
| train/                  |               |
|    approx_kl            | 1.0884833e-08 |
|    clip_fraction        | 0             |
|    clip_range           | 0.2           |
|    entropy_loss         | -39.7         |
|    explained_variance   | 1.19e-07      |
|    learning_rate        | 0.0001        |
|    loss                 | 9.91e+14      |
|    n_updates            | 390           |
|    policy_gradient_loss | -7.86e-07     |
|    reward               | 1881302.4     |
|    std                  | 1             |
|    value_loss           | 1.79e+15      |
-------------------------------------------

(3)下面代码用于将已经训练好的PPO模型保存为ZIP文件,以便在以后需要模型时加载和调用。

trained_ppo.save('/content/trained_models/trained_ppo.zip')

3. 模型3: 基于DDPG算法

DDPG(Deep Deterministic Policy Gradient)是一种用于连续动作空间的深度强化学习算法。在这个上下文中,它用于训练股票交易的智能体。DDPG是一种基于策略梯度的算法,它同时学习动作策略和值函数。这使得DDPG在处理具有高维、连续动作空间的问题时非常有效。

(1)在库FinRL中,通过调用agent.get_model("ddpg", model_kwargs=DDPG_PARAMS)创建DDPG模型。

agent = DRLAgent(env = env_train)
DDPG_PARAMS = {"batch_size": 128, "buffer_size": 50000, "learning_rate": 0.001}
model_ddpg = agent.get_model("ddpg",model_kwargs = DDPG_PARAMS)

执行后会输出:

{'batch_size': 128, 'buffer_size': 50000, 'learning_rate': 0.001}
Using cuda device

(2)在下面的代码中,使用agent.train_model方法对DDPG模型进行了训练。具体来说,model=model_ddpg表示使用之前创建的DDPG模型,tb_log_name='ddpg'表示TensorBoard日志的名称,total_timesteps=50000表示总的训练步数。

trained_ddpg = agent.train_model(model=model_ddpg,

                             tb_log_name='ddpg',

                             total_timesteps=50000)

上述代码将执行DDPG算法的训练过程,并将训练好的模型保存在trained_ddpg中。执行后会输出:

=================================
begin_total_asset:1000000
end_total_asset:4369306.145455855
Sharpe:  0.8034072979350758
=================================
=================================
begin_total_asset:1000000
end_total_asset:4365995.854896107
Sharpe:  0.8200827579868865
=================================
#####省略部分输出结果
----------------------------------
| time/              |           |
|    episodes        | 16        |
|    fps             | 124       |
|    time_elapsed    | 373       |
|    total_timesteps | 46288     |
| train/             |           |
|    actor_loss      | -2.24e+08 |
|    critic_loss     | 1.41e+13  |
|    learning_rate   | 0.001     |
|    n_updates       | 43395     |
|    reward          | 4365996.0 |
----------------------------------
=================================
begin_total_asset:1000000
end_total_asset:4365995.854896107
Sharpe:  0.8200827579868865
=================================
=================================
begin_total_asset:1000000
end_total_asset:4365995.854896107
Sharpe:  0.8200827579868865
=================================

(3)将训练好的DDPG模型保存到指定的目录'/content/trained_models/trained_ddpg.zip'中,以便在后续可以加载和使用该模型。

trained_ddpg.save('/content/trained_models/trained_ddpg.zip')

4. 模型4: 基于SAC算法

SAC(Soft Actor-Critic)是一种强化学习算法,专门用于解决连续动作空间中的问题。SAC采用了深度学习神经网络来近似值函数和策略,并通过最大化期望累积奖励来进行训练。

(1)在下面的的代码中,通过类DRLAgent创建了一个 Soft Actor-Critic(SAC)模型。SAC_PARAMS 包含了 SAC 模型的关键参数设置,这个模型使用了 FinRL 库中的 get_model 方法,并指定模型类型为 "sac",同时传递了 SAC 模型的参数。该模型在环境 env_train 中进行训练,以学习股票交易策略。

agent = DRLAgent(env = env_train)
SAC_PARAMS = {
    "batch_size": 128,
    "buffer_size": 100000,
    "learning_rate": 0.0003,
    "learning_starts": 100,
    "ent_coef": "auto_0.1",
}

model_sac = agent.get_model("sac",model_kwargs = SAC_PARAMS)

执行后会输出:

{'batch_size': 128, 'buffer_size': 100000, 'learning_rate': 0.0003, 'learning_starts': 100, 'ent_coef': 'auto_0.1'}
Using cuda device

(2)通过 agent 对象对 SAC 模型进行训练,使用环境 env_train训练生成数据。trained_sac 包含了训练完毕的 SAC 模型,该模型已经学习了在给定环境下执行股票交易策略的参数。这个模型的训练过程产生的日志也被记录在TensorBoard 中,日志命名为 'sac'。

trained_sac = agent.train_model(model=model_sac,
                             tb_log_name='sac',
                             total_timesteps=50000)

执行后会输出:

=================================
begin_total_asset:1000000
end_total_asset:4774375.224598323
Sharpe:  0.8157447898211176
=================================
=================================
begin_total_asset:1000000
end_total_asset:4851457.312329918
Sharpe:  0.817397961885012
=================================
=================================
begin_total_asset:1000000
end_total_asset:4851717.33279626
Sharpe:  0.8174262460980435
=================================
=================================
begin_total_asset:1000000
end_total_asset:4851205.14751689
Sharpe:  0.8173829155723342
=================================
----------------------------------
| time/              |           |
|    episodes        | 4         |
|    fps             | 77        |
|    time_elapsed    | 150       |
####省略部分输出结果
----------------------------------
| time/              |           |
|    episodes        | 16        |
|    fps             | 76        |
|    time_elapsed    | 606       |
|    total_timesteps | 46288     |
| train/             |           |
|    actor_loss      | -2.65e+08 |
|    critic_loss     | 1.16e+13  |
|    ent_coef        | 977       |
|    ent_coef_loss   | -2.8      |
|    learning_rate   | 0.0003    |
|    n_updates       | 46187     |
|    reward          | 4837676.5 |
----------------------------------
=================================
begin_total_asset:1000000
end_total_asset:4804962.823019405
Sharpe:  0.8165128039174648
=================================

(3)将经过训练的 SAC 模型保存为ZIP 文件'/content/trained_models/trained_sac.zip',该文件存储了训练好的模型参数以及相关信息。

trained_sac.save('/content/trained_models/trained_sac.zip')

5. 模型5: 基于TD3算法

TD3(Twin Delayed DDPG)是一种深度强化学习算法,它结合了 DDPG(Deep Deterministic Policy Gradients)的思想,通过引入双 Q 网络和延迟更新策略来提高训练的稳定性和性能。TD3的全称是 Twin Delayed DDPG,其中“Twin”表示引入了两个 Q 网络,而“Delayed”表示采用了延迟更新的机制。

(1)通过类DRLAgent创建了一个 TD3 模型,其中设定了模型的批量大小为 100,缓冲区大小为 1,000,000,学习率为 0.001。这些参数配置将用于模型的训练,以适应环境中的深度强化学习任务。

agent = DRLAgent(env = env_train)
TD3_PARAMS = {"batch_size": 100, 
              "buffer_size": 1000000, 
              "learning_rate": 0.001}

model_td3 = agent.get_model("td3",model_kwargs = TD3_PARAMS)

执行后会输出:

{'batch_size': 100, 'buffer_size': 1000000, 'learning_rate': 0.001}

Using cuda device

(2)通过 train_model 方法对之前创建的 TD3 模型进行训练,使用了总共 30,000 个时间步进行训练,并将训练过程的日志记录到 TensorBoard 中,日志命名为 'td3'。

trained_td3 = agent.train_model(model=model_td3,
                             tb_log_name='td3',
                             total_timesteps=30000)

执行后会输出:

=================================
begin_total_asset:1000000
end_total_asset:4609152.895393911
Sharpe:  0.8172592399889653
=================================
=================================
begin_total_asset:1000000
end_total_asset:4798090.361426867
Sharpe:  0.835226336478133
=================================
=================================
begin_total_asset:1000000
end_total_asset:4798090.361426867
Sharpe:  0.835226336478133
=================================
=================================
begin_total_asset:1000000
end_total_asset:4798090.361426867
Sharpe:  0.835226336478133
=================================
----------------------------------
| time/              |           |
|    episodes        | 4         |
#####省略部分输出
|    critic_loss     | 1.47e+13  |
|    learning_rate   | 0.001     |
|    n_updates       | 20251     |
|    reward          | 4798090.5 |
----------------------------------
=================================
begin_total_asset:1000000
end_total_asset:4798090.361426867
Sharpe:  0.835226336478133
=================================
=================================
begin_total_asset:1000000
end_total_asset:4798090.361426867
Sharpe:  0.835226336478133
=================================
=================================
begin_total_asset:1000000
end_total_asset:4798090.361426867
Sharpe:  0.835226336478133
=================================

(3)将已训练的 TD3 模型保存为一个 ZIP 文件,以备将来使用或部署。保存的文件路径为 '/content/trained_models/trained_td3.zip'。文章来源地址https://www.toymoban.com/news/detail-822473.html

trained_td3.save('/content/trained_models/trained_td3.zip')

未完待续

到了这里,关于(9-5)基于深度强化学习的量化交易策略(OpenAI Baselines +FinRL+DRL+PyPortfolioOpt):深度强化学习算法模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 量化策略交易软件开发 智能量化机器人 量化高频交易app开发

    美团秋招意向 某量化私募-社会招聘/校园招聘/应届生招聘-C++开发工程师 上海农商行Fintech的Offer到底值不值得?不完全指北 周六加班..-_-(来自dogsbody的怨气,呜呜呜) 【字节跳动】抖音支付实习生| 流程快 8月就20万简历了,还能投递吗焦虑啊 小米正式批 快手秋招今年大动

    2024年02月07日
    浏览(23)
  • Python量化交易策略--双均线策略及代码

            双均线策略是比较经典的策略,股票的价格均线是投资参考的重要指标。均线有快线和慢线之分,当快线向上穿过慢线则是金叉,一般执行买入操作,当快线向下穿过慢线时则形成死叉,一般执行卖出操作。基于这个基本思路,出于兴趣爱好,便使用python复现了这个

    2023年04月11日
    浏览(51)
  • 【python量化交易】qteasy使用教程04 -使用内置交易策略,搭积木式创建复杂交易策略

    @ 目录 使用内置交易策略,组合成复杂策略 开始前的准备工作 本节的目标 多重策略以及策略组合 定义策略组合方式 blender blender 示例 使用四则运算符定义blender表达式 使用逻辑运算符定义blender表达式: blender表达式中还可以包含括号和一些函数: blender 表达式中每个策略可

    2024年04月14日
    浏览(20)
  • ChatGPT生成量化交易策略,真好玩

    OK,还有没有更好玩的对 量化策略开发,高质量社群,交易思路分享等相关内容 『正文』 ˇ 最近比较火的OpenAI-ChatGPT,太有意思了。尝试让它写了几个策略,您别说,还真是有模有样。我们来看看吧。 源码: 源码: 源码:   源码: 编写期货收益率预测模型的过程可能比较

    2024年02月06日
    浏览(25)
  • 【量化交易01】CTA策略 菲阿里四价+空中花园策略

    CTA策略(Commodity Trading Advisor Strategy),称为商品交易顾问策略,又称管理期货策略(Managed Futures),简单理解——CTA策略是指投资于期货市场的策略,这是与投资于股票市场的投资策略的最大不同。它是指由专业管理人投资于期货市场,利用期货市场上升或者下降的趋势获利

    2024年02月02日
    浏览(26)
  • 量化交易策略的未来:如何融合人工智能与金融

    量化交易策略的未来:如何融合人工智能与金融 量化交易策略已经成为金融市场中最受关注的话题之一。随着大数据、人工智能和机器学习技术的快速发展,量化交易策略的应用范围和深度得到了显著提高。这篇文章将探讨量化交易策略的未来趋势,以及如何将人工智能与金

    2024年02月20日
    浏览(25)
  • 国金QMT量化交易系统的Bug及应对策略

    国金QMT量化交易系统中的 账号成交状态变化主推 deal_callback() , 当账号成交状态有变化时,这个函数被客户端调用。 我的策略是,在handlebar()里面挂单,等待成交,而判断成交的方式是根据系统主推deal_callback()通知。收到系统通知后,经过一系列的计算再次挂单,把成交反向

    2024年02月11日
    浏览(27)
  • 深度强化学习的变道策略:Harmonious Lane Changing via Deep Reinforcement Learning

    偏理论,假设情况不易发生 多智能体强化学习的换道策略,不同的智能体在每一轮学习后交换策略,达到零和博弈。 和谐驾驶仅依赖于单个车辆有限的感知结果来平衡整体和个体效率,奖励机制结合个人效率和整体效率的和谐。 自动驾驶不能过分要求速度性能, 考虑单个车

    2024年01月17日
    浏览(27)
  • 【深度强化学习】Python:OpenAI Gym-CarRacing 自动驾驶 | 提供项目完整代码 | 车道检测功能 | 路径训练功能 | 车辆控制功能

          💭 写在前面: 本篇是关于 OpenAI Gym-CarRacing 自动驾驶项目的博客,面向掌握 Python 并有一定的深度强化学习基础的读者。 GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行的 Box2D 物理引擎的一个版本,经过修改以支持模拟汽车在

    2024年02月16日
    浏览(28)
  • 强化学习相关开源项目介绍 | Stable Baselines 3 | SKRL | RL Games | RSL-RL

    如是我闻 :本文将介绍四个与强化学习相关的开源项目:Stable Baselines 3、SKRL和RL Games,以及RSL-RL。 Stable Baselines 3 Stable Baselines 3(SB3)是一个建立在PyTorch之上的强化学习库,旨在提供高质量的实现强化学习算法。SB3是Stable Baselines库的后续版本,后者是基于TensorFlow的。SB3致力

    2024年02月22日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包