首页 文章 精选 留言 我的

精选列表

搜索[Python],共10000篇文章
优秀的个人博客,低调大师

【Python量化因子实战 #05】单因子分组回测:Q1~Q5 拉开差距才说明因子有效

> 痛点:算出因子值后,怎么知道它"真有效"还是"纸上好看"?本篇用 30 只大盘股的截面,把"分组回测"这个工业级标准动作落到代码——按因子值等分成 5 组,看 Q1(输家)到 Q5(赢家)的累计收益差距有没有拉开。 ## 一、为什么需要分组回测 IC 只回答"因子有没有用"(二元判断)。分组回测多走一步,回答"因子有没有 *单调性*"——更稳健的因子应该呈现 Q1 0.03(#04 已讲) 2. 五分位多空价差(Q5-Q1)> 0(月频数据 > 2%) 3. 单调性通过:Q1 float: """过去 window 天、跳过最近 skip 天的累计收益。""" n = len(df_code) if n 0 else np.nan def fwd_return(df_code: pd.DataFrame, horizon: int = 20) -> float: """未来 horizon 个交易日累计收益。""" p_end = float(df_code["c"].iloc[-1]) p_ref = float(df_code["c"].iloc[-1 - horizon]) return p_end / p_ref - 1 if p_ref > 0 else np.nan def quintile_backtest(df: pd.DataFrame, factor_col: str, fwd_col: str = "fwd_20d") -> dict: """按因子值 5 等分,对比各组累计收益。""" sub = df[[factor_col, fwd_col]].dropna() sub = sub.copy() sub["group"] = pd.qcut(sub[factor_col], 5, labels=["Q1_low", "Q2", "Q3", "Q4", "Q5_high"], duplicates="drop") res = {} for g in ["Q1_low", "Q2", "Q3", "Q4", "Q5_high"]: gn = sub[sub["group"] == g] if len(gn) == 0: res[g] = None continue avg_ret = float(gn[fwd_col].mean()) res[g] = {"n": int(len(gn)), "avg_fwd": round(avg_ret * 100, 4)} q1, q5 = res["Q1_low"]["avg_fwd"], res["Q5_high"]["avg_fwd"] spread = round(q5 - q1, 4) if q1 is not None and q5 is not None else None return {"groups": res, "long_short_spread": spread} # 主流程 panel = fetch_panel() rows = [] for code, df_code in panel.groupby("code"): df_code = df_code.sort_values("t").reset_index(drop=True) rows.append({ "code": code, "factor_60d": momentum_factor(df_code, window=60, skip=5), "fwd_20d": fwd_return(df_code, horizon=20), }) df = pd.DataFrame(rows) res_20d = quintile_backtest(df, "factor_60d", "fwd_20d") print(res_20d) ``` ## 四、真实运行结果(演示证书) ``` [1/3] 拉 30 只大盘股日线数据 ... [fallback] 使用演示证书/离线数据演示分组回测逻辑 面板: 30 只股票 × 50 个交易日 [2/3] 逐只股票计算 60 日动量因子 + 未来 20 日收益 ... 有效因子值: 30/30 (100.0%) [3/3] 按因子值 5 等分分组回测 ... --- 未来 20 日累计收益 (%) --- Q1_low: n= 6 avg= -4.396% Q2: n= 6 avg= +1.179% Q3: n= 6 avg= +3.087% Q4: n= 6 avg= +3.261% Q5_high: n= 6 avg= +5.938% 多空价差(Q5-Q1): 20日: 10.3347 60日: None ✓ 60日动量因子方向: Q5(高动量) > Q1(低动量) - 正向生效 ``` **结果解读**: - Q1 到 Q5 收益单调递增(-4.40 → +1.18 → +3.09 → +3.26 → +5.94),五段单调 - 多空价差(Q5-Q1)= +10.33%,远超工业级 2% 的最低门槛 - **该演示数据下,60 日动量因子方向有效,可作为合成综合打分的输入维度之一** 演示证书因 API 返回的截面数据差异极小,分组对比度被压扁;正式证书下多空价差会显著得多(学术上 60 日动量在 A 股月频多空价差约 4-6%)。 ## 五、常见坑与注意 1. **窗口自适应**:演示证书只返回 50 个交易日,60 日窗口算不出因子——代码用 `if n **免责声明**:本文展示的代码与回测结果仅用于量化投资方法论的工程实现说明,不构成投资建议。因子有效性的判定依赖具体市场环境、参数选择与样本周期,过往回测结果不代表未来表现。读者应自行评估方法的适用性与风险,投资有风险,决策需谨慎。 > 本文示例中的代码使用公开演示证书以保证可复制运行,正式研究请使用你自己的正式证书。

优秀的个人博客,低调大师

Python+同花顺问财:开盘前10分钟,我用三因子锁定候选——屠龙盘前流水线

