WQ 算子尝试1

0、算子评级

一、7月29尝试算子

1、group_rank(ts_rank(eps / cap, 180), subindustry)

2、group_rank(ts_rank(cashflow_op / cap, 120), subindustry)

group_rank(ts_rank(cashflow_op / cap, 120), subindustry) decay :2 Sharpe:1.74

group_rank(ts_rank(cashflow_op / cap, 60), subindustry) decay :5 Sharpe:1.81 industry

group_rank(ts_rank(cashflow_op / cap, 60), subindustry) decay :4 Sharpe:1.83 industry

二、7月30尝试算子

算子来源:https://support.worldquantbrain.com/hc/en-us/community/posts/39797611609751--Alpha%E7%81%B5%E6%84%9F-%E4%BB%8E%E4%B8%80%E4%B8%AALearn%E9%A1%B5%E9%9D%A2%E7%9A%84%E4%BE%8B%E5%AD%90%E5%87%BA%E5%8F%91-%E8%81%8A%E8%81%8A%E6%88%91%E6%80%8E%E4%B9%88%E6%8A%8A%E7%8E%B0%E9%87%91%E6%B5%81%E5%9B%A0%E5%AD%90%E5%81%9A%E5%88%B0fitness-1-8

大家好,最近刚开始在BRAIN上认真做alpha研究,踩了不少坑,也有一些收获,写出来跟大家交流一下。 起因 说来有点偶然。刚上平台的时候啥也不懂,就去Learn页面翻文档。在"Alpha Examples for Beginners"里看到一个叫"Earnings Yield Momentum"的例子,用的是分析师盈利预测数据做时序排名再按行业分组。 我直接抄过来跑了一下,sharpe不到1,还行但也谈不上多好。然后我就开始琢磨,这个字段到底靠不靠谱? 第一个坑:数据覆盖率 我当时不知道怎么看一个字段的数据覆盖情况。后来在文档里找到可以通过long count和short count来判断------简单说就是用rank()包一下这个字段,看有多少股票被分到了多头和空头。 跑了一下发现分析师预测类数据在TOP3000里大概只覆盖三分之一的股票,也就是说大部分股票根本没有这类数据。这对信号的稳定性肯定有影响。 想了想,有没有什么基本面指标覆盖率更高、又能反映类似"盈利质量"的意思? 翻了一圈字段列表,最后选了一个覆盖率超过90%的基本面现金流类字段。理由也简单:现金流比利润指标更难造假,而且是实打实的钱进钱出。 改进思路(不贴具体表达式了,说方法论) 第一步:构建基础信号 用现金流类指标除以规模指标做标准化,再rank。逻辑就是找现金流质量高的股票。结果:sharpe不到1,有信号但弱,turnover也偏高。 第二步:加入时间维度 光看当前值太粗糙了,我想看"这个指标是不是在变好"。于是用ts_rank做时序百分位排名。这一步提升比较明显,sharpe翻倍了。关键insight是:比起"现在好不好","正在变好"的信息量更大。 第三步:同行比较 直接rank是拿所有行业一起比,但不同行业的特征差别太大。换成group_rank按细分行业分组后又有明显提升。这里我踩过一个坑:用sector级别分组效果远不如subindustry,越细的分组越能消除系统性偏差。 第四步:加入对冲成分 这一步是意外发现的。在价值因子的基础上减去一个短期价格动量的反转信号,效果特别好。逻辑想通了:做多"基本面在改善但近期被低估的",做空"基本面在恶化但近期被高估的",两个信号天然互补。这一步之后sharpe和fitness都有质的飞跃。 第五步:参数微调 调整decay参数让仓位平滑过渡。这里有个小技巧:fitness公式里turnover在分母位置,所以在不损失sharpe的前提下降低turnover能直接提升fitness,算是"免费的午餐"。

参照这个核心思想,写出Fast Expression表达式

复制代码
# 第一步:构建基础信号(现金流/市值)
base_signal = cashflow_op / cap;

# 第二步:加入时间维度,捕捉"正在变好"
ts_improved = ts_rank(base_signal, 60);

# 第三步:同行比较,细分行业分组
grouped_signal = group_rank(ts_improved, subindustry);

# 第四步:加入对冲成分(做多基本面改善,做空短期高估)
hedge = -ts_rank(returns, 10);

# 第五步:组合信号
final_signal = grouped_signal + hedge;

# 输出最终Alpha
final_signal

参数: decay :8 subindustry

参数: decay :10 subindustry

参数: decay :13 subindustry

参数: decay :12 industry

参数: decay :14 sector

三、其他

模板

相关推荐
要开心吖ZSH20 小时前
一次 HikariCP 连接池耗尽导致的线上雪崩排查实录——完整排查报告
java·spring boot·mysql·连接池·hikaricp
万亿少女的梦16821 小时前
基于SSM、JSP与MySQL的秦皇岛旅游服务管理系统设计与实现
mysql·mybatis·ssm·jsp·spring mvc
仙宇觉尘21 小时前
记一次 .NET 某中医药附属医院门诊系统 崩溃分析
数据库·oracle·.net
小码农 - 初21 小时前
MySQL的表操作
数据库·mysql
灵机一物21 小时前
2026智能清洁设备推荐榜:无人值守与效率提升解析
数据库
筑梦之路21 小时前
harbor使用国产数据库PolarDB PG版本部署——筑梦之路
数据库·信创适配·国产化改造
大鹏说大话1 天前
移动应用打包常见报错汇总
数据库
数安3000天1 天前
全行“手机号“字段有20多个名字——字段命名不统一,数据分类分级怎么做?
大数据·数据库·分类
NineData1 天前
Oracle 长事务正在消耗 undo 空间,ChatDBA 能提前发现
数据库·sql·oracle·agent·ninedata·回滚·长事务