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

如何为基于line.new的Fourier价格外推指标创建颜色切换警报?

解决Fourier Extrapolator of Price指标的颜色切换警报问题

原指标通过line.new直接绘制颜色,但没有保留趋势状态,无法直接触发颜色切换警报。核心思路是提取指标的趋势判断逻辑,保存历史趋势状态,检测状态切换时触发警报。

修改后的完整代码

// This source code is subject to the terms of the Mozilla Public License 2. at https://mozilla.org/MPL/2./
// © loxx
// 新增警报功能

//@version=5
indicator("Fourier Extrapolator of Price [Loxx] + Alert", shorttitle = "FEP [Loxx] + Alert", overlay = true, max_lines_count = 500)

greencolor = #2DD204
redcolor = #D2042D 

src = input.source(open, "Source")
npast = input.int(400, "Past Bars", maxval = 500)
nharm = input.int(20, "Harmonic Period", minval = 1)
frqtol = input.float(0.0001, "Frequency Tolerance")

// 封装xm数组计算逻辑为函数
f_calculate_xm() =>
    x = array.new<float>(npast, 0.)
    xm = array.new<float>(npast, 0.)
    
    av = 0.
    for i = 0 to npast - 1 
        array.set(x, i, nz(src[i])) 
        av += array.get(x, i)
    av /= npast
    
    for i = 0 to npast - 1
        array.set(xm, i, av)

    beta = 0.
    alpha = 0.
    w = 0., m= 0., a= 0., b= 0.
    z = array.new<float>(npast, 0.)
    
    for harm = 1 to nharm
        alpha := 0.
        beta := 2.
        array.set(z, 0, array.get(x, 0) - array.get(xm, 0))
        while math.abs(alpha - beta) > frqtol  
            alpha := beta
            array.set(z, 1, array.get(x, 1) - array.get(xm, 1) + alpha * array.get(z, 0))
            num = array.get(z, 0) * array.get(z, 1)
            den = array.get(z, 0) * array.get(z, 0)
            for i = 2 to npast - 1
                array.set(z, i, array.get(x, i) - array.get(xm, i) + alpha * array.get(z, i - 1) - array.get(z, i - 2))
                num += array.get(z, i - 1) * (array.get(z, i) + array.get(z, i - 2))
                den += array.get(z, i - 1) * array.get(z, i - 1)
            beta := num / den
        w := math.acos(beta / 2.)
    
        Sc = 0.,  Ss = 0., Scc = 0.
        Sss = 0., Scs = 0., Sx = 0.
        Sxc = 0., Sxs = 0., den = 0.
        n = npast
        for i = 0 to npast - 1
            c = math.cos(w * i)
            s = math.sin(w * i)
            dx = array.get(x, i) - array.get(xm, i)
            Sc += c
            Ss += s
            Scc += c * c
            Sss += s * s
            Sx += dx
            Sxc += dx * c
            Sxs += dx * s
        Sc /= n
        Ss /= n
        Scc /= n
        Sss /= n
        Scs /= n
        Sx /= n
        Sxc /= n
        Sxs /= n
        if (w == 0.) 
            m := Sx
            a := 0.
            b := 0.
        else 
            den := math.pow(Scs - Sc * Ss, 2) - (Scc - Sc * Sc) * (Sss - Ss * Ss)
            a := ((Sxs - Sx * Ss) * (Scs - Sc * Ss) - (Sxc - Sx * Sc) * (Sss - Ss * Ss)) / den
            b := ((Sxc - Sx * Sc) * (Scs - Sc * Ss) - (Sxs - Sx * Ss) * (Scc - Sc * Sc)) / den
            m := Sx - a * Sc - b * Ss
        
        for i = 0 to  npast - 1
            array.set(xm, i, array.get(xm, i) + m + a * math.cos(w * i) + b * math.sin(w * i))
    xm

// 计算xm数组
xm = f_calculate_xm()

// 获取最近两个点的数值
current_val = array.get(xm, 0)
prev_val = array.get(xm, 1)

// 标记当前趋势:1=绿色(上升),0=红色(下降)
current_trend = current_val > prev_val ? 1 : 0

// 保存上一根K线的趋势状态(var关键字确保仅初始化一次)
var int prev_trend = na

// 检测趋势切换:当前与上一次趋势不同,且上一次状态有效
trend_switch = prev_trend != current_trend and not na(prev_trend)

// 设置警报触发条件
alertcondition(trend_switch, title="FEP 颜色切换警报", message="Fourier Extrapolator of Price 指标颜色发生切换!")

// 保留原指标的画线逻辑
if barstate.islast
    for i = 0 to array.size(xm) - 1
        colorout = i < array.size(xm)-2 ? array.get(xm, i) > array.get(xm, i + 1) ? greencolor : redcolor : na
        line1 = line.new(bar_index - i + 1, array.get(xm, i), bar_index - i, array.get(xm, i), width=6, color=colorout, style=line.style_solid) 

// 更新历史趋势状态
prev_trend := current_trend

关键修改说明

  • 封装计算逻辑:把原代码中计算xm数组的核心逻辑封装成函数,方便获取计算结果用于趋势判断。
  • 提取趋势状态:通过对比最近两个点的数值,判断当前是绿色上升趋势还是红色下降趋势。
  • 保存历史状态:用var定义变量保存上一根K线的趋势状态,避免每次K线更新都重置。
  • 触发警报:当趋势状态发生切换时,通过alertcondition触发警报,你可以在TradingView的警报设置中配置通知方式。

修改后的指标完全保留原功能,同时新增颜色切换警报触发能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:30:51