TV脚本如何将开仓价存入数组 解决数据丢失仅存最后值问题
Pine Script数组数据丢失问题解决方案
问题根因
- Pine Script默认会在每根K线计算时重新执行全量代码,未加
var关键字修饰的数组会在每根K线初始化时被清空重建,因此只会保留最后一次触发开仓条件时存入的数值。 - 原有标签删除逻辑存在缺陷:
l[1]只能获取上一根K线生成的标签实例,更早生成的标签无法被正确删除,会出现界面标签残留问题。
修正代码
// var关键字修饰:数组仅在脚本首次加载时初始化一次,后续保留历史存储数据 var arr = array.new_float(0) // var存储标签ID,统一管理标签的删除与新建 var label priceDisplayLabel = na if buySignal array.push(arr, close) // 拼接所有存储的开仓价 lab = "" for i = 0 to array.size(arr) - 1 lab := lab + str.tostring(array.get(arr, i)) + " " // 先删除旧标签,再创建新标签避免残留 label.delete(priceDisplayLabel) priceDisplayLabel := label.new(bar_index, close, lab)
补充说明
如果你的策略同一时间仅持有一个仓位,不需要存储多笔历史开仓价,可直接用var float entryPrice = na单个变量存储开仓价,无需使用数组,性能更优。
内容的提问来源于stack exchange,提问作者Raul Lopez Diaz
相关产品推荐
相关产品推荐

