Pinescript绘制历史日线OHLC问题:循环中无法使用request.security
解决方案:在Pine Script中存储并绘制日线OHLC延伸线
Pine Script禁止在循环内调用request.security(这类系列函数无法在循环的数组操作逻辑中正常运行),正确的处理思路是先一次性获取完整的日线数据系列,再转换为数组进行后续绘制,具体实现如下:
1. 一次性获取日线OHLC及时间数据
直接通过request.security获取全周期的日线级别数据,避免在循环中单独调用:
//@version=5 indicator("日线OHLC延伸线", overlay=true) // 获取日线级别核心数据 daily_open = request.security(syminfo.tickerid, "D", open) daily_high = request.security(syminfo.tickerid, "D", high) daily_low = request.security(syminfo.tickerid, "D", low) daily_close = request.security(syminfo.tickerid, "D", close) daily_time = request.security(syminfo.tickerid, "D", time)
2. 将日线数据转换为数组
仅在最后一根K线时执行数组填充(避免重复计算),把每一根独立日线的OHLC和起始时间存入对应数组:
// 初始化存储用数组 var array<float> open_array = array.new_float() var array<float> high_array = array.new_float() var array<float> low_array = array.new_float() var array<float> close_array = array.new_float() var array<int> time_array = array.new_int() // 最后一根K线时批量填充数组 if barstate.islast // 遍历所有bar,仅提取日线切换节点的数据 for i = 0 to bar_index // 判断当前bar是否为新日线的起点 if i == bar_index or daily_time[i] != daily_time[i+1] array.push(open_array, daily_open[i]) array.push(high_array, daily_high[i]) array.push(low_array, daily_low[i]) array.push(close_array, daily_close[i]) array.push(time_array, daily_time[i])
3. 绘制从日线起点向右延伸的线条
遍历数组,为每一根日线的OHLC值绘制从对应日线起始时间延伸至当前的线条:
// 批量绘制延伸线 if barstate.islast array_size = array.size(time_array) for i = 0 to array_size - 1 dt = array.get(time_array, i) // 开盘价虚线(蓝色) line.new(dt, array.get(open_array, i), time, array.get(open_array, i), color=color.blue, width=1, style=line.style_dashed) // 最高价实线(红色) line.new(dt, array.get(high_array, i), time, array.get(high_array, i), color=color.red, width=1) // 最低价实线(绿色) line.new(dt, array.get(low_array, i), time, array.get(low_array, i), color=color.green, width=1) // 收盘价点线(橙色) line.new(dt, array.get(close_array, i), time, array.get(close_array, i), color=color.orange, width=1, style=line.style_dotted)
扩展到周线/月线
要切换到周线或月线,仅需修改request.security的周期参数:
- 周线:将参数
"D"替换为"W" - 月线:将参数
"D"替换为"M"
数组处理与绘制逻辑完全复用即可。
内容的提问来源于stack exchange,提问作者elgaza
相关产品推荐
相关产品推荐

