據(jù)深度挖掘用Python追蹤機(jī)構(gòu)席位與營業(yè)部交易行為 IG50免費(fèi)開源股票數(shù)據(jù)API接口)
龍虎榜數(shù)據(jù)深度挖掘用Python追蹤機(jī)構(gòu)席位與營業(yè)部交易行為大概是在2021年的時(shí)候我開始關(guān)注龍虎榜數(shù)據(jù)。那時(shí)候市場(chǎng)上有個(gè)說法叫龍虎榜選股勝率翻倍雖然有點(diǎn)夸張但龍虎榜確實(shí)能反映出市場(chǎng)上最活躍資金的動(dòng)向。后來我花了幾個(gè)月時(shí)間把龍虎榜數(shù)據(jù)系統(tǒng)地研究了一遍還寫了一套分析工具。這篇文章就來聊聊我是怎么用Python分析龍虎榜數(shù)據(jù)追蹤機(jī)構(gòu)席位和營業(yè)部交易行為的。先說一下龍虎榜數(shù)據(jù)有什么用。簡(jiǎn)單來說龍虎榜是交易所每天公布的異動(dòng)股票名單包括當(dāng)日漲跌幅偏離值達(dá)到7%的、換手率達(dá)到20%的、連續(xù)三個(gè)交易日漲幅偏離值累計(jì)達(dá)到20%的等等。每只上榜股票都會(huì)公布買入金額前五和賣出金額前五的營業(yè)部席位。通過分析這些席位的買賣行為我們可以大致判斷出市場(chǎng)上的主力資金在關(guān)注哪些股票哪些營業(yè)部是漲停板敢死隊(duì)哪些機(jī)構(gòu)席位在默默布局。我主要用到四塊數(shù)據(jù)第一塊是每日龍虎榜詳情也就是每天有哪些股票上榜對(duì)應(yīng)的買賣席位第二塊是機(jī)構(gòu)席位追蹤統(tǒng)計(jì)近幾日機(jī)構(gòu)席位在哪些股票上有交易第三塊是營業(yè)部上榜統(tǒng)計(jì)看看哪些營業(yè)部最活躍第四塊是機(jī)構(gòu)席位成交明細(xì)近五個(gè)交易日機(jī)構(gòu)席位的具體買賣情況。先從數(shù)據(jù)讀取開始。龍虎榜數(shù)據(jù)都在all目錄下每日詳情是all/ld機(jī)構(gòu)席位追蹤是all/jgzz/{n}營業(yè)部統(tǒng)計(jì)是all/yyb/{n}機(jī)構(gòu)成交明細(xì)是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字段名我還是用了簡(jiǎn)寫dm是股票代碼mc是名稱ljmre是累積買入額mrCs是買入次數(shù)ljmce是累積賣出額mcCs是賣出次數(shù)je是凈額。yyb相關(guān)的字段yybMc是營業(yè)部名稱sbCs是上榜次數(shù)mrXw是買入席位mcXw是賣出席位mrQsgp是買入前三股票。jg相關(guān)的jyrq是交易日期jgMre是機(jī)構(gòu)席位買入額jgMce是機(jī)構(gòu)席位賣出額lx是上榜類型。數(shù)據(jù)讀進(jìn)來之后我會(huì)先做一個(gè)整體的概覽分析。比如看看最近一個(gè)月機(jī)構(gòu)席位主要在買哪些股票哪些營業(yè)部最活躍機(jī)構(gòu)席位的凈買入額排名等等。這些統(tǒng)計(jì)可以幫我們快速把握市場(chǎng)主力資金的動(dòng)向。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(機(jī)構(gòu)席位凈買入TOP{}.format(top_n))print(top_buy.to_string(indexFalse))print(\n機(jī)構(gòu)席位凈賣出TOP{}.format(top_n))print(top_sell.to_string(indexFalse))returntop_buy,top_sell機(jī)構(gòu)席位追蹤數(shù)據(jù)能告訴我們近一段時(shí)間機(jī)構(gòu)在買什么賣什么但光看這個(gè)還不夠。因?yàn)闄C(jī)構(gòu)席位的交易有時(shí)候是建倉有時(shí)候是出貨單憑一個(gè)凈額很難判斷。所以我會(huì)結(jié)合機(jī)構(gòu)席位成交明細(xì)來看也就是近五個(gè)交易日每天的買賣情況。如果機(jī)構(gòu)連續(xù)幾天都在凈買入某只股票那信號(hào)就比較強(qiáng)了。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(股票{}({})近期機(jī)構(gòu)席位成交明細(xì).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日機(jī)構(gòu)買入合計(jì){}萬賣出合計(jì){}萬凈額{}萬.format(total_mre,total_mce,total_je))returndf_stock接下來是營業(yè)部分析。龍虎榜上的營業(yè)部大致可以分幾類一類是機(jī)構(gòu)專用席位這類是基金、保險(xiǎn)、社保這些機(jī)構(gòu)在交易一類是知名游資席位比如東方財(cái)富證券拉薩團(tuán)結(jié)路、中信證券上海溧陽路這些它們的特點(diǎn)是操作頻繁、擅長打板還有一類是普通營業(yè)部偶爾上榜。我會(huì)先統(tǒng)計(jì)近一個(gè)月上榜次數(shù)最多的營業(yè)部看看哪些最活躍。然后看這些營業(yè)部的買入額和賣出額如果一個(gè)營業(yè)部的上榜次數(shù)多、凈買入額也大說明它比較樂觀。反過來如果上榜次數(shù)多但凈賣出額大可能就偏謹(jǐn)慎了。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(營業(yè)部上榜次數(shù)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營業(yè)部?jī)糍I入額TOP{}.format(top_n))print(df_je_sorted.head(top_n)[[yybMc,sbCs,ljmre,ljmce,je]].to_string(indexFalse))returndf_sorted在營業(yè)部分析中我發(fā)現(xiàn)一個(gè)很有意思的現(xiàn)象有些營業(yè)部的操作風(fēng)格非常鮮明。比如東方財(cái)富證券拉薩團(tuán)結(jié)路幾乎天天上榜買賣的都是市場(chǎng)上最熱門的題材股而且換手率極高典型的短線游資風(fēng)格。而有些機(jī)構(gòu)專用席位上榜次數(shù)不多但每次買賣的金額都很大而且持有周期相對(duì)較長。為了量化營業(yè)部的風(fēng)格我寫了一個(gè)簡(jiǎn)單的分類函數(shù)根據(jù)營業(yè)部的上榜次數(shù)、平均買賣金額、買賣的股票類型等特征把營業(yè)部分成機(jī)構(gòu)型、游資型、散戶型三類。當(dāng)然這個(gè)分類比較粗糙只是一個(gè)大致的判斷。defclassify_yyb_style(row):sbCsrow[sbCs]avg_mrerow[ljmre]/sbCsifsbCs0else0if機(jī)構(gòu)專用inrow[yybMc]:return機(jī)構(gòu)型elifsbCs20andavg_mre2000:return游資型else:return普通型有了營業(yè)部風(fēng)格分類之后就可以做更有針對(duì)性的分析了。比如我會(huì)專門跟蹤機(jī)構(gòu)型席位的動(dòng)向因?yàn)闄C(jī)構(gòu)的研究能力相對(duì)更強(qiáng)它們重倉買入的股票往往有基本面支撐。而游資型席位的動(dòng)向可以幫助我們判斷市場(chǎng)的熱點(diǎn)在哪里哪些題材正在被炒作。每日龍虎榜詳情的分析是另一個(gè)重點(diǎn)。每天的龍虎榜數(shù)據(jù)包含了多種異動(dòng)類型比如漲跌幅偏離值、換手率、振幅等等。我會(huì)把每天上榜的股票按類型分類然后看每類的上榜股票有什么共同特點(diǎn)。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:漲幅偏離值達(dá)7%,dpl7:跌幅偏離值達(dá)7%,h20:換手率達(dá)20%,z20:連續(xù)三日漲幅偏離值累計(jì)達(dá)20%,zf15:振幅值達(dá)15%,df15:連續(xù)三日跌幅偏離值累計(jì)達(dá)20%}all_stocks[]forkey,nameintypes.items():stockstoday_data.get(key,[])forstkinstocks:stk_info{dm:stk.get(股票代碼,),mc:stk.get(股票名稱,),spj:stk.get(收盤價(jià)(元),0),dyz:stk.get(對(duì)應(yīng)值(%),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把這些分析串起來我每天盤后會(huì)做這樣一個(gè)流程先看今日龍虎榜詳情了解哪些股票異動(dòng)、是什么類型的異動(dòng)然后看機(jī)構(gòu)席位成交明細(xì)看看機(jī)構(gòu)在這些異動(dòng)股票上的買賣情況接著看機(jī)構(gòu)席位追蹤和營業(yè)部統(tǒng)計(jì)掌握一段時(shí)間內(nèi)的資金流向趨勢(shì)最后把這些信息綜合起來篩選出值得重點(diǎn)關(guān)注的股票。我還寫了一個(gè)簡(jiǎn)單的選股策略基于龍虎榜數(shù)據(jù)。策略邏輯是這樣的首先從近一個(gè)月的機(jī)構(gòu)席位追蹤數(shù)據(jù)中選出機(jī)構(gòu)凈買入額排名前50的股票然后從這些股票中剔除ST股和近一個(gè)月漲幅超過50%的避免追高接著結(jié)合營業(yè)部數(shù)據(jù)如果有知名游資席位也在買入的話加分最后選出綜合得分最高的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(龍虎榜策略選股結(jié)果TOP{}.format(top_n))print(selected[[dm,mc,je,yyb_hot,score]].to_string(indexFalse))returnselected當(dāng)然這個(gè)策略只是一個(gè)基礎(chǔ)版本實(shí)際用的時(shí)候還要結(jié)合其他因素。比如我會(huì)再看一下選出的股票的基本面情況如果基本面太差即使龍虎榜數(shù)據(jù)好看也不會(huì)買。還有就是技術(shù)面看看股價(jià)是不是在上升趨勢(shì)中成交量有沒有配合放大。實(shí)際使用下來龍虎榜數(shù)據(jù)分析有幾個(gè)地方特別值得注意。第一機(jī)構(gòu)席位的數(shù)據(jù)比營業(yè)部數(shù)據(jù)更有參考價(jià)值因?yàn)闄C(jī)構(gòu)的決策更理性研究也更深入。第二不要只看單日的龍虎榜要結(jié)合一段時(shí)間的趨勢(shì)來看連續(xù)多日的機(jī)構(gòu)凈買入信號(hào)更強(qiáng)。第三龍虎榜是滯后數(shù)據(jù)等你看到的時(shí)候股價(jià)可能已經(jīng)漲了一截所以不能盲目追漲要結(jié)合估值和基本面來判斷。還有一個(gè)坑我踩過就是有些營業(yè)部是一日游風(fēng)格今天買明天賣如果你跟著買很容易被套。所以我后來加了一個(gè)過濾條件就是看營業(yè)部的平均持有周期如果持有周期太短即使它在買入我也不會(huì)輕易跟進(jìn)??偟膩碚f龍虎榜數(shù)據(jù)分析是一個(gè)非常實(shí)用的工具。它不能保證你每次都賺錢但可以幫你更清晰地理解市場(chǎng)資金的動(dòng)向讓你的投資決策多一個(gè)維度的參考。如果你也對(duì)龍虎榜感興趣建議先從跟蹤機(jī)構(gòu)席位開始相對(duì)來說確定性更高一些。我用的數(shù)據(jù)來源是ig50的本地?cái)?shù)據(jù)接口數(shù)據(jù)更新及時(shí)字段也很完整做二次開發(fā)很方便。感興趣的朋友可以自行了解。接口說明all/ld - 每日龍虎榜詳情本地路徑數(shù)據(jù)存放目錄/all/ld主要字段日期、漲幅偏離值達(dá)7%的證券(zpl7)、跌幅偏離值達(dá)7%的證券(dpl7)、換手率達(dá)20%的證券(h20)、連續(xù)三日漲幅偏離值累計(jì)達(dá)20%的證券(z20)、振幅值達(dá)15%的證券(zf15)等每只證券包含股票代碼、股票名稱、收盤價(jià)(元)、對(duì)應(yīng)值(%)、成交量(萬股)、成交額(萬元)all/jgzz/{近n日} - 機(jī)構(gòu)席位追蹤本地路徑數(shù)據(jù)存放目錄/all/jgzz/{近n日}n可取5、10、30、60主要字段股票代碼(dm)、股票名稱(mc)、累積買入額(萬)(ljmre)、買入次數(shù)(mrCs)、累積賣出額(萬)(ljmce)、賣出次數(shù)(mcCs)、凈額(萬)(je)all/yyb/{近n日} - 營業(yè)部上榜統(tǒng)計(jì)本地路徑數(shù)據(jù)存放目錄/all/yyb/{近n日}n可取5、10、30、60主要字段營業(yè)部名稱(yybMc)、上榜次數(shù)(sbCs)、累積獲取額(萬)(ljmre)、買入席位(mrXw)、累積賣出額(萬)(ljmce)、賣出席位(mcXw)、買入前三股票(mrQsgp)all/jgcj - 機(jī)構(gòu)席位成交明細(xì)本地路徑數(shù)據(jù)存放目錄/all/jgcj主要字段股票代碼(dm)、股票名稱(mc)、交易日期(jyrq)、機(jī)構(gòu)席位買入額(萬)(jgMre)、機(jī)構(gòu)席位賣出額(萬)(jgMce)、類型(lx)gitee開源地址github開源地址