Skip to content

AI+自主编写通过版

导航

正文

不要照抄! 只看思路 这一版跟没过的版本有什么区别

5.谈一谈您对Fitness公式的理解,以及其如何影响到您的研究方法和提交策略(Required.) fitness公式用文字描述就是该值等于夏普值乘以对年化收益率的绝对值除以换手率和0.125的最大值开跟。简单来说就是一般情况下,夏普值越高,收益率绝对值越大,fitness值越大,而fitness与换手率为负相关,在换手率大于0.125情况下,换手率越小,fitness越大。总的来说fitness是由夏普值、收益率、换手率共同决定的。 在实际提交因子时,我更多关注的是夏普值,我一般会将其设置为2.0或者以上,对筛选出来的因子考虑其中收益率量级较大的,并且换手率较小的。如果没有符合条件的因子,我会适当降低夏普值,然后重复以上过程,最后将符合我预期的submit。当然最终fitness的值肯定是要大于1.25的,如果因子较多,我会考虑将fitness的值调到1.8或者2.0,然后再去分别看夏普值、收益率和换手率,选出数据表现好的submit。

6.除《零基础学量化》和其它官方培训提供的代码框架外,您有哪些额外代码和工程改进,这个改进如何提高了你在BRAIN平台的研究效率和质量?请举例具体说明(Required.)

有以下几点改进: 一、原代码仅在程序启动时登录一次,未处理会话过期问题,可能会导致因子回测中断。所以新增一个SessionManager类,自动检测会话有效性,如果会话过期,则自动重新登录,并且重启回测代码文件。(代码总结+自己的头脑风暴) 二、原代码回测的新的因子表达式会直接覆盖 CSV 文件,无备份机制,程序崩溃或者需要同时读写CSV文件时,会导致因子 ID 丢失,因此新增backup_csv()函数,每次加载 或者更新 CSV 前自动备份因子信息并会带时间戳。(AI+人工总结) 三、为了更好的监控程序是否正常运行,对各种可能出现的错误进行统一的日志管理,即统一使用logging模块,同时将当天的回测数据集和提交的alpha数量以及ID信息和提交状态保存在新的日志文件中,以便查看当天的具体工作情况。(实际构想并已经实现) 四、有时候因为运行内存不足导致程序崩溃,或者访问网页被限制,导致程序退出,这种是无法预测的,于是建立重启机制,如果回测文件代码中断,输出相关日志,并要求终端重启任务,保证回测不中断。(实际构想且已经实现) 五、完善提交代码程序,优化超时处理,连接超时可能是因为网络问题,或者访问被限,则需要重新建立提交对话,并将未提交成功的但却从CSV文件中删除的ID信息保存到新的文件中,在下一次提交对话时添加以上ID。(代码部分功能的总结以及新的改进) 六、由于提交时间过长,在本地建立自相关计算代码文件,有本地计算机计算相关性,而不需要请求服务器,可以极大缩短提交时间。(参考了论坛以及BRAIN大脑公众号的关于本地化计算相关性的帖子,然而并没有实际实现) 七、构建远程监控窗口,使得可以在手机上监控代码运行状况,出现代码无法处理的程序崩溃问题,可以在手机上远程控制,既节省时间又多一层保障。(并没有实现,但是觉得合理,吹的牛逼)

7.在你的研究过程中,如何判断一个alpha是否值得提交?都有哪些考量因素?(Required.)

首先考虑的是IS和OS。在sharpe这个维度需要样本外数据和样本内数据都表现好的才能叫ideal,此外就是欠拟合或者过拟合的Alpha,underfit和overfit的alpha都不建议提交。IS和OS指标相近,就说明该alpha的趋势稳定,至于不稳定的却能有增益的alpha可能更多的是有运气成分。所以在选择提交的时候更倾向于前一种alpha。(参考了基础视频课程) 当好不容易构建出一个比较好的alpha后,后续想要再次提交优质alpha,需要计算自相关性,所以需要尽可能的取扩展alpha模板,这样才能使得提交的alpha数据越来越好。 目前只要是fitness大于1.25的和sharpe大于1的且自相关性小于0.7的都是可以提交的,但是盲目的提交对后续并不会有好的影响,最直观的就是看曲线图如果曲线图表现相对稳定,就尝试提交,还一个IS的Aggregate Data,优先考虑的是fitness、sharpe、Turnover、Drawdown,其他的可以暂时做一些牺牲,所以整体数据数据表现好的都是值得提交的。(人工总结+头脑风暴,可以借助AI)

8.请简要描述您BRAIN alpha构建的整个流程(Required.)

