事件
分析师数据
- employee
anl4_adjusted_netincome_ft 本身就是个很好的指标
- 各种变形
group_netralize, ts_mean, winsorize , +其他alpha 也都可以
anl4_flag_erbfintax
anl4_totassets_number
一些优化alpha的通用技巧
- 双重中性化: 让alpha对两个group都做中性化, 即在group (A x B) 上中性化.
group=densify((group_B + 1)*1000 + group_A) 把两个group编码到一个group里.
- 没想到两个group可以相加.
- 类似于transformer中常用的, 把position embedding和text embedding用sum编码到一起.
- 双重排序: 和双重中性化类似. 给主要datafield A 一个很大的权重. 得到字典排序的效果.
- 设置“止盈止损”: 原来的写法好像有问题.
close_at_event = trade_when(event1, close, -1); alpha = trade_when(event2, signal, abs(close - close_at_event) / close > .1);
close_at_event是event1 上次发生时的close. 如果上次event1 的影响超过10%, 对股票强制平仓.
- 比如
event1 是上涨. 连续n天下跌导致影响超过10% 时, 强制平仓.
close_at_event = trade_when(not(event), close, -1);alpha=(abs(close - close_at_event) / close > .1)? nan : signal 好像更符合逻辑
- event 连续发生导致影响超过 10% 则强制平仓
- 月度调仓: 让仓位最多保持一个月, 是为了在量化结果的同时保持灵活性
D = days_from_last_change(event);Alpha = trade_when(D < period, signal, D > period);Alpha
- event是离散指标(比如: 5日均线>10日均线)
- D 距上次调仓的时间, period是规定时间(一个月)
- 情况:
- event 指标变化 -> D = 0, 调仓
- event 指标在规定时间内一直没变化 -> D >规定时间, 超时, 关闭仓位
交易条件
- 判断市场的波动性:
- 用
trade_when(市场波动性,alpha, -1)控制alpha的适用范围.
- “系统风险度量”数据集, 新闻数据集, 情绪数据集
- 识别市场特殊时期: 比如在回报特别差的时期关闭交易
count_of_each_group = group_count(1,subindustry); #计算每个组别的股票数量
drawdown_num = if_else(returns<-0.09,1,0); #如果大幅下跌则计数1,否则为0
sum_of_drawdown = group_sum(drawdown_num,subindustry); #计算每天各组内大幅下跌股票的总数
ratio = sum_of_drawdown/count_of_each_group; #计算出各组的大幅下跌股票数量占比
alpha = if_else(ratio>0.6,nan,signal); #如果本组超过60%的股票都在大幅下跌,则赋值nan.
- 关闭多天:
alpha = if_else(days_from_last_change(ratio<0.6) < 200,nan,signal); #关闭200天
- 只取特殊股票交易:
- 比如市值靠前的股票:
filter = if_else(rank(cap)>0.9,1,nan)
参考资料
[1] 【学习资料】BRAIN小贴士(这里有你想要的硬核内容!持续周更中)