tushare找出箱体突破点
用第三方庫tushare之前,在anconda promt輸入 pip install tushare
pip install tushare下載好庫之后,我們需要去tushare大數據社區注冊賬號,新人完善下基本信息,即可免費調取足量的數據。
?完善好信息后,進入個人主頁頁面-接口token,復制里面的代碼,即可進入接下來的api初始化了。
ts.set_token('******') pro=ts.pro_api()token值(*****)這里輸入自己剛才復制的代碼即可。
獲取某只股票代碼如:ts.get_hist_data('600058') ,參數可以設置起始和截至日期,tushare給我們提供了近3年的數據,寫一些基本的策略驗證對于前期的新手是足夠的。
?拿到基礎數據之后,我們需要對數據進行初步加工。比如這里日期最新的開頭,所以我們需要調換下順序。同時可以取出我們需要的列數據,方便查看。
df.sort_index(ascending=True,inplace=True) df=df[['open','high','close','low','p_change','volume']]?拿到簡單加工后的數據就可以計算出我們策略需要的指標和數據了。我這里調用自己寫的MACD指標。函數會對原數據直接修改,不需要重新定義變量。
def getmacd(data,short=12,long=26,dea=9,close='收盤價'):data['EMA_short']=data['close'].ewm(span=short).mean()data['EMA_long']=data['close'].ewm(span=long).mean()data['dif']=data['EMA_short']-data['EMA_long']data['dea']=data['dif'].ewm(span=dea).mean()data['macd']= (data['dif']-data['dea'])*2return datagetmacd(df,close=df['close'])?后面的代碼便是對箱體的數據描述了,我這里把箱體定義成前后10天內漲幅不超過5個點,收盤價不超過10前面10天的最高點,同時加入了一些自己定義的指標,比如某天成交量的放大。定義完所有條件后,我們需要找出對應的日期。即用條件去控制:
cond1=df['p_change'].rolling(10).sum()<5.0 cond2=df['dif']>0 cond3=(df['high']>df['10日箱體頂部'])&(df['high'].shift(1)<df['10日箱體頂部']) cond4=df['p_change'].rolling(5).sum()<5.0 cond5=df['close'].rolling(5).mean()>df['close'].rolling(10).mean() cond6=df['K']>df['K'].shift(1) df.loc[cond1&cond2&cond3&cond4&cond5&cond6,'突破箱體']=1按照正常思維,我們希望他階段性突破一個壓力位是希望他放量出來的,否則容易被假象欺騙,那么我們再定義一個指標,突破箱體當天的成交量是放大的,而且箱體中,會伴隨著一些天數的成交量變動,感受到是否有資金悄悄接受籌碼。我這里采用10日平均成交量作為一個基準,大于這個量便認為有資金入場。
df.loc[df['volume']>df['volume'].rolling(10).mean(),'主力介入']=1 df.loc[df['突破箱體']==1,'主力介入']=1 df=df[df['主力介入'].isin([1])] df.reset_index(inplace=True)?到這里已經接近完成了。我們可以看到出現很多次資金放量。但是突破了箱體只有一次。
?但這一次也還沒有完成我們的結果。我想選出這突破的當天,他前面箱體內是出現多次放量的。這里我以基礎3為標準,即突破前10天內出現至少出現3次的量能波動。我們只需要將主力介入為NaN的地方填充為0,變可以方便我們計算。
df['主力介入'].fillna(0,inplace=True) df['波動']=df['主力介入'].rolling(10).sum()?這里可以看出,突破前只有2次量能波動.顯然不符合我們預期。換個股票代碼002412后看看結果。
?打開東財去看看。
?基本符合預期,那我們只需要加上最后一個條件,波動次數大于3就行。
df=df[df['波動']>3]下面是完整代碼,感興趣的可以自行修改。
df=ts.get_hist_data('002412') df.sort_index(ascending=True,inplace=True) df=df[['open','high','close','low','p_change','volume']] def getmacd(data,short=12,long=26,dea=9,close='收盤價'):data['EMA_short']=data['close'].ewm(span=short).mean()data['EMA_long']=data['close'].ewm(span=long).mean()data['dif']=data['EMA_short']-data['EMA_long']data['dea']=data['dif'].ewm(span=dea).mean()data['macd']= (data['dif']-data['dea'])*2return data getmacd(df,close=df['close']) df.loc[:,'9_high']=df['high'].rolling(9,min_periods=1).max() df.loc[:,'9_low']=df['low'].rolling(9,min_periods=1).min() df.loc[:,'RSV']=((df['close']-df['9_low'])/(df['9_high']-df['9_low']))*100 df.loc[:,'K']=df['RSV'].ewm(com=2).mean() df.loc[:,'D']=df['K'].ewm(com=2).mean() df['1日漲跌']=df['close'].shift(-1)-df['close'] df['3日漲跌']=df['close'].shift(-3)-df['close'] df['5日漲跌']=df['close'].shift(-5)-df['close'] df['10日漲跌']=df['close'].shift(-10)-df['close'] df=df[['open','high','close','low','p_change','volume','dif','K','1日漲跌','3日漲跌','5日漲跌','10日漲跌']] df.loc[:,'10日箱體頂部']=df['close'].rolling(10).max() cond1=df['p_change'].rolling(10).sum()<5.0 cond2=df['dif']>0 cond3=(df['high']>df['10日箱體頂部'])&(df['high'].shift(1)<df['10日箱體頂部']) cond4=df['p_change'].rolling(5).sum()<5.0 cond5=df['close'].rolling(5).mean()>df['close'].rolling(10).mean() cond6=df['K']>df['K'].shift(1) df.loc[cond1&cond2&cond3&cond4&cond5&cond6,'突破箱體']=1 df.loc[df['volume']>df['volume'].rolling(10).mean(),'主力介入']=1 df.loc[df['突破箱體']==1,'主力介入']=1 # df=df[df['主力介入'].isin([1])] df.reset_index(inplace=True) df['主力介入'].fillna(0,inplace=True) df['波動']=df['主力介入'].rolling(10).sum() df=df[df['突破箱體'].isin([1])] df=df[df['波動']>3] df總結
以上是生活随笔為你收集整理的tushare找出箱体突破点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 知识图谱入门
- 下一篇: 【虚幻引擎】UE4/UE5 后期处理盒子