(13-3-02)DDPG算法综合实战:基于强化学习的股票交易策略

本文介绍了如何使用深度强化学习算法,特别是A2C、PPO和DDPG,在股票交易中通过滚动窗口集成方法进行策略设计和优化。文章详细解释了参数设置、训练过程和验证,以及不同算法在实际交易中的性能评估。
摘要由CSDN通过智能技术生成

13.3.6  实现深度强化学习算法

在本项目中,强化学习算法基于OpenAI Baselines和Stable Baselines实现。其中Stable Baselines是OpenAI Baselines的一个分支,经过了重大的结构重构和代码清理。在库FinRL中包含了经过微调的标准强化学习算法,如DQN、DDPG、多智能体DDPG、PPO、SAC、A2C和TD3,并且还允许用户通过调整这些强化学习算法来设计他们自己的DRL算法。

在本项目中,将使用滚动窗口集成方法(参考代码)训练并验证3个代理(A2C、PPO、DDPG)。

(1)创建一个名为ensemble_agent的强化学习集成代理,这个代理将使用给定的数据和配置来进行强化学习训练和验证,以及在交易期间执行策略,将实现滚动窗口集成方法来管理和优化投资组合。具体实现代码如下所示。

rebalance_window = 63 # rebalance_window is the number of days to retrain the model
validation_window = 63 # validation_window is the number of days to do validation and trading (e.g. if validation_window=63, then both validation and trading period will be 63 days)

ensemble_agent = DRLEnsembleAgent(df=processed,
                 train_period=(TRAIN_START_DATE,TRAIN_END_DATE),
                 val_test_period=(TEST_START_DATE,TEST_END_DATE),
                 rebalance_window=rebalance_window, 
                 validation_window=validation_window, 
                 **env_kwargs)

对上述代码的具体说明如下:

  1. df=processed:传递了预处理过的数据 processed 作为代理的训练和验证数据。
  2. train_period=(TRAIN_START_DATE,TRAIN_END_DATE):指定了训练期间的开始日期和结束日期。
  3. val_test_period=(TEST_START_DATE,TEST_END_DATE):指定了验证和交易期间的开始日期和结束日期。
  4. rebalance_window=rebalance_window:重新平衡模型的窗口大小,即重新训练模型的频率,这里设置为63天。
  5. validation_window=validation_window:验证和交易期间的窗口大小,即在这个窗口内进行验证和交易,这里也设置为63天。
  6. **env_kwargs:传递了之前定义的环境配置参数 env_kwargs,包括行动空间、状态空间等配置信息。

(2)定义不同强化学习算法(A2C、PPO、DDPG)的模型参数和训练时间步数,不同算法的参数设置可以影响模型的性能和行为。这些参数用于配置不同算法的模型和训练参数,以便在训练过程中使用。具体实现代码如下所示。

A2C_model_kwargs = {
                    'n_steps': 5,
                    'ent_coef': 0.005,
                    'learning_rate': 0.0007
                    }

PPO_model_kwargs = {
                    "ent_coef":0.01,
                    "n_steps": 2048,
                    "learning_rate": 0.00025,
                    "batch_size": 128
                    }

DDPG_model_kwargs = {
                      #"action_noise":"ornstein_uhlenbeck",
                      "buffer_size": 10_000,
                      "learning_rate": 0.0005,
                      "batch_size": 64
                    }

timesteps_dict = {'a2c' : 10_000, 
                 'ppo' : 10_000, 
                 'ddpg' : 10_000
                 }

(3)调用前面创建的ensemble_agent代理的run_ensemble_strategy方法,用不同的强化学习算法(A2C、PPO、DDPG)和模型参数来运行集成策略,并返回了一个df_summary的数据框。具体实现代码如下所示。

df_summary = ensemble_agent.run_ensemble_strategy(A2C_model_kwargs,
                                                 PPO_model_kwargs,
                                                 DDPG_model_kwargs,
                                                 timesteps_dict)

对上述代码的具体说明如下:

  1. A2C_model_kwargs、PPO_model_kwargs、DDPG_model_kwargs、timesteps_dict:这些参数分别是之前定义的模型参数和训练时间步数字典。
  2. ensemble_agent.run_ensemble_strategy:这是一个方法调用,用于运行滚动窗口集成策略。它将使用不同的算法和参数配置来执行交易策略。
  3. df_summary:这是一个包含有关策略运行结果的数据框,它将包括有关每个算法的性能指标、交易结果和其他相关信息。