基于我对很多行业不是很了解的情况下,我会去论坛找一些已经提交过的alpha模板,然后选择我需要的数据集,从数据集中挑选出某一列字段,然后将该字段的所有值套入该模板,放到平台回测。只要不断回测就会得到很多alpha。 然而想要alpha表达优异,单纯的复制模板很难出现很好的因子。所以一个好的alpha idea至关重要,alpha灵感启示录里有很多有经验的分享,在没有idea前主张拿来主义。一个好的idea基本需要经历中心化(注:这里应该为中性化,但是原稿交的是这样的,后面的同理),中心化主要是风险中心化,交易金额中心化,有的股票本身就资产负债率较高,有些则由于行业原因资产负债率很低。所以要使alpha表达优秀,还需要做好grouping work。 分组不单单只看行业,有时候还看数据的波动的聚合程度,所以如何分类是一个值得研究的问题。每个alpha idea都是由datafield和operator组成,每一个operator都具有可操作的意义,有时候只是细微的改动就能使alpha表现良好。一个alpha idea经过回测后能产出多个alpha,但是现在我还不具备随手就写出一个良好的idea的能力。所以我只在原有的alpha模板上修改某些operator或者数据字段,然后看回测数据表现。(基础课总结+头脑风暴) 比如我之前有做过情感分析的工作,项目叫微博预料的情感分析和预测,这样我就可以找到自己相对来说比较感兴趣的领域,去一些数据集中筛选做过类似工作的数据集,找到和sentiment相关的字段。比如在decay0, none neutraliz有信号的情况下构建以下模板:(讲故事)regression_neut(group_normalize(snt_social_value,densify((industry))),cap),拿到平台去回测,可以用到以下operator:ts_std_dev、ts_median、ts_sum、ts_mean,接着grouping,选取适合的空间就可以迭代出一些alpha,然后看数据表现。(参考论坛的帖子,直接复制粘贴的)接着再改进。如果可以话,我会尝试将一个想法移植到趋势相似的数据集中,说不定就会有惊喜。

9.请描述您在研究中如何选取和了解要使用的BRAIN数据集?(Required.)

我会在网站的data模块了解相应的数据集,里面有不同数据集的相关字段和Dataset description。如果我需要使用某一个数据集,我会选择那些我有一些基础的或者概念容易理解、操作起来容易上手的一些数据集,比如基本面数据Fundamental,我会先点击进入到数据集的详情页,查看它的description,然后使用AI工具帮助我翻译,并让AI帮我解释某些专业名词的特定含义。在初步了解数据集的含义之后,我会初略的查看该数据某些报表中的的字段data files,并了解某些重要字段的含义。当我决定使用该数据集后,我会把数据集的ID复制到代码工程中,通过不同字段的组合运算,回测因子。(对网站的数据模块的理解) 以上过程只能帮助我初步了解该数据集的用处,想要基于该数据创造出可以提交的优秀因子,需要进入论坛查看相关的帖子。官方提供的帖子有“BRAIN TIPS”系列,其中“6 ways to quickly evaluate a new dataset”是我作为小白时看的一篇帖子,其中介绍了在特定条件下模拟表达式的方法。(引用视频基础课中的老师讲到的帖子)包括如何计算覆盖范围、更新频率,对数据取平均值或者方差来确定数据的趋势,通过分析得知数据的分布状态。平台提供了很多函数表达,比如ts_std_dev(datafield,N) != 0 ? 1 : 0,作为新手可以尝试不断改变N的值来确定数据的更新频率,有些数据时月更新,有些是季度更新,所以以上表达可以帮助我快速定位到数据的波动情况。(总结帖子的内容并谈谈自己的理解)平台给出的operators数量很多,大致分为三类,每一类都有常用operator操作,包括基本运算、条件判断、逻辑运算等。可以使用不同的operator对数据集的字段进行处理,拿到平台回测,有信号就想办法优化,实在表现差劲就舍弃,尝试其他的思路。(基础视频的总结+自己的想法)

10.您对BRAIN平台有哪些功能上的建议,以便我们改进后可以更好帮助你的研究工作(Required.)

平台的很多功能正在一步步体验当中,目前一切体验良好,就是workday有时候会有新的task时候网页平台好像不会有提示,在我提交完顾问意愿合同后,平台似乎对我的提交给过给过反馈,后续又发了一个task,我由于没注意到,导致该task一直未处理,所以我的审核进度一直在停滞状态,所以能否设置一下:当tasks数量不为0时,则将消息反馈到官网首页,以免该task被忽略或者忘记