事件

  • 并购(M&A)

分析师数据

  • 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_eventevent1 上次发生时的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天
        • 大幅下跌事件 出现/消失 200天后才能解锁交易
  • 只取特殊股票交易:
    • 比如市值靠前的股票: filter = if_else(rank(cap)>0.9,1,nan)

参考资料

[1] 【学习资料】BRAIN小贴士(这里有你想要的硬核内容!持续周更中)