Pine Script如何实现不同图表时间周期自动显示对应SMA指标
实现思路
- 调用Pine Script内置周期变量
timeframe.period读取当前图表的时间周期,通过字符串匹配区分当前是日线视图还是周线视图 - 用条件赋值的方式,仅在匹配的周期下计算对应均线值,非匹配周期下给均线赋值
na(空值),对应线条会自动隐藏不显示 - 给跨周期调用的
security函数补充防未来函数、缺口填充参数,避免回测时出现信号漂移、数据不准的问题 - 增加非适配周期的提示逻辑,在分钟、月线等不支持的周期下给出明确提示,避免使用者误解
修改后完整代码
//@version=4 study("LoremIpsum 周期自适应版", overlay=false) sym = input(title="Symbol", type=input.symbol, defval='SPCFD:SPX') // 固定拉取周线维度SPX价格,补充barmerge参数避免未来函数 spx = security(sym, "W", close, gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off) stock = close stockDividedBySpx = stock / spx // 识别当前图表周期 current_res = timeframe.period is_weekly_tf = str.contains(current_res, "W") is_daily_tf = str.contains(current_res, "D") and not is_weekly_tf // 仅在对应周期计算对应均线,非适配周期返回空值 sma52Weekly = is_weekly_tf ? sma(stockDividedBySpx, 52) : na sma252Daily = is_daily_tf ? sma(stockDividedBySpx, 252) : na // 条件绘图,空值序列不会在图表上渲染 plot(sma52Weekly, title= 'MA(52) 周线适配', color=color.blue, linewidth=2) plot(sma252Daily, title= 'MA(252) 日线适配', color=color.red, linewidth=2) plot(stockDividedBySpx, title= 'stock/SPX', color=color.black, linewidth=1) // 非适配周期弹出提示 tip = not is_weekly_tf and not is_daily_tf ? "当前周期未适配,请切换至日线/周线视图" : na var label tip_label = na if not na(tip) tip_label := label.new(bar_index, highest(high, 20), text=tip, color=color.orange, textcolor=color.white, style=label.style_label_down) else label.delete(tip_label)
使用说明
- 切换到周线类周期(1周、2周等)时,图表仅显示蓝色52周期均线、黑色价格比值线,红色252日均线自动隐藏
- 切换到日线类周期(1日、3日等)时,图表仅显示红色252周期均线、黑色价格比值线,蓝色52周均线自动隐藏
- 切换到分钟、小时、月线等其他周期时,图表会显示橙色提示标签,提醒切换到适配周期使用
- 修正了原代码跨周期调用的参数问题,回测和实盘数据一致,不会出现提前出信号的漂移问题
内容的提问来源于stack exchange,提问作者JONA
相关产品推荐
相关产品推荐

