如何用循环简化Pine Script中25组变量的声明代码?
在Pine Script中用循环+数组简化变量声明
可以用数组配合循环实现你的需求,避免手动声明25组重复变量。核心是用三个数组分别存储longX状态、takeprofitlongX和stoplosslongX的值,以下是具体实现方法:
1. 初始化数组
用var关键字声明数组,确保数组仅在脚本启动时初始化一次,元素初始值符合你的要求:
// 初始化三个数组,对应0-24共25组变量 var array<bool> long_states = array.new_bool(25, false) // 所有longX初始为false var array<float> tp_long = array.new_float(25, 0.0) // 所有takeprofitlongX初始为0.0 var array<float> sl_long = array.new_float(25, 0.0) // 所有stoplosslongX初始为0.0
如果需要更灵活的初始化(比如自定义逻辑),也可以在首个K线时通过循环填充数组:
var array<bool> long_states = array.new_bool() var array<float> tp_long = array.new_float() var array<float> sl_long = array.new_float() // 仅在第一根K线执行填充 if barstate.isfirst for i = 0 to 24 array.push(long_states, false) array.push(tp_long, 0.0) array.push(sl_long, 0.0)
2. 访问与修改数组元素
Pine Script的数组元素不能直接用:=赋值,必须用内置的数组函数操作:
- 获取元素值:用
array.get(数组名, 索引),比如获取第5组的long状态:array.get(long_states, 5) - 修改元素值:用
array.set(数组名, 索引, 新值),比如更新第5组的止盈止损:
// 示例:当满足条件时,更新第5组的状态和止盈止损 if close > ta.sma(close, 50) array.set(long_states, 5, true) // 将long5设为true array.set(tp_long, 5, close * 1.02) // 止盈设为当前收盘价的1.02倍 array.set(sl_long, 5, close * 0.98) // 止损设为当前收盘价的0.98倍
3. 关于“沿用前值”的说明
数组元素默认会保留上一根K线的值,只要你不主动调用array.set()修改,它就会自动沿用前值,完全符合你的需求。
完整示例片段
//@version=5 indicator("简化变量声明示例", overlay=true) // 初始化数组 var array<bool> long_states = array.new_bool(25, false) var array<float> tp_long = array.new_float(25, 0.0) var array<float> sl_long = array.new_float(25, 0.0) // 示例:更新第3组的状态和止盈止损 if close > ta.sma(close, 50) array.set(long_states, 3, true) array.set(tp_long, 3, close * 1.02) array.set(sl_long, 3, close * 0.98) // 示例:触发止损时重置状态 if array.get(long_states, 3) and close < array.get(sl_long, 3) array.set(long_states, 3, false)
内容的提问来源于stack exchange,提问作者cactusman
相关产品推荐
相关产品推荐

