(11-4-01)基于深度强化学习的量化交易Agent(1):Agent交易模型(1)基于A2C算法+基于PPO算法

10.5  Agent交易模型

在本项目中,我们构建了一个基于深度强化学习的智能体(Agent)用于金融交易。该智能体的深度强化学习算法基于Stable Baselines实现,这是OpenAI Baselines的一个分支,经过了重大的结构重构和代码清理工作,以提高稳定性和性能。

我们利用FinRL库,其中包含了经过调优的标准深度强化学习算法,如DQN、DDPG、多智能体DDPG、PPO、SAC、A2C和TD3。这些算法为智能体提供了强大的学习能力,使其能够在复杂的金融环境中进行有效的决策和交易。智能体的创建从通过类DRLAgent初始化一个深度强化学习(DRL)代理开始,我们使用的训练环境是env_train。

agent = DRLAgent(env=env_train)

10.5.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')

10.5.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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农三叔

感谢鼓励

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

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

打赏作者

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

抵扣说明:

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

余额充值