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

Tradingview基于首个15分钟K线的做空策略当日时间识别问题求助

Tradingview早盘做空策略时间识别问题修复方案

问题根因

你当前代码的核心问题是timestamp()函数未传入年月日参数,生成的是静态固定时间戳,无法动态匹配每日的9:45-10:30交易时段,因此无法正确按日触发信号。

可行解决建议

  • 动态生成每日时段边界:调用year(time)、month(time)、dayofmonth(time)获取当前K线对应的年月日,传入timestamp()生成当日的首个K线收盘时间、平仓时间戳,适配每日的时间判断需求。
  • 优化开仓逻辑限制:新增单日开仓标志位,在每日开盘时重置,仅在首个15分钟K线收盘时判断收红信号,避免同日内其他K线重复触发开仓。
  • 拆分平仓逻辑:将平仓判断独立于开仓时段限制,到10:30时间点直接触发平仓,无需绑定开仓时段条件。
  • 校验时区配置:确认Tradingview图表的时区设置与交易标的的上市地时区一致,避免时区偏移导致的时间判断错误。

修正后可运行代码

//@version=5
strategy("早盘15分钟做空策略", overlay=true, initial_capital=100000, default_qty_type=strategy.cash, default_qty_value=100000)

// 自定义参数
FromMonth = input.int(defval = 1, title = "生效起始月份", minval = 1, maxval = 12)
firstBarCloseHour = input.int(defval = 9, title = "首个15分钟K线收盘小时")
firstBarCloseMin = input.int(defval = 45, title = "首个15分钟K线收盘分钟")
closeAllHour = input.int(defval = 10, title = "平仓时间小时")
closeAllMin = input.int(defval = 30, title = "平仓时间分钟")

// 动态计算当日时间边界
curYear = year(time)
curMonth = month(time)
curDay = dayofmonth(time)
firstBarEndTime = timestamp(curYear, curMonth, curDay, firstBarCloseHour, firstBarCloseMin)
closeTime = timestamp(curYear, curMonth, curDay, closeAllHour, closeAllMin)

// 单日开仓标志位,每日开盘重置
var bool hasEnteredToday = false
if ta.change(dayofmonth)
    hasEnteredToday := false

// 开仓触发:仅首个15分钟K线收红且当日未开仓时触发
shortSignal = time == firstBarEndTime and close > open and not hasEnteredToday and curMonth >= FromMonth
if shortSignal
    strategy.entry("Short", strategy.short)
    hasEnteredToday := true

// 平仓触发:到点自动平所有空单
if time >= closeTime and strategy.position_size < 0
    strategy.close("Short")

注意事项

如果你的交易标的不是A股(早盘9:30开盘),可以自行调整firstBarCloseHour、firstBarCloseMin参数匹配对应市场的首个15分钟K线收盘时间即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:45:04