StockRL
StockRL copied to clipboard
回测数据发生“时间穿越”
看了你的训练集合(2009-2019)和验证集合(2019-2021)。 强化学习在训练的时候部分使用了验证集合,这是由于强化学习本身的性质决定的。实际能取得100%+的年化收益是发生了“时间穿越”。 我用20210101-20211031范围内的真正测试集合,跑出来收益数据为负。所以用验证集合来跑回测没有意义。
1、 不太清楚你说的 强化学习在训练的时候部分使用了验证集合
是什么意思,这个 repo 的 训练数据
和 验证数据
使用的是不相同的数据集
2、交易有赚有亏本来就是正常的现象,具体的你得和 β 收益进行比较,同时还得考虑 Omega比率、Sharpe比率,得出这个模型的稳定性以及持续获利的能力。收益率只是衡量这个模型好坏的一个方面
我刚开始的时候用2011-2020年10只股票跑的训练,2021测试的确是负的。 但是,当我加到100只股票的时候就变成105%了,应该跟股票池有关。另外,我刚刚做了一个数据整理降噪,看看能不能提高回报率。
env_train, env_trade = self.get_env(train_data, trade_data)
agent = DRL_Agent(env=env_train)
model = agent.get_model(self.model_name,
model_kwargs=config.__dict__["{}_PARAMS".format(self.model_name.upper())],
verbose=0)
model.learn(total_timesteps=self.total_timesteps,
eval_env=env_trade,
eval_freq=500,
log_interval=1,
tb_log_name='env_cashpenalty_highlr',
n_eval_episodes=1)
注意看你在learn的时候使用了“验证数据” 即env_trade中的数据作为agent权重调整的"方向". 我的理解是: 实际应该是有三个数据集 a, b, c. 你现在用的是 (a+b)和 c 做训练,用c 做评估。实际应该使用a和b做训练,c做评估
参数是 eval_env,具体的可以自己再去瞅瞅,是验证环境,不是训练环境