如何编写Pine Script指标绘制标普500 P/D(价息比)走势图
TradingView自定义标普500价息比(P/D)指标实现
原有未完成代码存在三个核心问题:未正确调用跨数据源的股息数据、未处理月度股息数据和日频价格的时间粒度差、残留了ROC指标的无关绘图代码,无法正常输出计算结果。
可直接运行的完整代码
//@version=5 indicator(title="标普500价息比(P/D)", shorttitle="SPX P/D", format=format.price, precision=2, overlay=false, timeframe_gaps=true) // 拉取QUANDL平台的标普500月度每股股息数据,关闭未来函数避免回测失真 div_raw = request.security("QUANDL:MULTPL/SP500_DIV_MONTH", timeframe.period, close, gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off) // 月度数据仅在更新日有值,其余交易日用上一次公布的最新股息填充 div_latest = ta.valuewhen(not na(div_raw), div_raw, 0) // 计算价息比:当前标普500价格 / 最新月度每股股息 pd_value = close / div_latest // 可选:计算20年历史均值作为估值参考 pd_ma20y = ta.sma(pd_value, 252*20) // 绘图 plot(pd_value, color=#2962FF, linewidth=2, title="P/D走势") plot(pd_ma20y, color=#FF5252, linewidth=1, linestyle=hline.style_dashed, title="20年历史均值")
核心逻辑说明
- 跨数据源调用:使用Pine Script原生
request.security函数拉取QUANDL平台的月度股息数据,设置lookahead=barmerge.lookahead_off参数杜绝未来函数,保证回测和实盘显示结果一致 - 时间粒度对齐:月度股息每月仅更新一次,非更新日数据为空,通过
ta.valuewhen函数自动向前取最近一次公布的有效值填充,匹配日频的标普500价格计算频率 - 计算规则:直接读取当前图表主品种的收盘价(加载指标前需将主品种切换为SPX或对应标普500标的),除以填充后的最新股息值,得到实时价息比
- 附加参考:默认附带20年历史均值参考线,可直观对比当前估值所处的历史位置
使用提示:如果需要显示不同时间周期的P/D值,直接切换图表周期即可,指标会自动对应周期下的价格和匹配的股息数据计算结果。
内容的提问来源于stack exchange,提问作者lvbx9
相关产品推荐
相关产品推荐

