Pine Script多时间框架绘制区间报错问题求助
Pine Script跨时间框架供需区间绘制问题解决
错误原因分析
- 数组创建语法错误:Pine Script不支持直接用
[]字面量创建数组,必须使用官方提供的array.new_*()系列函数初始化数组,再通过array.push()添加元素。直接写[timeFrame30, ...]会触发语法错误。 - 循环变量类型错误:由于数组创建方式错误,导致循环语法不被解析,进而出现
'time_frame' is not a valid type keyword的报错。
修正后的代码示例
//@version=5 indicator("跨时间框架供需区间", overlay=true) // 1. 正确创建时间框架数组 var timeframes = array.new_int() // 添加需要的时间框架(单位:分钟) array.push(timeframes, 30) array.push(timeframes, 45) array.push(timeframes, 60) array.push(timeframes, 120) array.push(timeframes, 180) array.push(timeframes, 240) array.push(timeframes, 1440) // 日线 array.push(timeframes, 10080) // 周线 array.push(timeframes, 43200) // 月线 // 2. 遍历时间框架数组 for current_tf in timeframes // 获取对应时间框架的高低价数据(核心:用request.security跨时间框架取数) [tf_high, tf_low] = request.security(syminfo.tickerid, current_tf, [high, low]) // 3. 初始化供需区间数组(同样不能用[],需用array.new_*) var demand_zones = array.new_float() var supply_zones = array.new_float() // --- 这里补充你的供需区间识别逻辑 --- // 示例:简单识别区间(请替换为你的实际逻辑) if tf_low < ta.lowest(tf_low, 5) array.push(demand_zones, tf_low) if tf_high > ta.highest(tf_high, 5) array.push(supply_zones, tf_high) // 4. 绘制供需区间(示例) for zone in demand_zones line.new(bar_index - 5, zone, bar_index + 5, zone, color=color.green, width=2) for zone in supply_zones line.new(bar_index - 5, zone, bar_index + 5, zone, color=color.red, width=2)
关键注意事项
- 跨时间框架取数:必须使用
request.security()函数获取目标时间框架的K线数据,否则无法基于其他时间框架计算区间。 - 数组操作规范:所有数组必须用
array.new_int()/array.new_float()等函数初始化,添加元素用array.push(),获取元素用array.get()。 - 变量作用域:如果需要保留区间数据,记得用
var声明数组,避免每次循环重新初始化。
内容的提问来源于stack exchange,提问作者Stiggy
相关产品推荐
相关产品推荐

