一、整体概述
-
功能:通过调用 xtick API (需要注册购买,购买集合竞价的数据-竞价详情实时接口,XTick-股票实时行情数据接口 | 集合竞价数据接口 | 量化交易接口 | 专业金融数据API接口)获取当日全市场集合竞价分笔数据(9:15–9:25),结合多种技术条件(趋势、价格回落、量价配合、诱多识别、均线过滤)筛选出可能走强的个股,程序运行时间非常快。
-
数据源:
http://api.xtick.top/doc/hot/dayupdate(需 Token),以及akshare获取历史日线(用于计算 MA5/MA10)。 -
输出:控制台打印筛选结果,并保存为 JSON 文件。
-
适用场景:每日开盘前自动运行,辅助短线交易决策,需在pycharm上运行。
二、代码结构拆解
1. 配置参数(可调阈值)
| 参数 | 含义 |
|---|---|
TREND_1_RATIO_THRESHOLD = 0.60 |
9:20后 trend=1 的记录占比必须 ≥60% |
PRICE_CHANGE_THRESHOLD = 3.0 |
集合竞价最终涨幅(jjzf)≥3% |
PRICE_DROP_PCT_LIMIT = 0.5 |
任意相邻价格回落幅度 ≤0.5% |
MAX_DROP_RATIO = 0.20 |
价格回落次数占总相邻次数 ≤20% |
EARLY_DROP_LIMIT = 3.0 |
9:15-9:20 期间最大回落 ≤3% |
TAIL_DROP_LIMIT = 1.5 |
尾盘回落幅度阈值(诱多检测) |
NOL_SHRINK_RATIO = 0.6 |
nol 萎缩比例(后3笔 vs 前7笔) |
JJZF_DROP_LIMIT = 1.5 |
jjzf 冲高回落幅度 |
JJL_SURGE_RATIO = 3.0 |
jjl 放大倍数(诱多检测) |
VOLUME_PRICE_RATIO = 0.5 |
jjl 较前一分钟增幅 ≥50% 时,价格必须上涨 |
PRICE_RISE_MIN = 0.0 |
价格最小涨幅(可设为正值增强要求) |
NOL_SMALL_THRESHOLD = 0.3 |
最后两根 trend=-1 的 nol 若小于前均值 30% 则允许(视为小量,可豁免) |
USE_MA5 / USE_MA10 |
是否启用均线过滤(站上均线) |
DEBUG_CODE |
若设置,则打印该股票详细调试信息 |
2. 主要函数说明
get_st_stock_codes()
-
调用
stockinfo接口获取当前 ST/*ST 股票代码集合,用于后续过滤。
fetch_all_bid_data()
-
请求集合竞价数据(
dataType=bid),自动为每条记录补充code字段(从symbol中提取数字)。 -
支持重试机制(
MAX_RETRIES)。
get_minute_representatives(records)
-
从 9:20~9:25 每分钟内取时间戳最大的记录,构成 5 个分钟节点(用于后续严格递增检查)。
fetch_ma5_for_codes() / fetch_ma10_for_codes()
-
使用
akshare.stock_zh_a_hist_tx获取前 N 个交易日数据,计算 MA5/MA10。 -
仅对通过第一步筛选的候选股计算,减少请求量。
check_trap_conditions(code, filtered)
-
诱多检测(基于全部 9:20 后数据):
-
尾盘急速回落(最后 5 笔价格跌幅 ≥1.5%)
-
nol 萎缩且价格下跌(后3笔 nol 较前7笔萎缩 ≥60%)
-
jjzf 冲高回落(最大值 – 最后值 ≥1.5%)
-
jjl 放大但价格不动(后5笔 jjl 较前10笔放大 ≥3 倍,且价格波动 ≤0.3%)
-
-
若(尾盘回落)且(其他任一)则判定为诱多,淘汰。
analyze_single_stock(code, records, ma5, ma10, skip_ma)
-
核心单股分析流程:
-
早期波动过滤(9:20前最大回落 ≤3%)
-
过滤 9:20 后数据,排序
-
trend=1比例检查 -
价格最大回落和回落次数检查
-
最后三根价格不能严格递减
-
均线检查(若启用)
-
最终涨幅(jjzf 或计算涨幅)检查
-
分钟节点提取与量价条件:
-
jjl 严格递增(5分钟)
-
trend=-1 的 nol 必须逐步减少(若存在)
-
量价配合:jjl 增幅大时价格需同步上涨
-
-
最后两根 trend=-1 的 nol 小量豁免(若 nol < 前均值*0.3 则允许)
-
诱多检测(调用
check_trap_conditions)
-
-
返回包含详尽字段的结果字典。
analyze_all_stocks(all_data, st_codes, skip_ma)
-
按股票代码分组,遍历调用
analyze_single_stock,打印进度。
apply_ma5_filter / apply_ma10_filter
-
后置均线过滤(因为计算耗时,只对已通过其他条件的股票计算均线)。
print_summary() 和 save_results()
-
汇总输出及 JSON 保存。
-
三、运行依赖与环境
-
• Python 3.7+
• 安装依赖:requests, akshare, pandas, datetime
• 需要有效的 Token
• 网络连接(访问 xtick API 和 akshare 行情源)
• 建议在 9:25 后运行,以确保数据完整。

四、输出示例与调参建议
• 第一步输出:显示通过除均线外所有条件的股票,含详细量价指标。
• 最终结果:若启用均线,进一步过滤。
• 调参思路:
◦ 若候选太少,可适当放宽 TREND_1_RATIO_THRESHOLD 或 PRICE_CHANGE_THRESHOLD。
◦ 若候选太多,可提高 PRICE_RISE_MIN(量价配合更严)或开启均线。
◦ 诱多检测阈值可根据市场环境调整。

五、注意事项
1. API 限流:避免频繁请求,代码中已加入 time.sleep(0.3) 控制。
2. 均线计算耗时:只对候选股计算,但若候选较多(几百只),仍可能耗时,建议仅在必要时启用。
3. 数据完整性问题:若某分钟缺失,则直接淘汰该股票(get_minute_representatives 返回 None)。
4. 调试模式:设置 DEBUG_CODE = “002638” 可打印该股票所有中间数据,便于验证逻辑。
5. ST 过滤:依赖 xtick 的 ST 列表接口,若失败则不过滤,可能包含 ST 股。 - 六、免责申明
- 本策略代码仅供技术学习与量化研究参考,不构成任何投资建议或收益承诺。回测结果不代表未来实际收益,据此交易产生的盈亏由使用者自行承担。





请登录后查看回复内容