如何在Pinescript中存储实时K线中途价格至var变量?
Pine Script 保存实时K线中途价格的解决方案
在Pine Script中,要记录实时K线中途的触发价格而非最终收盘价,核心是限制变量的赋值时机——只在触发条件首次成立且处于实时行情时赋值,后续不再修改该变量,直到下一次触发或新K线开始。
核心思路
- 使用
var定义持久化变量,避免随K线重置; - 加入多重条件判断:触发条件成立、当前为实时K线、变量未被赋值(确保同一K线只记录一次);
- 可选:新K线开始时重置变量,准备下一次记录。
代码示例
//@version=5 indicator("记录实时中途价格", overlay=true) // 1. 自定义触发条件(示例:价格上穿20日均线) ma20 = ta.sma(close, 20) trigger_condition = ta.crossover(close, ma20) // 2. 初始化持久化变量,存储触发时的实时价格 var float recorded_price = na // 3. 仅在触发条件成立、实时行情中、且变量未赋值时记录价格 if (trigger_condition and barstate.isrealtime and na(recorded_price)) recorded_price := close // 4. 新K线启动时重置变量(可选,根据需求调整) if (barstate.isnew) recorded_price := na // 可视化:在图表上标记记录的价格 plotshape(recorded_price, title="触发实时价", location=location.belowbar, color=color.green, style=shape.labelup, text=str.tostring(recorded_price, "#.##"))
关键细节说明
var float recorded_price = na:var确保变量仅初始化一次,不会在每根K线重新创建;初始值设为na用于判断是否已赋值。barstate.isrealtime:仅在实时行情中执行赋值,回测时不会触发(若需回测模拟可移除该条件)。na(recorded_price):避免同一根实时K线中价格变动时重复覆盖已记录的触发价,确保只保存首次触发时的价格。- 若需保存历史所有触发价格,可改用数组存储:
var array<float> price_history = array.new_float() if (trigger_condition and barstate.isrealtime) array.push(price_history, close)
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

