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

Pine Script日内交易:仅首次触发条件时返回值的实现方案

解决5分钟周期当日首次新高/新低检测与EMA记录问题

以下是修改后的Pine Script代码,完全满足你提出的两个需求:首次触发后停止检测、记录首次触发时的10EMA值且当日不变更:

//@version=5
indicator("当日首次新高/新低与EMA记录", overlay=true)

// 计算10周期EMA
ema10 = ta.ema(close, 10)

// 定义新交易日起始条件
newDayStart = dayofmonth != dayofmonth[1] and timeframe.isintraday

// 初始化每日重置的变量:标志位+首次触发EMA存储
varip bool isDayHighFound = false
varip bool isDayLowFound = false
varip float firstHighEMA = na
varip float firstLowEMA = na

// 每日开盘重置所有状态
if newDayStart
    isDayHighFound := false
    isDayLowFound := false
    firstHighEMA := na
    firstLowEMA := na
    // 重置当日高低价追踪
    varip float dayHighPrice = high
    varip float dayLowPrice = low
else
    // 持续更新当日高低价(仅用于触发判断,不影响已找到的信号)
    dayHighPrice := math.max(dayHighPrice, high)
    dayLowPrice := math.min(dayLowPrice, low)

// 首次新高检测与EMA记录
freshHigh = close > 1.0004 * dayHighPrice[1]
if not isDayHighFound and freshHigh
    isDayHighFound := true
    firstHighEMA := ema10

// 首次新低检测与EMA记录
freshLow = close < 0.9996 * dayLowPrice[1]
if not isDayLowFound and freshLow
    isDayLowFound := true
    firstLowEMA := ema10

// 可视化:标记首次新高/新低K线
barcolor(isDayHighFound and freshHigh ? color.new(color.white, 0) : na, title="首次新高K线")
barcolor(isDayLowFound and freshLow ? color.new(color.white, 0) : na, title="首次新低K线")

// 输出首次触发时的EMA值(可在数据窗口查看)
plot(firstHighEMA, color=color.green, title="首次新高EMA10", style=plot.style_linebr)
plot(firstLowEMA, color=color.red, title="首次新低EMA10", style=plot.style_linebr)

关键修改说明

  • 每日状态重置:通过newDayStart条件,每个交易日开盘时自动重置新高/新低标志位和EMA存储变量,确保检测逻辑从头开始
  • 单次触发控制:只有当isDayHighFound/isDayLowFound为false时,才会检查触发条件;触发后立即将标志位设为true,后续不再检测
  • EMA值锁定:首次触发新高/新低时,将当前的10EMA值存入varip变量,该变量在当日不会被再次修改,实现值的锁定
  • 高低价追踪:持续更新当日高低价用于触发判断,但不影响已触发的信号状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:27:10