跨时间框架绘制特定3分钟K线开盘价水平线技术问询
解决方案:跨时间框架绘制特定3分钟K线的开盘价水平线
原代码失效的核心原因是:它直接在当前时间框架下判断hour==9 and minute==33,但15分钟、30分钟这类非3分钟K线的时间戳不会精确对应9:33,因此无法捕获到目标价格。要解决这个问题,我们需要主动获取3分钟时间框架下9:33的开盘价,再在当前框架中持续绘制这条水平线。
以下是修复后的完整代码:
//@version=5 indicator("9:33 3min Open Level", overlay=true) // 定义目标时间:9点33分 target_hour = 9 target_minute = 33 // 获取3分钟时间框架下,对应9:33的开盘价 var float target_open = na three_min_open = request.security(syminfo.tickerid, "3", open) three_min_time = request.security(syminfo.tickerid, "3", time) // 检查当前3分钟K线是否是目标时间,更新价格 if ta.time(three_min_time) == timestamp(year, month, dayofmonth, target_hour, target_minute) target_open := three_min_open // 每个交易日重置价格,避免跨日残留 if session.isfirstbar target_open := na // 绘制水平线,仅在获取到目标价格后显示 plot(target_open, color=color.new(color.blue, 0), linewidth=2, title="9:33 3min Open")
关键逻辑说明:
- 跨框架数据获取:通过
request.security()调用3分钟时间框架的开盘价和时间戳,精准定位9:33的K线。 - 变量持久化:用
var float定义target_open,确保价格在获取后不会被后续K线覆盖,持续保留至交易日结束。 - 交易日重置:利用
session.isfirstbar在每个交易日开始时清空存储的价格,避免上一日的价格影响当前交易日。 - 精准时间匹配:用
ta.time()将时间戳转换为可比较的格式,确保准确捕获9:33的3分钟K线。
你可以在15分钟、30分钟等任意时间框架下测试这段代码,它都会稳定绘制出对应3分钟K线9:33的开盘价水平线,直到当前交易时段结束。
内容的提问来源于stack exchange,提问作者Damodaran
相关产品推荐
相关产品推荐

