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

Pine Script:日线蜡烛图叠加低周期图表异常及扩容需求问询

Pine Script低周期叠加日线蜡烛图问题解决指南

一、超过18根日线绘制错乱的修复

常见原因

  1. request.security默认的barmerge策略未正确配置,导致高低周期数据对齐错位
  2. 未禁用前瞻(lookahead)功能,引发数据提前加载的绘制异常
  3. 直接使用普通变量存储历史数据,超过一定数量后出现索引或覆盖错误

修复代码示例

//@version=5
indicator("叠加日线蜡烛图", overlay=true)

// 1. 配置request.security参数:保留缺口、禁用前瞻
[dailyO, dailyH, dailyL, dailyC] = request.security(syminfo.tickerid, "D", [open, high, low, close], barmerge.gaps_on, barmerge.lookahead_off)

// 2. 用数组存储历史日线数据,避免数据丢失
var array<float> histO = array.new_float()
var array<float> histH = array.new_float()
var array<float> histL = array.new_float()
var array<float> histC = array.new_float()

// 日线切换时存入数组
if change(time("D"))
    array.push(histO, dailyO)
    array.push(histH, dailyH)
    array.push(histL, dailyL)
    array.push(histC, dailyC)
// 最后一根日线补充存入
if barstate.islast
    array.push(histO, dailyO)
    array.push(histH, dailyH)
    array.push(histL, dailyL)
    array.push(histC, dailyC)

// 3. 遍历数组绘制全部历史日线
for i = 0 to array.size(histO)-1
    barOffset = array.size(histO)-1 - i
    dailyTime = time("D")[barOffset]
    o = array.get(histO, i)
    h = array.get(histH, i)
    l = array.get(histL, i)
    c = array.get(histC, i)
    plotcandle(dailyTime, o, h, l, c, color=color.new(color.blue, 50), title="历史日线")

二、1小时图显示全部历史日线的实现

核心方案:一次性获取全量历史数据

通过barstate.islast触发全量历史数据收集,避免逐K线请求的性能问题,同时获取服务器允许的最大历史范围:

//@version=5
indicator("全量日线叠加1小时图", overlay=true)

// 存储全量日线数据的数组
var array<float> allDailyO = array.new_float()
var array<float> allDailyH = array.new_float()
var array<float> allDailyL = array.new_float()
var array<float> allDailyC = array.new_float()
var array<int> allDailyTimes = array.new_int()

// 仅在最后一根K线时收集全量数据,降低性能消耗
if barstate.islast
    // 获取日线周期的总K线数
    dailyBarCount = request.security(syminfo.tickerid, "D", bar_index) + 1
    // 遍历所有日线K线,收集数据
    for i = 0 to dailyBarCount - 1
        [o, h, l, c] = request.security(syminfo.tickerid, "D", [open[i], high[i], low[i], close[i]], lookahead=barmerge.lookahead_off)
        t = request.security(syminfo.tickerid, "D", time[i], lookahead=barmerge.lookahead_off)
        array.push(allDailyO, o)
        array.push(allDailyH, h)
        array.push(allDailyL, l)
        array.push(allDailyC, c)
        array.push(allDailyTimes, t)

// 绘制所有历史日线蜡烛
for i = 0 to array.size(allDailyO)-1
    t = array.get(allDailyTimes, i)
    o = array.get(allDailyO, i)
    h = array.get(allDailyH, i)
    l = array.get(allDailyL, i)
    c = array.get(allDailyC, i)
    plotcandle(t, o, h, l, c, color=color.new(color.orange, 40), title="全量日线")

关键说明

  • 代码会自动获取服务器允许的最大历史日线数据量,无需手动设置数量限制
  • 仅在最后一根K线执行数据收集,大幅降低性能消耗
  • 若仍存在显示限制,检查平台的历史数据订阅权限(部分品种的完整历史需付费订阅)

内容的提问来源于stack exchange,提问作者amah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:57:48