StockRL icon indicating copy to clipboard operation
StockRL copied to clipboard

回测数据发生“时间穿越”

Open zlxwl opened this issue 3 years ago • 3 comments

看了你的训练集合(2009-2019)和验证集合(2019-2021)。 强化学习在训练的时候部分使用了验证集合,这是由于强化学习本身的性质决定的。实际能取得100%+的年化收益是发生了“时间穿越”。 我用20210101-20211031范围内的真正测试集合,跑出来收益数据为负。所以用验证集合来跑回测没有意义。

zlxwl avatar Nov 23 '21 07:11 zlxwl

1、 不太清楚你说的 强化学习在训练的时候部分使用了验证集合 是什么意思,这个 repo 的 训练数据验证数据 使用的是不相同的数据集 2、交易有赚有亏本来就是正常的现象,具体的你得和 β 收益进行比较,同时还得考虑 Omega比率、Sharpe比率,得出这个模型的稳定性以及持续获利的能力。收益率只是衡量这个模型好坏的一个方面

sunnyswag avatar Nov 28 '21 09:11 sunnyswag

我刚开始的时候用2011-2020年10只股票跑的训练,2021测试的确是负的。 但是,当我加到100只股票的时候就变成105%了,应该跟股票池有关。另外,我刚刚做了一个数据整理降噪,看看能不能提高回报率。

Zero1366166516 avatar Jul 17 '22 10:07 Zero1366166516

    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做评估

zlxwl avatar Oct 11 '22 08:10 zlxwl

参数是 eval_env,具体的可以自己再去瞅瞅,是验证环境,不是训练环境

sunnyswag avatar Mar 24 '24 07:03 sunnyswag