You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:56:11