因子研究:期货单因子入门

evanaevana··543 浏览

因子研究:期货单因子入门

1.1 构建一个简单的期货因子流程

因为主要模板都是基于股票多因子框架构建的,所以这里和AI助手对话要求生成一个新的模板
bacc4b440f504946873e636aa717c7ca.jpeg

可以发现大致整体可以分为四个模块,因子代码 ==> 数据区间 ==> 期货数据定义 ==> 输出分析
315f481f5f7d44d49499a2e8fc839204.jpeg

因子的构建模块主要采用Python的方式,整体还是非常清晰的

class FuturesMomentum20Factor(Factor):
    def calculate(self, factors):
        # 使用主力连续合约的日频收盘价(或主力聚合价)
        close = factors['close']

        # 20日简单动量:当前价格相对20日前的涨跌幅
        # (P_t / P_{t-20} - 1),不使用未来数据
        past_close = DELAY(close, 20)

        # 避免除零/无效值
        safe_past_close = IF(past_close == 0, 1e-6, past_close)
        raw_momentum = close / safe_past_close - 1

        # 可选:做截面标准化,便于不同合约之间比较
        # 这里使用SCALE将截面缩放到[-1, 1]
        # factor_value = SCALE(raw_momentum)
        factor_value = raw_momentum

        return factor_value

顺便也可以发现AI助手比较贴心的考虑了数据问题。

1.2 遇到的主要问题

  1. 计算的数据并不好debug,不能看到计算的中间过程和结果数据;
  2. 不太了解如何自定义主力合约选取,主力合约的代码是什么(例如一些行情软件可能是 RB999等);

后续:
对于问题2,问了下AI助手,它给了类似以下的解决方案:

        symbols = mom20_rank.index.get_level_values('symbol')

        # 根据自身行情库实际主连合约命名调整以下列表
        black_prefixes = ['rb', 'hc', 'i', 'j', 'jm', 'sf', 'sm', 'zc']

        def is_black(sym):
            # 统一小写,兼容不同命名风格
            s = str(sym).lower()
            return any(s.startswith(p) for p in black_prefixes)

        mask = symbols.to_series().apply(is_black)

评论

还没有评论,来说点什么吧
0 / 2000