Pine Script v5 实现信号首次触发显示逻辑的代码修改方案
Pine Script v5 均值回归策略卖出信号过滤修改
原始代码
//@version=5 indicator("Mean reverse strategi", timeframe="1D") bool first = false a=0 b=0 c=0 d=0 e=0 f=0 buy=0 sell=0 williammax = ta.highest(10) williammin = ta.lowest(10) _pr = 100 * (close - williammax) / (williammax - williammin) if math.max(open, close, high, low)<ta.sma(close, 10) a:=1 if _pr<-85 b:=1 if ta.rsi(close, 2)<10 c:=1 if a==1 and b==1 and c==1 buy:=-1 if _pr > -15 e:=1 if buy[1]==-1 or buy[2]==-1 or buy[3]==-1 or buy[4]==-1 or buy[5]==-1 or buy[6]==-1 or buy[7]==-1 or buy[8]==-1 or buy[9]==-1 or buy[10]==-1 or buy[11]==-1 or buy[12]==-1 f:=1 if f!=1 and e==1 sell:=1 plot(buy, color=#50EF53) plot(sell, color=#F93822FF)
需求规则
仅显示红色卖出信号的首次触发结果,首次卖出信号出现后,后续卖出信号统一置为0不展示,直到指标触发绿色买入信号后重置状态,才允许再次显示下一轮的首次卖出信号。
修改后可直接运行的完整代码
//@version=5 indicator("Mean reverse strategi", timeframe="1D") // 状态控制变量:标记当前是否允许显示卖出信号,var修饰保证K线间状态持续留存 var bool canShowSell = true a=0 b=0 c=0 e=0 f=0 buy=0 sell=0 // 补全原代码缺失的数据源参数,修复函数调用报错 williammax = ta.highest(high, 10) williammin = ta.lowest(low, 10) _pr = 100 * (close - williammax) / (williammax - williammin) if math.max(open, close, high, low)<ta.sma(close, 10) a:=1 if _pr<-85 b:=1 if ta.rsi(close, 2)<10 c:=1 if a==1 and b==1 and c==1 buy:=-1 // 触发买入信号时,重置卖出信号显示权限 canShowSell := true if _pr > -15 e:=1 if buy[1]==-1 or buy[2]==-1 or buy[3]==-1 or buy[4]==-1 or buy[5]==-1 or buy[6]==-1 or buy[7]==-1 or buy[8]==-1 or buy[9]==-1 or buy[10]==-1 or buy[11]==-1 or buy[12]==-1 f:=1 // 仅在权限开启时触发卖出信号 if f!=1 and e==1 and canShowSell sell:=1 // 首次卖出触发后关闭权限,后续同轮卖出信号全部屏蔽 canShowSell := false plot(buy, color=#50EF53, title="买入信号") plot(sell, color=#F93822FF, title="卖出信号")
核心修改点
- 新增
canShowSell布尔状态变量,初始值为true,用var关键字修饰保证状态不会在每根K线加载时重置 - 买入信号触发分支新增状态重置逻辑,每次买入后重新开放卖出信号的显示权限
- 卖出信号触发条件新增权限校验,只有
canShowSell为true时才会输出卖出值1;首次卖出触发后立刻把canShowSell设为false,同周期内后续所有满足卖出条件的K线都不会再绘制信号 - 修复原代码中
ta.highest、ta.lowest缺失数据源参数的语法错误,清理了定义后未使用的冗余变量first、d,完全保留原有策略的信号判断逻辑
内容的提问来源于stack exchange,提问作者Pinescript man
相关产品推荐
相关产品推荐

