| layout | default |
|---|
修改higgsdb,计划:1.在higgsdb中取数据时考虑后复权。 2.针对时间段内股票信息发生变动,如某天没有某只股票,则对应填充为NAN 3.更改output脚本中tensor的输出方式。
进度:
- 已经完成,higgsdb中取数据时考虑后复权。
- 已完成,针对时间段内股票信息发生变动,如某天没有某只股票,则对应填充为NAN。在训练时,因为计算ic采取了mask nan的做法,所以没有影响,相当于删去对应数据。
- 已经完成,更改output脚本中tensor的输出方式,输出尺寸和直接从db中取出的不一致,五十万条量级,差30条缺失,导致数据不对齐。排查发现在计算时,直接使用数据库里的数据计算会有1652条缺失;我转为tensor计算,特征也会有1652条缺失,但是 y会有1682条缺失,最后会差30条,仔细想想y是一个波动很小的0附近的收益率,因此实在解决不了可以先fillna(0)。fillna(0)操作后发现数据可以对齐,除了每日最后10min的数据不对,猜测和隔日的收益率计算有关。
- 对齐了两种计算方式,现在两种计算方式返回的都是正确的。
- 将代码上传到公司代码库。
在已有的代码框架完善的情况下,尝试解决如下的优化点:
- 训练显存不足的问题,尝试使用多卡训练,重写训练框架。
- 因子池的逻辑需要改善,目前的因子池会导致长期迭代后固化。
- 生成的表达式很长但是可以化简,尝试在动作mask中进行优化。可以参考这里进行PPO-action mask优化
- 使用LLM接口进行因子评价,接上gpt-api且跑通。
- 在现在正确的流程下,重用上证1000的数据进行一次训练。然后网格搜参跑一轮长的。
直接在每轮强化学习的时候,以当前的单个因子的ic作为奖励,这样也不需要维持因子池,也不需要对因子池进行更新。在训练时的巨大开销来自更新因子池时需要计算所有因子的ic。
修改点:(1)实现一个新环境,在env中去除pool,并且使用单因子ic为奖励 (2)完成对应训练脚本 (3)在环境里引入failture_cache,储存已经出现的失败因子,可以节省开销、同时作为惩罚
和带教交流,说上次挖出来的因子居然真有用。 明确接下来7-14天优化的顺序:
- 先完成单因子ic的奖励,包括因子池设计(1重写failure_cache 2 添加计算因子和已有因子相似度的方法 3 训练一轮1000 4 添加计算逐股ic方法)
- 添加异常值检测方法:clip到0.01-0.99分位数或者 mean+-5std(不用3std因为金融数据分布更狂野)
- 添加新的算子:前向时序rank,前向单因子自相关性,前向因子互相关
- 后期:自动化简表达式,对接蔷薇数据接口; 异常值NaN处理; 调用LLM接口进行因子评价(这个可以适当提前,如果新算子我不会写)
- 九月初有一个中期分享,准备一下。
- 完成单因子奖励的对应环境和因子pool的构造,提交一轮在中证1000的训练查看效果。
- 线上gpu训练出问题了,无反应。