1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        股票漲停板探索性分析與數(shù)據(jù)挖掘

        共 10717字,需瀏覽 22分鐘

         ·

        2021-05-30 10:40

        D1


        引言



        從系統(tǒng)論的角度來看,股票市場是一個(gè)復(fù)雜系統(tǒng),市場的漲跌是由資金流(市場資金存量、流入量、流出量)和回路(市場信息與交易者行為形成的各種反饋、調(diào)節(jié)、增強(qiáng)回路)非線性作用下的結(jié)果。換句話說,牛市是資金流入和正向反饋(賺錢效應(yīng)吸引更多資金流入)占主下的系統(tǒng)演化過程,熊市則相反。而影響市場資金流向和反饋回路形成的驅(qū)動(dòng)因素主要有政策、經(jīng)濟(jì)、交易情緒、流動(dòng)性、技術(shù)面和外圍環(huán)境等。市場上對(duì)這些驅(qū)動(dòng)因素的研究和把握最強(qiáng)的是“聰明資金”(Smart money),在A股上則是那些游資主力,而不是基金。龍虎榜是這些游資的戰(zhàn)場,而漲停板則是游資主力釋放的最重要的操盤信號(hào)。


        漲停板制度是我國借鑒國外早期證券市場,為防止交易價(jià)格暴漲暴跌,抑制過度投機(jī)的制度,卻也成了游資主力吸引跟風(fēng)盤的重要手段。利用概念題材炒作,快速封漲停板,通過類似饑餓營銷地方式吸引各路跟風(fēng)資金,再拉高出貨賺取價(jià)差。當(dāng)然漲停板不代表一出現(xiàn)就會(huì)上漲,也可能是曇花一現(xiàn),也可能是主力挖的坑,但是游資主力發(fā)動(dòng)進(jìn)攻一般以漲停板出現(xiàn)。因此漲停板是實(shí)盤操作中值得深入分析和挖掘的重要信號(hào)。本文使用Python對(duì)A股市場2016-2021年漲停板個(gè)股數(shù)據(jù)進(jìn)行探索性分析,為讀者挖掘漲停股、深入認(rèn)識(shí)市場提供一個(gè)量化視角。


        D2


        數(shù)據(jù)獲取



        本文數(shù)據(jù)來源于tushare,數(shù)據(jù)期間為2016年2月15日-2021年4月23日,包含74300個(gè)樣本。tushare pro中的limit_list函數(shù)可直接獲取A股中每日漲跌停個(gè)股信息。但由于該數(shù)據(jù)需積分達(dá)到2000才能獲取,所以本文也提供了csv格式數(shù)據(jù)供大家學(xué)習(xí),有需要的在公眾號(hào)后臺(tái)回復(fù) “漲停板數(shù)據(jù)” 即可獲取下載鏈接。


        import pandas as pd
        import numpy as np
        #畫圖
        import matplotlib.pyplot as plt
        #正確顯示中文和負(fù)號(hào)
        plt.rcParams['font.sans-serif']=['SimHei']
        plt.rcParams['axes.unicode_minus']=False
        #處理時(shí)間
        from dateutil.parser import parse
        from datetime import datetime,timedelta
        #使用tushare獲取數(shù)據(jù)
        import tushare as ts 
        token='輸入你在tushare上注冊的token'
        pro=ts.pro_api(token)

        #獲取最新交易日期
        #獲取交易日歷
        cals=pro.trade_cal(exchange='SSE')
        cals=cals[cals.is_open==1].cal_date.values
        def get_now_date():
            #獲取當(dāng)天日期時(shí)間
            d=datetime.now().strftime('%Y%m%d')
            while d not in cals:
                d1=parse(d)
                d=(d1-timedelta(1)).strftime('%Y%m%d')
            return d
        d1=get_now_date()
        n1=np.argwhere(cals==d1)[0][0]+1
        #獲取最近6年的交易日行情
        #實(shí)際上tushare只能獲取2016后的漲跌停數(shù)據(jù)
        dates=cals[-250*6:n1]

        df=pro.limit_list(trade_date=dates[0], limit_type='U')
        for date in dates[1:]:
            df_tem=pro.limit_list(trade_date=date, limit_type='U')
            df=pd.concat([df,df_tem])
        #查看前幾行數(shù)據(jù)
        #實(shí)際上tushare只能獲取2016后的漲跌停數(shù)據(jù)
        #數(shù)據(jù)下載3-4分鐘左右
        df.head()


        其中,fl_ratio 為封單手?jǐn)?shù)/流通股本;amp是振幅;fc_ratio是封單金額/日成交金額;fl_ratio為封單手?jǐn)?shù)/流通股本;fd_amount為封單金額;first_time代表首次漲停時(shí)間;last_time代表最后封板時(shí)間;open_times是打開次數(shù);strth是漲跌停強(qiáng)度。


        #保存數(shù)據(jù)到本地
        #df.to_csv('up_limit_data.csv')
        #讀取數(shù)據(jù)
        #df=pd.read_csv('up_limit_data.csv',index_col=0)


        D3


        市場漲停整體情況



        描述性統(tǒng)計(jì)

        df.iloc[:,1:].describe().round(2)

        從描述性統(tǒng)計(jì)來看,漲停股價(jià)格大都在25元及以下(75%分位數(shù)),其他幾個(gè)變量波動(dòng)標(biāo)準(zhǔn)差均較大,反映個(gè)股漲停的特征差別較大。下面使用可視化的方式展現(xiàn)不同價(jià)格期間個(gè)股漲停情況。


        漲停股價(jià)格區(qū)間

        先構(gòu)建一個(gè)價(jià)格區(qū)間標(biāo)記函數(shù),將個(gè)股收盤價(jià)劃分為10元以下、10-30元、30-50元、50-100元以及100元以上,價(jià)格區(qū)間的劃分主要是根據(jù)經(jīng)驗(yàn)和A股市場情況而定。

        def dy_zh(data, cut_points, labels=None): 
            min_num = data.min() 
            max_num = data.max() 
            break_points = [min_num] + cut_points + [max_num]
            if not labels: 
                labels = range(len(cut_points)+1)
            else
                 labels=[labels[i] for i in range(len(cut_points)+1)] 
            dataBin = pd.cut(data,bins=break_points,
                 labels=labels,include_lowest=True)    
            return dataBin 

        cut_points = [10,30,50,100
        labels=['10元以下''10-30元','30-50元','50-100元','100元以上'
        #調(diào)用函數(shù)dy_zh,增加新列
        df['價(jià)格區(qū)間'] = dy_zh(df['close'], cut_points, labels) 
        #查看標(biāo)簽列,取值范圍前面加上了序號(hào),是便于后面生成表格時(shí)按順序排列
        #df.head()


        使用柱狀圖展示不同價(jià)格區(qū)間下漲停個(gè)股數(shù)量分布。

        group_price=df.groupby('價(jià)格區(qū)間')['trade_date'].count()

        plt.figure(figsize=(12,5))
        colors=['#1f77b4','#ff7f0e','#2ca02c','#d62728','#9467bd','#8c564b']
        fig=plt.bar(group_price.index,group_price.values,color=colors[:5]);
        #自動(dòng)添加標(biāo)簽
        def autolabel(fig):
            for f in fig:
                h=f.get_height()
                plt.text(f.get_x()+f.get_width()/2,1.02*h,
                f'{int(h)}',ha='center',va='bottom')
        autolabel(fig)



        漲停板排名


        下面對(duì)2016-2021年期間個(gè)股出現(xiàn)漲停次數(shù)進(jìn)行排序,前二十名中有十二個(gè)是ST(含*)股,ST股一直是市場短線資金炒作的對(duì)象,容易暴漲暴跌,特別是有摘帽預(yù)期的個(gè)股,在資金的推動(dòng)下短期可能出現(xiàn)連續(xù)幾十個(gè)漲停,當(dāng)然炒作過后往往也一地雞毛,如*ST天馬。

        def plot_bar(group_data):
            plt.figure(figsize=(16,5))
            fig=plt.bar(group_data.index,group_data.values);
            autolabel(fig)
            plt.title('2016-2021漲停板排名前20',size=15);

        group_name=df.groupby('name')['ts_code'].count().sort_values(ascending=False)[:20]
        plot_bar(group_name)





        剔除*ST/ST/N股后排名

        下面是剔除*ST/ST/N股后的情況,其中誠邁科技在2019年和2020年2月短短一年期間以大量漲停的方式實(shí)現(xiàn)了二三十倍的漲幅。

        #分別剔除ST、*ST和新股(N開頭)
        df_st=df[-(df.name.str.startswith('ST') | df.name.str.startswith('*ST')|df.name.str.startswith('N'))]
        group_name_st=df_st.groupby('name')['ts_code'].count().sort_values(ascending=False)[:20]
        plot_bar(group_name_st)




        每日漲停統(tǒng)計(jì)


        每日漲停個(gè)數(shù)在一定程度上反映了市場的交投熱情,當(dāng)漲停個(gè)股超過100個(gè)時(shí),預(yù)示著市場賺錢效應(yīng)較高。

        #使用0.5.11版本的pyecharts
        from pyecharts import Bar
        count_=df.groupby('trade_date')['trade_date'].count()
        attr=count_.index
        v1=count_.values
        bar=Bar('每日漲停板個(gè)數(shù)','2016-2021',title_text_size=15)
        bar.add('',attr,v1,is_splitline_show=False,is_datazoom_show=True,linewidth=2)
        bar


        D4


        行業(yè)漲停分布



        細(xì)分行業(yè)

        tushare pro的stock_basic可以獲取個(gè)股所在的細(xì)分行業(yè),將該數(shù)據(jù)與漲停數(shù)據(jù)合并,然后按照行業(yè)進(jìn)行聚合,可以得到各細(xì)分行業(yè)的漲停個(gè)股分布情況。

        #獲取股票列表
        stocks=pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
        #排除新股
        stocks=stocks[stocks.list_date<(parse(get_now_date())-timedelta(60)).strftime('%Y%m%d')]
        dff=pd.merge(df[['trade_date','ts_code','name','close','pct_chg','fc_ratio','fl_ratio']],stocks[['ts_code','name','industry','list_date']])
        #dff.head()

        (dff.groupby('industry')['name'].count().sort_values(ascending=False)[:10]
         .plot.bar(figsize=(14,5),rot=0));
        plt.title('2016-2021漲停板行業(yè)排名前十',size=15);



        dff['year']=(pd.to_datetime(dff['trade_date'].astype(str))).dt.strftime('%Y')
        #對(duì)每年行業(yè)漲停板個(gè)數(shù)排名進(jìn)行可視化
        #生成2*3六個(gè)子圖
        plot_pos=list(range(321,327))
        #每個(gè)子圖顏色
        colors=['#1f77b4','#ff7f0e','#2ca02c','#d62728','#9467bd','#8c564b']
        fig=plt.figure(figsize=(18,14))
        fig.suptitle('2016-2021行業(yè)漲停排名前十',size=15)
        years=sorted(dff['year'].unique())
        for i in np.arange(len(plot_pos)):
            ax=fig.add_subplot(plot_pos[i])
            (dff[dff.year==years[i]].groupby('industry')['name']
                             .count()
                             .sort_values(ascending=False)[:10]
                             .plot.bar(rot=0,color=colors[i]));
            ax.set_title(years[i])
            ax.set_xlabel('')
        plt.show()


        大類行業(yè)


        上述行業(yè)分類過細(xì),對(duì)部分相關(guān)細(xì)分行業(yè)進(jìn)行合并,最后得到28個(gè)大類行業(yè)。

        new_name=['汽車','電力','有色金融','鋼鐵','農(nóng)林牧漁','醫(yī)藥生物','房地產(chǎn)','交通運(yùn)輸','煤炭','金融','食品飲料',
                  '石油','公用事業(yè)','計(jì)算機(jī)','電子','通信','休閑服務(wù)','紡織服裝','商業(yè)貿(mào)易','建筑裝飾','機(jī)械設(shè)備','輕工制造','化工']
        old_name=[('汽車配件''汽車整車','汽車服務(wù)','摩托車',),('火力發(fā)電','新型電力''水力發(fā)電'),('黃金''鋁','小金屬','鉛鋅','銅',),
                 ('普鋼','特種鋼','鋼加工',),( '漁業(yè)''種植業(yè)','林業(yè)','農(nóng)業(yè)綜合','飼料''農(nóng)藥化肥','橡膠', ),('醫(yī)療保健','生物制藥','醫(yī)藥商業(yè)','中成藥','化學(xué)制藥',),
                 ('房產(chǎn)服務(wù)''區(qū)域地產(chǎn)','全國地產(chǎn)','園區(qū)開發(fā)',),('公路','鐵路','水運(yùn)''航空','空運(yùn)','公共交通','路橋','港口','船舶''倉儲(chǔ)物流',  ),
                 ('煤炭開采','焦炭加工',),('證券','保險(xiǎn)','多元金融','銀行'),('啤酒','食品''乳制品''紅黃酒','白酒','軟飲料',),
                 ('石油開采','石油加工','石油貿(mào)易'),('供氣供熱','水務(wù)','環(huán)境保護(hù)', ),
                 ('互聯(lián)網(wǎng)''軟件服務(wù)''IT設(shè)備', ),('半導(dǎo)體''元器件',),('通信設(shè)備','電信運(yùn)營',),( '文教休閑','旅游服務(wù)','旅游景點(diǎn)','酒店餐飲','影視音像','出版業(yè)',),
                 ('染料涂料','服飾','紡織','紡織機(jī)械','家居用品'), ('商品城','百貨''批發(fā)業(yè)''超市連鎖','電器連鎖''其他商業(yè)','商貿(mào)代理','廣告包裝'),
                 ('建筑工程','裝修裝飾','其他建材','水泥'),('專用機(jī)械','輕工機(jī)械','化工機(jī)械','機(jī)械基件','運(yùn)輸設(shè)備','機(jī)床制造','農(nóng)用機(jī)械','工程機(jī)械''電器儀表'),
                 ('造紙','陶瓷','玻璃''塑料','礦物制品',),('化工原料','化纖','日用化工')]


        合并成大類板塊后,數(shù)據(jù)顯示,4月23日醫(yī)藥生物板塊漲停個(gè)股最多,此外,機(jī)械設(shè)備、電子、紡織服裝、汽車和休閑服務(wù)(含旅游)等板塊最近一周漲停股較多,與近期熱點(diǎn)密切相關(guān),如印度疫情復(fù)發(fā)、新能源、五一旅游等。


        #將某些細(xì)分行業(yè)合并成大類
        for i in range(len(old_name)):
            for j in old_name[i]:
                dff.replace(j,new_name[i],inplace=True)
        industry_up=pd.DataFrame()
        #獲取最近10日各行業(yè)漲停板數(shù)據(jù)
        for d in dates[-10:]:
            industry_up[d]=dff[dff.trade_date==d].groupby('industry')['name'].count()
        industry_up.fillna(0).sort_values(dates[-1],ascending=False).astype(int)


        使用滾動(dòng)5日累計(jì)板塊漲停個(gè)數(shù),可以一定程度反映近期板塊題材的資金的關(guān)注情況,排在前面的是汽車、醫(yī)藥生物、機(jī)械設(shè)備和電子。

        #近期滾動(dòng)5天行業(yè)漲停個(gè)股數(shù)
        (industry_up.fillna(0).T.rolling(5).sum()).T.dropna(axis=1).sort_values(dates[-1],ascending=False)


        D5


        個(gè)股連板情況



        下面構(gòu)建函數(shù)統(tǒng)計(jì)和分析個(gè)股連續(xù)漲停的概率以及獲取某日連板股票池。由于代碼較長,此處省略,完整版見Python金融量化知識(shí)星球


        def up_con_pro(df,ddd):
            pass


        連板概率

        ddd=sorted(df.trade_date.unique()[-60:],reverse=True)
        up_con_pro(df,ddd).round(4).T.head(10)


        數(shù)據(jù)顯示,個(gè)股第一次漲停后,第二天連續(xù)漲停的概率接近30%,連續(xù)7-10板的概率接近0。剔除st股后連板的概率更低。

        #剔除st股后
        #up_con_pro(df_st,ddd).round(4).T.head(10)

        up_con_pro(df,ddd).T.describe().round(4)

        #剔除st股
        #up_con_pro(df_st,ddd).T.describe().round(4)


        獲取某日連板個(gè)股


        下面使用get_con_up_stocks獲取指定日期連板的個(gè)股名單,如2021年4月23日,錦泓集團(tuán)、ST巖石、*ST節(jié)能實(shí)現(xiàn)四連板。

        def get_con_up_stocks(date):
           #代碼較長,此處省略,完整版見Python金融量化知識(shí)星球

        #獲取當(dāng)前交易日最新連板個(gè)股
        #參數(shù)可輸入指定日期
        result=get_con_up_stocks(dates[-1])
        print(result[result>=2])

        603518.SH 4;600696.SH 4;000820.SZ 4;002175.SZ 3;002575.SZ 3;600462.SH 3;002997.SZ 2;002592.SZ 2;600518.SH 2;002885.SZ 2;603538.SH 2;002630.SZ 2;002071.SZ 2;002587.SZ 2;002021.SZ 2;600581.SH 2;601127.SH 2


        #stock_plot為個(gè)人畫圖腳本文件

        stock_plot(result.index[0]).kline_plot(ktype=0)


        D6


        結(jié)語



        美國著名投機(jī)家杰西·利弗莫爾(《股票作手回憶錄》)說,如果你不能在領(lǐng)頭羊上賺錢,就不可能在股市上賺錢。在A股市場,領(lǐng)頭羊個(gè)股往往是以漲停的形式開啟一波大行情,漲停板是反映主力進(jìn)攻(或撤退)的重要操盤信號(hào)。市場上一度流行著“有三必有五,有五必成妖”的漲停股說法。當(dāng)然從數(shù)據(jù)統(tǒng)計(jì)的概率來看,一直連五板及更多的概率是較低的,大部分妖股是連續(xù)漲停后經(jīng)過猛烈調(diào)整和洗盤再繼續(xù)拉升的。本文從量化的角度對(duì)A股漲停個(gè)股數(shù)據(jù)進(jìn)行了探索性分析,為讀者通過量化的手段挖掘漲停個(gè)股提供參考框架。對(duì)于驅(qū)動(dòng)個(gè)股漲停的具體反饋回路還有待深入探討,如存在哪些閉合因果關(guān)系鏈驅(qū)動(dòng)資金流向某個(gè)板塊題材和個(gè)股,或者說影響個(gè)股漲停和持續(xù)性的關(guān)鍵因素是什么?能否通過量化的手段構(gòu)建漲停板交易策略,歷史回測效果如何?這些問題留給讀者進(jìn)一步思考。



        PS公號(hào)內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起 100 天計(jì)劃!


        老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點(diǎn)一下如果感覺文章內(nèi)容不錯(cuò)的話,記得分享朋友圈讓更多的人知道!

        神秘禮包獲取方式

        識(shí)別文末二維碼,回復(fù):1024

        瀏覽 83
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            老师的奶水在线观看 | 精品国产乱码久久久久久蜜坠欲下 | 久久精品人人做人人爽电影蜜月 | 天堂网| 巨年少根与熟艳美妇 | A一级黄色片 | 高清无码视频网址 | 91gaV在线视频 | 被操逼 | 又大又紧又粉嫩的18b少妇 |