【Python量化】如何监测领涨板块,挖掘题材龙头股?
引言
題材概念一直是A股市場投機炒作的主旋律。大多數散戶都在復雜的理論、財務指標、技術圖形和消息上折騰,缺乏從實踐上去認識和把握市場。概念板塊是市場資金達成共識的重要介質,主力資金憑借熱點題材形成賺錢效應,熱點炒作驅動資金與賺錢效應形成正向反饋環,推動熱點板塊個股上漲,而熱點題材的級別大小和想象力大小則決定了股票上漲的空間。熱點題材與板塊主要來自經濟、政策、情緒、資金、技術和外圍環境。同花順軟件提供了各種熱點題材和概念指數數據,為我們分析熱點題材板塊動向提供了依據。那么如何利用板塊指數行情監測領漲板塊,尋找板塊龍頭股呢?本文利用Python從tushare上獲取同花順概念板塊行業指數行情數據和個股交易數據,分析板塊及個股的動量走向,為構建熱點題材和龍頭股(強勢股)監測系統提供參考依據。
數據獲取與探索性分析
下面利用tushare pro獲取同花順概念板塊行業指數相關數據,tushare pro需到其官網注冊獲取token才能使用,某些數據提取有積分限制,下面使用到的數據可以通過在微信公眾號后臺回復“20220210”或“同花順概念”獲取。
首先導入需要用到的Python庫/模塊。
import?pandas?as?pd import?numpy?as?np #可視化:matplotlib、seaborn、pyecharts import?matplotlib.pyplot?as?plt import?seaborn?as?sns #正確顯示中文和負號 plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False #這里的pyecharts使用的是0.5.11版本 from?pyecharts?import?Bar,HeatMap #導入時間處理模塊 from?dateutil.parser?import?parse from?datetime?import?datetime,timedelta #pandas賦值老提升警告 import?warnings warnings.filterwarnings('ignore') #使用tushare?pro獲取數據,需要到官網注冊獲取相應的token import?tushare?as?ts? token='輸入你的token' pro=ts.pro_api(token)獲取同花順概念和行業列表。
index_list=pro.ths_index() #查看數據前幾行 index_list.head()#數據保存本地 #index_list.to_csv('index_list.csv') #讀取本地數據 #index_list=pd.read_csv('index_list.csv',index_col=0)其中,ts_code:代碼;name:名稱;count:成分個數;exchange:交易所,包括A股、港股(H)和美股(US);list_date:上市日期;type:指數類型N-板塊指數,I-行業指數,S-同花順特色指數。
def?plot_bar(data,title,label=True,zoom=False):bar=Bar('')attr=list(data.index)v=list(data.values)bar.add(title,attr,v,is_label_show=label,is_splitline_show=False,is_datazoom_show=zoom)return?bardata=index_list.groupby('exchange')['name'].count() title='同花順概念和行業指數\nA股\港股\美股' plot_bar(data,title)
上圖顯示,A股概念和行業指數高達939個,下面主要分析A股上的同花順概念和行業指數做進一步考察。
概念或行業成分股中平均有53只個股,當然,每只個股可能分屬不同的概念板塊行業,如果某個概念板塊所含個股數量太多或太少,相當于涵蓋面太寬泛或代表性不足,分析起來意義不大。下面刪除重復項和剔除成份個股數量低于12大于52(相當于取25%到75%分位數)。
#刪除代碼重復項, #保留type為N板塊的指數 final_index_list=(A_index_list.drop_duplicates(subset=['ts_code'],?keep='first').query("12<nums<52").query("type=='N'")) #去掉樣本股或成份股指數 final_index_list=final_index_list[-final_index_list.name.apply(lambda?s:s.endswith('樣本股')or?s.endswith('成份股'))] final_index_list.sort_values('nums')data=(final_index_list.sort_values('nums',ascending=False).set_index('name')['nums']) title='同花順概念和行業指數成分股個數' plot_bar(data,title,False,True)獲取概念行業指數行情
下面通過日期循環獲取某時間段所有概念行業指數的行情數據。使用tushare在線獲取代碼由于篇幅所限,此處略,完整代碼見Python金融量化知識星球。數據也可以通過公眾號上獲取(回復“20220210”或“同花順概念”)后導入。
#獲取股票交易日歷 def?get_cals():#獲取交易日歷pass #獲取某段時間內的交易日期(如200個交易日) def?get_trade_date(n):#獲取當天日期時間pass #獲取某段時間內的概念指數行情數據 def?get_index_data(n=200):pass查看數據前幾行。后續分析只需要使用指數的收盤價、交易代碼和交易日期。
#通過tushare在線獲取數據 #all_data=get_index_data(n=200) #數據保存本地 #all_data.to_csv('all_data.csv') #通過本地導入數據 all_data=pd.read_csv('all_data.csv',index_col=0) all_data.head()#刪除重復缺失值、將代碼使用概念中文名代替 final_data=(all_data.sort_values(['ts_code','trade_date']).drop_duplicates().set_index(['trade_date','ts_code'])['close'].unstack().dropna(axis=1).rename(columns=dict(index_list[['ts_code','name']].values))) final_data.tail()到這一步已獲取到所需數據并做了規整處理。下面對板塊和相關個股漲跌幅進行分析,并構建函數用于監測板塊熱點和強勢個股的輪動走向。
板塊熱點與個股漲跌監測分析
要分析板塊熱點的走向,首先是計算板塊指數在不同時間周期下的收益率(動量)。下面以1日、5日、20日、60日和120日作為時間窗口計算概念指數的收益率。
def?date_ret(data,w_list=[1,5,20,60,120]):df=pd.DataFrame()for?w?in?w_list:df[str(w)+'日收益率%']=(((data/data.shift(w)-1)*100).round(2).iloc[w:].fillna(0).T.iloc[:,-1])return?dfdate_ret(final_data).sort_values('120日收益率%',ascending=False)
120日漲幅居前板塊指數。
120日跌幅最多的前五個板塊指數。
概念板塊指數周期漲跌幅可視化
#使用pyecharts0.5.11版本可視化 def?out_chart(w=120):col=str(w)+'日收益率%'ddd=date_ret(final_data).sort_values(col,ascending=False)[col]x=list(ddd.index)y=list(ddd.values)bar=Bar(f"同花順概念指數{w}日收益率(%)",title_text_size=15,title_pos='center')bar.add("",?x,y,is_label_show=False,?is_datazoom_show=True)return?bar#最近一個交易日 #圖形為html動態交互式,可通過拖曳查看所有概念指數的詳細漲跌幅 out_chart(1)#近5個交易日 out_chart(5)#近20個交易日 out_chart(20)#近120個交易日 out_chart(120)除了使用pyecharts對板塊不同周期下的動量進行監測(動態交互式),還可以使用熱力圖監測最近交易日各板塊指數的輪動走向。圖片輸出可以使用網頁顯示更全面。
#由于同花順指數行情數據獲取不到下面概念,需剔除 xx=['華為汽車',?'鹽湖提鋰',?'鴻蒙概念',?'共同富裕示范區',?'MCU芯片',?'牙科醫療',?'CRO概念',?'鈉離子電池',?'工業母機',?'北交所概念',?'NFT概念',?'抽水蓄能',?'換電概念',?'海峽兩岸',?'WiFi?6',?'智能制造',?'EDR概念',?'動力電池回收',?'汽車芯片',?'傳感器',?'柔性直流輸電',?'虛擬數字人',?'預制菜',?'幽門螺桿菌概念'] sss=final_data[set(final_index_list.name.values)-set(xx)] import?seaborn?as?sns pt?=?((sss/sss.shift(1)-1)*100).round(2)[-10:] plt.figure(figsize=(25,5)) sns.heatmap(pt,?linewidths?=?0.05,cmap='Reds');一旦出現賺錢效應,首先看的是哪個整體板塊在領漲,這個板塊是什么概念,是不是當下的大熱點?選股就是先看熱點板塊,龍頭股與題材有關,題材代表了一個板塊,不會是單打獨斗,關注熱點板塊,在板塊中選股非常重要。發現最大題材板塊后,核心是找板塊龍頭股。在整個板塊中最先上漲,漲勢最強的個股就一定要關注并分析。
熱點板塊成分股龍頭股監測
#受篇幅所限,以下代碼略,完整代碼分享在Python金融量化知識星球中。 #注意,寫作本文時交易日期為20220209,即默認end='20220209'. def?get_stock_price(code,start='20200101'):pass def?all_stock_price(name):pass def?stock_rets_rank(name,p=120):pass def?stock_heat(name='數字貨幣'):passstock_rets_rank('鉀肥')實際上鉀肥這個概念所含個股較少,且鹽湖股份由于中間停牌復牌后短期暴漲(實際上是鹽湖提鋰概念在驅動),因此該概念指數120日漲幅最大。一起看下近期較熱門的數字貨幣概念。翠微股份120日漲幅高達314%,可以說是近期接替妖股九安醫療的一大熱門股。妖股是主力資金博弈到極致之物,與基本面與價值投資沒有任何干系。
stock_rets_rank('數字貨幣')隨著數字貨幣財經新聞的持續發酵,2022年2月09日數字貨幣板塊單日暴漲9%,板塊內近20只個股漲停,四只創業板20cm。值得注意的是,板塊的短期暴漲也是風險集聚的表現,特別是碰上那些跟風上漲的個股,當板塊整體進入回調時往往一地雞毛。
stock_rets_rank('數字貨幣',p=1)[:20]使用熱力圖監測熱點板塊個股。
stock_heat('數字貨幣')結語
本文使用Python對同花順概念板塊指數及個股進行數據探索性分析,試圖從動量的角度捕捉熱門題材的走向,構建強勢板塊和個股的監測系統。利用板塊和個股監測系統可以構建動量(強者恒強)或動量反轉(物極必反)的量化交易策略。本文的數據挖掘存在一定的局限性,只考慮了某些時間周期內板塊和個股的收益率表現(技術面)。關于概念板塊行業的分析,還可以結合財經文本分析做深度挖掘,實際上熱點題材最好是結合基本面與技術面的深入分析,技術面正如溫度計一樣只能告訴你當前的冷熱,而基本面可以推斷為啥上漲的原因,未來持續性如何,這個基本邏輯非常重要。金融市場上的交易,沒有完全不變和百分之百確定的東西,任何分析和決策都是一種概率,而量化為我們多維度分析市場提供一種工具,實際上實戰才是唯一能快速提升交易能力的方法。
關于Python金融量化
專注于分享Python在金融量化領域的應用。加入知識星球,可以免費獲取30多g的量化投資視頻資料、量化金融相關PDF資料、公眾號文章Python完整源碼、量化投資前沿分析框架,與博主直接交流、結識圈內朋友等。
總結
以上是生活随笔為你收集整理的【Python量化】如何监测领涨板块,挖掘题材龙头股?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果或引爆NFC支付潮 关注国内概念板块
- 下一篇: 阿龙的学习笔记---python相关杂七