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

ta.change与request.security无法同步至固定K线的技术咨询

ta.change与request.security同步问题解析

问题概述

  • 基于ta.change(time("90"))的绿点(newPeriod)和基于periodHigh != periodHigh[1]的红点(periodCheck)存在1根K线的延迟
  • request.security返回的K线结束时间不固定(如6月19日为8:25,6月26日变为8:30),导致红绿点偶尔出现在同一根K线
  • 同一时刻检测到的周期变化,后续查看结果可能随机变化

差异原因分析

  1. 索引逻辑差异

    • ta.change(time("90"))直接在当前图表周期上检测90分钟周期的时间戳变化,90分钟周期切换时,当前图表K线会立即触发信号(绿点)。
    • request.security(syminfo.tickerid, "90", high[barstate.isrealtime? 1 : 0])在实时行情下取的是上一根90分钟K线的高点,只有当当前图表K线走完、新的90分钟高点数据更新后,periodHigh != periodHigh[1]才会触发(红点),直接导致1根K线的延迟。
  2. 时间戳非固定的本质
    部分交易所K线并非严格按固定时间对齐(如考虑集合竞价、节假日调整等),90分钟K线的结束时间会出现波动。time("90")基于交易所实际周期时间戳,request.security返回实际生成的K线数据,两者都遵循交易所实际周期,但periodHigh的变化依赖数据更新时机,因此会出现偶尔同步的情况。

  3. 随机性的来源
    实时行情下,barstate.isrealtime的判断随当前K线状态变化,加上数据推送延迟,可能导致periodHigh更新时间不稳定;历史回测时数据批量加载,与实时行情逻辑存在细微差异,最终造成结果随机性。

同步解决方案

要让两者始终同步,建议直接基于time("90")的变化触发信号,同时在周期切换时获取对应90分钟K线的高低价,避免依赖periodHigh的变化判断。优化后的代码如下:

//@version=5
indicator("ta.change与request.security同步优化", overlay=true)

// 定义90分钟周期的时间戳
periodTime = time("90")
// 检测90分钟周期切换
newPeriod = ta.change(periodTime)

// 获取90分钟周期的高低价,关闭未来函数风险
[periodHigh, periodLow] = request.security(syminfo.tickerid, "90", [high, low], gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off)

// 仅在周期切换时记录上一周期的高低价
var float prevPeriodHigh = na
var float prevPeriodLow = na
if newPeriod
    prevPeriodHigh := periodHigh[1]
    prevPeriodLow := periodLow[1]

// 绘制上一周期高低价
plot(prevPeriodHigh, color=color.green, title="上一周期高点")
plot(prevPeriodLow, color=color.green, title="上一周期低点")

// 绘制完全同步的信号点
plotshape(newPeriod, color=color.green, location=location.abovebar, style=shape.circle)
plotshape(newPeriod, color=color.red, location=location.belowbar, style=shape.circle)

关键调整点:

  • 使用lookahead=barmerge.lookahead_off避免未来函数风险
  • 基于newPeriod触发时机记录上一周期高低价,确保信号与数据完全同步
  • 开启gaps=barmerge.gaps_on,严格遵循实际周期数据

订单触发的建议

优先使用newPeriod = ta.change(time("90"))触发订单:

  • ta.change(time("90"))基于时间戳变化,逻辑稳定可预测,不受数据推送延迟影响
  • periodHigh != periodHigh[1]依赖request.security的数据更新,实时行情下存在延迟且不稳定,易导致订单触发时机偏差

若担心周期时间戳非固定问题,可额外添加ta.barssince(newPeriod)验证周期间隔,确保每次触发都是标准90分钟周期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:04:54