lc132

ashare-screener

A股每日盘前短线标的智能筛选(v6.9.28)。基于前一日收盘数据,通过 38步筛选流程(网络授时北京→GitHub持仓跟踪→节假日→极端行情→外围市场→持仓同步→做T→持仓跟踪→持仓危机→全市场API拉取→行业查表补全→pytdx历史K线→东方财富财务(已降级)→F10单股API→风险事件→拥挤度(机构持仓+融资过热)→13项硬排除→27项信号过滤→十七策略评分→行业集中度→生成HTML报告→GitHub同步→飞书推送→每周复盘),输出短线标的_YYYYMMDD.md 为Markdown格式,同时生成可视化HTML报告。当用户需要运行盘前筛选、A股短线选股、每日标的预测时使用。

lc132 0 Updated 4w ago

Resources

18
GitHub

Install

npx skillscat add lc132/lv

Install via the SkillsCat registry.

SKILL.md

A股盘前短线标的筛选 v6.9.28

基于前一日完整收盘数据筛选当日有望上涨的A股短线标的。不追高是硬纪律。

步骤零、北京时间获取(最高优先级,必须第一步执行)

核心原则:仅通过公共网络授时 API 获取精确北京时间。不依赖本地系统时钟、不降级到 zoneinfo/pytz。

📄 完整代码见 references/step0-beijing-time.py

v6.6.45 新增3源备用timeapi.ioworldtimeapi.orgworldclockapi.com,兼容不同 JSON 字段名(dateTime/datetime/currentDateTime),自动清理时区后缀。全部不可达→直接中止。

所有搜索 query 使用 data_date,输出文件名 /workspace/短线标的_YYYYMMDD.md 使用 prediction_date

可配置参数

/workspace/策略调整记录.json 数组末条 params 字段读取,共11项参数,默认值:search_budget=25, northbound_threshold=3000, consecutive_weeks=2, win_rate_drop_threshold=10, limit_down_threshold=100, max_adjust_params=3, confidence_position_enabled=true, strategy_concentration_pct=30, data_tier_l2_skip_on_unavailable=true, data_tier_l3_downgrade_to_signal=true, strategy_a_weak_market="closed"

参数用途说明:search_budget步骤10搜索次数 | northbound_threshold策略E主力资金流入阈值(万元),默认3000万 | consecutive_weeks预留(周线趋势连续周数,当前未启用) | win_rate_drop_threshold预留(胜率回撤触发%,当前未启用) | limit_down_threshold步骤2跌停阈值 | max_adjust_params仅周六Task3回滚参数修改上限,每日筛选不执行回滚 | confidence_position_enabled置信度-仓位联动开关(true=启用) | strategy_concentration_pct步骤17同策略上限(%) | data_tier_l2_skip_on_unavailable数据不可达跳过 | data_tier_l3_downgrade_to_signalL3降级开关 | strategy_a_weak_market预留(弱市策略A开关,当前始终关闭)。v6.9.4已删除:max_holding_days/circuit_breaker_threshold_pct/do_t_success_reset_count/conversion_rate_*(step9A/B/C持仓风控未实现)

系统告警

📄 完整代码见 references/log-alert.py

触发场景:推荐历史读写失败(ERROR)、JSON格式异常(WARNING)、Excel读写失败(WARNING)、持仓行情搜索失败(WARNING)、持仓跟踪同步失败(WARNING)、持仓跟踪同步成功(INFO)、持仓危机(WARNING)、清理成功(INFO)、清理失败(WARNING)、版本一致(INFO)、版本不一致(INFO)、北京时间API不可达(INFO)、北京时间获取失败(ERROR)、筛选概况与MD表格行数不一致(ERROR)、GitHub同步成功(INFO)、GitHub同步失败/无令牌(WARNING)、数据不可达跳过(INFO)、飞书推送成功(INFO)、飞书推送失败(WARNING)、行情数据采集失败(WARNING)、行情数据校验异常(WARNING)

文件容错

所有文件读写必须使用以下 safe_ 函数:

📄 完整代码见 references/safe-file-ops.py

⚠️ JSON追加必须用 safe_append_json,禁止直接 safe_write_json 追加。

前置检查(步骤1-8)

1.节假日:搜索中国股市交易日历→data_date 或 prediction_date 为节假日→跳过;长休≥3日→弱市+仓位≤30%+搜索预算+5

2.极端行情:上证跌≥3%→跳过;涨≥3%→仓位30%极端上涨降仓防追高;跌停>threshold→跳过

3.外围市场:美股三大指数均跌>2%→弱市仓位≤30%;恒生跌>3%→弱市仅超跌反弹;人民币波动>0.5%→暂停策略E。美股/港股假期→跳过此检查

3A.大盘代理:盘前检查深证成指(sz399001)作为大盘强弱代理指标。深成指跌>1%→仓位降一档(强→震荡→弱,下限20%)。若数据不可得→跳过此检查。

4.持仓行情同步:遍历推荐历史中 type="holding" 记录,先暂存 old_current,再搜索当日收盘价→仅在API返回成功后将 old_current 写入 prev_close→更新current/pnl_pct/update_date,同时计算 market_value=round(current×shares,2) 和 pnl_amount=round((current-cost)×shares,2)。搜不到→log_alert WARNING保留旧数据,prev_close 回退为旧值。safe_write_json 写回推荐历史。prev_close 用于步骤4C跌停检测。

4A.做T评估:对持仓进行做T可行性评估,详见「九、做T评估」。输出 type="do_T_eval" 追加到推荐历史,回溯检查昨日 do_T_eval 的 do_T_feasible 字段。

4B.持仓跟踪.xlsx同步:步骤4完成后,将更新后的 holding 收盘价同步写入 /workspace/持仓跟踪.xlsx 的「持仓明细」sheet。

  • 仅更新「当前价」列(列8)和「市值」列(列9)、「盈亏额」列(列10)、「盈亏率」列(列11)、「更新日期」列(列12)
  • 按 code 匹配行,不新增/删除行,不修改成本/持仓量等字段
  • 代码匹配时自动处理Excel数字化的代码:str() 后检测长度,4位自动 zfill(6) 补齐
  • 若 xlsx 不存在或结构异常→log_alert WARNING,跳过;若某 code 在 xlsx 中找不到→log_alert WARNING
  • 同步后 save

📄 完整代码见 references/pre-check-holdings-sync.py

4C.持仓危机检查:步骤4持仓行情更新后,遍历 holding 记录检查危机信号。不阻断筛选流程,但在对话输出中置于筛选概况上方优先展示。

检查规则:

  • 当日收盘价较前日跌停(< -9.5%) → log_alert WARNING + 对话置顶告警「⚠️ {code} {name} 当日跌停!成本{cost} 现价{current} 浮亏{pnl_pct}%」
  • 浮亏>15% → log_alert WARNING + 对话置顶告警「⚠️ {code} {name} 浮亏突破15%做T上限({pnl_pct}%),建议人工决策」
  • 触发硬排除规则(L1级) → 对话告警「⚠️ {code} {name} 触发硬排除规则{rules}(例:股价跌破5元、ST等)」

📄 完整代码见 references/pre-check-crisis.py

5.推荐历史清理:逐日期文件独立清理(不合并归档)。遍历所有 推荐历史_*.json,每个文件内:保留7日内 recommendation + 90日内 holding + 所有 weekly_review/strategy_check/do_T_eval/do_T,删除过期记录。

清理逻辑:

📄 完整代码见 references/pre-check-clean.py

注意:weekly_review/strategy_check 类型保留不清理。

6.文件初始化:策略调整记录.json取末条version+params,损坏→默认BUILTIN_VERSION。交叉验证推荐历史中strategy_check版本,不一致以策略调整记录为准→log_alert INFO。首次运行或版本变更→safe_append_json追加type="strategy_check"记录(含version/params/checks),验证各项条件计数与预期一致

版本一致性检查代码:

📄 完整代码见 references/pre-check-version.py

7.财报季:1/3/4/8/10月→事件驱动权重×1.5+仓位+5%,动量延续涨幅上限7%→8%

8.大盘环境(v6.6.27:腾讯API获取三大指数实时行情):

步骤8通过腾讯API qt.gtimg.cn 获取上证指数(sh000001)、深证成指(sz399001)、创业板指(sz399006)实时行情。优先尝试pytdx获取均线数据判断MA20位置,降级则根据涨跌幅判断。指数数据保存至 index_data 全局变量,供HTML报告三大指数行情卡使用。

环境 条件 总仓位 动量(A) 超跌(B) 事件(C) 回调(D) 资金(E) 北向(F)
强市 上证>MA20且MA5>MA10>MA20且涨跌比>2:1且成交>20日均×1.2 70-80% 35-40% 10-12% 10-12% 10-12% 5-8% 3-5%
震荡 上证在MA20±2%或涨跌比≈1:1 50-60% 12-17% 10-13% 8-10% 12-15% 5-8% 3-5%
弱市 上证<MA20×0.98或涨跌比<1:2或成交<20日均×0.8 30-40% 0% 12-15% 5-8% 8-12% 3-5% 3-5%

边界:上证在MA20×0.98~MA20但不满足震荡→弱市。三项指标矛盾时(均线/涨跌比/成交量跨不同档级)→保守取弱一档(安全优先)

