如何在PineScript中引用往期财报EPS值以计算其增长率?
获取往期财年稀释EPS并计算增长率(Pine Script)
要获取往期报告期的稀释每股收益(EARNINGS_PER_SHARE_DILUTED),核心是利用request.financial函数的period_offset参数,指定相对于最新报告期的偏移量,以此获取历史财年的数据。
核心实现逻辑
request.financial的默认period_offset为0,对应最新的财年报告;设置为1则获取上一财年的数据,设置为2则获取前两年的数据,以此类推。
完整示例代码
//@version=5 indicator("EPS变动与增长率计算", overlay=false) // 获取最新财年稀释EPS(默认period_offset=0) current_fy_eps = request.financial(syminfo.tickerid, "EARNINGS_PER_SHARE_DILUTED", "FY") // 获取上一财年稀释EPS(偏移1期) prev_fy_eps = request.financial(syminfo.tickerid, "EARNINGS_PER_SHARE_DILUTED", "FY", period_offset=1) // 可选:获取前两年财年EPS(偏移2期) two_years_ago_eps = request.financial(syminfo.tickerid, "EARNINGS_PER_SHARE_DILUTED", "FY", period_offset=2) // 计算EPS变动额与同比增长率 eps_change = current_fy_eps - prev_fy_eps // 避免除数为0的情况,上一期EPS为0时返回na eps_growth_rate = prev_fy_eps != 0 ? (eps_change / prev_fy_eps) * 100 : na // 可视化输出 plot(current_fy_eps, title="当前财年EPS", color=color.new(color.green, 0), linewidth=2) plot(prev_fy_eps, title="上一财年EPS", color=color.new(color.red, 0), linewidth=2) plot(eps_growth_rate, title="EPS同比增长率(%)", color=color.new(color.blue, 0), display=display.data_window) // 右上角显示统计数据 var table stats_table = table.new(position.top_right, 2, 3, bgcolor=color.new(color.black, 70)) if barstate.islast table.cell(stats_table, 0, 0, "指标", text_color=color.white) table.cell(stats_table, 1, 0, "数值", text_color=color.white) table.cell(stats_table, 0, 1, "当前财年EPS", text_color=color.green) table.cell(stats_table, 1, 1, str.tostring(current_fy_eps, "#.##"), text_color=color.green) table.cell(stats_table, 0, 2, "EPS同比增长率(%)", text_color=color.blue) table.cell(stats_table, 1, 2, str.tostring(eps_growth_rate, "#.##") + "%", text_color=color.blue)
关键说明
- period_offset参数:控制获取的报告期偏移量,0=最新财年,1=上一财年,n=前n个财年。
- 异常值处理:必须判断上一期EPS是否为0,避免计算增长率时出现除以0的错误。
- 季度数据适配:如果需要计算季度EPS变动,只需将第三个参数从
"FY"改为"FQ",同时调整period_offset获取对应季度的历史数据。 - 数据有效性:部分标的可能缺失历史财年数据,此时
request.financial会返回na,可通过na()函数做进一步的异常处理。
内容的提问来源于stack exchange,提问作者user20384302
相关产品推荐
相关产品推荐

