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

如何实现MFI上穿20后仅第一次RSI上穿RSI均线触发买入信号

Pine Script 交易指标修复方案

原始需求

  • 前置触发条件:MFI指标先行运行在20数值区间下方,随后向上突破20阈值
  • 买入信号规则:前置条件满足后,仅在RSI 第一次 上穿RSI均线(rsiMA)时触发信号,同轮MFI上穿周期内后续的RSI上穿动作不触发信号

原有代码缺陷

  1. sessionStart变量使用var关键字声明后,一旦被赋值为true就会永久保持,没有设置信号触发后的复位逻辑,导致同轮MFI上穿后所有后续RSI上穿都会误触发买入
  2. rsicross变量的重置逻辑存在根本性错误:判断条件rsi < rsiMA or rsi > rsiMA为恒真表达式,相当于每根K线都会强制把rsicross置为false,该变量的状态判断完全失效
  3. 缺少MFI重新跌回20下方的状态复位逻辑,无法适配MFI在20阈值附近反复震荡的场景

修复后完整实现代码

// 指标参数可根据交易策略自行调整
mfiLen = input.int(14, title="MFI计算周期")
rsiLen = input.int(14, title="RSI计算周期")
rsiMaLen = input.int(14, title="RSI均线计算周期")

// 计算基础指标值
mfiVal = ta.mfi(high, low, close, volume, mfiLen)
rsiVal = ta.rsi(close, rsiLen)
rsiMaVal = ta.sma(rsiVal, rsiMaLen)

// 状态标记:MFI完成20阈值上穿、且尚未触发本轮对应买入信号时为true
var validTradeSession = false

// MFI从下往上突破20时,激活有效交易会话
if ta.crossover(mfiVal, 20)
    validTradeSession := true

// MFI从上往下跌破20时,重置会话状态,等待下一轮上穿
if ta.crossunder(mfiVal, 20)
    validTradeSession := false

// 买入信号判定:有效会话激活状态下,RSI向上突破RSI均线
buySignal = validTradeSession and ta.crossover(rsiVal, rsiMaVal)

// 买入信号触发后立刻关闭当前有效会话,避免同轮会话重复触发信号
if buySignal
    validTradeSession := false

逻辑说明

  • 移除了原有冗余且逻辑错误的rsicross中间变量,直接使用ta.crossover的即时返回值判定金叉,减少不必要的状态维护
  • 新增两个状态复位节点:一是MFI重新跌回超卖区间(20下方)时复位,等待下一轮MFI上穿;二是买入信号触发后立刻复位,确保同轮MFI上穿仅触发第一次RSI金叉信号
  • 所有状态判定逐K线执行,不会出现信号漂移或重复触发问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:27:30