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

PineScript高阶时间框架条件在低阶时间框架显示异常求助

高阶时间框架条件K线在低阶周期画线异常排查

需求与问题

  • 核心需求:识别H4(4小时)周期中满足以下条件的K线:
    1. 开盘价低于H4周期9期EMA,收盘价高于该EMA
    2. 开盘价高于H4周期9期EMA,收盘价低于该EMA
      在低阶时间框架(如30分钟)中,绘制这些H4条件K线的开盘价、收盘价水平位。
  • 异常表现:H4周期下指标显示正常,但切换至低阶时间框架时,画线逻辑出现异常,尝试两种代码实现均未解决,需排查request.security调用或画线逻辑是否存在问题。

代码实现1

//@version=5
indicator(title="MBFX H4 关键水平位", shorttitle="MBFX H4 水平位", overlay=true)

// 输入参数
显示EMA1 = input(true, title="显示EMA1")
EMA1数据源 = input(close, title="EMA1数据源")
EMA时间周期 = input(defval='240', title="EMA1时间周期")
EMA长度 = input.int(9, minval=1, title="EMA1长度")
高阶时间周期 = input(defval='240', title="目标高阶周期")

// 跨周期EMA计算
EMA1 = ta.ema(EMA1数据源, EMA长度)
跨周期EMA = request.security(syminfo.tickerid, EMA时间周期, EMA1, barmerge.gaps_on)
plot(跨周期EMA, "EMA1", color=#ffffff, display = 显示EMA1 ? display.all : display.none)

// 条件判断
向上穿越 = open < 跨周期EMA and close > 跨周期EMA 
向下穿越 = open > 跨周期EMA and close < 跨周期EMA 

// 获取高阶周期的条件信号
高阶向上信号 = request.security(syminfo.tickerid, 高阶时间周期, 向上穿越, barmerge.gaps_on)
高阶向下信号 = request.security(syminfo.tickerid, 高阶时间周期, 向下穿越, barmerge.gaps_on)

// 条件K线着色
K线颜色 = 向上穿越 ? color.new(#4d42e8, 0) : 向下穿越 ? color.new(#ff9ff1, 11) : na
barcolor(K线颜色) 

// 绘制高阶条件K线的收盘/开盘水平位
最大保留线条数 = 500
保留线条数 = input.int(2, minval = 1, maxval = 最大保留线条数,title="最大保留历史线条数")
线条延伸长度 = input.int(25, minval = 1, maxval = 最大保留线条数, title="线条延伸K线数")

// 绘制收盘价水平位
if 高阶向上信号 or 高阶向下信号
    线条颜色 = 高阶向上信号 ? color.new(#41ec50, 0) : color.new(#ffffff, 0)
    line.new(bar_index, close, bar_index+1, close, color = 线条颜色, width = 1)
    // 超过保留数量时删除最旧线条
   if array.size(line.all) > 保留线条数
     line.delete(array.get(line.all, 0))
     int(na)
else
    // 延伸所有现有线条
    线条索引 = 0
    while 线条索引 < array.size(line.all)
        line.set_x2(array.get(line.all, 线条索引), bar_index + 线条延伸长度)
        线条索引 += 1
    int(na)

// 绘制开盘价水平位
if 高阶向上信号 or 高阶向下信号
    线条颜色 = 高阶向上信号 ? color.new(#ff1e00, 0) : color.new(#501547, 0)
    line.new(bar_index, open, bar_index+1, open, color = 线条颜色, width = 1)
    // 超过保留数量时删除最旧线条
    if array.size(line.all) > 保留线条数
        line.delete(array.get(line.all, 0))
    int(na)
else
    // 延伸所有现有线条
    线条索引 = 0
    while 线条索引 < array.size(line.all)
        line.set_x2(array.get(line.all, 线条索引), bar_index + 线条延伸长度)
        线条索引 += 1
    int(na)

代码实现2

//@version=5
indicator(title="MBFX H4 关键水平位", shorttitle="MBFX H4 水平位", overlay=true)

// 输入参数
显示EMA1 = input(true, title="显示EMA1")
EMA1数据源 = input(close, title="EMA1数据源")
EMA时间周期 = input(defval='240', title="EMA1时间周期")
EMA长度 = input.int(9, minval=1, title="EMA1长度")

// 跨周期EMA计算
EMA1 = ta.ema(EMA1数据源, EMA长度)
跨周期EMA = request.security(syminfo.tickerid, EMA时间周期, EMA1, barmerge.gaps_on)
plot(跨周期EMA, "EMA1", color=#ffffff, display = 显示EMA1 ? display.all : display.none)

// 条件判断
向上穿越 = ta.crossover(close, 跨周期EMA) and open < 跨周期EMA 
// 向下穿越 = open > 跨周期EMA and close < 跨周期EMA 

高阶时间周期 = input.timeframe("240", "目标高阶周期")
// 仅在初始K线初始化变量,保留跨周期数据
var 收盘价水平 = float(na)
var 开盘价水平 = float(na)
var 收盘价线条 = na
var 开盘价线条 = na
var 高低区间框 = na
// 检测高阶周期新K线
bool 新高阶K线 = ta.change(time(高阶时间周期))

if 新高阶K线 and 向上穿越
    // 新高阶K线满足条件时,重置数值并创建新线条
    收盘价水平 := close
    开盘价水平 := open
    收盘价线条 := line.new(bar_index, 收盘价水平, bar_index, 收盘价水平, color = color.green, width = 2)
    开盘价线条 := line.new(bar_index, 开盘价水平, bar_index, 开盘价水平, color = color.red, width = 2)
// 高低区间框 := box.new(bar_index - 1, 收盘价水平, bar_index, 开盘价水平, border_color = na, bgcolor = color.silver)
    int(na)
else
    // 非新高阶K线时,延伸线条右侧坐标
    line.set_x2(收盘价线条, bar_index)
    line.set_x2(开盘价线条, bar_index)
// box.set_right(高低区间框, bar_index)
    
// 条件K线着色
K线颜色 = 向上穿越 ? color.new(#4d42e8, 0) : na
barcolor(K线颜色) 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:55:25