
龍虎榜數據深度挖掘用Python追蹤機構席位與營業部交易行為大概是在2021年的時候我開始關注龍虎榜數據。那時候市場上有個說法叫龍虎榜選股勝率翻倍雖然有點夸張但龍虎榜確實能反映出市場上最活躍資金的動向。后來我花了幾個月時間把龍虎榜數據系統地研究了一遍還寫了一套分析工具。這篇文章就來聊聊我是怎么用Python分析龍虎榜數據追蹤機構席位和營業部交易行為的。先說一下龍虎榜數據有什么用。簡單來說龍虎榜是交易所每天公布的異動股票名單包括當日漲跌幅偏離值達到7%的、換手率達到20%的、連續三個交易日漲幅偏離值累計達到20%的等等。每只上榜股票都會公布買入金額前五和賣出金額前五的營業部席位。通過分析這些席位的買賣行為我們可以大致判斷出市場上的主力資金在關注哪些股票哪些營業部是漲停板敢死隊哪些機構席位在默默布局。我主要用到四塊數據第一塊是每日龍虎榜詳情也就是每天有哪些股票上榜對應的買賣席位第二塊是機構席位追蹤統計近幾日機構席位在哪些股票上有交易第三塊是營業部上榜統計看看哪些營業部最活躍第四塊是機構席位成交明細近五個交易日機構席位的具體買賣情況。先從數據讀取開始。龍虎榜數據都在all目錄下每日詳情是all/ld機構席位追蹤是all/jgzz/{n}營業部統計是all/yyb/{n}機構成交明細是all/jgcj。這里的n表示近n日可以取5、10、30、60。importjsonimportosimportpandasaspdimportnumpyasnpfromcollectionsimportdefaultdictimportdatetime data_dirD:/stock_datadefread_ld(date_strNone):file_pathos.path.join(data_dir,all,ld)ifnotos.path.exists(file_path):returnNonewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)returndatadefread_jgzz(n30):file_pathos.path.join(data_dir,all,jgzz,str(n))ifnotos.path.exists(file_path):returnNonewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[dm,mc,ljmre,mrCs,ljmce,mcCs,je]returndfdefread_yyb(n30):file_pathos.path.join(data_dir,all,yyb,str(n))ifnotos.path.exists(file_path):returnNonewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[yybMc,sbCs,ljmre,mrXw,ljmce,mcXw,mrQsgp]returndfdefread_jgcj():file_pathos.path.join(data_dir,all,jgcj)ifnotos.path.exists(file_path):returnNonewithopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[dm,mc,jyrq,jgMre,jgMce,lx]returndf字段名我還是用了簡寫dm是股票代碼mc是名稱ljmre是累積買入額mrCs是買入次數ljmce是累積賣出額mcCs是賣出次數je是凈額。yyb相關的字段yybMc是營業部名稱sbCs是上榜次數mrXw是買入席位mcXw是賣出席位mrQsgp是買入前三股票。jg相關的jyrq是交易日期jgMre是機構席位買入額jgMce是機構席位賣出額lx是上榜類型。數據讀進來之后我會先做一個整體的概覽分析。比如看看最近一個月機構席位主要在買哪些股票哪些營業部最活躍機構席位的凈買入額排名等等。這些統計可以幫我們快速把握市場主力資金的動向。defanalyze_jgzz(df_jgzz,top_n20):ifdf_jgzzisNoneorlen(df_jgzz)0:returnNonedf_sorteddf_jgzz.sort_values(je,ascendingFalse)top_buydf_sorted.head(top_n)[[dm,mc,ljmre,ljmce,je,mrCs,mcCs]]top_selldf_sorted.tail(top_n)[[dm,mc,ljmre,ljmce,je,mrCs,mcCs]]print(機構席位凈買入TOP{}.format(top_n))print(top_buy.to_string(indexFalse))print(\n機構席位凈賣出TOP{}.format(top_n))print(top_sell.to_string(indexFalse))returntop_buy,top_sell機構席位追蹤數據能告訴我們近一段時間機構在買什么賣什么但光看這個還不夠。因為機構席位的交易有時候是建倉有時候是出貨單憑一個凈額很難判斷。所以我會結合機構席位成交明細來看也就是近五個交易日每天的買賣情況。如果機構連續幾天都在凈買入某只股票那信號就比較強了。defanalyze_jgcj(df_jgcj,dm):ifdf_jgcjisNoneorlen(df_jgcj)0:returnNonedf_stockdf_jgcj[df_jgcj[dm]dm].copy()iflen(df_stock)0:returnNonedf_stock[je]df_stock[jgMre]-df_stock[jgMce]df_stockdf_stock.sort_values(jyrq)print(股票{}({})近期機構席位成交明細.format(df_stock[mc].iloc[0],dm))print(df_stock[[jyrq,jgMre,jgMce,je,lx]].to_string(indexFalse))total_mredf_stock[jgMre].sum()total_mcedf_stock[jgMce].sum()total_jetotal_mre-total_mceprint(\n近5日機構買入合計{}萬賣出合計{}萬凈額{}萬.format(total_mre,total_mce,total_je))returndf_stock接下來是營業部分析。龍虎榜上的營業部大致可以分幾類一類是機構專用席位這類是基金、保險、社保這些機構在交易一類是知名游資席位比如東方財富證券拉薩團結路、中信證券上海溧陽路這些它們的特點是操作頻繁、擅長打板還有一類是普通營業部偶爾上榜。我會先統計近一個月上榜次數最多的營業部看看哪些最活躍。然后看這些營業部的買入額和賣出額如果一個營業部的上榜次數多、凈買入額也大說明它比較樂觀。反過來如果上榜次數多但凈賣出額大可能就偏謹慎了。defanalyze_yyb(df_yyb,top_n30):ifdf_yybisNoneorlen(df_yyb)0:returnNonedf_yyb[je]df_yyb[ljmre]-df_yyb[ljmce]df_sorteddf_yyb.sort_values(sbCs,ascendingFalse)print(營業部上榜次數TOP{}.format(top_n))print(df_sorted.head(top_n)[[yybMc,sbCs,ljmre,ljmce,je]].to_string(indexFalse))df_je_sorteddf_yyb.sort_values(je,ascendingFalse)print(\n營業部凈買入額TOP{}.format(top_n))print(df_je_sorted.head(top_n)[[yybMc,sbCs,ljmre,ljmce,je]].to_string(indexFalse))returndf_sorted在營業部分析中我發現一個很有意思的現象有些營業部的操作風格非常鮮明。比如東方財富證券拉薩團結路幾乎天天上榜買賣的都是市場上最熱門的題材股而且換手率極高典型的短線游資風格。而有些機構專用席位上榜次數不多但每次買賣的金額都很大而且持有周期相對較長。為了量化營業部的風格我寫了一個簡單的分類函數根據營業部的上榜次數、平均買賣金額、買賣的股票類型等特征把營業部分成機構型、游資型、散戶型三類。當然這個分類比較粗糙只是一個大致的判斷。defclassify_yyb_style(row):sbCsrow[sbCs]avg_mrerow[ljmre]/sbCsifsbCs0else0if機構專用inrow[yybMc]:return機構型elifsbCs20andavg_mre2000:return游資型else:return普通型有了營業部風格分類之后就可以做更有針對性的分析了。比如我會專門跟蹤機構型席位的動向因為機構的研究能力相對更強它們重倉買入的股票往往有基本面支撐。而游資型席位的動向可以幫助我們判斷市場的熱點在哪里哪些題材正在被炒作。每日龍虎榜詳情的分析是另一個重點。每天的龍虎榜數據包含了多種異動類型比如漲跌幅偏離值、換手率、振幅等等。我會把每天上榜的股票按類型分類然后看每類的上榜股票有什么共同特點。defanalyze_ld_detail(ld_data):ifld_dataisNoneorlen(ld_data)0:returnNonetoday_datald_data[0]ifisinstance(ld_data,list)elseld_data date_strtoday_data.get(日期,)types{zpl7:漲幅偏離值達7%,dpl7:跌幅偏離值達7%,h20:換手率達20%,z20:連續三日漲幅偏離值累計達20%,zf15:振幅值達15%,df15:連續三日跌幅偏離值累計達20%}all_stocks[]forkey,nameintypes.items():stockstoday_data.get(key,[])forstkinstocks:stk_info{dm:stk.get(股票代碼,),mc:stk.get(股票名稱,),spj:stk.get(收盤價(元),0),dyz:stk.get(對應值(%),0),cjl:stk.get(成交量(萬股),0),cje:stk.get(成交額(萬元),0),lx:name}all_stocks.append(stk_info)dfpd.DataFrame(all_stocks)print(日期{}今日上榜股票共{}只.format(date_str,len(df)))print(\n上榜類型分布)print(df[lx].value_counts())returndf把這些分析串起來我每天盤后會做這樣一個流程先看今日龍虎榜詳情了解哪些股票異動、是什么類型的異動然后看機構席位成交明細看看機構在這些異動股票上的買賣情況接著看機構席位追蹤和營業部統計掌握一段時間內的資金流向趨勢最后把這些信息綜合起來篩選出值得重點關注的股票。我還寫了一個簡單的選股策略基于龍虎榜數據。策略邏輯是這樣的首先從近一個月的機構席位追蹤數據中選出機構凈買入額排名前50的股票然后從這些股票中剔除ST股和近一個月漲幅超過50%的避免追高接著結合營業部數據如果有知名游資席位也在買入的話加分最后選出綜合得分最高的10只股票作為觀察池。deflhb_select_strategy(df_jgzz,df_yyb,df_gp,top_n10):df_jgdf_jgzz.copy()df_mergeddf_jg.merge(df_gp[[dm,mc,isSt]],on[dm,mc],howleft)df_mergeddf_merged[df_merged[isSt]0]df_mergeddf_merged.sort_values(je,ascendingFalse)candidatesdf_merged.head(50).copy()yyb_hot_stocksset()for_,rowindf_yyb.head(20).iterrows():ifpd.notna(row[mrQsgp]):forstkinrow[mrQsgp].split(,):yyb_hot_stocks.add(stk)candidates[yyb_hot]candidates[mc].apply(lambdax:1ifxinyyb_hot_stockselse0)candidates[score]candidates[je].rank(pctTrue)*0.7candidates[yyb_hot]*0.3selectedcandidates.sort_values(score,ascendingFalse).head(top_n)print(龍虎榜策略選股結果TOP{}.format(top_n))print(selected[[dm,mc,je,yyb_hot,score]].to_string(indexFalse))returnselected當然這個策略只是一個基礎版本實際用的時候還要結合其他因素。比如我會再看一下選出的股票的基本面情況如果基本面太差即使龍虎榜數據好看也不會買。還有就是技術面看看股價是不是在上升趨勢中成交量有沒有配合放大。實際使用下來龍虎榜數據分析有幾個地方特別值得注意。第一機構席位的數據比營業部數據更有參考價值因為機構的決策更理性研究也更深入。第二不要只看單日的龍虎榜要結合一段時間的趨勢來看連續多日的機構凈買入信號更強。第三龍虎榜是滯后數據等你看到的時候股價可能已經漲了一截所以不能盲目追漲要結合估值和基本面來判斷。還有一個坑我踩過就是有些營業部是一日游風格今天買明天賣如果你跟著買很容易被套。所以我后來加了一個過濾條件就是看營業部的平均持有周期如果持有周期太短即使它在買入我也不會輕易跟進。總的來說龍虎榜數據分析是一個非常實用的工具。它不能保證你每次都賺錢但可以幫你更清晰地理解市場資金的動向讓你的投資決策多一個維度的參考。如果你也對龍虎榜感興趣建議先從跟蹤機構席位開始相對來說確定性更高一些。我用的數據來源是ig50的本地數據接口數據更新及時字段也很完整做二次開發很方便。感興趣的朋友可以自行了解。接口說明all/ld - 每日龍虎榜詳情本地路徑數據存放目錄/all/ld主要字段日期、漲幅偏離值達7%的證券(zpl7)、跌幅偏離值達7%的證券(dpl7)、換手率達20%的證券(h20)、連續三日漲幅偏離值累計達20%的證券(z20)、振幅值達15%的證券(zf15)等每只證券包含股票代碼、股票名稱、收盤價(元)、對應值(%)、成交量(萬股)、成交額(萬元)all/jgzz/{近n日} - 機構席位追蹤本地路徑數據存放目錄/all/jgzz/{近n日}n可取5、10、30、60主要字段股票代碼(dm)、股票名稱(mc)、累積買入額(萬)(ljmre)、買入次數(mrCs)、累積賣出額(萬)(ljmce)、賣出次數(mcCs)、凈額(萬)(je)all/yyb/{近n日} - 營業部上榜統計本地路徑數據存放目錄/all/yyb/{近n日}n可取5、10、30、60主要字段營業部名稱(yybMc)、上榜次數(sbCs)、累積獲取額(萬)(ljmre)、買入席位(mrXw)、累積賣出額(萬)(ljmce)、賣出席位(mcXw)、買入前三股票(mrQsgp)all/jgcj - 機構席位成交明細本地路徑數據存放目錄/all/jgcj主要字段股票代碼(dm)、股票名稱(mc)、交易日期(jyrq)、機構席位買入額(萬)(jgMre)、機構席位賣出額(萬)(jgMce)、類型(lx)gitee開源地址github開源地址