一、硬性排除(13项,v6.9.24:PE<0已迁移至信号过滤#21,13-15质押/商誉/解禁API已废弃)

基础行情排除(1-12):基于腾讯API/pytdx可直接获取的公开行情数据

  1. 当前持仓 2. 科创板(688xxx) 3. 北交所(8开头) 4. 股价<5元 5. 股价>100元 6. ST/*ST 7. 涨幅>7% 8. 停牌(收盘价≤0) 9. 市值<10亿 10. 成交额<1000万 11. 上市不足60天

财务/风控排除(13-15已废弃,16-17已迁移至信号过滤)

  1. 质押比例>50% 14. 商誉/净资产>30% 15. 近期大额解禁(解禁比例>10%,未来30天) 16. 连续亏损(ROE<0或净利润<0) 17. 涨幅>9.5%(涨停板)或跌停(<-9.5%)

数据可达性分级(v6.9.24)

v6.9.24起,PE<0从硬排除迁移至信号过滤#21(F10数据优先,PE<0兜底)。硬排除规则13-15(质押/商誉/解禁)因东方财富datacenter-web API全部废弃,降级跳过。规则16-17(ROE/净利润)已迁移至step10E(F10单股API,仅对通过硬排除的候选标的拉取)。

规则编号 数据字段 数据源
1-8 代码/股价/涨跌幅 腾讯qt.gtimg.cn
9-11 PE/市值/成交额 腾讯qt.gtimg.cn
12 上市天数 pytdx get_security_bars()
13 质押比例 v6.9.15已废弃
14 商誉/净资产 v6.9.15已废弃
15 解禁比例 v6.9.15已废弃
16-17 ROE/净利润 F10单股API (step10E)

二、信号质量过滤(27项,v6.9.28)

  1. 假动量:高开>3%且收<开×0.98→排除
  2. 诱多:盘中最高涨>5%且收<开×1.01→排除
  3. 缩量涨停:涨幅>5%+量比<0.5→排除
  4. 振幅过大:振幅>15%→排除
  5. 跌停板异动:chg<-9%+振幅>12%→排除
  6. 缩量下跌(v6.9.23: vr<0.15):chg<-3%+量比<0.15→排除(真正无流动性,避免与B策略超跌反弹冲突)
  7. 高换手低涨幅:换手>20%+涨跌幅<2%→排除
  8. 首阴标记:-3%<chg<0+换手>3%→标记_first_yin(不排除,仅加分)
  9. 均线空头排列:MA5<MA10<MA20→排除
  10. MACD顶背离:价格新高但DIF未新高→排除
  11. RSI超买:RSI(14)>80→排除
  12. 缩量反弹:连续3日量能递减+当日反弹>2%+量比<0.6→排除
  13. KDJ高位死叉:J值>100后下穿K/D线→排除
  14. 涨停次日高开低走:前日涨停+当日高开低走收阴→排除
  15. 布林带突破失败:带宽<5%+放量(量比≥1.5)但收阴→排除
  16. 20日涨幅>45%:防止追高爆炒股→排除(依赖K线数据,pytdx不可用时跳过)
  17. 放量不涨(v6.9.10):量比>2+涨跌<1%→排除(放量不出方向,疑似出货)
  18. 放量滞跌(v6.9.22):量比>1.5+微跌+收阴+振幅>2%→排除(放量滞跌,下跌中继)
  19. 高位长上影线(v6.9.11):涨>5%+上影线>实体2倍且>3%→排除(高位抛压)
  20. 连续缩量(v6.9.11):量比<0.4+涨跌<1%→排除(无人气横盘)
  21. 净利润亏损(v6.9.22):F10数据优先(ROE<0或净利润<0)→排除;F10不可达时PE<0兜底排除
  22. 流动性冲击成本(v6.9.26):Amihud ILLIQ=|涨跌幅%|/(成交额/亿)→排除>10的标的
  23. 限售解禁风险(v6.9.27):未来15日内限售解禁占总股本>5%→排除,防止解禁抛压。数据源:qqjjsj.com(内置缓冲38只)
  24. 可转债到期/强赎(v6.9.27):未来15日内CB到期或强赎→排除,防止转股稀释/赎回冲击
  25. 业绩预告强制披露窗口(v6.9.27):主板+7月1-15日+Q1净利润同比±50%以上→排除,防止业绩暴雷
  26. 机构持仓变化(v6.9.28):前十大股东中≥2家机构类型(基金/保险/券商/社保/QFII/信托/年金)减持→排除,防止成为对手盘。数据源:F10 ShareholderResearch API
  27. 融资买入过热代理(v6.9.28):换手率>20%且量比>2.5→排除,代理融资买入占比>25%的过热信号。逻辑:融资买入→成交量激增→换手率+量比双双飙升,防止踩踏风险

三、行业集中度

同申万一级行业:弱市≤4只(强/震荡市≤3只),评分前先行业预分配确保≥2个行业。同策略集中度:总推荐中同策略标的≤{strategy_concentration_pct}%(如5只中同策略≤{strategy_concentration_pct*5//100}只,由代码预计算),超出则降分排序取前。

v6.9.24 弹性规则:弱市下同行业上限4只(强/震荡市3只),第N+1只若 _tie_score ≥ 第N只_tie_score × 0.90(弱市放宽至90%)则保留。避免同行业高质量标的被硬截断。

四、推荐不足降级

3只→全部+放宽至中 | 2只→全部+仅≥中置信 | 1只→仅高置信 | 0只→"无合适标的"+追加空标记

五、十七策略(ABCDEFGHIJKLMNOPQ 按优先级排序)

A动量延续(优1·权重10%):涨3-7%+量比1.5-3.0+弱市关闭+极端上涨市关闭(进场价atr_pct上限8%保护)(腾讯一级简化;完整版需pytdx:MA5>MA10>MA20+量>5日均×1.5);加分:板块TOP5;仓位:强35-40%/震荡12-17%/弱关闭。弱市动量大概率诱多,直接关闭策略A。v6.6.42假突破过滤:上影线/下影线>2:1→降置信减3分(_fake_breakout标记),在策略理由中标注「⚠假突破(上影Nx)」。

B超跌反弹(优2·权重10%)(v6.9.21: amp>3+close>low1.01+low>0保护+chg上限-2.5%+深度跌幅加分(<-7%:+2,<-5%:+1)):跌2.5-9.5%+振幅>3%+反弹确认(close>low1.01);止损-7%+止盈+7%;仓位:强8-10%/震荡8-10%/弱市5-8%;进场价:深度超跌(chg<-5%)close*(1-atr*0.3),轻度超跌(-2.5%~-3.5%)low+(close-low)*0.25,其他close*0.995;退出:反弹到阻力位(MA5/MA10/前高)+3日不创新高;加仓:3日不破前低+回踩均线反弹+坚持仓8-10%;禁止:追高加仓(仓位>10%时禁止加仓)

C事件驱动(优3·权重8%)(v6.9.17: 弱市关闭):涨1-2%+量比≥1.0或财报季(vr=None时换手≥2%+阳线兜底);仓位:强10-12%/震荡10-12%/弱市关闭;事件时效5级衰减:当日100%→次日80%→第3日50%→4-7日30%→>7日10%;高开>5%→不追。

D回调企稳突破(优4·权重7%)(v6.9.25: 弱市不折扣+振幅四档区分度+ts↑vs↓):涨3-6%(弱市上限7%)+振幅1.5-10%+阳线(腾讯一级简化;完整版需pytdx:20日内创新高+回调至MA20±3%+连续3日缩量+站回MA5放量(量>昨日×1.3);仓位:强10-12%/震荡12-15%/弱8-12%;D与A不能同时匹配,以A优先。D与B同时匹配→D优先。板块联动增强:同一板块≥3只A/D/G策略标的→该板块所有A/D标的得分+10%(_tie_score加0.10)。评分区分度:_tie_score中vs:0.25/ts:0.35/cs:0.30(其他策略 vs:0.30/ts:0.30/cs:0.30),振幅四档(1.5-3%:-1, 3-6%:+1, 6-8%:0, >8%:-1)。

E资金埋伏(优5·权重6%)(v6.9.25: base=6统一,弱市不折扣,代理vr≥0.6+to≥0.5%):涨0-1%+主力流入>{northbound_threshold}万(主力资金不可达时降级:量比≥0.6+换手≥0.5%+阳线,或vr=None时换手≥1.0%+阳线,base=6与H看齐);仓位:强5-8%/震荡5-8%/弱3-5%;汇率>0.5%暂停。退出:买入后3日累计涨幅<2%→退出;加仓:北向连续5日净买+仍满足涨幅<2%→仓位上限翻倍至16%。

F北向资金(优6·权重5%)(v6.9.25: base=6统一,弱市不折扣,代理vr≥0.8+to≥1.5%):涨0-1%(先匹配E,再E→F升级)+主力流入>5000万且近5日推荐历史中持续≥3日(代理兜底:量比≥0.8+换手≥1.5%+持续≥2日,base=6与H看齐);仓位:强/震荡/弱均为3-5%;进场价:在当日low + (close-low)*0.3close*0.995低吸。F策略(优6·权重5%),E→F升级。

G横盘突破(优7·权重4%)(v6.9.25: chg<3.0%, vr≥1.0, cs中心2.0±1.5, 弱市不折扣—低吸策略):涨1.0-3.0%+阳线+振幅1.5-6%+量比≥1.0(vr=None时换手≥3%兜底);逻辑:窄幅横盘后放量突破平台,次日惯性冲高;进场价:强/震荡市close+(high-close)*0.3追涨,弱市low+(close-low)*0.4低吸不追;仓位:震荡8-10%/弱市5-8%;D先于G匹配(D覆盖3-6%),G捕获1-3%宽缝。

H地量见底(优8·权重3%)(v6.9.21: chg<1.0%+vr<1.0+base=6):涨-3~1.0%+阳线+量比<1.0+(锤子线或实体/收盘<0.008)(body=0时最小影线0.1%×close保护;vr=None时换手<1.0%兜底);逻辑:卖压衰竭,买盘稍入即涨;进场价:low+(close-low)*0.4close*1.002平吸;仓位:震荡5-8%/弱市3-5%;H在B/C/E/F之后匹配,不与其他策略冲突。

I 均线粘合突破(v6.9.22: 弱市跳过,仅强/震荡市匹配):MA5/MA10/MA20间距<4%+放量(量比≥1.0)阳线+收盘≥均线最高值×0.98;逻辑:多均线收敛后放量突破,趋势启动信号;进场价:close*1.01追涨;仓位:震荡8-10%/弱市5-8%。

J 龙回头(v6.9.22: 弱市跳过):20日涨幅>5%(强势股)+回调6-25%+缩量(量比<1.0)收阳;逻辑:强势股回调至支撑位,缩量企稳后有望反弹;进场价:low+(close-low)*0.35低吸;仓位:震荡8-10%/弱市5-8%。

K 缺口回补(v6.9.22: 弱市跳过):前日跳空高开1-7%+当日回踩缺口上沿(low≤前高×1.01)+收阳;逻辑:跳空缺口确认支撑,回踩不破则继续上行;进场价:close*1.005追涨;仓位:震荡8-10%/弱市5-8%。

L 黄金坑(v6.9.22: 弱市跳过):5日内急跌≥5%+V型反弹≥2%+放量(量比≥1.0或换手≥3%)收阳;逻辑:急跌后快速反弹为黄金坑形态,主力洗盘后拉升;进场价:low+(close-low)*0.3低吸;仓位:震荡8-10%/弱市5-8%。

M 涨停回调(v6.9.22: 弱市跳过):近5日涨停+回调4-25%+缩量(量比<1.0)收阳;逻辑:涨停后回调至支撑位,缩量企稳可博第二次拉升;进场价:close*0.998平吸;仓位:震荡6-8%/弱市3-5%。

N 新高突破(v6.9.22: 弱市跳过):收盘价≥20日新高×0.99+放量(量比≥1.0)阳线;逻辑:突破前高压力位,放量确认有效突破;进场价:close*1.01追涨;仓位:震荡8-10%/弱市5-8%。

O 回踩均线(v6.9.22: 弱市跳过):60日涨幅>15%+回踩MA20±3%+缩量(量比<1.0)收阳;逻辑:强势股回踩MA20支撑,缩量确认支撑有效;进场价:close*1.002平吸;仓位:震荡8-10%/弱市5-8%。

P 地量反弹(v6.9.22: 弱市跳过):连续3日缩量至地量+当日放量≥1.2x+涨1.0-5%阳线;逻辑:地量见地价后放量反弹,确认底部反转;进场价:close*1.005追涨;仓位:震荡6-8%/弱市3-5%。

Q W底突破(v6.9.22: 弱市跳过):20日内两底相差<5%+放量(量比≥1.2)突破颈线(两底间最高点)0.5%+阳线;逻辑:经典W底形态,突破颈线确认反转;进场价:close*1.01追涨;仓位:震荡8-10%/弱市5-8%。

评分区分度(v6.9.25):_tie_score 在 step14 中计算(包含量比vs/换手率ts/涨跌幅偏好cs/策略权重/板块联动/均线粘合),乘以8后融入最终 score(score = base*2 + round(_tie_score*8)),同策略内浮动0-8分。B策略深度跌幅加分(<-7%:+2, <-5%:+1),D策略振幅四档区分度(1.5-3%:-1, 3-6%:+1, 6-8%:0, >8%:-1)。step16 仅负责排序(_tie_key 含score降序→策略优先级→_tie_score降序→量比降序→换手率距10%偏差)。

权重公式_tie_score策略权重分量):(1.0 - so/10) × 0.10,其中 so 为策略优先级(A=0, B=1, C=2, D=3, E=4, F=5, G=6, H=7, I=8, J=9, K=10, L=11, M=12, N=13, O=14, P=15, Q=16)。权重递减:A(10%)→B(9%)→C(8%)→D(7%)→E(6%)→F(5%)→G(4%)→H(3%)→I(2%)→J(1%)→K(0%)→L(-1%)→M(-2%)→N(-3%)→O(-4%)→P(-5%)→Q(-6%)。_tie_score 完整公式(v6.9.25):(vs×0.25 if D策略 else vs×0.30) + (ts×0.35 if D策略 else ts×0.30) + cs×0.30 + 策略权重 + sector_bonus + ma_bonus
注:so>=10的策略权重为负值,实际执行中 _tie_scoremax(0, _tie_score) 保护,确保不会因策略权重而导致负分。

七、技术指标体系(step10C pytdx K线,28指标)

v6.9.3起,step10C通过pytdx拉取每只候选标的60日历史K线数据,计算以下28项技术指标,支撑策略匹配和信号过滤:

类别 指标 字段名 用途
均线 MA5/MA10/MA20 ma5/ma10/ma20 策略I/O/D/A均线条件、信号过滤空头排列
均线 20日最高/最低价 high20/low20 策略N新高突破、信号过滤顶背离
MACD DIF/DEA/柱 dif/dea/macd_hist 信号过滤MACD顶背离、策略趋势判断
RSI RSI(14) rsi14 信号过滤RSI超买>80、策略B超跌判断
KDJ K/D/J值 k/d/j 信号过滤KDJ死叉、策略B J拐头判断
布林带 上轨/中轨/下轨/带宽 boll_upper/boll_mid/boll_lower/boll_width 信号过滤布林突破失败
WR 威廉指标(14) wr14 辅助超买超卖判断
OBV 能量潮 obv 辅助量价背离判断
DMI +DI/-DI/ADX pdi/mdi/adx 辅助趋势强度判断
涨停 近10日涨停天数 limit_up_days 策略M涨停回调
基础 上市天数 days_listed 硬排除上市不足60天
原始 收盘价/最高价/最低价/成交量序列 closes/highs/lows/volumes 各策略回算20日/60日涨跌幅、量能变化

数据源:pytdx get_security_bars(9, market_code, stock_code, 0, 60) 获取60日K线。不可达时kline_data为空字典,依赖K线数据的策略(I/J/K/L/M/N/O/P/Q)和信号过滤项(9-16)将自动跳过(不触发排除)。v6.9.11起pytdx作为默认安装项(pip install pytdx),K线数据覆盖率恢复到100%。

八、财务数据(step10D + step10E)

v6.9.15起,财务数据采集分为两步:

step10D(已废弃降级):东方财富datacenter-web API批量拉取质押/商誉/解禁,3个API全部废弃,返回空字典,硬排除规则13-15降级跳过。

step10E(F10单股API):v6.9.15新增,使用 emweb.securities.eastmoney.com F10单股API(ZYZBAjaxNew),对通过硬排除的候选标的逐只拉取最新财报ROE/净利润/营收/EPS,在信号过滤环节(#21)排除净利润亏损标的。v6.9.21修复gzip压缩订阅问题,成功率100%(243/243)。

数据类别 API端点 字段 状态 用途
质押比例 RPTA_STOCKPLEDGE PLEDGE_RATIO ⚠️已废弃 硬排除:质押>50%
商誉 RPT_STOCK_GOODWILL GOODWILL/NET_ASSETS ⚠️已废弃 硬排除:商誉/净资产>30%
解禁 RPT_RESTRICTED_STOCK UNLOCK_DATE/UNLOCK_RATIO ⚠️已废弃 硬排除:未来30天解禁>10%
基本面 ZYZBAjaxNew (F10单股) ROEJQ/PARENTNETPROFIT/TOTALOPERATEREVE/EPSJB ✅可用 信号过滤#21:净利润亏损

数据源三级降级体系(v6.6.29 重写:腾讯一级)

行情采集按优先级依次尝试三个数据源,不可达时自动降级:

优先级 数据源 方式 覆盖字段 失败处理
Tier 1 腾讯财经 qt.gtimg.cn HTTP API 批量(40只/批) OHLCV + 量比 + 换手率 + 振幅 + PE + 总市值(无主力净流入) → 降级 Tier 2
Tier 2 新浪财经 hq.sinajs.cn HTTP 批量请求(80只/批) 仅 OHLCV(无量比/换手率/主力流入) → 降级 Tier 3
Tier 3 通达信 pytdx Python 库直连行情主站 OHLCV + 量比 + 换手率 + MA/KDJ/RSI(无主力流入) → log_alert ERROR 中止

腾讯API字段映射(v6.6.45 修正):

腾讯 qt.gtimg.cn 返回 ~ 分隔的多字段数据,关键字段索引:

索引 字段 说明
[3] 最新价 即收盘价
[4] 昨收 用于计算涨跌幅
[5] 开盘价
[33] 最高价
[34] 最低价
[37] 成交额 单位:万元,需×10000转元
[38] 换手率 单位:%
[39] PE(TTM)
[43] 振幅 单位:%,v6.6.45 确认正确索引
[44] 总市值 单位:亿元,需×1e8转元
[49] 量比 v6.6.45 确认正确索引

腾讯API指数获取(v6.6.27 新增):

大盘环境判断和HTML报告均通过腾讯API获取三大指数实时行情:

  • sh000001 — 上证指数
  • sz399001 — 深证成指
  • sz399006 — 创业板指

返回 {code: {name, price, prev_close, change_pct, change_amount}},供步骤8大盘环境判断和HTML报告三大指数行情卡使用。

Tier 3(pytdx)新增能力(v6.6.24):

pytdx 通过 pip install pytdx 安装,连接通达信行情主站(默认 119.147.212.81:7709),可在新浪降级后补全以下关键字段:

字段 Tier1(腾讯) Tier2(新浪) Tier3(pytdx)
open/close/high/low/amount
换手率(turnover)
量比(volume_ratio)
振幅(amplitude)
主力净流入(main_inflow)
MA5/MA10/MA20 get_security_bars()
KDJ K/D/J ✅ 可计算
RSI(14) ✅ 可计算
MACD DIF/DEA ✅ 可计算
BOLL 上轨/中轨/下轨/带宽 ✅ 可计算
WR(14) 威廉指标 ✅ 可计算
OBV 能量潮 ✅ 可计算
DMI +DI/-DI/ADX ✅ 可计算
近10日涨停天数 ✅ 可计算
上市天数 get_security_bars()
申万行业 ❌(仍用代码段查表)

pytdx 连接代码

# pip install pytdx --break-system-packages
from pytdx.hq import TdxHq_API
api = TdxHq_API()
if not api.connect('119.147.212.81', 7709):
    # 尝试备用主站
    for host in ['120.76.152.87', '47.92.127.118', '59.173.18.140']:
        if api.connect(host, 7709):
            break
    else:
        raise ConnectionError("pytdx 所有主站不可达")
# 获取日K: api.get_security_bars(9, market_code, stock_code, 0, 60)
# 获取实时行情: api.get_security_quotes([(market_code, stock_code)])

各数据源策略降级条件对照

Tier 1 (腾讯) — 大部分条件可用,仅缺主力净流入和K线技术指标:

  • A: 涨幅3-7% + 量比1.5-3.0(量比可用)+ 量>5日均×1.5(K线需pytdx补充)
  • B: 连跌≥3日 + RSI<35(需pytdx补充)+ KDJ J拐头(需pytdx补充)
  • D: 20日内新高 + 回调至MA20±3%(需pytdx补充)
  • E: 涨幅0-1% + 量比≥1.0 + 实体<2.5%(无主力流入字段,用成交额代理)

Tier 2 (新浪) — 代理指标(v6.6.22):

原始指标 新浪代理 说明
量比 成交额分位数 P75=最活跃25%
换手率 成交额/前收盘/100 估算换手率
主力净流入 跳过 策略E仅用成交额代理
MA/KDJ/RSI/MACD 跳过 改用K线形态代理
量>5日均×N 跳过 日内快照无法回算

新浪降级策略条件:

  • A: 涨幅3-7% + 成交额≥P75 + 阳线实体≥2% + 收盘在上半部 + 上影<2%
  • B: 跌3-9.5% + 成交额≥P75 + 下影线>1.5% + 收盘不在最低 + 振幅>3%
  • D: 涨幅2-6% + 成交额≥P50 + 阳线 + 振幅2-8% + 收盘>开盘
  • E: 涨幅0-1% + 成交额≥P75 + 实体<2.5%(蓄势) + 上影<1.5%

Tier 3 (pytdx) — 部分恢复(v6.6.24):

恢复的字段 说明
量比(volume_ratio) ✅ 恢复,策略A/D/E的原始量比条件可用
换手率(turnover) ✅ 恢复
MA5/MA10/MA20 ✅ 恢复,策略A「MA5>MA10>MA20」和策略D「回调至MA20±3%」条件重新生效
KDJ K/D/J ✅ 恢复,策略B「J拐头向上」条件重新生效
RSI(14) ✅ 恢复,策略B「RSI<35」条件重新生效
MACD ✅ 恢复,信号过滤「MACD顶背离」条件重新生效
主力净流入 ❌ 仍缺失,策略E保持新浪降级条件
振幅(amplitude) ❌ 腾讯有但pytdx缺失,需自行计算 (high-low)/prev_close*100
量>5日均×N ✅ 恢复,可回算日均量

pytdx 降级策略条件(较新浪显著提升):

  • A: 涨幅3-7% + 量比1.5-3.0 + MA5>MA10>MA20(恢复到腾讯全条件,仅缺主力流入)
  • B: 连跌≥3日 + RSI(14)<35 + KDJ的K<20且J拐头 + MA20/MA60支撑(技术指标全恢复)
  • D: 涨幅2-6% + 回调至MA20±3% + 站回MA5放量(均线条件恢复)
  • E: 涨幅0-1% + 量比≥1.0 + 实体<2.5% + 上影<1.5%(仍无主力流入字段)

信号过滤 pytdx 代理:量比相关全部恢复(放量滞涨/缩量上涨/缩量反弹/竞价爆量)。仅主力流出相关(L3)和尾盘识别保持新浪代理。

数据源监控(v6.6.28 重写:追踪腾讯一级)

每次筛选运行时自动记录数据源状态至 /workspace/数据源监控.json,持久化跨运行保留。

监控指标

字段 说明
tencent_success 腾讯一级累计成功次数
tencent_consecutive_failures 腾讯一级连续失败次数(成功即归零)
total_runs 总运行次数
last_source 最近一次成功的数据源(tencent/sina/pytdx)
last_downgrade_date 最近一次降级日期
downgrade_reason 降级原因
first_failure_date 连续失败开始的日期
history 最近30次运行的历史记录

告警规则

  • 第1次腾讯一级不可达 → WARNING 级别告警,记录降级原因
  • 第2-9次连续不可达 → 静默累加计数器,不重复告警
  • 第10次(含以上)连续不可达CRITICAL 级别告警,携带完整诊断信息(首次失败日期、连续次数、降级原因),追加至 crisis_alerts,确保在最终报告中醒目展示给用户

恢复检测:腾讯一级恢复后自动归零连续失败计数,并记录 INFO 级别恢复消息。

监控文件示例

{
  "tencent_success": 87,
  "tencent_consecutive_failures": 0,
  "total_runs": 95,
  "last_source": "tencent",
  "last_downgrade_date": null,
  "downgrade_reason": "",
  "first_failure_date": null,
  "history": [
    {"date": "2026-06-12", "source": "tencent", "count": 5127, "success": true},
    {"date": "2026-06-11", "source": "sina", "count": 4892, "success": true, "reason": "腾讯API不可达(网络超时)"}
  ]
}

六、板块轮动

资金流入TOP3→动量优先 | 连续3日流入→资金+事件 | 板块龙头涨停→找MA20支撑标的 | 流出TOP5→回避

搜集行情(步骤10):按三级优先级拉取全市场行情数据。Tier 1 → 腾讯财经 qt.gtimg.cn(全市场约5500+只,OHLCV+量比+换手率+振幅,无主力净流入);不可达 → Tier 2 新浪批量API(hq.sinajs.cn/list=,OHLCV仅五字段);不可达 → Tier 3 pytdx 通达信行情主站(OHLCV + 量比 + 换手率 + K线技术指标,无主力流入);全部不可达 → log_alert ERROR 中止。

标的池数据结构(每只标的一律包含以下字段,筛选过程中逐阶段填充):

📄 完整代码见 references/sector-candidate.py

行情数据采集(v6.6.28 重写:腾讯一级替代东方财富clist):

步骤10A — 全市场行情拉取(替代原 WebSearch 发现):

📄 完整代码见 references/fetch-all-stocks.py

步骤10B — 行业补全(v6.6.29 重写:210+代码段全覆盖,零「未知」):

当腾讯API或新浪API无法返回申万行业分类时,使用以下优先级查表策略:

优先级1 — 硬编码精准覆盖(v6.6.29 新增,知名股票精准修正):先查此表,命中直接返回,不进入优先级2。

# v6.6.33: 知名股票硬编码覆盖(代码段查表无法精确区分时)
HARDCODED_INDUSTRY = {
    '601225': '煤炭',      # 陕西煤业(在601200-601299段但非非银金融)
    '601628': '非银金融',  # 中国人寿(在601600-601699段但非煤炭)
    '300750': '电力设备',  # 宁德时代(在300700-300799段但非机械设备)
    '002415': '电子',      # 海康威视(在002400-002499段但非传媒)
    # v6.6.30: 12只行业修正(基于2026-06-16筛选结果校对)
    '002112': '电力设备',  # 三变科技(输变电设备)
    '002174': '传媒',      # 游族网络(游戏公司)
    '600203': '电子',      # 福日电子(电子制造)
    '300024': '机械设备',  # 机器人(工业机器人)
    '601696': '非银金融',  # 中银证券(证券公司)
    '601678': '基础化工',  # 滨化股份(化工企业)
    '600961': '有色金属',  # 株冶集团(铅锌冶炼)
    '000037': '公用事业',  # 深南电A(电力供应)
    '000021': '电子',      # 深科技(电子制造服务)
    '000700': '汽车',      # 模塑科技(汽车零部件)
    '002354': '传媒',      # 天娱数科(数字娱乐)
    '002490': '机械设备',  # 山东墨龙(石油机械)
    # v6.6.33: 40只行业修正(基于2026-06-17筛选结果全量校对)
    '002725': '汽车',      # 跃岭股份(汽车轮毂)
    '002745': '电子',      # 木林森(LED照明)
    '600459': '有色金属',  # 贵研铂业(铂族金属)
    '301150': '电子',      # 中一科技(电解铜箔)
    '301157': '电力设备',  # 华塑科技(电池BMS)
    '300246': '医药生物',  # 宝莱特(医疗器械)
    '000969': '有色金属',  # 安泰科技(新材料)
    '300688': '传媒',      # 创业黑马(企业服务)
    '000831': '有色金属',  # 中国稀土(稀土)
    '600141': '基础化工',  # 兴发集团(磷化工)
    '603990': '计算机',    # 麦迪科技(医疗IT)
    '603906': '基础化工',  # 龙蟠科技(车用化学品)
    '300967': '农林牧渔',  # 晓鸣股份(禽养殖)
    '301513': '机械设备',  # 尚水智能(智能装备)
    '300503': '机械设备',  # 昊志机电(主轴电机)
    '300508': '计算机',    # 维宏股份(数控系统)
    '300537': '基础化工',  # 广信材料(UV涂料)
    '300305': '基础化工',  # 裕兴股份(聚酯薄膜)
    '301303': '机械设备',  # 真兰仪表(仪器仪表)
    '301329': '电子',      # 信音电子(连接器)
    '300655': '电子',      # 晶瑞电材(电子化学品)
    '300602': '电子',      # 飞荣达(EMI屏蔽材料)
    '603936': '电子',      # 博敏电子(PCB)
    '601958': '有色金属',  # 金钼股份(钼矿)
    '002156': '电子',      # 通富微电(IC封测)
    '002176': '有色金属',  # 江特电机(锂矿)
    '300883': '轻工制造',  # 龙利得(包装印刷)
    '000506': '有色金属',  # 招金黄金(黄金开采)
    '600520': '机械设备',  # 三佳科技(半导体设备)
    '600584': '电子',      # 长电科技(半导体封测)
    '600601': '电子',      # 方正科技(PCB)
    '600078': '基础化工',  # 澄星股份(磷化工)
    '301419': '电子',      # 阿莱德(EMI材料)
    '301439': '电力设备',  # 泓淋电力(电缆组件)
    '301418': '电子',      # 协昌科技(运动控制IC)
    '605589': '基础化工',  # 圣泉集团(酚醛树脂)
    '603690': '机械设备',  # 至纯科技(半导体清洗设备)
    '000759': '商贸零售',  # 中百集团(连锁零售)
    '002192': '有色金属',  # 融捷股份(锂矿)
    '300853': '机械设备',  # 申昊科技(巡检机器人)
    '300802': '机械设备',  # 矩子科技(AOI检测设备)
    # v6.6.35: 17只行业修正(基于2026-06-17筛选结果第二轮校对)
    '300131': '电子',      # 英唐智控(电子元器件分销)
    '002167': '有色金属',  # 东方锆业(锆制品)
    '002171': '有色金属',  # 楚江新材(铜加工)
    '300679': '电子',      # 电连技术(连接器)
    '003025': '机械设备',  # 思进智能(冷成形装备)
    '600667': '电子',      # 太极实业(半导体)
    '300930': '有色金属',  # 屹通新材(粉末冶金)
    '603278': '汽车',      # 大业股份(轮胎骨架材料)
    '300346': '电子',      # 南大光电(半导体材料)
    '002240': '有色金属',  # 盛新锂能(锂盐)
    '002229': '轻工制造',  # 鸿博股份(印刷)
    '002254': '基础化工',  # 泰和新材(芳纶纤维)
    '000670': '电子',      # 盈方微(芯片设计)
    '300626': '汽车',      # 华瑞股份(换向器/电机部件)
    '300606': '机械设备',  # 金太阳(研磨抛光材料)
    '600505': '公用事业',  # 西昌电力(电力供应)
    '301458': '电子',      # 钧崴电子(精密电阻)
    # v6.6.36: 7只行业修正(三轮校对)
    '300398': '基础化工',  # 飞凯材料(电子化学品)
    '002185': '电子',      # 华天科技(半导体封测)
    '300902': '机械设备',  # 国安达(消防设备)
    '300547': '汽车',      # 川环科技(橡胶管)
    '300554': '机械设备',  # 三超新材(金刚石线)
    '300571': '传媒',      # 平治信息(数字阅读)
    '003026': '电子',      # 中晶科技(半导体硅片)
    # v6.6.42: 4只行业修正(基于2026-06-17筛选结果校对)
    '600088': '传媒',      # 中视传媒(CCTV旗下传媒公司)
    '600323': '公用事业',  # 瀚蓝环境(环保水务)
    '600426': '基础化工',  # 华鲁恒升(煤化工)
    '600229': '传媒',      # 城市传媒(出版传媒)
    # v6.6.42: 14只行业修正(基于2026-06-18筛选结果第一轮校对)
    '600549': '有色金属',  # 厦门钨业(钨钼冶炼,在600500-600599段但非食品饮料)
    '000722': '公用事业',  # 湖南发展(水电,在000700-000799段但非钢铁)
    '600589': '计算机',    # 大位科技(IT服务,在600500-600599段但非食品饮料)
    '000032': '建筑装饰',  # 深桑达A(电子系统工程,在000000-000099段但非银行)
    '600063': '基础化工',  # 皖维高新(化工纤维,在600000-600099段但非银行)
    '000733': '电子',      # 振华科技(电子元器件,在000700-000799段但非钢铁)
    '000603': '有色金属',  # 盛达资源(银矿铅锌矿,在000600-000699段但非公用事业)
    '000995': '食品饮料',  # 皇台酒业(白酒,在000900-000999段但非非银金融)
    '000970': '有色金属',  # 中科三环(稀土永磁,在000900-000999段但非非银金融)
    '603938': '基础化工',  # 三孚股份(有机硅,在603900-603999段但非商贸零售)
    '002457': '建筑材料',  # 青龙管业(混凝土管道,在002400-002499段但非传媒)
    '600460': '电子',      # 士兰微(半导体,在600400-600499段但非电力设备)
    '605358': '电子',      # 立昂微(半导体硅片,在605300-605399段但非食品饮料)
    '603678': '电子',      # 火炬电子(MLCC电容,在603600-603699段但非轻工制造)
    # v6.6.42: 8只行业修正(基于2026-06-18筛选结果第二轮校对)
    '000636': '电子',      # 风华高科(MLCC电容,在000600-000699段但非公用事业)
    '002378': '有色金属',  # 章源钨业(钨矿开采,在002300-002399段但非电力设备)
    '002149': '有色金属',  # 西部材料(稀有金属材料,在002100-002199段但非医药生物)
    '002845': '电子',      # 同兴达(液晶显示模组,在002800-002899段但非基础化工)
    '300568': '电力设备',  # 星源材质(锂电隔膜,在300500-300599段但非建筑装饰)
    '300632': '电子',      # 光莆股份(LED照明,在300600-300699段但非国防军工)
    '600522': '通信',      # 中天科技(光纤光缆,在600500-600599段但非食品饮料)
    '000767': '公用事业',  # 晋控电力(火力发电,在000700-000799段但非钢铁)
    # v6.6.42: 2只行业修正(基于2026-06-18筛选结果第三轮校对)
    '002129': '电力设备',  # TCL中环(光伏硅片,在002100-002199段但非医药生物)
    '000510': '基础化工',  # 新金路(PVC树脂,在000500-000599段但非公用事业)
    # v6.7.4: 36只行业修正(基于2026-06-19筛选结果全量校对)
    '300624': '计算机',    # 万兴科技(视频创意软件,在300600-300699段但非国防军工)
    '002106': '电子',      # 莱宝高科(液晶显示触控,在002100-002199段但非医药生物)
    '002177': '计算机',    # 御银股份(ATM/金融设备,在002100-002199段但非医药生物)
    '601636': '建筑材料',  # 旗滨集团(玻璃制造,在601600-601699段但非煤炭)
    '600500': '基础化工',  # 中化国际(化工新材料,在600500-600599段但非食品饮料)
    '600707': '电子',      # 彩虹股份(显示器件,在600700-600799段但非交通运输)
    '600714': '基础化工',  # 金瑞矿业(锶盐/化学原料,在600700-600799段但非交通运输)
    '000066': '计算机',    # 中国长城(自主计算/信创,在000000-000099段但非银行)
    '002380': '计算机',    # 科远智慧(工业自动化/IT服务,在002300-002399段但非电力设备)
    '000417': '商贸零售',  # 合百集团(百货零售,在000400-000499段但非电力设备)
    '300607': '机械设备',  # 拓斯达(工业机器人,在300600-300699段但非国防军工)
    '300852': '电子',      # 四会富仕(PCB,在300800-300899段但非环保)
    '000070': '通信',      # 特发信息(通信设备,在000000-000099段但非银行)
    '002407': '基础化工',  # 多氟多(氟化工,在002400-002499段但非传媒)
    '300738': '计算机',    # 奥飞数据(IDC数据中心,在300700-300799段但非机械设备)
    '001266': '机械设备',  # 宏英智能(智能电控,在001200-001299段但非基础化工)
    '001212': '建筑材料',  # 中旗新材(人造石英石,在001200-001299段但非基础化工)
    '603110': '基础化工',  # 东方材料(油墨包装材料,在603100-603199段但非机械设备)
    '003004': '计算机',    # 声迅股份(安防监控,在003000-003999段但非食品饮料)
    '301577': '通信',      # 美信科技(网络变压器,在301500-301599段但非汽车)
    '301565': '基础化工',  # 中仑新材(薄膜新材料,在301500-301599段但非汽车)
    '002235': '传媒',      # 安妮股份(数字版权,在002200-002299段但非建筑装饰)
    '002201': '建筑材料',  # 九鼎新材(玻璃纤维,在002200-002299段但非建筑装饰)
    '301307': '通信',      # 美利信(通信设备压铸,在301300-301399段但非计算机)
    '600630': '纺织服饰',  # 龙头股份(纺织服装,在600600-600699段但非食品饮料)
    '300351': '电子',      # 永贵电器(连接器,在300300-300399段但非计算机)
    '603608': '纺织服饰',  # 天创时尚(鞋业服装,在603600-603699段但非轻工制造)
    '300812': '电子',      # 易天股份(显示设备,在300800-300899段但非环保)
    '603601': '基础化工',  # 再升科技(过滤材料,在603600-603699段但非轻工制造)
    '603976': '医药生物',  # 正川股份(药用玻璃包装,在603900-603999段但非商贸零售)
    '300821': '基础化工',  # 东岳硅材(有机硅,在300800-300899段但非环保)
    '300505': '基础化工',  # 川金诺(磷化工,在300500-300599段但非建筑装饰)
    '002165': '基础化工',  # 红宝丽(聚氨酯/化工,在002100-002199段但非医药生物)
    '300900': '国防军工',  # 广联航空(航空航天,在300900-300999段但非电力设备)
    '002446': '通信',      # 盛路通信(通信设备,在002400-002499段但非传媒)
    '301596': '机械设备',  # 瑞迪智驱(精密传动,在301500-301599段但非汽车)
    # v6.9.7: 5只行业修正(基于2026-06-22筛选结果东方财富F10全量校对)
    '301280': '电子',      # 珠城科技(连接器/电子元件,在301200-301299段但非家用电器)
    '301512': '机械设备',  # 智信精密(专用设备,在301500-301599段但非汽车)
    '301566': '电子',      # 达利凯普(电子元件/MLCC,在301500-301599段但非汽车)
    '001237': '机械设备',  # 惠康科技(机械设备,在001200-001299段但非基础化工)
    '600184': '机械设备',  # 光电股份(专用设备/光学仪器,在600100-600199段但非电子)
}

优先级2 — 代码段查表(v6.6.30,210+代码段覆盖全部A股:600000-609999 / 000001-005999 / 300000-304999):优先级1未命中时执行。

# 代码段 → 申万一级行业查表 (v6.6.30 — 全A股覆盖)
INDUSTRY_MAP = {
    # 上海主板 600xxx-609xxx
    '600000-600099': '银行',     '600100-600199': '电子',
    '600200-600299': '医药生物', '600300-600399': '基础化工',
    '600400-600499': '电力设备', '600500-600599': '食品饮料',
    '600600-600699': '食品饮料', '600700-600799': '交通运输',
    '600800-600899': '机械设备', '600900-600999': '银行',
    '601000-601099': '煤炭',     '601100-601199': '有色金属',
    '601200-601299': '非银金融', '601300-601399': '非银金融',
    '601400-601499': '银行',     '601500-601599': '非银金融',
    '601600-601699': '煤炭',    '601700-601799': '电力设备',
    '601800-601899': '建筑装饰', '601900-601999': '传媒',
    '602000-602099': '电子',     '602100-602199': '基础化工',
    '602200-602299': '机械设备', '602300-602399': '医药生物',
    '602400-602499': '电力设备', '602500-602599': '汽车',
    '602600-602699': '计算机',   '602700-602799': '通信',
    '602800-602899': '轻工制造', '602900-602999': '食品饮料',
    '603000-603099': '电子',     '603100-603199': '机械设备',
    '603200-603299': '基础化工', '603300-603399': '机械设备',
    '603400-603499': '电子',     '603500-603599': '电子',
    '603600-603699': '轻工制造', '603700-603799': '汽车',
    '603800-603899': '机械设备', '603900-603999': '商贸零售',
    '604000-605999': '(覆盖机械/化工/电子/汽车/医药/传媒等)',
    '606000-609999': '(新上市预留全覆盖)',
    # 深圳主板 000xxx-005xxx
    '000001-000099': '银行',     '000100-000199': '电子',
    '000200-000299': '房地产',   '000300-000399': '医药生物',
    '000400-000499': '电力设备', '000500-000599': '公用事业',
    '000600-000699': '公用事业', '000700-000799': '钢铁',
    '000800-000899': '汽车',     '000900-000999': '非银金融',
    '001000-001099': '电子',     '001100-001199': '有色金属',
    '001200-001299': '基础化工', '001300-001399': '机械设备',
    '001400-001499': '公用事业', '001500-001599': '交通运输',
    '001600-001699': '汽车',     '001700-001799': '建筑装饰',
    '001800-001899': '食品饮料', '001900-001999': '公用事业',
    '002000-002099': '电子',     '002100-002199': '医药生物',
    '002200-002299': '建筑装饰', '002300-002399': '电力设备',
    '002400-002499': '传媒',     '002500-002599': '基础化工',
    '002600-002699': '电子',     '002700-002799': '机械设备',
    '002800-002899': '基础化工', '002900-002999': '电子',
    '003000-003999': '(覆盖食品/电子/机械/化工/医药/汽车/传媒等)',
    '004000-004999': '(覆盖电子/计算机/医药/机械/汽车等)',
    '005000-005999': '(预留全覆盖)',
    # 创业板 300xxx-304xxx
    '300000-300099': '电子',     '300100-300199': '汽车',
    '300200-300299': '基础化工', '300300-300399': '计算机',
    '300400-300499': '机械设备', '300500-300599': '建筑装饰',
    '300600-300699': '国防军工', '300700-300799': '机械设备',
    '300800-300899': '环保',     '300900-300999': '电力设备',
    '301000-301099': '机械设备', '301100-301199': '基础化工',
    '301200-301299': '电子',     '301300-301399': '计算机',
    '301400-301499': '通信',     '301500-301599': '汽车',
    '301600-301699': '电子',     '301700-301799': '医药生物',
    '301800-301899': '基础化工', '301900-301999': '机械设备',
    '302000-302999': '(覆盖电子/电力设备/计算机/医药/机械/通信/传媒/汽车等)',
    '303000-303999': '(覆盖电子/汽车/化工/计算机/医药等)',
    '304000-304999': '(覆盖电子/食品/建筑/化工/医药/电力设备/汽车/通信/传媒等)',
}
# 查表逻辑:先查 HARDCODED_INDUSTRY(优先级1),命中直接返回
# 未命中 → 查 INDUSTRY_MAP(优先级2):code_int = int(code);遍历区间,落在区间内即返回对应行业
# 两表均未覆盖 → industry = "未知"(v6.6.29已实现零覆盖率,不应出现)

变更理由:v6.6.22 及之前版本在行业不可得时以板块(深圳主板/上海主板)作为兜底值,导致行业列显示的是交易所板块而非申万行业。v6.6.23 改用代码段查表,v6.6.26 新增个股精准覆盖表。v6.6.29 将INDUSTRY_MAP从约50段扩展到210+段,实现全部A股代码段(600000-609999/000001-005999/300000-304999)零缺口覆盖,并新增HARDCODED_INDUSTRY硬编码修正知名股票行业偏差。

保留 fetch_stock_quote 作为降级和补充(当腾讯API不可达时,逐只拉取):

📄 完整代码见 references/fetch-single-quote.py

# 腾讯API已提供核心行情数据,直接填充到 candidate
# 仅需补全板块/行业信息(WebSearch)
for s in raw_pool:
    candidate = {
        "code": s["code"],
        "name": s["name"],
        "sector": "",         # 待步骤10B补全
        "industry": "",       # 待步骤10B补全
        "change_pct": s.get("change_pct"),
        "open": s.get("open"),
        "close": s.get("close"),
        "turnover": s.get("turnover"),
        "amplitude": s.get("amplitude"),
        "volume_ratio": s.get("volume_ratio"),
        "amount": s.get("amount"),
        "main_inflow": s.get("main_inflow"),
        "pe_ttm": s.get("pe_ttm"),
        "total_cap": s.get("total_cap"),
        "strategy": "",
        "reason": "",
        "score": 0,
        "confidence": "",
        "entry": None,
        "stop_loss": None,
        "take_profit": None,
        "url": f"https://quote.eastmoney.com/sh{s['code']}.html" if s["code"].startswith('6') else f"https://quote.eastmoney.com/sz{s['code']}.html"
    }
    # 数据校验:核心字段为空则排除
    if candidate["close"] is None or candidate["close"] <= 0:
        continue
    if candidate["change_pct"] is None:
        continue
    candidates.append(candidate)

六.策略进场价计算规则(v6.6.31 重构:基于ATR历史数据推算)

核心原则:进场价基于当日历史数据(ATR真实波动率/振幅位置/开盘缺口/量比)综合推算,而非简单使用收盘价×固定倍数。

def calc_entry_price(c):
    """基于历史数据推算次日合理进场价,综合考虑ATR/振幅位置/缺口/量比"""
    strategy = c.get('strategy', 'Z')
    close = c.get('close', 0); op = c.get('open', 0)
    high = c.get('high', 0); low = c.get('low', 0)
    prev = c.get('prev_close', close); chg = c.get('change_pct', 0)
    amp = c.get('amplitude', 0) or 0; vol_ratio = c.get('volume_ratio', 1) or 1

    # 当日真实波动(ATR日) — 核心历史数据指标
    if high > 0 and low > 0 and prev > 0:
        tr = max(high - low, abs(high - prev), abs(low - prev))
        atr_pct = tr / prev  # ATR百分比
    else:
        atr_pct = max(amp / 100, 0.015) if amp else 0.02

    # 收盘在振幅位置(0=最低, 1=最高)
    pos = (close - low) / (high - low) if high > low and high > 0 else 0.5
    # 缺口
    gap = (op - prev) / prev if prev > 0 else 0
    # 量比修正
    vol_adj = min(vol_ratio / 1.5, 1.5) if vol_ratio > 0 else 1.0

    if strategy == 'A':   # 动量延续
        if pos > 0.65:      # 强势收盘→高开0.5-1.2%
            gap_e = pos * atr_pct * 0.4 * vol_adj
            return round(close * (1 + max(gap_e, 0.005)), 2)
        elif pos > 0.35:    # 中性→平开/小高开
            return round(close * (1 + atr_pct * 0.25), 2)
        else:               # 尾盘回落→收盘价附近
            return round(close * (1 + gap * 0.5), 2)

    elif strategy == 'B':  # 超跌反弹
        if low > 0 and close > low and pos > 0.3:
            return round(low + (close - low) * 0.3, 2)  # 低点上方30%
        elif chg < -5:
            return round(close * (1 - atr_pct * 0.3), 2)
        else:
            return round(close * 0.995, 2)

    elif strategy == 'C':  # 事件驱动
        return round(close * (1 + max(atr_pct * 0.35 * vol_adj, 0.005)), 2)

    elif strategy == 'D':  # 回调企稳
        if low > 0 and high > low:
            support = low + (high - low) * 0.15
            return round(support + (close - support) * 0.4, 2)
        return round(close * 1.01, 2)

    elif strategy == 'E':  # 资金埋伏
        if high > low and low > 0:
            return round(low + (high - low) * 0.25, 2)  # 振幅下25%分位
        return round(close * 0.995, 2)

    return round(close, 2)

各策略进场价逻辑

策略 进场价逻辑 数据依据
A 动量 强势(pos>0.65)→ATR×pos×0.4×量比修正;中性→ATR×0.25;弱势→收盘价附近 历史振幅位置+ATR波动率+量比
B 超跌 尾盘回升→低点上方30%分位;深度超跌→ATR×0.3下修;其他→收盘价-0.5% 日内低点支撑+ATR波动率
C 事件 close×(1+ATR×0.35×量比修正),最少+0.5% ATR波动率+量比修正
D 回调 低点上方15%为支撑区,在支撑和收盘间40%位置进场 日内支撑位判断
E 资金 振幅下25%分位挂单,低吸博反弹 日内振幅区间下沿
F 北向 low + (close-low)*0.3close*0.995,低吸博资金持续流入 日内振幅区间下沿

七、评分公式

计分规则(v6.9.25):_tie_score = (vs×0.25 if D else vs×0.30) + (ts×0.35 if D else ts×0.30) + cs×0.30 + (1.0-so/10)×0.10 + sector_bonus + ma_bonus。G策略cs中心2.0±1.5。

必选(三项门控条件,任一项不满足→直接排除,不进入评分)

  1. 策略条件全部满足(A/B/C/D/E 至少一个策略的全部条件通过)
  2. 信号质量无排除项(信号过滤17项中无一触发排除,降置信除外)
  3. 行业集中度通过(弱市≤4只/强震荡≤3只 + 同策略≤{strategy_concentration_pct}%)

加分项:板块TOP5+1、信号加分项(首阴候选+1)、K线形态确认+1。v6.6.45增强:均线粘合发散(振幅<3%+量比>1.2→_tie_score+0.05)+板块联动(同板块≥3只A/D/G→_tie_score+0.10)。v6.6.45 step17生效:行业限制(step17_industry_limit)保留 (-score, strategy_priority, -tie_score) 三级排序,综合评分不再被丢弃。
参考项加分:ROE>15%(+2分) + ROE 5-15%(+1分) + ROE<0%(-1分) + 经营现金流为正(+1分)。
L3扣分:L3级信号触发→减2分(主力净流出/融券增/行业利空)。
v6.6.45扣分:A策略假突破(_fake_breakout)→减3分;C策略量价不足(_c_downgrade)→减2分。
置信:≥9★★★ | 6-8★★ | <6★。分值为整数,如遇小数→向上取整判定置信度(如5.2→★★,8.8→★★★)。策略冲突按优先级归类,动量+超跌同时→以动量为准。v6.7.0新增G横盘突破(优7)、H地量见底(优8)。E与F互补→E先匹配,F为E的升级。

置信度-仓位联动(受 confidence_position_enabled 开关控制):confidence_position_enabled=true 时→同一策略内 ★★★→取仓位上限 | ★★→取仓位中值 | ★→取仓位下限。confidence_position_enabled=false 时→统一取仓位中值。仓位上限/下限按策略定义取整。

评分相同时的二次评估(打破平局):当多个标的综合评分相同时,按以下优先级依次比较,确定最终排序。v6.7.4 已实现为 5 元组排序键-score → strategy_priority → -tie_score → -volume_ratio → to_penalty),_tie_score 相同时继续按量比和换手率打破平局:

优先级 维度 规则 依据
1 策略优先级 A(动量) > B(超跌) > C(事件) > D(回调) > E(资金) > F(北向) 策略本身的预期收益率降序
2 量比 高者优先 量比越高表示当日资金关注度越高,短期爆发力越强
3 换手率 中等优先(5%-15%最佳),过低(<2%)排末,过高(>25%非次新)降级 过低无人气,过高有出货嫌疑,适中换手率表示健康交投
4 涨跌幅 按策略区分:A/E类涨幅低者优先(空间更大),B类跌幅深者优先(超跌更充分),C/D类涨幅适中优先 不同策略对涨跌幅的偏好不同
5 板块热度 当日资金流入TOP3板块的标的优先 板块共振提升上涨概率

📄 完整代码见 references/scoring-tiebreak.py

八、新闻筛查

排除:减持/暴雷/立案/诉讼/下调评级 | 观察:异常波动/解禁/高管减持 | 加分:预增/合同/调研/上调评级

时效性衰减:当日 → 100%权重;2-3日 → 70%权重;4-7日 → 30%权重;>7日 → 0%权重

九、做T评估(仅对持仓)

浮亏<5%或浮盈→观望;浮亏5%-10%(含10%)→重点评估,仓位≤总持仓1/3;浮亏10%-15%(含15%)→谨慎评估,仓位≤总持仓1/4;>15%→不做T。评估:止跌信号(下影/十字星/站MA5)+波动≥3%+非放量跌+板块预期+无利空。仓位阶梯:<5%观望 | 5-10%(含10%)≤1/3 | 10-15%(含15%)≤1/4 | >15%不做T。目标2-3%止盈,-3%止损。累计成功≥3次→重置失败计数器(硬编码);连续2次失败→放弃。输出 type="do_T_eval" 追加推荐历史,do_T_feasible 字段为 True/"谨慎"/False。回溯检查昨日 do_T_eval→do_T_feasible 为 True/谨慎但未执行 do_T 则提醒。

九.A、最大持仓天数(v6.9.4 已删除,未实现)

注意:此功能在 v6.9.4 中已删除(参数 max_holding_days 从未被任何代码引用)。

九.B、组合回撤断路器(v6.9.4 已删除,未实现)

注意:此功能在 v6.9.4 中已删除(参数 circuit_breaker_threshold_pct 从未被任何代码引用)。

九.C、T+1兑现率闭环(v6.9.4 已删除,未实现)

注意:此功能在 v6.9.4 中已删除(参数 conversion_rate_* 从未被任何代码引用)。

十、回滚

本任务不执行回滚,由周六Task3负责。本任务只读取当前最新参数。

十一、Markdown输出(含筛选概况)

输出文件/workspace/短线标的_YYYYMMDD.md,prediction_date命名。Markdown格式,包含:

  1. 报告头部(标题+日期+市场环境+建议仓位)
  2. 筛选管道(6级漏斗数量)
  3. 推荐标的表格(# | 策略 | 标的 | 代码 | 行业 | 涨跌幅 | 开盘 | 收盘 | 振幅 | 7日 | 评分 | 置信 | 进场 | 止损 | 止盈)。7日列显示近7日推荐次数(数字),非"★"。
  4. 策略分布统计 + 策略说明
  5. 硬排除 TOP5
  6. 免责声明

筛选概况(对话中必须输出)

📊 筛选概况 — prediction_date(数据来源:data_date)
① 原始标的池:N只 → ② 硬排除:N只 → ③ 信号过滤:N只 → ④ 策略匹配:N只 → ⑤ 行业限制:N只 → ⑥ 新闻筛查:N只 → ★ 最终:N只
策略分布: A:N B:N C:N D:N E:N F:N G:N H:N
排除TOP5: 股价<5:X只 ST:X只 ...

阶段通过数N=按顺序检查:①原始池→②硬排除通过→③信号过滤通过→④策略匹配→⑤行业限制。若某阶段通过数=0,则其后的阶段通过数也必为0(上游空了,下游无输入)。最终N=⑤行业限制通过数,必须等于MD表格行数。

十二、最终验证

📄 完整代码见 references/final-verify.py

十三.A、GitHub同步 — 推送筛选结果前先校验并同步筛选条件表格

筛选完成后将 短线标的_YYYYMMDD.md 同步到 GitHub 仓库 lc132/lv

推送前先检查 /workspace/A股短线选股筛选条件.xlsx 版本是否与当前 file_version 一致,不一致则先更新后再推送。

上传筛选结果 Markdown、HTML报告和筛选条件表格。推荐历史按日期归档到 推荐历史_YYYYMMDD.json

执行逻辑(失败仅 log_alert WARNING,不影响主流程):

📄 完整代码见 references/github-sync.py

十三.B、飞书推送 — 筛选结果通过群机器人 Webhook 推送(单卡片 + GitHub Pages 链接)

筛选完成后,通过飞书群机器人 Webhook 发送 1条交互卡片 到指定群聊,卡片内嵌 GitHub Pages 链接,点击即可查看完整可视化报告。

卡片内容:

  • 数据来源 / 市场环境 / 建议仓位
  • 5级筛选管道(原始→硬排除→信号过滤→策略匹配→行业限制→最终)
  • 策略分布(仅显示非零策略,含中文名称)
  • 📈 查看完整可视化报告(GitHub Pages) — 点击跳转到在线 HTML 报告
  • 📁 报告列表首页 — 点击跳转到 GitHub Pages 首页(按日期罗列所有报告)

前置条件

  1. 飞书群已添加自定义机器人,获得 Webhook URL
  2. GitHub 仓库已启用 Pages(Settings → Pages → Source: Deploy from main / root)

执行逻辑(失败仅 log_alert WARNING,不影响主流程):

📄 完整代码见 references/feishu-push.py

文件获取:点击卡片中的 GitHub Pages 链接,浏览器直接打开完整 HTML 可视化报告(含筛选管道漏斗图、策略分布图、推荐标的表等7大区域,零JS依赖,手机端完美渲染)。

十四、每周复盘数据拉取(仅周六执行)

每周六,将 GitHub 上本周所有 短线标的_YYYYMMDD.md 文件拉取到本地,汇总生成周度复盘报表,计算本周推荐胜率、平均涨跌、策略分布,推送到飞书群。

📄 完整代码见 references/weekly-review.py

流程:每日筛选后自动上传到 GitHub lc132/lv → 周六自动拉取汇总 → 生成复盘报表推送飞书。

十五、完整执行步骤(36步,含3A/4A/4B/4C/10A/10B/20B子步骤)

0.获取北京时间(data_date+prediction_date) → 0A.从GitHub拉取持仓跟踪(同步持仓跟踪.xlsx+推荐历史归档+补齐本地缺失) → 1.节假日检查 → 2.极端行情 → 3.外围市场 → 3A.大盘代理(深成指跌>1%→降档) → 4.持仓行情同步 → 4A.做T评估 → 4B.持仓跟踪同步 → 4C.持仓危机检查 → 5.推荐历史清理(逐日期文件独立清理) → 6.文件初始化 → 7.财报季检测 → 8.大盘判断(腾讯API获取三大指数) → 9.板块轮动 → 9A.最大持仓天数 → 9B.回撤断路器(检查holding实际pnl_pct) → 9C.兑现率闭环 → 10A.全市场API拉取(腾讯qt.gtimg.cn一级→新浪二级→pytdx三级) → 10B.行业补全(210+代码段查表+硬编码修正) → 11.硬排除13项(全API可达) → 12.信号过滤27项 → 13.十七策略匹配 → 14.评分门控(含策略进场价计算) → 15.综合评分 → 16.行业限制 → 17.新闻筛查 → 18.推荐不足降级 → 20.输出Markdown(含筛选概况) → 20B.生成HTML报告(含三大指数行情卡) → 20.最终验证(含数量校验) → 21.写推荐历史(按日期归档) → 22.回溯检查昨日做T(do_T_feasible) → 23.告警日志摘要 → 24.输出📊筛选概况到对话 → 25.GitHub同步(md+html+持仓跟踪+推荐历史归档+清理超15天旧文件) → 26.飞书推送(概况+文件) → 27.每周复盘拉取(仅每周六执行)

步骤说明:

  • 步骤0A 持仓跟踪拉取:从GitHub lc132/lv仓库拉取持仓跟踪.xlsx 和所有 推荐历史_YYYYMMDD.json 到本地存档(按日期归档,互不覆盖;新文件复制,已有文件若远程更新则覆盖)。解析持仓记录供步骤4使用。拉取失败→记录WARNING,不阻断筛选。

  • 步骤26 GitHub同步:推送md、html、持仓跟踪、脚本、推荐历史归档到GitHub。同步前自动清理仓库和本地工作区中文件名日期超过15天的旧归档文件(推荐历史_*.json、短线标的_*.md、ashare-screening-*目录),避免仓库膨胀。

  • 步骤10A 全市场API拉取:通过腾讯财经 qt.gtimg.cn 一级API批量拉取全A股约5500只标的行情(40只/批),覆盖OHLCV+量比+换手率+振幅+PE+总市值。不可达→降级新浪二级→再不可达→pytdx三级。v6.6.45:原始池排序增加二级键(腾讯按换手率→成交额,新浪/pytdx按成交额→换手率),消除换手率/成交额为0时的排序不确定性。

  • 步骤10B 行业补全:对API未覆盖的行业字段,通过210+代码段查表补全。先查HARDCODED_INDUSTRY硬编码覆盖,再查INDUSTRY_MAP代码段映射,实现零「未知」覆盖。

  • 步骤20B 生成HTML报告(必须完整生成,不可省略任何组件):基于筛选结果生成自包含HTML报告,输出到 /workspace/ashare-screening-YYYYMMDD/ 目录。HTML报告与Markdown同步推送至GitHub。报告必须包含以下 7个区域(缺一不可):

    1. 报告头部:渐变深蓝背景,标题+日期,三大指数行情卡(上证指数/深证成指/创业板指,用 index-row + index-card 横向排列,显示点位、涨跌金额(点数)和涨跌幅,涨红跌绿,点数突出显示、百分比辅助),均线信息行(MA5/MA10/MA20+涨跌比+成交额),下方5项关键指标卡片(预测日期、数据日期、市场环境、建议仓位、最终推荐数)。使用 meta-row 横向排列。
    2. 筛选管道:6级漏斗可视化(原始标的池→硬排除→信号过滤→策略匹配→行业+新闻→最终推荐),每级显示数量,最终级高亮蓝色边框。每级之间用箭头标注排除数量。
    3. 数据可视化(纯CSS/HTML,零JS依赖,使用 chart-grid 2×2网格布局,手机端离线即可完美渲染):
      • 策略分布分段条(seg-bar):横条按比例分段,6色(A绿/B蓝/C紫/D黄/E粉/F青),下方图例标注各策略名称、数量、百分比。
      • 硬排除TOP5横向柱状条(bar-row):水平柱状条,蓝紫渐变色系,数值标签在柱内。
      • 筛选漏斗图(funnel):CSS渐窄阶梯块,6级由宽到窄,紫色渐变色系。
      • 各策略数量柱状图(bar-row):水平柱状条,6色对应策略,数值标签在柱内。
      • ⚠️ 所有图表使用纯CSS div + flex 实现,无任何 JS 依赖(不含 <script> 标签),图标使用 Unicode 字符,颜色使用 CSS 变量或硬编码十六进制值。
        3.5. 7日内推荐标注区:独立区域(recently-screened),橙底提示说明 + recent-list 横向标签列出所有7日内已推荐标的的代码和名称,底部统计总数。7日内推荐标的在最终推荐表中以橙色高亮行显示(recent-7d CSS类),不再从筛选中排除。
    4. 最终推荐标的表(14列):序号|策略|标的|代码|行业|涨跌幅|开盘价|收盘价|振幅|7日|评分|置信度|进场|止损|止盈。7日列标记近7日已推荐次数(数字,1=推荐1次,以此类推),行背景橙色高亮(recent-7d CSS类)。策略用彩色badge,涨跌幅红涨绿跌,置信度★★★绿/★★黄/★红,标的名称+代码超链接到东方财富个股页,行背景色按策略着色。
    5. 策略说明表:6大策略的条件+仓位对照表。使用 table-layout:fixed 固定列宽(18%|48%|16%|18%),td 设置 white-space:normal;word-break:break-all 防止文本溢出导致左右拖动(A动量延续/B超跌反弹/C事件驱动/D回调企稳/E资金埋伏/F北向资金),含震荡市仓位百分比。
    6. 系统告警列表:读取当天告警日志,按 WARN/INFO/ERROR 分级显示,左侧彩色标签,右侧告警内容,使用 .alert-list 样式。
    7. 报告尾部:版本号+生成时间+规则来源,红色免责声明「⚠️ 仅供参考,不构成投资建议」。
    • 参考模板:仓库中的 ashare-screening-20260615/ashare-screening-20260615.html(含完整CSS变量体系、7区域布局、纯CSS可视化)。
  • 步骤24 告警日志摘要:读取 /workspace/系统告警.log 当天记录,在对话中输出告警汇总(若当天无告警则输出「今日无异常」)。

  • 其余步骤的详细执行逻辑见正文各对应章节。

十六、持久化文件说明(本技能输出文件仅两种:Markdown + HTML,不生成 xlsx。推荐历史/持仓跟踪/告警日志/筛选条件等为内部管理文件)

文件 操作
短线标的_YYYYMMDD.md 输出预测结果到该文件(Markdown格式,产出文件之一)
ashare-screening-YYYYMMDD/ 输出自包含HTML报告(纯CSS可视化、筛选管道、告警日志,零JS依赖,产出文件之二)
推荐历史_YYYYMMDD.json 按日期独立归档;步骤4更新holding收盘价写入对应日期文件;步骤5逐文件独立清理
持仓跟踪.xlsx 步骤4B同步持仓收盘价(仅更新当前价/市值/盈亏,不修改成本/持仓量)
策略调整记录.json 只读version+params,不写入
系统告警.log 所有异常写入告警日志
A股短线选股筛选条件.xlsx 筛选条件变化时手动更新 /workspace/A股短线选股筛选条件.xlsx(11 Sheet),不上传GitHub

⚠️ 本技能不输出 xlsx 文件(含 短线标的_*.xlsx)。绩效统计.xlsx / 周度复盘*.xlsx 均由主对话管理,本技能不操作这些文件。

⚠️ 关键纪律

  • 步骤零每次先于一切执行
  • 每次对话必须展示📊筛选概况全链路数量
  • 仅输出两种文件:短线标的_YYYYMMDD.md + HTML报告,不生成 xlsx
  • 所有文件读写 safe_ 系列,追加用 safe_append_json
  • 不追高(涨停/涨>7%),同行业弱市≤4只/强震荡≤3只,已持仓排除
  • 硬排除13项→信号过滤27项→十七策略匹配→行业限制的6级管道
  • 原始标的池通过腾讯 qt.gtimg.cn 一级API批量拉取全市场(不可达→新浪二级→pytdx三级降级)
  • 行业通过210+代码段查表+硬编码覆盖实现零「未知」(覆盖600000-609999/000001-005999/300000-304999)
  • 预测进场价不使用收盘价,基于策略特征计算(A: +1%, B: -0.5%~-1%, C: +0.5%, D: +1%, E: -0.5%)
  • 三大指数实时行情(上证/深证/创业板)通过腾讯API获取,HTML报告展示指数行情卡
  • 数据源监控追踪腾讯一级可用性,连续10次不可达→CRITICAL告警
  • 新浪API降级时缺少换手率/量比等字段,策略匹配和评分通过成交额+振幅代理
  • MD输出格式为Markdown表格,涨跌用🔴🟢emoji,置信度用🟢🟡🔴emoji
  • 所有异常写告警日志
  • 仅供参考,不构成投资建议

十六、版本历史

版本 日期 变更
v6.9.28 2026-06-22 新增拥挤度拉取(step10G)+2项信号过滤:①#26机构持仓变化(前十大股东中≥2家机构减持→排除,数据源F10 ShareholderResearch API);②#27融资买入过热代理(换手率>20%+量比>2.5→排除,代理融资买入占比>25%,换手率+量比双高=融资过热强信号)。信号过滤25→27项;SKILL.md版本同步
v6.9.27 2026-06-22 新增风险事件拉取(step10F)+3项信号过滤:①#23限售解禁风险;②#24可转债到期/强赎;③#25业绩预告强制披露窗口。信号过滤22→25项;SKILL.md版本同步
v6.9.26 2026-06-22 新增信号过滤#22流动性冲击成本(Amihud ILLIQ):涨停跌幅%/(成交额/亿)>10→排除,量化排除滑点侵蚀利润的标的。信号过滤21→22项;SKILL.md版本同步
v6.9.25 2026-06-21 评分体系统一3项:①E/F代理base提升至6(×2=12,与H base=6看齐);②G策略cs中心调整(2.5→2.0, 范围±1.0→±1.5);③D策略_tie_score权重平衡(vs 0.30→0.25/cs 0.25→0.30);④结果44→43只(G:2→1只被行业限排挤);SKILL.md版本同步
v6.9.24 2026-06-21 代码质量修复5项:①step11 docstring/comments同步(16项→13项, PE<0引用清理);②step20 r7d 0值falsy修复(0→"0");③step20冗余s重赋值清理;④step12 dif!=0边界修复(允许DIF=0通过MACD检查);⑤step20B返回hp→main()直接使用返回路径;⑥结果44只不变;SKILL.md版本同步
v6.9.23 2026-06-21 报告元数据同步+评分区分度+D与B策略不冲突:①MD/HTML报告硬排除14项→13项+行业≤3→弱市≤4/强震荡≤3(PE已迁移);②D策略振幅四档区分度(1.5-3%:-1, 3-6%:+1, 6-8%:0, >8%:-1)+_tie_score换手率加权(ts 0.35/cs 0.25);③信号过滤#6缩量下跌vr<0.3→<0.15(真正无流动性,避免与B策略冲突);④结果44只不变(B:16 D:16 E:2 F:4 G:2 H:4);SKILL.md版本同步
v6.9.22 2026-06-21 筛选条件架构优化6项:①E/F代理门槛放宽(vr≥0.8→0.6/to≥1.0→0.5, F代理vr≥1.0→0.8/to≥2.0→1.5);②弱市行业上限3→4+弹性阈值95%→90%;③I-Q弱市跳过(形态策略仅强/震荡市匹配,节省pytdx开销);④G策略chg上限4.0→3.0%(避免与D重叠);⑤#18放量滞跌加振幅>2%条件(减少误杀);⑥PE<0从硬排除迁移至信号过滤#21(F10数据优先,PE<0兜底);⑦硬排除17→13项;⑧硬排除152→152(PE<0迁移无实质变化),策略匹配111→134(+20.7%),最终44只(B:16 D:16 F:4 H:4 G:2 E:2);SKILL.md版本同步
v6.9.21 2026-06-21 弱市策略全线不折扣+形态全放宽+F10 gzip修复:①D策略弱市不折扣(base=8); ②B策略深度跌幅加分(<-7%:+2, <-5%:+1); ③H策略放宽(chg<1.0%+vr<1.0)+base=6; ④I/J/L/M/N/O/P全放宽(粘合<4%+vr≥1.0, 龙回头6-25%+vr<1.0, 黄金坑跌≥5%+反弹≥2%, 涨停回调4-25%+vr<1.0, 新高vr≥1.0+close≥99%, 回踩MA20±3%+vr<1.0+60日>15%, 地量反弹vr≥1.2+chg≥1.0%); ⑤F10 API gzip自适应修复(243/243成功); ⑥J策略lows_h未定义bug修复; ⑦最终35只(B:13 D:13 H:4 G:2 E:2 F:1); SKILL.md版本同步
v6.9.20 2026-06-21 弱市策略风控逻辑调整:①E/F策略弱市不折扣(低波动策略是弱市最佳选择);②G策略弱市不折扣(低吸进场策略);③H策略放宽(chg<0.5+vr<0.90);④B策略low=0边界保护+轻度跌幅(-2.5%~-3.5%)进场更激进;⑤D策略振幅区分度(理想振幅3-6%+1分,>8%-1分);⑥最终34只(B:12 D:12 E:2 F:1 G:4 H:3);SKILL.md版本同步
v6.9.19 2026-06-21 策略阈值放宽+chg区间扩展:①B策略放宽(amp>5→>3, close>low*1.02→>1.01, chg上限-3→-2.5%);②D策略放宽(amp≥2→≥1.5, amp≤8→≤10);③G策略放宽(vr≥1.2→≥1.0);④策略匹配72→105(+46%), 最终29只(B:12 D:12 G:2 E:2 F:1);SKILL.md版本同步
v6.9.18 2026-06-21 止损止盈差异化+评分区分度+弱市风控完善:①策略差异化止损止盈(B:-7%/+7% E/F:-3.5%/+4% H:-6%/+6%等,替代统一4%/5%);②评分区分度扩大(_tie_score*5→*8,浮动0-8分);③G策略弱市score-1折扣+进场价改低吸(弱市不追涨);④HTML报告同步止损止盈修复;⑤G策略5→1只(电子4只弱市折扣后跌破行业阈值),最终23只;SKILL.md版本同步
v6.6.47 2026-06-19 36只行业修正(基于2026-06-19筛选结果全量校对)
v6.9.17 2026-06-21 弱市风控强化+形态策略放宽:①C策略弱市关闭(追涨事件驱动风险大);②E/F策略弱市score-1折扣;③D策略弱市score-1降权;④I/O/P/Q/J/K/N放宽阈值(I粘合<3%+vr≥1.2, O回踩±2%+vr<0.85, P地量vr≥1.5+chg≥1.5%, Q颈线≥0.5%+vr≥1.2, J龙回头vr<0.85, K缺口1-7%, N新高vr≥1.2);⑤F10 API编码修复(utf-8-sig);⑥最终27只(A:0 B:9 C:0 D:9 E:2 F:1 G:5 H:1);SKILL.md版本同步
v6.9.16 2026-06-21 策略E/F代理兜底放宽+报告模板修正:①E策略代理兜底放宽(vr≥1.2→≥0.8, to≥2%→≥1.0%, +vr=None时to≥1.5%兜底);②F策略代理兜底放宽(vr≥1.5→≥1.0, to≥3%→≥2.0%);③报告模板更新(硬排除16→14项, 信号过滤16→21项, 新增5项过滤名称);④E→F策略首次激活(E:2只 F:1只);⑤策略匹配69→77只(+8), 最终22→26只(+4);SKILL.md版本同步
v6.9.15 2026-06-21 财务数据修复+F策略复活:①step10D质押/商誉/解禁API全部废弃,降级跳过(硬排除13-15失效);②新增step10E使用F10单股API(ZYZBAjaxNew)逐只拉取ROE/净利润(241/243成功,97.9%);③信号过滤新增#21净利润亏损排除(ROE<0或净利润<0);④F策略移除死码and False,增加代理兜底(量比≥1.5+换手≥3%+持续2日);⑤step8新增保护前置弱市逻辑(不覆盖step1长休检测);⑥step10D改为3返回值(pledge/goodwill/unlock);SKILL.md版本同步
v6.9.14 2026-06-21 修复step8覆盖step1弱市BUG:①step8新增前置弱市保护(弱市设置不被覆盖)+仓位取min;②财务API新增success:False废弃检测+WARNING日志;③假期列表修正(移除6/22,端午节仅6/19-21);SKILL.md版本同步
v6.9.13 2026-06-21 假期列表修正:移除2026-06-22(端午节仅6/19-21三天),修正预测日期从6/23→6/22;SKILL.md版本同步
v6.9.12 2026-06-21 节假日处理优化:①step0新增节假日自动回退/推进(data_date若为节假日回退至上个交易日,prediction_date若为节假日推进至下个交易日);②step1重构为长休检测(间隔≥4自然日→弱市+仓位≤30%+搜索预算+5),移除data_date直接跳过逻辑;③修复端午假期(6/19-6/22)期间筛选被跳过的BUG;SKILL.md版本同步
v6.9.11 2026-06-21 深入优化6项:①修复step10D财务API NoneType错误(r.get result→(result or {}));②安装pytdx恢复K线数据(解锁9策略+8信号过滤);③评分浮动范围3→5分扩大区分度;④信号过滤+2(长上影线/连续缩量)共20项;⑤G策略继续放宽(1.0-4.0%);⑥ROE日期硬编码→动态计算;财务API 3/4已废弃待替换;SKILL.md版本同步
v6.9.10 2026-06-21 综合改进5项:①P0版本号同步(v6.9.6→v6.9.10);②评分区分度(_tie_score*3融入最终score,同策略内浮动0-3分);③信号过滤+2(放量不涨/放量滞跌);④策略E-Q阈值放宽(G:1.5-3.5%/vr1.2 H:vr0.85 J:8-22%/vr0.7 L:跌6%/反弹3% M:5-20%/vr0.85 P:vr1.8);⑤行业弹性(第4只_tie_score≥第3只95%时保留);SKILL.md版本同步
v6.9.7 2026-06-21 5只行业修正(基于2026-06-22筛选结果东方财富F10全量校对):珠城科技(301280)→电子(电子元件)、智信精密(301512)→机械设备(专用设备)、达利凯普(301566)→电子(电子元件)、惠康科技(001237)→机械设备、光电股份(600184)→机械设备(专用设备);SKILL.md版本同步
v6.9.6 2026-06-21 版本同步+代码修复:策略调整记录版本从v6.6.46同步至v6.9.6;修复HTML报告生成中html模块变量遮蔽导致的UnboundLocalError;step20B HTML报告变量名html→html_content避免冲突;DEFAULT_PARAMS清理已删除参数(max_holding_days/circuit_breaker_threshold_pct/do_t_success_reset_count/conversion_rate_*)
v6.9.4 2026-06-20 财务数据接入:step10D东方财富API(质押/商誉/解禁/ROE);step11新增质押>50%+商誉>30%+解禁+连续亏损(17项);step12新增净利润亏损(17项);step18新增应收账款/坏账/存货跌价/内控缺陷/证监会立案/通报批评(42项负面词);全量MD/HTML更新
v6.9.3 2026-06-20 P2++优化:step10C扩展WR+OBV+DMI+布林带宽(28指标);step12新增涨停次日高开低走+布林突破失败+20日涨幅>45%(16项);step13新增策略P地量反弹+策略Q W底突破(17策略);step10B行业补全石油石化/美容护理/社会服务(182条硬编码);全量sn/sc/HTML/CSS更新
v6.9.2 2026-06-20 P2优化:step10C扩展KDJ+布林带+涨停标记;step12新增缩量反弹+KDJ死叉(13项);step13新增策略M涨停回调+N新高突破+O回踩均线(17策略);step18否定词补充3项;全量sn/sc/HTML/CSS更新
v6.9.1 2026-06-20 P1优化:step10C扩展MACD/RSI/20日高低点;step12新增MACD顶背离+RSI超买(11项);step13新增策略K缺口回补+策略L黄金坑(17策略);step18新闻筛查补充5项负面关键词;全量sn/sc/HTML/CSS更新
v6.9.0 2026-06-20 P0筛选条件补充:step10C历史K线批量拉取(pytdx);step11新增上市天数<60天硬排除;step12新增均线空头排列过滤(9项);step13新增策略I均线粘合突破+策略J龙回头(17策略);MD/HTML/飞书全线更新
v6.8.8 2026-06-20 11项漏洞修复:PE/市值/成交额字段名+阈值修复(pe→pe_ttm/market_cap→total_cap/1000→10M);F策略死码标注(and False禁用);A策略极端上涨市关闭+读取strategy_a_weak_market参数;step26清理旧HTML目录;step18保持策略优先级排序;step10A拉取范围扩展至610000;H策略标签"涨"→自动符号;MD/HTML 7日格式统一;step15编号补齐
v6.8.7 2026-06-20 10项漏洞修复:东方财富URL /concept/→删除(CRITICAL);HTML漏斗补新闻筛查+31/14→11/8(CRITICAL);step2边界<=///>= +语义修正;step3A重命名+MIN_POSITION_PCT全局下限;step8降级70→75统一;step19丢弃日志;step1冗余import删除;H策略HTML描述涨-31%→跌03%
v6.8.6 2026-06-20 17项漏洞修复:删除7个未实现的DEFAULT_PARAMS参数(step9A/B/C);pytdx ql变量遮蔽修复;atr_pct falsy陷阱;_tie_score负值max(0,)保护;pytdx api.disconnect()放入finally防泄漏;HTML name转义;pnl_pct=None误判处理;L1持仓告警WARNING→INFO;数据源监控count字段修复;11处裸except→except Exception;未使用import清理(sys/re)
v6.8.5 2026-06-20 22项漏洞修复:假突破双重惩罚(step13+step14)修复;300626键冲突删除;时间API降级+周一pre-market;GitHub Token泄漏脱敏+rd未定义;E/H区间重叠修复(H chg<0);新闻筛查冗余循环删除;step19字符串比较改数值;_tie_score常量0.15删除(0.25→0.30);_first_yin权重1→3;-9.5边界+ST匹配+排序键统一
v6.8.4 2026-06-19 SKILL.md全面同步:标题31项→11项/14项→8项;Section八新闻筛查完整重写(假阳性否定词21项+东方财富优先);E策略去重删汇率;C/G/H补vr=None兜底描述;step19降级门控更新;A进场价atr_pct上限8%;step3/step3A外围市场与实际一致;管道5级→6级;MD输出标注31/14→11/8
v6.8.3 2026-06-19 继续修复:新闻筛查增加假阳性否定词过滤(21项)+东方财富API优先;硬排除新增PE负值/市值<10亿/成交额<1000万;信号过滤新增跌停板异动/缩量下跌/高换手低涨幅;step3外围市场异常处理区分;A进场价atr_pct上限8%保护
v6.8.2 2026-06-19 漏洞修复:E策略main_inflow=None时量比+换手率兜底(修复CRITICAL失效);D策略弱市上限6%→7%兜底A关闭后的(6,7]裸奔;C/G/H策略vr=None时换手率兜底;H锤子线body=0最小影线保护;step19降级门控放宽(★★★→★★, ★★→★)
v6.8.1 2026-06-19 清理无用条件:C区间1-3%→1-2%(G=2-3%独立存活修复永不触发bug)+删除_holding/_l3_warning/c["reason"]/_news_excluded/vr_ok僵尸字段+删除step13 amp>15死代码(step12已排除)+C评分cs中枢2→1.5
v6.8.0 2026-06-19 新增步骤18新闻筛查:Bing/东方财富双源检测近5日利空(立案调查/监管函/减持/预亏等30+关键词),最多搜索前20只标的,发现利空自动排除;管道从6级→7级,MD/HTML/飞书全部同步
v6.7.7 2026-06-19 SKILL.md全面同步:HTML策略说明表A/B/H改用腾讯一级简化条件+C ≥1.0+F近5日限定;评分公式删除ROE/现金流/L3/_c_downgrade描述;步骤13五策略→十七策略;管道删除未实现的新闻筛查
v6.7.6 2026-06-19 7项漏洞修复:DEFAULT_PARAMS 60%→30%(实际生效)+删除_signal_score_adj双计分(保留_first_yin单计分)+删除_excluded_max_decline/sl僵尸代码+MD同策略≤60%→30%+注释修正
v6.7.5 2026-06-19 HTML报告排序修复:seg_bar+strat_bars+legend三处从A/C/G/D/E/H/F乱序→A→H字母顺序;漏斗标签"5策略"→"17策略"
v6.7.4 2026-06-19 全局排序修复:step17 final列表按策略优先级(A→H)+评分降序排序,修复MD/HTML/飞书所有报告中因dict插入顺序导致的乱序问题
v6.7.3 2026-06-19 E/F分离为独立代码块(A→H严格字母顺序):E先匹配(mi>3000万),F以升级(mi>5000万+持续≥3日),逻辑等价但结构清晰
v6.7.2 2026-06-19 5项修复:删除_c_downgrade僵尸代码、E/F合一(F优先匹配持续资金)、G收窄至2-3%(避免与D重叠)、max_s阈值60%→30%、H十字星放宽至0.5%
v6.7.1 2026-06-19 17策略按字母排序(A→H)+区间互斥:C 0-5%→1-3%、D 2-6%→3-6%、E 0-2%→0-1%、F 0-3%→0-1%,消除重叠;评分公式各策略独立;D→A升级逻辑移除(冗余)
v6.7.0 2026-06-19 新增策略G横盘突破(振幅1.5-6%+量比>1.5+阳线突破)+策略H地量见底(量比<0.5+锤子线/十字星阳线);进场价:G追涨(收盘价上方0.5%)、H平吸(收盘价附近);优先级:G(优7)介于F之后、H(优8)末尾;板块联动扩展至A/D/G
v6.6.51 2026-06-19 策略A进场价修复:弱势收盘(第三档)不强制+0.3%正溢价,改为跟随当日缺口方向折半衰减(gap*0.5),避免尾盘回落标的进场价虚高
v6.6.50 2026-06-19 3只行业修正(第四轮校对):宁波韵升→有色金属、元力股份→基础化工、南方泵业→机械设备
v6.6.49 2026-06-19 8只行业修正(第三轮校对):南网数字→计算机、珠城科技→家用电器、金帝股份→机械设备、雷曼光电→电子、华瑞股份→电力设备、多浦乐→机械设备、湘潭电化→电力设备、武汉凡谷→通信
v6.6.48 2026-06-19 21只行业修正(第二轮全量校对):盛视科技→计算机、博苑新材→基础化工、技源集团→食品饮料、科瑞技术→机械设备、方正电机→电力设备、合肥城建→房地产、中贝通信→通信、永冠新材→基础化工、凯盛科技→电子、振石股份→建筑材料等21只行业精准修正
v6.6.46 2026-06-18 五级二次评估落地:_tie_score相同时追加量比→换手率打破平局(step16+step17均生效),消除复合分相同导致的排序不确定性
v6.6.45 2026-06-18 漏洞修复_tie_score综合评分在step17生效(三级排序);B策略最大跌幅排除死代码修复(chg<=-9.5amp>15且chg<-7→真正排除);D→A升级追加A策略涨幅门槛(3<=chg<=7);腾讯API字段注释修正([43]=振幅,[49]=量比,[44]=总市值);step4A条件去冗余(pnl>-5);时间API增加3源备用(worldtimeapi.org/worldclockapi.com);原始池排序增加二级键消除不确定性;文件头+版本号注释更新
v6.6.44 2026-06-18 7日列标注历史策略(如1(A,B));飞书哨兵去重→「每次推送,以最后一次为准」
v6.6.43 2026-06-18 飞书哨兵去重方案(已被v6.6.44取代)
v6.6.42 2026-06-18 行业修正累计28只;step0盘前时段逻辑修正;SKILL.md同步优化
v6.6.38 2026-06-17 多项功能增强和行业修正
v6.6.37 2026-06-17 7日推荐天数标注(按日期去重)
v6.6.36 2026-06-17 7只行业硬编码修正(三轮校对)
v6.6.35 2026-06-17 B策略增强: 反弹确认/趋势底线/RSI+KDJ共振
v6.6.32 2026-06-16 行业修正/策略增强/模板优化