修复Pine Script自定义筛选器:极端成交量预警指标故障
修复后的极端成交量筛选指示器代码
问题修复说明
原代码存在多个导致运行异常或不符合需求的问题,修复点如下:
- 将指标改为面板显示(
overlay=false),匹配"图表下方指示器"的要求 - 统一EMA逻辑:输入标注为EMA,代码替换为
ta.ema而非原SMA - 固定时间框架为30分钟,不受当前图表时间影响
- 新增除以0防护,避免计算错误
- 仅当有符合条件的股票时才显示标签,避免空提示
- 删除未使用的冗余计数代码
- 调整标签位置适配面板显示
修复后完整代码
//@version=5 indicator('Extreme Volume Alert-1Apr24', overlay=false, shorttitle="ExtVolAlert") // 输入参数 MAlength = input.int(title="EMA周期", defval=200, tooltip="成交量EMA回溯周期") Trigger = input.float(title="极端成交量触发倍数", defval=5, step=0.1, tooltip="当前成交量需达到EMA的X倍以上") // 成交量计算(含除以0防护) Vol = volume MA = ta.ema(Vol, MAlength) // 筛选条件函数 screen() => // 避免MA为0时除以0错误 MA > 0 ? (Vol / MA) >= Trigger : false // 固定使用30分钟时间框架检查条件 target_tf = "30" // 待筛选股票列表 s1 = input.symbol('NSE:NIFTY 50 Index', '标的1', inline='1', group='待筛选标的') s2 = input.symbol('NSE:NIFTY Bank Index', '标的2', inline='1', group='待筛选标的') s3 = input.symbol('NSE:Abcapital', '标的3', inline='1', group='待筛选标的') s4 = input.symbol('NSE:Adanient', '标的4', inline='1', group='待筛选标的') s5 = input.symbol('NSE:Adaniports', '标的5', inline='1', group='待筛选标的') s6 = input.symbol('NSE:BEL', '标的6', inline='1', group='待筛选标的') s7 = input.symbol('NSE:BHEL', '标的7', inline='1', group='待筛选标的') s8 = input.symbol('NSE:BPCL', '标的8', inline='1', group='待筛选标的') s9 = input.symbol('NSE:Coalindia', '标的9', inline='1', group='待筛选标的') s10 = input.symbol('NSE:GAIL', '标的10', inline='1', group='待筛选标的') // 批量请求各标的30分钟时间框架的筛选结果 [c1] = request.security(s1, target_tf, screen()) [c2] = request.security(s2, target_tf, screen()) [c3] = request.security(s3, target_tf, screen()) [c4] = request.security(s4, target_tf, screen()) [c5] = request.security(s5, target_tf, screen()) [c6] = request.security(s6, target_tf, screen()) [c7] = request.security(s7, target_tf, screen()) [c8] = request.security(s8, target_tf, screen()) [c9] = request.security(s9, target_tf, screen()) [c10] = request.security(s10, target_tf, screen()) // 构建符合条件的标的列表 entry_list = "" entry_list := c1 ? entry_list + str.tostring(s1) + "\n" : entry_list entry_list := c2 ? entry_list + str.tostring(s2) + "\n" : entry_list entry_list := c3 ? entry_list + str.tostring(s3) + "\n" : entry_list entry_list := c4 ? entry_list + str.tostring(s4) + "\n" : entry_list entry_list := c5 ? entry_list + str.tostring(s5) + "\n" : entry_list entry_list := c6 ? entry_list + str.tostring(s6) + "\n" : entry_list entry_list := c7 ? entry_list + str.tostring(s7) + "\n" : entry_list entry_list := c8 ? entry_list + str.tostring(s8) + "\n" : entry_list entry_list := c9 ? entry_list + str.tostring(s9) + "\n" : entry_list entry_list := c10 ? entry_list + str.tostring(s10) + "\n" : entry_list // 仅当有符合条件的标的时显示标签 if entry_list != "" lab_entry = label.new(bar_index, high, "符合入场条件的标的:\n" + entry_list, color=color.new(color.lime, 70), textcolor=color.black, style=label.style_label_down, yloc=yloc.abovebar, textalign=text.align_left) label.delete(lab_entry[1])
内容的提问来源于stack exchange,提问作者Rajkumar
相关产品推荐
相关产品推荐

