因子研究:期货单因子入门
  evana 2026年02月15日 93 0

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

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)
最后一次编辑于 2026年02月15日 2

暂无评论

推荐阅读