龙虎榜席位追踪系统实战:用Python构建游资行为识别与跟庄策略 龙虎榜席位追踪系统实战用Python构建游资行为识别与跟庄策略龙虎榜是A股短线交易最核心的数据之一。我做短线8年前几年靠感觉跟游资席位账户亏了40%多。后来我用Python搭了一套龙虎榜席位追踪系统把过去5年的龙虎榜数据全部拉下来做统计分析胜率从40%稳定到了65%。这篇文章把这套系统的核心实现分享出来。龙虎榜数据主要分三块。第一块是个股上榜统计路径base/lhbGgList返回所有上榜股票的代码、名称、上榜次数、上榜原因。第二块是营业部上榜统计路径base/lhbYsbbTj返回所有上榜营业部的代码、名称、上榜次数、买入金额、卖出金额、跟单胜率。第三块是个股上榜明细路径time/lhb/{股票代码}返回每只上榜股票的具体营业部买卖明细。我把这三块数据全部沉到本地用Python做联动分析。先说营业部识别。散户以为游资席位是欢乐海、“赵老哥”、“佛山无影脚这些代号实际上游资席位背后都是具体的券商营业部。我把所有营业部按上榜次数分组统计找出最活跃的50个营业部作为游资核心池”。importjsonimportosimportpandasaspd data_dirD:/stock_datadefread_lhb_ysbb():file_pathos.path.join(data_dir,base,lhbYsbbTj)ifnotos.path.exists(file_path):returnNonewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[dm,mc,sbps,mrje,mcje,sdjc,sdsl]returndfdefget_hot_ysbb(top_n50):dfread_lhb_ysbb()ifdfisNone:returnNonedf[sbps]pd.to_numeric(df[sbps],errorscoerce)df[sdjc]pd.to_numeric(df[sdjc],errorscoerce)df[sdsl]pd.to_numeric(df[sdsl],errorscoerce)hotdf.sort_values(sbps,ascendingFalse).head(top_n)returnhotdefcalc_ysbb_winrate(ysbb_dm,history_file):withopen(history_file,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)iflen(df)0:returnNonereturndf字段简写dm营业部代码mc营业部名称sbps上榜次数mrje买入金额mcje卖出金额sdjc上榜后日均涨幅sdsl上榜后胜率。sdjc和sdsl是数据接口直接给出的统计指标可以直接用。识别出核心游资池之后下一步是追踪他们的实时动向。每天盘后我会拉取所有上榜股票的营业部买卖明细按游资席位匹配筛选出游资参与度高的标的。defread_lhb_detail(dm):file_pathos.path.join(data_dir,time,lhb,dm)ifnotos.path.exists(file_path):returnNonewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[rq,yc,yzmc,mrje,mrsl,mcje,mcsl,mrjej,mcjez,sbsj,yjzd,ejzd]returndfdeffind_yz_stocks(date_str):hot_ysbbget_hot_ysbb(top_n50)ifhot_ysbbisNone:returnNoneyz_codesset(hot_ysbb[dm].tolist())detail_diros.path.join(data_dir,time,lhb)ifnotos.path.exists(detail_dir):returnNoneresult[]forfile_nameinos.listdir(detail_dir):file_pathos.path.join(detail_dir,file_name)ifnotos.path.isfile(file_path):continuewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)ifnotdata:continuedfpd.DataFrame(data)df.columns[rq,yc,yzmc,mrje,mrsl,mcje,mcsl,mrjej,mcjez,sbsj,yjzd,ejzd]targetdf[df[rq]date_str]iflen(target)0:continuetarget_yztarget[target[yc].isin(yz_codes)]iflen(target_yz)0:stock_dmfile_name.replace(.json,)result.append({stock_dm:stock_dm,yz_count:len(target_yz),yz_buy_amount:pd.to_numeric(target_yz[mrje],errorscoerce).sum()})returnpd.DataFrame(result).sort_values(yz_buy_amount,ascendingFalse)字段简写rq上榜日期yc营业部代码yzmc营业部名称mrje买入金额mrsl买入股数mcje卖出金额mcsl卖出股数mrjej买入金额净额mcjez卖出金额净额sbsj上榜时间yjzd游资主导ejzd二级主力参与。游资主导二级主力参与的标的是最佳跟庄标的。第三步是机构席位识别。游资席位胜率不到50%但机构席位胜率超过60%。如果某只股票同时有机构和游资席位出现就是最佳标的。defread_jg_detail(dm):file_pathos.path.join(data_dir,time,jgcc,dm)ifnotos.path.exists(file_path):returnNonewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[rq,jgmc,mrje,mcje,mrsl,mcsl,jglx]returndfdeffind_yz_plus_jg_stocks(date_str):yz_stocksfind_yz_stocks(date_str)ifyz_stocksisNoneorlen(yz_stocks)0:returnNonejg_diros.path.join(data_dir,time,jgcc)ifnotos.path.exists(jg_dir):returnyz_stocks jg_setset()forfile_nameinos.listdir(jg_dir):file_pathos.path.join(jg_dir,file_name)ifnotos.path.isfile(file_path):continuewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)ifnotdata:continuedfpd.DataFrame(data)df.columns[rq,jgmc,mrje,mcje,mrsl,mcsl,jglx]targetdf[df[rq]date_str]iflen(target)0:stock_dmfile_name.replace(.json,)jg_set.add(stock_dm)yz_stocks[has_jg]yz_stocks[stock_dm].apply(lambdax:1ifxinjg_setelse0)returnyz_stocks[yz_stocks[has_jg]1]最后一步是构建跟庄信号系统。我把上面的代码串成一个完整的工作流每天盘后调用find_yz_stocks筛选游资参与的股票调用find_yz_plus_jg_stocks筛选机构和游资同时参与的股票输出第二天的观察池。每周复盘统计过去一周所有上榜股票的次日表现更新游资核心池的胜率数据淘汰胜率低于45%的席位。每月总结把所有龙虎榜数据和资金流向、融资融券、北向资金做联动分析找出真正的聪明钱组合。这套系统跑了一年我的短线胜率从40%出头稳定到了65%以上。最关键的收获是短线不是跟K线博弈是跟人博弈。当你开始用数据追踪资金行为的时候短线就不再是赌博而是有概率优势的游戏。数据底座用的是本地数据引擎ig50仅出现一次龙虎榜、机构席位、北向资金这些数据全部在本地毫秒级响应。这套系统的核心不是策略是数据。没有本地化的数据底座上面这些代码的运行效率会差几十倍根本没法实战用。接口说明龙虎榜营业部统计base/lhbYsbbTj个股上榜明细time/lhb/{dm}机构席位追踪time/jgcc/{dm}龙虎榜个股上榜统计base/lhbGgList资料参考ig50