Pine Script挤压指标优化:如何减少security调用且不删减统计时间帧
Pine脚本性能优化方案
你当前脚本加载慢的核心原因是security调用冗余:resolution_squeeze函数对同一个时间帧会分别调用3次security获取SMA、标准差、TR的SMA数据,叠加你需要查询7-8个时间帧,单次运行就要发起20次以上的跨时间帧数据请求,自然加载速度慢。
可通过以下方法在不减少统计时间帧的前提下大幅提升性能:
- 合并同一个时间帧的
security调用:同一个时间帧仅发起1次请求,一次性返回所有需要的计算源数据,直接将跨时间帧请求次数降到原来的1/3 - 保留现有if分支逻辑:仅触发当前图表时间帧对应的查询请求,不会发起无效的时间帧调用
- 为
security添加标准参数:添加barmerge.gaps_on和barmerge.lookahead_off参数,既避免未来函数风险,也能提升数据加载稳定性
优化后代码示例
重构后的统计函数
// 注:以下为Pine Script v5版本代码,建议升级到v5获得更好的性能表现 resolution_squeeze(D)=> // 单次security调用返回该时间帧下所有需要的源数据,大幅减少请求次数 [tf_ma, tf_bb, tf_kc] = request.security(syminfo.tickerid, D, [sma(source,length), stdev(source,length), sma(tr,length)], gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off) upBB = tf_ma + tf_bb * 2 lowBB = tf_ma - tf_bb * 2 upKCWide = tf_ma + tf_kc * 2 lowKCWide = tf_ma - tf_kc * 2 upKCNormal = tf_ma + tf_kc * 1.5 lowKCNormal = tf_ma - tf_kc * 1.5 upKCNarrow = tf_ma + tf_kc lowKCNarrow = tf_ma - tf_kc // 收缩类型判断 sqzOnWide = (lowBB >= lowKCWide) and (upBB <= upKCWide) // 宽收缩:黑色 sqzOnNormal = (lowBB >= lowKCNormal) and (upBB <= upKCNormal) // 普通收缩:红色 sqzOnNarrow = (lowBB >= lowKCNarrow) and (upBB <= upKCNarrow) // 窄收缩:橙色 sqzOffWide = (lowBB < lowKCWide) and (upBB > upKCWide) // 宽收缩释放:绿色 noSqz = (sqzOnWide == false) and (sqzOffWide == false) // 无收缩:蓝色 // 返回收缩状态颜色 sq_color = noSqz ? color.blue : sqzOnNarrow ? color.orange : sqzOnNormal ? color.red : sqzOnWide ? color.black : color.lime sq_color
时间帧判断逻辑
原有if/else判断逻辑无需修改,直接使用重构后的resolution_squeeze函数即可,不会减少任何需要统计的时间帧。
以上优化完成后,脚本加载速度会有非常明显的提升。
内容的提问来源于stack exchange,提问作者jrob24
相关产品推荐
相关产品推荐

