PineScript高阶时间框架条件在低阶时间框架显示异常求助
高阶时间框架条件K线在低阶周期画线异常排查
需求与问题
- 核心需求:识别H4(4小时)周期中满足以下条件的K线:
- 开盘价低于H4周期9期EMA,收盘价高于该EMA
- 开盘价高于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
相关产品推荐
相关产品推荐