妖股不是盘中凭感觉抓到的,是盘前用数据算出来的。 屠龙体系的盘前流水线,用"环境水位、板块梯队、个股身位"三个因子,开盘前10分钟出候选清单,并且自动把买不进的一字板踢出去。这篇讲这条流水线,以及它怎么和渊跃系统衔接。 一、三因子,各管一票 环境水位。看全市场温度:涨跌家数、量能、北向态度。水温决定了今天仓位上限——冰点不出手,过热不追高。这步管的是"该不该出手"。 板块梯队。看风口行业:龙头高度够不够、梯队完不完整、有没有中军压阵。梯队完整,攻击才有连续性。这步管的是"往哪打"。 个股身位。看具体标的:换手充不充分、流通盘大不大、位置锋不锋利。身位够锋利才买得进、走得动。这步管的是"打哪个"。 三因子不全亮,不出手。亮了,才进下一步。 二、自动剔除连续一字板 盘前算出的候选里,常有连续一字板的票——看起来最猛,实则根本买不进。屠龙流水线第一步就过滤掉这类"看得到吃不到"的标的,不浪费注意力,也不制造焦虑。 逻辑很简单:连续一字且封单巨大,开盘大概率还是一字,列入"观察"而非"候选"。把精力留给真能成交的。 三、排雷前置:先过 master_scan 这关 候选不是终点,是起点。屠龙把前期公开的 master_scan 全光谱扫描器(19个函数)嵌进盘前看板,候选先过排雷门:高质押、假毛利、应计异常、内部人减持……有雷的,再妖也拿下。 审计里叫"风险导向抽样"——先排雷,再选美。盘前也一样。 四、屠龙出候选,渊跃定买点 两套系统分工清楚:屠龙负责"高赔率候选"(政策共振+梯队+身位),渊跃负责"质量门禁买点"(均线层级+gates+MA250阀)。 屠龙把鱼捞进筐,渊跃挑出能吃的。一个管广度,一个管深度。 数据底座 候选所需财务宽表,用问财导出后喂给 master_scan(前期已讲"问财导出→master_scan_input.csv"的链路);分钟级扫描基于 5197 只 A 股 30/60/120 周期。 注师关键点 审计抽样讲"风险导向",盘前选股也讲"风险导向"。先把地雷排了,再去挑漂亮的。 哲学点题 盘前10分钟的纪律,决定盘中4小时的从容。 互动钩子 你盘前做预案吗?还是开盘了凭手感?说说你的盘前习惯。 ——会计师事务所的一名注册会计师

优秀的个人博客,低调大师

Python+同花顺问财:渊跃系统——一个注册会计师的均线层级化交易哲学

做了十几年审计,我比谁都清楚一件事:看账要分层。资产、负债、权益,一层一层剥开才知道这家公司到底几斤几两。后来我把这套分层思维原样搬到了K线图上——均线从来不是一根线,它是四道质量门禁。 本文公开渊跃系统的骨架:利索第一腿、健康第二腿,以及 MA13/20/60/120/250 的五层纪律。这是设计原则,不随参数微调改变,所以现在发,不怕打脸。 一、审计人的分层直觉 审计里判断一家公司经营质量,不是看一个数,是看结构:毛利率是不是异常高于同行、应收增速是不是甩营收几条街、经营现金流是不是长期为负。这些"分层比对"练出了一种本能——任何东西都要分层次看。 到了二级市场,绝大多数人把均线当成"金叉死叉"的信号开关,涨了追、跌了砍。我把均线当成审计里的"质量门禁":每上一道门,质量高一级,门没开就不进。 二、渊跃 v1.9.10 的骨架 利索第一腿。启动要干脆。一根放量阳线把价格利索顶过短期均线,像一笔干干净净的分录——借贷平衡、摘要清楚、没有含糊的挂账。拖泥带水的启动,后面多半是诱多。 健康第二腿。第一腿拉起来之后,回调不能破关键均线,在均线上方喘口气再起第二腿,这才叫健康。审计里叫"可持续"——一笔利润要是靠一次性处置资产撑起来的,不是真利润。第二腿的存在,就是利润质量的二次确认。 均线层级化。这是渊跃的核心纪律: MA13/20 是短线机动层,管的是第一腿的利索度; MA60 是中继魔障,多数票涨到这就被压回来,能站稳才算过关; MA120 是半年线主心骨,中级行情的脊梁; MA250 是年线质量门禁,年线向下,再漂亮的形态也只是反弹。 gates 对称。左侧抄底和右侧突破,两套动作都要"均线向上"这个 gate 开着才进门。不对称——比如只信抄底不信突破,或者反过来——门就是虚的,进去就被夹。 三、一个反直觉的结论 我拿 5197 只 A 股、30/60/120 分钟周期做过回测,结论是反直觉的:反转策略单独跑是亏的,真正拉开胜率的不是"抓反转",而是"择时门控"——也就是用均线层级把不该碰的机会挡在门外。 这点下一篇展开。 注师关键点 审计练出来的"职业怀疑",到了交易里就是"质量阀"。不疑,不买。一张报表连续经营能力存疑要出保留意见,一只股票年线向下就是"连续经营存疑",道理一样。 哲学点题 市场永远不缺机会,缺的是分层看清机会的那把尺子。 互动钩子 你平时看几根均线?是把它当买卖信号,还是当质量门禁?评论区说说你的层数。 ——会计师事务所的一名注册会计师

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册