我用 LLM 扒光了 A 股游资的底裤

发布时间:2026/7/6 1:19:34
我用 LLM 扒光了 A 股游资的底裤 去年夏天搞完 AFAC2025 的思维链压缩之后,我以为能消停一阵。结果今年 AFAC2026 的赛题一出来,我点进去看了一眼,当场就坐不住了。赛题一的名字叫「市场参与者交易行为识别与资金流向分析」。说人话就是,给你 A 股的 Level-2 逐笔数据,你要判断出这只股票今天是游资在搞事、量化在套利、还是散户在跟风,以及他们到底在买还是在卖。这个东西太有意思了。Level-2 订单簿数据流经神经网络,最终识别出游资、量化、散户三类资金一、问题到底有多难先说背景。A 股市场里有几类主要参与者,游资、量化私募、散户,当然还有公募和国家队,但赛题只要求区分前三类。这事难在哪?信息碎片化。你单看一个大单净买量指标,根本还原不了机构的真实意图。游资可能拆单隐藏动作,量化可能用 TWAP/VWAP 把大单切碎成几百笔小单,散户的跟风盘又混在里面搅局。解读滞后。大多数资金流向指标是基于日线统计的,盘中动态变化根本捕捉不到。等你看到信号明确的时候,股价已经跑出去八个点了。赛题要求每天对 100 只股票提交两个 CSV 文件。一个是资金识别,要判断每只股票当天主导的资金类型(游资/量化/散户)和意图(买入/卖出/T0 交易)。另一个是交易模式识别,要把当天的交易行为聚成 10 类模式,比如大单吸筹、尾盘突袭、对倒拉升之类的。评分规则是这样的,TotalScore = PatternScore × 0.4 + CapitalScore × 0.6 \text{Total Score} = \text{Pattern Score} \times 0.4 + \text{Capital Score} \times 0.6TotalScore=PatternScore×0.4+CapitalScore×0.6其中 Pattern Score 看的是聚类的轮廓系数、CH 指数和 Wasserstein 距离,Capital Score 看的是加权 F1-Score。资金识别占 60% 的权重,是重头戏。关键是,赛题还要求必须使用 Qwen 系列大模型。这就有意思了,不是纯量化那套硬刚特征工程的玩法,而是要把 LLM 和传统量化模型结合起来。二、整体架构,四层混合推理我想了很长时间到底怎么搭这个系统。纯靠 LLM 肯定不行,100 只股票乘以 24 天就是 2400 条预测,每条都要调一次 API,又慢又贵,而且 LLM 对数值的判断经常不靠谱。纯靠量化模型也不行,种子标签太少,直接训练效果很差。最后的方案是混合推理管线,四层架构。系统架构图:原始数据 → 121 维特征矩阵 → 双路建模推理(资金识别 + 模式聚类)→ 结果输出第一层是特征工程层,把 Level-2 逐笔数据、十档盘口、akshare 日线、龙虎榜、机构席位全部加工成一个 121 维的特征矩阵。第二层是建模推理层,分两条路走。资金识别这条路用的是规则先验 + LightGBM 9 类联合分类 + KNN 兜底 + LLM 伪标签自训练。模式识别这条路用的是 UMAP 降维 + KMeans 聚类 + LLM 批量簇标注。第三层是LLM 增强层,当量化模型置信度不够的时候,把特征翻译成自然语言喂给 Qwen3.6-27B,让它来做最终判断。第四层是结果输出层,格式校验之后落盘成两个 CSV,打包成 submit.zip。整个系统的入口在main.py里,核心流程非常清晰,defmain():# 加载 100 只股票清单stocks=load_stocks()# 获取 A 榜交易日列表(T-2 口径)days=a_rank_trading_days()# 构建 (stock, date) 预测任务列表items=_build_items(stocks,days)# 阶段 0:构建 L2 特征上下文l2_context={"start":days[0],"end":days[-1],"stocks":stocks["股票代码"].tolist(),}# 阶段 1:加载种子标签(少量人工标注 + 规则生成)seeds=load_seed_labels("capital")# 阶段 2:构建 121 维 dense 特征矩阵features=build_feature_matrix(items,l2_context=l2_context)# 阶段 3:资金类型 + 意图预测(混合推理)predict_df=run_hybrid_capital(seeds,items,features,...)# 阶段 4:交易模式聚类 + LLM 标注pattern_df=run_hybrid_pattern(items,features,...)# 落盘两个 CSV + 打包 submit.zipwrite_results(predict_df,pattern_df)这段代码的逻辑是这样的。先加载股票列表和交易日历,构建出所有需要预测的 (股票, 日期) 组合。然后分两步走,资金识别和模式聚类共享同一份特征矩阵,但走不同的推理路径。三、121 维特征矩阵,五大数据源特征工程是整个系统的地基。我最后做出来的是 121 维,来自五个数据源。特征矩阵构成:日线行为(26维) + 结构特征(20维) + 日期特征(5维) + L2先验(30维) + 日内分钟(40维) = 121维日线行为特征 26 维来自 akshare。这个是最基础的特征,包括 OHLCV(开盘价、最高价、最低价、收盘价、成交量、成交额)、换手率、涨跌幅、振幅、实体涨跌。还有龙虎榜的净买入额、上榜次数、上榜原因 one-hot 编码。以及机构席位的买入额、卖出额、净买额、买卖家数。这里面有几个特征特别关键。换手率是区分资金类型的第一道筛子,游资票换手率通常 7% 以上,量化票在 4%-12% 之间,散户票往往低于 3%。龙虎榜净买额能直接判断游资还是机构主导,机构席位买卖家数接近的话大概率是量化在做 T0。结构特征 20 维是从股票代码和名称里提取的。这听起来有点玄学,但其实很实用。比如代码前缀 688 是科创板,300/301 是创业板,600/601 是沪市主板。名称里含「ST」的是戴帽股,含「科技」「AI」「芯片」的是热点概念,含「中」字开头的是中字头央企。这些信息对判断资金类型有很强的先验作用,游资偏爱热点概念股,量化偏好流动性好的主板标的。def_extract_structural_features(stock:Dict[str,Any])-np.ndarray:"""从股票代码 + 名称提取 20 维结构特征。"""code=str(stock.get("stock_code",""))name=str(stock.get("name",""))code_num=re.sub(r"\.[A-Z]+$","",code)# 去掉 .SH/.SZ 后缀prefix3=int(code_num[:3])ifcode_num[:3].isdigit()else0# 推断行业归属industry=_describe_industry(name)industry_hot=1.0ifany(kinindustryforkin["科技","新能源","AI","芯片","机器人"])else0.0feats=[len(name),# 0. 名称长度1.0if"ST"innameelse0.0,# 1. ST 标记1.0ifname.startswith("N")else0.0,# 2. 新股标记1.0ifprefix3==688else0.0,# 3. 科创板1.0ifprefix3in(300,301)else0.0,# 4. 创业板1.0ifprefix3in(600,601,603,605)else0.0,# 5. 沪市主板1.0ifcode_num.startswith("00")else0.0,# 6. 深市主板1.0ifany(kinnameforkin["银行","保险","证券"])else0.0,# 7. 大金融1.0ifany(kinnameforkin["科技","电子","智能"])else0.0,# 8. 科技prefix3/1000.0,# 9. 代码前缀归一化# ... 还有 11 维行业/概念/地域特征industry_hot,# 15. 热点行业标记1.0ifany(kinnameforkin["AI","算力","数据"])else0.0,# 16. AI 概念1.0if"中"inname[:2]else0.0,# 19. 中字头]returnnp.array(feats,dtype=np.float32)日期特征 5 维很简单但很重要。星期几、月初月末、季末标记。A 股有明显的日历效应,月末资金面紧张,季末机构调仓,这些都会影响交易行为模式。L2 先验 30 维是从十档盘口快照里提取的全局统计量。包括买卖盘口不平衡的均值、买卖价差均值、盘口大单占比。这些特征反映了当日盘口的微观结构,对区分游资和量化特别有用。游资经常在买一到买五挂大单制造买盘强劲的假象,量化的盘口则更加均衡。日内分钟特征 40 维是我花时间最多的部分。从 1 分钟 K 线里提取,分为四组。时间段特征 12 维,包括开盘 15 分钟成交量占比、收盘 15 分钟成交量占比、开盘和收盘的收益率和振幅。游资的「尾盘突袭」模式在这个特征上会非常明显,收盘前 15 分钟的成交量占比突然飙升。成交量特征 8 维,包括 Herfindahl 集中度、最大分钟量与均量比值、放量分钟占比。量化的拆单行为会导致成交量分布非常均匀,Herfindahl 指数低。游资的扫货则会在个别分钟放出巨量。价格特征 10 维,包括日内收益率、振幅、波动率、最大回撤、VWAP 偏离。量化的 T0 策略通常振幅小、VWAP 偏离低,游资拉升的股票振幅大、VWAP 偏离高。行为特征 10 维是最有意思的一组,包括量价相关系数、急拉次数(单分钟涨幅 1%)、急跌次数、最长连续上涨/下跌分钟数、反转次数、放量上涨/下跌分钟数、净买压。defextract_intraday_features(df:pd.DataFrame)-np.ndarray:"""从 1 分钟 K 线提取 40 维日内微观结构特征。"""feats=np.zeros(INTRADAY_DIM,dtype=np