You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:42:23