通过运行ensemble_agent.run_ensemble_strategy方法,可以评估不同强化学习算法在股票交易任务中的表现,并获得关于策略的总结信息。这些信息可以帮助我们了解每个算法的优势和劣势,以及在实际交易中的表现如何。

执行后会输出:

============Start Ensemble Strategy============
============================================
turbulence_threshold:  203.404793210979
======Model training from:  2009-04-01 to  2021-01-04
======A2C Training========
{'n_steps': 5, 'ent_coef': 0.005, 'learning_rate': 0.0007}
Using cpu device
Logging to tensorboard_log/a2c/a2c_126_1
--------------------------------------
| time/                 |            |
|    fps                | 40         |
|    iterations         | 100        |
|    time_elapsed       | 12         |
|    total_timesteps    | 500        |
| train/                |            |
|    entropy_loss       | -41.3      |
|    explained_variance | -0.092     |
|    learning_rate      | 0.0007     |
|    n_updates          | 99         |
|    policy_loss        | -28.4      |
|    reward             | 0.65518486 |
|    std                | 1          |
|    value_loss         | 6.85       |
--------------------------------------
###省略部分输出
======PPO Validation from:  2021-10-04 to  2022-01-03
PPO Sharpe Ratio:  0.049457174990951834
======DDPG Training========
{'buffer_size': 10000, 'learning_rate': 0.0005, 'batch_size': 64}
Using cpu device
Logging to tensorboard_log/ddpg/ddpg_315_1
day: 3148, episode: 10
begin_total_asset: 1000000.00
end_total_asset: 5065052.01
total_reward: 4065052.01
total_cost: 1086.82
total_trades: 53602
Sharpe: 0.857
=================================
----------------------------------
| time/              |           |
|    episodes        | 4         |
|    fps             | 37        |
|    time_elapsed    | 336       |
|    total_timesteps | 12596     |
| train/             |           |
|    actor_loss      | 45.8      |
|    critic_loss     | 9.5       |
|    learning_rate   | 0.0005    |
|    n_updates       | 9447      |
|    reward          | 10.274927 |
----------------------------------
======DDPG Validation from:  2021-10-04 to  2022-01-03
======Best Model Retraining from:  2009-04-01 to  2022-01-03
======Trading from:  2022-01-03 to  2022-04-04
Ensemble Strategy took:  46.10980545679728  minutes

对上面的输出结果进行简要说明:

  1. 首先,输出显示启动了集成策略,并显示了turbulence_threshold(动荡阈值),该阈值可能用于策略中的某些操作。
  2. 接下来,输出显示了每个算法的训练过程。例如,对于A2C算法,显示了模型的参数设置,训练过程中的各种指标和信息,如学习率、策略损失、奖励等。每个算法的训练都伴随着详细的日志,展示了模型在训练过程中的表现。
  3. 输出还包括了模型的验证结果,如PPO算法的夏普比率(Sharpe Ratio)等。
  4. 对于DDPG算法,输出包括了模型在训练和验证期间的关键指标,以及在实际交易期间的一些结果,如总资产、总奖励、总成本、总交易次数、夏普比率等。
  5. 最后,输出显示了整个集成策略的总执行时间,以及模型的训练、验证和交易过程所花费的时间。

(4)获取不同算法在策略运行期间的性能指标和结果的信息,这些信息将包括各种列,如算法名称、夏普比率、累计回报等,以便可以对策略的性能进行比较和分析。具体实现代码如下所示。

df_summary

执行后会输出:

	Iter	Val Start	Val End	Model Used	A2C Sharpe	PPO Sharpe	DDPG Sharpe
0	126	2021-01-04	2021-04-06	DDPG	0.11476	0.233932	0.317141
1	189	2021-04-06	2021-07-06	DDPG	0.152816	0.195925	0.269551
2	252	2021-07-06	2021-10-04	A2C	0.088863	-0.072948	-0.196661
3	315	2021-10-04	2022-01-03	DDPG	0.096011	0.049457	0.496793

未完待续

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农三叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值