资讯动态

【Python实时盯盘与预警 #09】涨了3就报警太吵?4个条件任意组合的异动雷达

发布时间:2026/8/10 12:04:06 来源:尧图企业网站定制
【Python实时盯盘与预警 #09】涨了3%就报警太吵4个条件任意组合的异动雷达你照着前面的文章搭了个涨跌幅告警——涨 3% 就响。结果开盘半小时手机响了 10 次。打开一看有的票成交额才 200 万有的换手率 0.1%纯碎是低流通盘的小票随便跳两下就 3% 了。**问题出在单一条件太粗暴。**真正的异动从来不是一个指标说了算的——涨了 3% 且成交额过 5000 万且换手率超 3% 且量比大于 1.5这才是有资金真在干活的异动。但问题来了换手率、量比这些字段批量接口stock_ssjy_more不返回。100 只股票逐只调stock_ssjy拿完整字段那 100 次额度没了免费版一天只能跑 5 轮。这篇教你两级过滤法Level-1 用批量接口快速筛掉 90% 不达标的票5 次 APILevel-2 只对命中的几只调单股接口精筛约 10 次 API。100 只股票扫一遍总共 15 次额度。本文你将得到什么一个多条件组合的异动雷达脚本4 个指标任意 AND 组合改配置即生效两级过滤策略批量接口粗筛 单股接口精筛省 86% 额度通用条件判断引擎五种运算符字段名写错自动跳过Level-1 / Level-2 规则拆分设计思路哪些条件放批量层、哪些放精筛层为什么需要两级过滤先看两个接口的字段差异字段stock_ssjy_more批量≤20只/次stock_ssjy单股1只/次涨跌幅 zf✅✅成交额 cje✅✅振幅 tr✅✅市盈率 pe✅✅换手率 hs❌✅量比 lb❌✅涨速 zs❌✅流通市值 lt❌✅批量接口快但字段少单股接口全但贵。两级过滤的核心思路Level-1批量拉 100 只5 次 API → 用 zf/cje 等批量字段过滤 → 假设命中 10 只 Level-2只对这 10 只调单股接口10 次 API → 用 hs/lb/zs 等单股字段过滤 → 最终命中 3 只 总计 15 次 API → 免费版可跑 33 轮/日对比全量逐只调单股接口100 次 × 1 100 次只能跑 5 轮。两级过滤省了 86% 额度。代码异动雷达importsysimportosimporttime# 证书加载只读不打印sys.path.insert(0,os.path.join(os.path.dirname(__file__),..,..,_common))frommairui_helperimportload_licencefrommairuiimportClient# 配置区 SAMPLE_SIZE100# 扫描股票数BATCH_SIZE20# 批量接口上限# Level-1 条件基于 stock_ssjy_more 批量字段省额度# 字段: zf涨跌幅% cje成交额(元) tr振幅% pe市盈率LEVEL1_RULES[{field:zf,op:,value:3.0,desc:涨跌幅 3%},{field:cje,op:,value:50_000_000,desc:成交额 5000万},]# Level-2 条件基于 stock_ssjy 单股字段需逐只调用# 字段: hs换手率% lb量比 zs涨速%LEVEL2_RULES[{field:hs,op:,value:3.0,desc:换手率 3%},{field:lb,op:,value:1.5,desc:量比 1.5},]defcheck_condition(value,op,target):通用条件判断。ifvalueisNone:returnFalsetry:vfloat(value)except(TypeError,ValueError):returnFalseifop:returnvtargetelifop:returnvtargetelifop:returnvtargetelifop:returnvtargetelifop:returnabs(v-target)1e-6returnFalsedeffilter_rules(data,rules):对一条数据应用所有规则AND 逻辑。hits[]all_passTrueforruleinrules:valdata.get(rule[field])okcheck_condition(val,rule[op],rule[value])hits.append({rule:rule[desc],field:rule[field],actual:val,pass:ok})ifnotok:all_passFalsereturnall_pass,hitsdeffetch_batch(mc,codes):分批拉取实时行情返回 {code: data}。result{}foriinrange(0,len(codes),BATCH_SIZE):batchcodes[i:iBATCH_SIZE]itemsmc.stock_ssjy_more(,.join(batch))foriteminitems:result[item[dm]]itemreturnresultdefmain():licload_licence()mcClient(lic)# 1. 获取股票列表all_stocksmc.stock_list()stocksall_stocks[:SAMPLE_SIZE]code_to_name{}codes[]forsinstocks:raw_codes[dm].split(.)[0]codes.append(raw_code)code_to_name[raw_code]s[mc]print(*70)print(异动雷达 — 多条件组合扫描)print(*70)print(f扫描样本:{len(codes)}只)print(f\nLevel-1 条件批量过滤省额度:)forrinLEVEL1_RULES:print(f -{r[desc]})print(f\nLevel-2 条件逐只精筛:)forrinLEVEL2_RULES:print(f -{r[desc]})print()# 2. Level-1: 批量拉取 过滤t0time.time()snapfetch_batch(mc,codes)api_calls_l1(len(codes)BATCH_SIZE-1)//BATCH_SIZEprint(f[Level-1] 批量拉取{len(snap)}只 ({api_calls_l1}次API))l1_hits[]forcodeincodes:datasnap.get(code)ifnotdata:continueok,_filter_rules(data,LEVEL1_RULES)ifok:l1_hits.append(code)print(f[Level-1] 命中{len(l1_hits)}只:{, .join(l1_hits[:10])})print()# 3. Level-2: 逐只精筛api_calls_l20final_alerts[]forcodeinl1_hits:detailmc.stock_ssjy(code)api_calls_l21ifnotdetail:continueok,hitsfilter_rules(detail,LEVEL2_RULES)ifok:final_alerts.append({code:code,name:code_to_name.get(code,),p:float(detail.get(p,0)),zf:float(detail.get(zf,0)),cje:float(detail.get(cje,0)),hs:float(detail.get(hs,0)),lb:float(detail.get(lb,0)),zs:float(detail.get(zs,0)),tr:float(detail.get(tr,0)),})total_apiapi_calls_l1api_calls_l2 elapsedtime.time()-t0# 4. 输出告警print(f[Level-2] 逐只精筛{len(l1_hits)}只 ({api_calls_l2}次API))print(f[最终告警]{len(final_alerts)}只命中全部条件\n)iffinal_alerts:print(f{代码:8}{名称:8}{现价:8}{涨跌幅%:8}f{成交额(万):12}{换手率%:8}{量比:6}{涨速%:8}{振幅%:8})print(-*90)forainfinal_alerts:cje_wana[cje]/10000print(f{a[code]:8}{a[name]:8}{a[p]:8.2f}{a[zf]:8.2f}f{cje_wan:12.0f}{a[hs]:8.2f}{a[lb]:6.2f}f{a[zs]:8.3f}{a[tr]:8.2f})print()print(f统计: 样本{len(codes)}只 | Level-1命中{len(l1_hits)}| f最终告警{len(final_alerts)}| fAPI调用{total_api}次 (L1{api_calls_l1}L2{api_calls_l2}) | f耗时{elapsed:.1f}s)print(f额度:{total_api}/500 ({total_api/500*100:.1f}%) | f可跑{500//total_api}轮/日)if__name____main__:main()实测结果2026-08-06 09:55真实运行 异动雷达 — 多条件组合扫描 扫描样本: 100 只 Level-1 条件批量过滤省额度: - 涨跌幅 3% - 成交额 5000万 Level-2 条件逐只精筛: - 换手率 3% - 量比 1.5 [Level-1] 批量拉取 100 只 (5 次API) [Level-1] 命中 10 只: 000021, 000034, 000035, 000048, 000065, 000069, 000426, 000428, 000506, 000510 [Level-2] 逐只精筛 10 只 (10 次API) [最终告警] 3 只命中全部条件 代码 名称 现价 涨跌幅% 成交额(万) 换手率% 量比 涨速% 振幅% ------------------------------------------------------------------------------------------ 000426 兴业银锡 38.47 4.63 210132 3.11 7.16 -0.340 0.00 000506 招金黄金 16.44 3.46 88458 5.77 4.79 -0.180 0.00 000510 新金路 16.35 3.97 53935 5.44 6.23 -0.300 0.00 统计: 样本 100 只 | Level-1命中 10 | 最终告警 3 | API调用 15次 (L15L210) | 耗时 0.5s 额度: 15/500 (3.0%) | 可跑 33 轮/日关键数据解读Level-1 过滤掉 90%100 只中只有 10 只同时满足涨跌幅3% 成交额5000万。这一步只花了 5 次 APILevel-2 再砍掉 70%10 只中只有 3 只同时满足换手率3% 量比1.5。这一步花了 10 次 API最终 3 只异动股兴业银锡量比 7.16 最高、招金黄金换手率 5.77% 最高、新金路涨跌幅 3.97%15 次额度 3%免费版一天能跑 33 轮每 15 分钟一轮能覆盖整个交易日怎么自定义你的条件改配置区的LEVEL1_RULES和LEVEL2_RULES就行。规则结构{field:字段名,op:运算符,value:阈值,desc:描述}运算符支持常用条件模板# 激进型抓异动龙头LEVEL1_RULES[{field:zf,op:,value:5.0},{field:cje,op:,value:100_000_000},# 1亿]LEVEL2_RULES[{field:lb,op:,value:2.0},{field:zs,op:,value:0.3},]# 保守型找温和放量LEVEL1_RULES[{field:zf,op:,value:1.0},{field:cje,op:,value:30_000_000},# 3000万{field:tr,op:,value:2.0},# 振幅 2%]LEVEL2_RULES[{field:hs,op:,value:1.0},{field:lb,op:,value:1.0},]# 跌幅异动找急跌的票LEVEL1_RULES[{field:zf,op:,value:-3.0},# 跌超 3%{field:cje,op:,value:50_000_000},]LEVEL2_RULES[{field:lb,op:,value:1.5},# 放量下跌]条件分层的原则放 Level-1批量层放 Level-2精筛层涨跌幅 zf、成交额 cje、振幅 tr、市盈率 pe、市净率 pb_ratio换手率 hs、量比 lb、涨速 zs、流通市值 lt、总市值 sz批量接口有的字段只有单股接口才有的字段原则能把 90% 的票筛掉的条件放 Level-1精确定位的条件放 Level-2。常见坑Level-1 条件太松如果 Level-1 只设zf 0.5%可能 80 只都命中Level-2 要调 80 次单股接口——两级过滤白做了。Level-1 的目标是把命中数砍到 10-20 只以内Level-2 条件太严4 个条件全设且阈值太高可能一只都不命中。建议先用宽松阈值跑一轮看看分布再逐步收紧字段名写错不报错check_condition遇到None或非数字值会返回False不会报错。如果某条规则永远不命中检查字段名是否拼对参考上文字段表成交额 cje 单位是元不是万元。5000 万 50_000_000量比 lb 在开盘前 5 分钟不稳定9:30-9:35 量比偏高是正常现象分母小建议 9:35 后再跑小结异动雷达的核心不是多条件——任何人都会写if zf 3 and cje 5000万。核心是两级过滤的额度策略用批量接口的 5 次调用砍掉 90% 的噪音再只对剩下的几只调单股接口拿完整字段。100 只股票、4 个条件、15 次额度。这就是免费版也能做专业级异动监控的关键。加上前八篇的实时报价#01、阈值告警#02、涨停池#03、炸板预警#04、盘口分析#05、批量接口#06、涨速排行#07、成交额异动#08你的盯盘工具链已经很完整了。下一篇我们把异动雷达的输出落进 SQLite——每轮扫描结果自动入库一天跑下来积累几百条记录盘后可以回放、统计、做策略复盘。一天异动全留痕不漏不丢。⚠️免责声明本文为技术分享所有计算仅展示 Python 编程方法与 API 使用技巧不构成任何投资建议。股市有风险投资需谨慎。 关注「Python实时盯盘与预警」合集共 16 篇从自选股报价到全市场监控、从免费版到企业证书方案——一站式盘中盯盘不求人。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价