用回测筛选因子的一点经验分享 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
matters

用回测筛选因子的一点经验分享

  •  
  •   matters 10 days ago 865 views

    我在做量化交易,也自己做因子回测,前前后后试过不少因子,真正能长期用的,其实不多。刚入门的时候很简单:

    • 看别人说动量有效 → 做动量

    • 看研报说低波动好 → 加低波动

    结果就是:

    回测看着还行,一实盘就不稳定。

    后来才明白,因子不是“看起来对”,而是“数据上成立”。

    我现在的做法:

    流程一直没变:

    1. 拉数据

    2. 算因子

    3. 分组

    4. 看未来收益

    5. 算 IC

    方法很朴素,甚至有点老,但一直够用。

    数据

    import requests import pandas as pd def get\_kline(symbol): url = "https://api.alltick.co/v1/market/kline" params = { "symbol": symbol, "interval": "1d", "apikey": "your\_api\_key" } data = requests.get(url, params=params).json()\["data"\] return pd.DataFrame(data) 

    最简单的因子:动量

    def momentum(df, n=20): df\["ret"\] = df\["close"\].pct\_change(n) return df 

    这个东西现在看挺基础的,但不影响用。

    回测:分组 + IC

    def backtest(df): df = df.dropna() df\["rank"\] = pd.qcut(df\["ret"\], 5, labels=False) return df.groupby("rank")\["close"\].pct\_change().shift(-1).mean() def ic(df): df\["fut"\] = df\["close"\].pct\_change().shift(-1) return df\["ret"\].corr(df\["fut"\]) 

    重点就两个:

    • 高分组是不是更赚钱

    • IC 是否稳定

    一些坑~~~

    1. 未来函数:这个很致命,看起来没问题,其实已经作弊了。

    2. 过拟合:调参数调到“完美”,换一段时间直接失效。

    3. 因子失效:长期是可能有效的,但短期完全不一定。我也经历过刚上线就连续回撤的阶段。如果你正好在因子失效期开始用,很容易直接放弃。

    2 replies    2026-04-16 19:00:59 +08:00
    sddyzm
        1
    sddyzm  
    PRO
       10 days ago via iPhone
    有一个角度是回测比较垃的因子反而会在实盘里有出人意料的表现
    Sawyerhou
        2
    Sawyerhou  
       10 days ago
    分组和 IC 是在截面上计算的,如果你是在时序方向上计算的,那维度就错了。
    About     Help     Advertise     Blog     API     FAQ     Solana     5937 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 47ms UTC 03:17 PVG 11:17 LAX 20:17 JFK 23:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86