基金定投10-揭秘“低位多买、高位少买“的底层信号:估值分位是怎么帮你抄底的?一套用PE/PB历史分位驱动的动态仓位规则
发布时间:2026/9/4 6:09:23 锦皓数字建站

基金定投助手为什么你的基金定投总在追涨杀跌价值平均法定投引擎 综合估值模型动态再平衡仓位管理一个单文件 HTML 的免费定投工具-CSDN博客https://download.csdn.net/download/weitingfu/93339607?spm1011.2124.3001.6210你是否遇到过这种场景定投已经坚持了两三年打开账户一看持仓成本比市场平均成本还高明明一直在定投却感觉像高位接盘侠网上搜到的方案要么让你无脑定投、闭眼买要么让你跌了加仓、涨了减仓可到底跌多少算跌、涨多少算涨没有一个人给出可量化的标准。本文将从估值分位这个核心指标出发给出一个生产级解决方案包含 PE/PB 历史分位的完整计算代码、20%/70% 分位阈值下的加减仓规则、以及一组 10 年回测的真实数据帮你给定投装上价值温度计。一、先看结论动态仓位调整到底在干什么上一篇我们讲了定期再平衡每季度或每年校准一次把偏离的仓位拉回目标比例。它像什么呢像闹钟——时间一到就响不管外面是牛市还是熊市。动态仓位调整则是另一个物种它不看日历看温度计。再平衡管的是结构核心仓位和卫星仓位的比例不能跑偏动态调整管的是价格市场便宜的时候多买点市场贵的时候少买点。两者不冲突反而互补。本篇的主角——估值分位就是那个被行业内公认判断市场相对位置最优的温度计。一句话结论当指数的 PE 分位低于 20% 时把权益类资产配置比例上调 10%-15%去积累廉价份额当 PE 分位高于 70% 时把配置比例下调 10%-15%锁定部分浮盈、降低回调风险。记住这组数字20% 加仓、70% 减仓、幅度 10%-15%。这是全篇的核心规则后面所有内容都在解释它为什么成立、怎么落地。二、为什么固定金额定投还不够——从被动平滑到主动择价2.1 定投解决了什么先说句公道话定投本身已经是个好东西。固定金额定期买入天然实现了价格低的时候买得多、价格高的时候买得少——这在前面的文章里叫成本平滑或波动率收割。举个例子你每月投 1000 元月份净值买入份额1月1.010002月0.812503月0.520004月1.2833四个月平均价格是 0.875而你的平均成本只有 0.787总投入 4000 ÷ 总份额 5083。这就是定投的底层数学你天然比市场平均买得更便宜。2.2 定投没解决什么越买越贵的问题但定投有个隐藏盲区——它不区分便宜和贵。它只是机械地按月买于是会出现一个尴尬场景指数在 4000 点的时候你每个月买 1000 块指数涨到 6000 点你还是每个月买 1000 块。表面上定投了实际上你的新增资金正在以越来越高的价格入场。等到牛市顶部区域你甚至可能因为涨得这么好、肯定还能涨的心态追加投入——越涨越买成本越买越高。这就是为什么很多人在牛市里定投最终收益却平平份额累积的节奏没有和价格高低挂钩。2.3 再平衡 vs 动态调整一个管结构一个管价格再平衡和动态调整的区别可以用厨房来类比再平衡冰箱里食材的比例偏了肉太多、菜太少定期整理一下把比例拉回 7:3动态调整菜市场打折的时候多囤点肉菜价暴涨的时候少买点菜——根据价格信号决定采购量。再平衡是被动纠偏动态调整是主动择价。两者叠加才是完整的仓位管理体系。这里要划个重点动态调整不是让你放弃定投、改成择时。恰恰相反它是在定投纪律的基础上用客观指标替代主观情绪去微调每期买入金额。你依然定期投只是投多少由估值分位说了算。2.4 从被动到主动仓位管理的三个层级把整个仓位管理体系拆开看其实有三个递进的层级很多新手容易把它们混为一谈层级工具频率管什么例子第一层固定金额定投每月入场节奏每月 1000 元无脑买第二层定期再平衡每季度/年度组合结构70:30 漂移到 75:25调回来第三层动态仓位调整随市场信号买入价格估值低多买、估值高少买第一层解决要不要坚持投的问题第二层解决比例别跑偏的问题第三层解决买得贵不贵的问题。越往后越进阶但每一层都建立在前面一层已经做好的基础上——如果你连定投都坚持不了谈再平衡和动态调整都是空中楼阁。换句话说动态仓位调整不是要取代定投而是给已经养成的定投习惯加一层智能调温平时按部就班地投极端便宜时多买一点极端昂贵时少买一点。这层微调看似幅度不大但在 10 年尺度上积累的份额成本差异相当可观。举个例子直观感受一下假设沪深 300 净值在 1.0-1.6 之间波动你每月固定投 1000 元10 年下来平均成本大约落在区间中值附近但如果每次分位低于 20% 时你多投 15%、高于 70% 时少投 15%低位买到的份额明显增多高位买的份额减少平均成本可能比固定定投低 3%-5%——别小看这几个百分点它是在同样的市场行情下、不需要任何预测能力就能白拿的。三、估值分位判断市场贵不贵的温度计3.1 PE 和 PB 是什么两个指标先解释清楚为什么要用它们PE市盈率 股价 ÷ 每股收益 你买这家公司多少年能靠利润回本。PE 高说明市场愿意为每一块钱利润付更多钱情绪更热PB市净率 股价 ÷ 每股净资产 你买这家公司为它的账面资产付了几倍溢价。PB 高说明市场更愿意为预期而不是净资产买单。对指数来说PE/PB 就是整个市场贵不贵的浓缩表达。3.2 分位的定义与计算但注意PE 的绝对数值没有意义。科技股的 PE 常年 30 倍银行股的 PE 常年 5 倍——你不能说科技股一定比银行股贵因为盈利结构、行业属性完全不同。所以行业内用历史分位percentile来判断当前 PE 在过去 N 年的历史区间里排在第百分之几的位置。公式很直白分位 (历史区间内 ≤ 当前PE 的交易日数量) ÷ 历史区间总交易日数量 × 100%举个例子沪深 300 过去 10 年共有约 2400 个交易日当前 PE 比其中 2160 天的 PE 都低那它的 PE 分位就是 2160 ÷ 2400 90%——市场处于历史极贵区域。反之如果当前 PE 只比 480 天高分位就是 20%——历史极便宜区域。graph LR A[获取指数历史PE/PB序列] -- B[确定历史区间br/过去5-10年] B -- C[统计区间内交易日总数 N] C -- D[统计当前PE高于历史的天数 M] D -- E[分位 M ÷ N × 100%] E -- F{分位 20%?} F --|是| G[低估区加仓10%-15%] F --|否| H{分位 70%?} H --|是| I[高估区减仓10%-15%] H --|否| J[合理区维持基准定投]这张图就是全篇的方法论主干数据 → 区间 → 计数 → 分位 → 决策五步闭环任何一步都不需要主观判断。3.3 为什么分位比绝对估值更可靠三个理由缺一不可消掉了贵贱标准的主观争议不同行业、不同市场的 PE 合理区间不同但历史分位 90%“在哪个市场都意味着比过去十年绝大多数时候都贵”自带均值回归假设统计数据表明指数估值在 90% 以上的时间内都在历史均值的一个标准差区间内波动。分位越高后续回归均值下跌的概率越大计算透明、可复现任何一个程序员拿到历史 PE 序列都能在 10 行代码内算出分位不依赖任何专家感觉。效率技巧写代码时直接用numpy的percentileofscore或scipy.stats.percentileofscore一行就能算出分位不需要自己手写排序循环。后文代码部分会给出完整实现。四、核心规则20% 加仓、70% 减仓4.1 三档区间划分基于估值分位把市场切成三个区间估值区间PE/PB 分位市场状态动作低估区低于 20%历史便宜恐慌情绪蔓延加仓权益配置比例上调 10%-15%合理区20%-70%价格正常无需干预按兵不动维持既定定投节奏高估区高于 70%历史昂贵情绪亢奋减仓权益配置比例下调 10%-15%这套规则的设计逻辑很朴素在恐慌时贪婪在亢奋时克制。但贪婪和克制不是拍脑袋而是由分位数这个客观信号触发。4.2 调整幅度为什么是 10%-15% 而不是 50%你可能想问既然判断出了便宜和贵为什么不干脆满仓干/清仓跑答案是——你判断的是概率不是确定性。分位 10% 说明过去 90% 的时间都比现在贵但这不意味着市场明天就涨均值回归可能在 1 个月后发生也可能在 2 年后才发生中间你可能继续浮亏 30%所以调整幅度必须克制10%-15% 既能表达态度又不至于让一次性判断错误造成致命伤害。这也是动态仓位调整和满仓抄底/清仓逃顶的根本区别前者是概率加权下的仓位微调后者是赌方向。4.3 完整规则表可直接抄作业假设你的权益类目标配置比例是 60%核心 50% 卫星 10%触发条件动作调整后权益比例PE 分位 10%极低估权益比例上调 15%69%PE 分位 10%-20%低估权益比例上调 10%66%PE 分位 20%-70%合理不调整60%PE 分位 70%-90%高估权益比例下调 10%54%PE 分位 90%极高估权益比例下调 15%51%⚠️避坑警告分位阈值是区间判断而不是点位判断。千万不要因为分位从 69.9% 跳到 70.1% 就立刻大幅调仓——先确认分位数连续站在阈值外比如连续 5 个交易日再动手可以滤掉大量假信号。后文代码里会教你怎么加这个缓冲。graph TD Start[每月定投日] -- Check[查询当月 PE/PB 历史分位] Check -- Low{分位 lt; 20%?} Low --|是| Up[权益配置比例上调 10%-15%br/低估区积累廉价份额] Low --|否| High{分位 gt; 70%?} High --|是| Down[权益配置比例下调 10%-15%br/高估区锁定浮盈、降低回撤风险] High --|否| Keep[合理区维持既定定投节奏br/不加不减] Up -- Log[记录当月分位与调仓日志] Down -- Log Keep -- Log Log -- Next[下个月继续重复]这张图把整套执行规则压缩成了一次循环判断每次定投日只做一次问号判断不需要任何盘感不需要任何新闻解读照着流程走即可。规则的可执行性就体现在这种流程化里。4.5 PE 和 PB 到底该看哪个——双指标交叉验证很多读者到这里会问规则里一会儿说 PE 分位、一会儿说 PB 分位到底以哪个为准答案是两个都看取更保守的那个。原因在于 PE 和 PB 各自有盲区PE 的盲区盈利周期的影响。经济衰退期企业利润大幅下滑PE 股价 ÷ 利润分母变小导致 PE 被动抬高——此时 PE 分位可能显示很贵但实际市场可能已经很便宜了这叫戴维斯双杀的错位阶段PB 的盲区资产结构的变化。科技公司、平台型公司的核心资产是人才、数据、品牌这些不体现在净资产里PB 会系统性高估它们的贵。实操中推荐这样用分别计算 PE 分位和 PB 分位取两者中更接近极端的信号只要其中一个分位 20% 且另一个也不高比如 40%触发低估加仓只要其中一个分位 70% 且另一个也不低比如 50%触发高估减仓如果两个指标指向矛盾一个说便宜、一个说贵按兵不动等待信号收敛。这套双指标交叉验证能大幅过滤单一指标的结构性误判代价只是每个月多查一个数字几乎为零。4.6 一个完整的月度决策流程示例把上面所有规则串起来你每个月的操作其实只有五步拉数据查当月指数 PE 分位、PB 分位10 秒用小程序或 akshare判区间分位落在低估区20%、合理区20%-70%还是高估区70%定乘数低估区乘数 1.10-1.15合理区 1.0高估区 0.85-0.90算金额本月定投金额 基准金额 × 乘数权益与固收按调整后比例分配记日志把当月的分位、乘数、买入金额记下来——半年后回看你会惊讶于自己当时为什么敢在某个位置重仓。最后一步尤其重要。投资决策日志是最好的事后复盘工具它能把当时怕得要死但按规则买了和当时头脑发热乱买了区分开帮你逐步建立对规则的信任——而信任恰恰是长期执行的唯一燃料。4.4 动态调整的钱从哪里来低位上调权益比例钱从哪来两个来源新增定投资金把当月定投金额的一部分从固收类转向权益类——比如原本每月 7000 定投权益 3000 定投固收低估区改为8000 权益 2000 固收存量调仓把固收类持仓的一部分比如 5%卖出转入权益类基金。高估区则完全反过来新增资金多买固收存量仓位部分止盈把权益比例降下来。整个过程没有一次是追涨杀跌全部由分位数这个客观信号驱动。五、案例回测全天候组合的动态调整实战5.1 组合构成空谈规则没有说服力直接上数据。这里用的组合是本土化全天候被动组合配置如下50% 沪深 300A 股宽基提供基础收益50% 中债指数国内债券提供低相关性保护12% 黄金指数注意这是额外叠加的卫星仓位总仓位 112% 是研究报告中给出的原始口径代表在 100% 组合之上的增强配置在这个组合上加入估值分位动态调整沪深 300 的 PE 分位低于 20% 时把沪深 300 权重上调 10%-15%对应资金来自债券部分高于 70% 时下调 10%-15%。pie title 本土化全天候被动组合构成基准状态 沪深300 权益 : 50 中债指数 固收 : 50 黄金指数 卫星 : 12graph LR A[组合净值] -- B[估值分位监控] B -- C{沪深300 PE分位} C --|低于20%| D[权益权重 10%~15%br/卖出部分债券转投权益] C --|20%-70%| E[维持 50:50 基准比例] C --|高于70%| F[权益权重 -10%~15%br/卖出部分权益转投债券] D -- G[调整后组合] E -- G F -- G上面两张图分别回答两个问题第一张告诉你底仓长什么样第二张告诉你估值信号怎么改变底仓——合在一起就是 5.2 节那组回测数据的完整运行逻辑。5.2 回测结果2016-202610 年指标动态调整全天候组合纯标普 500年化收益7.83%~11%隐含推算年化波动率9.6%显著更高最大回撤-16.2%-33.7%关键数字翻译成人话动态调整组合的最大回撤只有-16.2%同期纯标普 500 的最大回撤高达-33.7%极端回撤被压缩了51.9%16.2 ÷ 33.7 ≈ 0.48即回撤不到标普的一半代价仅仅是年化收益牺牲3.19 个百分点7.83% vs 约 11%。5.3 这笔交易划算吗拿 3.19 个百分点的年化收益换回撤减半、晚上睡得着觉划算吗答案取决于你是谁如果你是刚定投 1 年的新手-33.7% 的回撤大概率让你割肉离场、永久退出定投——浮亏变成实亏复利链条断裂如果你已经定投 10 年、本金庞大回撤 33.7% 意味着几十万甚至上百万的浮盈蒸发——心理冲击远超想象而-16.2% 的回撤大多数人都能扛住定投计划不中断复利继续运转。回撤控制是可持续性的数学保障你能扛住的回撤决定了你能坚持多久你能坚持多久决定了复利能滚多大。这正是动态仓位调整的核心价值——不是帮你多赚钱而是帮你少亏钱、扛得住、活得久。这一点值得反复强调在长期定投里不死比暴富重要得多。跌 50% 需要涨 100% 才能回本而回撤控制在 10% 以内后续只需要涨约 11% 就能修复。控制回撤就是保护你的复利。5.4 回测的另一面动态调整在 A 股震荡市的价值有人会说标普 500 是美股估值分位在美国那种长期牛市中意义有限——这话有道理但也只说对了一半。动态调整的真正价值战场恰恰是高波动的 A 股震荡市。逻辑很直白美股长期趋势向上估值长期偏高你经常等不到分位 20%的加仓机会大部分时间只能按基准节奏投A 股牛短熊长、波动剧烈每隔几年就会来一轮恐慌探底 → 情绪修复 → 亢奋冲高的完整循环分位信号被反复触发每一次低估加仓都意味着你在大跌的废墟里多捡了一批便宜筹码每一次高估减仓都意味着你在情绪最亢奋时少买了一批高价筹码。换句话说波动越大估值分位越值钱。A 股投资者骂归骂但恰恰是这种大起大落让估值分位有了用武之地——这就像钓鱼水越浑、鱼越多越需要你手里的温度计看得准。5.5 为什么不直接满仓抄底回撤压缩背后的数学回到那组回测数据动态调整组合最大回撤 -16.2%比纯标普 500 的 -33.7% 压缩了 51.9%。为什么加入估值分位后回撤能降这么多拆开看有三层原因高位少买 少接高价筹码70% 分位以上你减仓 10%-15%意味着牛市顶部你买入的份额更少市场反转时你手里的高价库存更轻浮亏自然更小低位多买 摊薄整体成本20% 分位以下你加仓 10%-15%相当于在市场底部把平均成本往下拽了一截——同样的下跌你的亏损比例更低股债联动 风险对冲减下来的钱没有离场而是转入了中债等低相关性资产市场大跌时债券往往相对坚挺组合整体被兜住。这三层机制叠加就是回撤从 33.7% 压缩到 16.2% 的完整逻辑。它不是靠预测涨跌而是靠在贵的地方少买、在便宜的地方多买这种结构性操作自然实现的。也正因为如此动态调整从来不是择时博弈而是把仓位管理与市场定价有机结合的工程化方案——这恰恰是程序员思维最擅长的事情。六、为什么估值分位有效——均值回归的底层逻辑6.1 数据事实估值是个橡皮筋统计数据显示指数估值在 90% 以上的时间里都在历史均值的一个标准差区间内波动。翻译成人话估值不是随机游走的它像一根被拉伸的橡皮筋拉得越远分位越高回归均值下跌的弹力越大压得越狠分位越低反弹上涨的弹力越大。所以PE 分位 20% 加仓、70% 减仓的底层逻辑是你在橡皮筋最松弛的位置买入在最紧绷的位置卖出——这本质是概率加权后的正向决策。graph LR subgraph 估值橡皮筋示意 A[历史极低分位br/分位 20%br/橡皮筋松弛] --|弹力小| M[历史均值br/约 50% 分位] B[历史极高分位br/分位 70%br/橡皮筋紧绷] --|弹力大| M end M --|90%以上的时间br/估值在均值1个标准差内波动| C[均值回归是常态] C -- D[低估区加仓 → 赚回归的钱] C -- E[高估区减仓 → 躲回归的刀]别把这张图当玩笑它形象地刻画了估值分位的全部底层逻辑——估值是有弹性的偏离越远回归的力量越大。你要做的不是预测回归何时发生而是确保自己站在橡皮筋恢复原状时的有利一侧。6.2 概率优势你不是赌方向你是压概率有人说估值低不代表马上涨万一便宜了还能更便宜呢说得对。但注意规则的设计——它从来不赌马上低估区加仓 10%-15%而不是梭哈就算继续跌你的仓位上限只多了 15%定投节奏还在成本继续被平滑高估区减仓 10%-15%而不是清仓就算继续涨你还有 85% 的仓位在车上不会完全踏空真正的胜负手是时间估值分位低的时候你买得便宜长期均值回归兑现时你的份额成本天然低于追高的人。你不是赌明天涨而是赌长期看便宜买比贵买好——这个概率在 10 年尺度上几乎是确定的。七、缺陷与边界分位不是万能的任何指标都有失效的场景估值分位也不例外。提前说清楚免得你盲目相信7.1 历史区间依赖本篇思考题核心分位的计算依赖历史区间的定义。问题来了沪深 300 有 20 年历史分位相对可靠一只上市只有 3 年的指数比如某新行业指数它的 20% 分位意味着什么样本太少可能只是过去 3 年恰好最低不代表真的便宜更极端的科创板 50 指数上市以来整体处于估值下行通道历史低分位可能是常态而不是买点。应对思路①加长历史窗口至少 5-8 年②对上市时间短的指数用可比指数或行业 PE 中位数做参考③把分位当作参考信号而非唯一信号。7.2 结构性变化指数成份股调整、会计准则变化、行业权重迁移都会让历史 PE 序列失真。比如某指数从金融股为主变成科技股为主整体 PE 中枢抬升——拿过去的 PE 区间衡量当下会系统性误判。7.3 极端行情失效均值回归在 90% 的时间里成立意味着10% 的时间里它严重失效。典型的例子是 2020 年的科技股行情估值一路新高越贵越涨提前减仓的人踏空了大半段。估值分位管不了情绪泡沫可以吹多久——这正是下一篇要讲的均线趋势指标需要登场的原因。7.4 组合使用原则行业共识正因为单一指标有局限行业内通常的做法是多指标联合估值分位本篇管贵不贵均值回归逻辑均线趋势下一篇管强不强趋势延续逻辑波动率指标下一篇管风险大不大动态平衡风险敞口。三个指标各有分工、互相校验只有当它们指向同一方向时才加大调整幅度指向矛盾时维持基准仓位。这样既不会被单一指标的假信号骗也不会错过真正的极端机会。graph TD A[市场状态] -- B[估值分位指标br/管贵不贵br/逻辑均值回归] A -- C[均线趋势指标br/管强不强br/逻辑趋势延续] A -- D[波动率指标br/管风险大不大br/逻辑风险平价] B -- E{信号是否一致?} C -- E D -- E E --|全部同向| F[加大调整幅度br/权益 ±15%] E --|部分同向| G[小幅调整br/权益 ±10%] E --|互相矛盾| H[维持基准仓位br/等待信号收敛] F -- I[动态仓位最终配置] G -- I H -- I这张图是动态仓位管理的完整版拼图本篇只用了估值分位一块剩下两块在下一篇登场。记住这个框架你就理解了整个动态仓位体系的进化方向——从单指标到多指标从看温度到看温度 看风向 看浪高。7.5 不同市场的适配参数估值分位的20%/70%阈值是宽基指数基金的通用水准但落地到不同市场参数要微调市场分位阈值建议说明A 股沪深 300 等20% / 70%波动大、周期明显标准规则适用美股标普 500、纳指 10025% / 75%长期中枢抬升阈值略微放宽避免频繁误触发港股恒生指数15% / 65%长期低估、流动性主导低估阈值更低更便宜才买、高估阈值更敏感有修复就跑行业主题基金不单独用单一行业 PE 受盈利周期干扰大必须叠加均线趋势确认这个表是经验值不是精确值。重点不是阈值具体取多少而是你要意识到不同的市场有不同的估值中枢和波动特征参数必须按市场属性适配——拿美股参数直接套港股大概率会错过信号或频繁误触发。7.6 估值分位解决不了的人性问题最后说一个技术指标永远解决不了的问题执行纪律。估值分位最大的优势是客观最大的敌人是你不信它分位跌到 10% 时市场通常正处于最恐慌的阶段新闻标题全是危机“崩盘”你的本能是再等等——这时候敢按规则加仓的人十个里不到两个分位涨到 90% 时市场通常正在最亢奋的阶段周围人都在晒收益你的本能是再加一把——这时候肯按规则减仓的人同样寥寥无几。规则设计得再好执行不了等于零。这也是为什么建议程序员用工程手段约束自己自动定投、条件单、脚本提醒、把规则写进代码——让纪律从意志力变成程序逻辑。人斗不过情绪但代码可以。八、代码实战写一个估值分位计算器理论讲完上代码。下面是完整的 Python 实现先模拟一个 PE 序列并计算历史分位再实现20% 加仓 / 70% 减仓的动态定投并与固定金额定投对比。import numpy as np import pandas as pd from scipy.stats import percentileofscore # ---------- 第一步模拟 10 年 PE 序列2400 个交易日 ---------- # 真实场景请替换为实际指数 PE 历史数据如中证指数官网、Wind、聚宽等 rng np.random.default_rng(42) # 用均值回归模型模拟 PE围绕中枢 15 波动波动幅度随情绪放大 pe np.zeros(2400) pe[0] 15.0 for i in range(1, 2400): # 均值回归 噪声 pe[i] 15 0.92 * (pe[i-1] - 15) rng.normal(0, 1.2) # 人为注入一轮牛熊让分位能覆盖低/高两个极端 pe[600:900] 6 # 牛市段PE 冲高 pe[1500:1800] - 5 # 熊市段PE 探底 pe np.clip(pe, 6, 40) df pd.DataFrame({pe: pe}) df[date] pd.date_range(2016-01-01, periods2400, freqB) # ---------- 第二步计算 PE 历史分位 ---------- # 用滚动 5 年窗口约 1250 个交易日计算分位避免使用未来数据 df[pe_percentile] df[pe].rolling(1250).apply( lambda x: percentileofscore(x, x.iloc[-1], kindrank) ) / 100.0 print( 估值分位示例 ) print(df[[date, pe, pe_percentile]].dropna().head(3).to_string(indexFalse)) print(df[[date, pe, pe_percentile]].dropna().tail(3).to_string(indexFalse)) print(fPE 分位 20% 的交易日占比: {((df[pe_percentile] 0.2).sum() / df[pe_percentile].notna().sum()):.1%}) print(fPE 分位 70% 的交易日占比: {((df[pe_percentile] 0.7).sum() / df[pe_percentile].notna().sum()):.1%}) # ---------- 第三步动态仓位调整规则 ---------- def get_multiplier(pct: float, base: float 1.0) - float: 返回定投金额乘数 PE 分位 20% - 上调 10%-15% (乘数 1.10-1.15) PE 分位 70% - 下调 10%-15% (乘数 0.85-0.90) 其余区间 - 维持基准 (乘数 1.0) if pct 0.10: return 1.15 # 极低估多买 15% if pct 0.20: return 1.10 # 低估多买 10% if pct 0.90: return 0.85 # 极高估少买 15% if pct 0.70: return 0.90 # 高估少买 10% return base # ---------- 第四步动态定投 vs 固定定投 对比 ---------- # 简化模拟每月定投 1000 元指数净值与 PE 正相关估值高时价格高 # 同时叠加缓慢上行趋势模拟真实市场长期向上的特征。 monthly df.resample(ME, ondate).last().dropna() pe_norm (monthly[pe] - monthly[pe].min()) / (monthly[pe].max() - monthly[pe].min()) monthly[price] 10 5 * pe_norm np.linspace(0, 4, len(monthly)) monthly[mult] monthly[pe_percentile].apply(get_multiplier) fixed_shares, dyn_shares [], [] fixed_cost, dyn_cost 0.0, 0.0 for _, row in monthly.iterrows(): # 固定定投每月 1000 元 fixed_shares.append(1000 / row[price]); fixed_cost 1000 # 动态定投1000 元 × 估值乘数 invest 1000 * row[mult] dyn_shares.append(invest / row[price]); dyn_cost invest total_fixed sum(fixed_shares) * monthly[price].iloc[-1] total_dyn sum(dyn_shares) * monthly[price].iloc[-1] print(\n 定投结果对比10年) print(f固定定投累计投入 {fixed_cost:,.0f} 元期末市值 {total_fixed:,.0f} 元收益率 {(total_fixed/fixed_cost-1)*100:.1f}%) print(f动态定投累计投入 {dyn_cost:,.0f} 元期末市值 {total_dyn:,.0f} 元收益率 {(total_dyn/dyn_cost-1)*100:.1f}%) print(f动态策略多赚 {(total_dyn-total_fixed):,.0f} 元收益率提升 {(total_dyn/dyn_cost - total_fixed/fixed_cost)*100:.1f} 个百分点)代码要点说明滚动窗口防未来函数用rolling(1250)计算滚动分位保证每个交易日的分位只依赖过去 5 年数据——回测时不能偷看未来阈值分层10% 以下/10%-20%、70%-90%/90% 以上两档幅度 10%/15%符合研究报告规则金额乘数法动态定投 基准金额 × 乘数低估区乘数 1多买高估区乘数 1少买逻辑清晰、易落地。九、落地指南数据从哪来执行怎么做9.1 数据来源免费 半自动数据获取方式说明沪深 300 PE/PB 历史分位中证指数官网、蛋卷基金、韭圈儿网页直接看当日分位指数估值小程序/公众号指数估值类小程序每日自动更新省心自己算akshare/tushare拉历史 PE进阶玩家可接代码效率技巧不想天天盯盘的话用akshare写个定时任务Windows 计划任务或 GitHub Actions每周五收盘后自动拉取分位数据并推送提醒——当周分位 20% 或 70% 才通知你平时不用管。这套自动化监控比盯盘高效得多。9.2 执行节奏建议以月为粒度每月定投日先查一眼当月分位再决定本月定投金额±10%-15%用缓冲滤掉假信号连续 5 个交易日分位在阈值外才确认调仓与再平衡配合季度末照常做再平衡结构校准估值分位只在月定投时做金额微调价格择价两者互不干扰新资金为主存量调仓为辅优先调整新增定投的钱减少频繁买卖的摩擦成本。9.3 常见坑位自查坑表现解法用未来数据算分位回测结果漂亮到不真实必须用滚动窗口禁止全历史分位分位天天变追着调仓手续费吃光收益加 5 日确认缓冲 月度粒度只看 PE 不看 PB盈利周期底部误判PE PB 双指标同时看取更保守的低估区无限加仓子弹打光越跌越慌设加仓上限权益总仓位封顶留足现金流十、总结给你的定投装一个价值温度计回顾全文核心就四件事graph LR A[1. 定位] -- B[动态调整 再平衡的价格版br/一个管结构、一个管价格] B -- C[2. 指标] C -- D[PE/PB 历史分位br/客观 · 可复现 · 均值回归] D -- E[3. 规则] E -- F[分位 20% 加仓 10%-15%br/分位 70% 减仓 10%-15%br/其余不动] F -- G[4. 数据] G -- H[全天候组合 10 年回测br/年化 7.83% · 回撤 -16.2%br/极端回撤压缩 51.9%]动态仓位调整 再平衡的价格版再平衡管结构动态调整管价格两者互补估值分位是最优的贵贱温度计PE/PB 历史百分位客观、可复现、自带均值回归逻辑规则简单到可以抄分位 20% 权益上调 10%-15%分位 70% 下调 10%-15%其余不动回测数据站得住全天候组合加入动态调整后10 年年化 7.83%、波动率 9.6%、最大回撤 -16.2%极端回撤比纯标普 500 压缩 51.9%只牺牲 3.19 个百分点年化。估值分位不是圣杯它有自己的失效场景需要和均线趋势、波动率指标配合使用。但作为一个客观、可编程、可回测的信号它足以让你的定投从无脑买入升级为有温度地买入。下次打开账户前先看一眼温度计——便宜就多买贵了就少买剩下的交给时间和纪律。【思考题】估值分位依赖历史区间的定义——如果一只指数上市只有 3 年它的 20% 分位还可靠吗你会怎么处理样本不足的问题提示可以从加长历史窗口 / 用可比指数替代 / 降低信号权重三个方向思考欢迎在评论区给出你的方案。【系列文章预告】下一篇继续动态仓位调整的下半场250 日均线与波动率自适应双指标联动的进阶玩法。当估值分位说便宜、均线趋势却说还在跌时谁说了算敬请关注。标签基金定投、估值分位、动态仓位管理、PE百分位、基金定投加仓、低估值定投、仓位管理
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。