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

如何在PineScript中测量移动均线交叉间的时长以设置入场条件?

在PineScript中测量移动均线交叉之间的时长

要实现这个需求,核心是识别交叉事件并记录每次交叉的时间戳,通过时间戳的差值计算趋势持续时长。以下是具体实现步骤和示例代码:

1. 定义移动均线与交叉信号

先声明你要用的均线(比如SMA、EMA),再用ta.crossover()和ta.crossunder()识别金叉/死叉:

//@version=5
indicator("均线交叉时长测量", overlay=true)

// 定义快慢均线
fastMA = ta.sma(close, 50)
slowMA = ta.sma(close, 200)

// 识别金叉(上穿)和死叉(下穿)
isGoldenCross = ta.crossover(fastMA, slowMA)
isDeathCross = ta.crossunder(fastMA, slowMA)

2. 记录交叉时间并计算时长

用var关键字声明持久化变量,存储上次交叉的时间戳,每次交叉发生时计算当前与上次交叉的时间差:

// 初始化持久化变量,存储上次交叉的时间戳(毫秒)
var float lastCrossTimestamp = na
// 存储当前交叉与上次交叉的时长(分钟)
var float crossDuration = na

// 当交叉发生时更新时间戳并计算时长
if (isGoldenCross or isDeathCross)
    // 非首次交叉时计算时长
    if not na(lastCrossTimestamp)
        // 时间戳差值转分钟(1分钟=60000毫秒)
        crossDuration := (time - lastCrossTimestamp) / 60000
    // 更新上次交叉时间戳为当前时间
    lastCrossTimestamp := time

3. 将时长用于入场条件

比如你希望**上次趋势持续超过4小时(240分钟)**才触发入场信号,可以这样写:

// 入场条件:金叉 + 上次趋势时长≥240分钟
enterLong = isGoldenCross and crossDuration >= 240

// 标记入场信号
plotshape(enterLong, title="符合条件的多单入场", location=location.belowbar, color=color.green, style=shape.labelup, text="入场")

关键说明

  • time变量返回当前K线的起始时间戳(毫秒级),计算差值后可按需转换单位(分钟/小时/天)
  • var关键字确保变量在脚本运行期间不会被重置,能持续存储历史交叉数据
  • 可根据需求调整均线类型(比如换成ta.ema)或时长单位(转小时就除以3600000)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 11:27:05