市場(chǎng)有自己的時(shí)間觀念。股票投資就如同任何人類互動(dòng)一樣,耐心是一項(xiàng)美德?!_伯特·D·愛(ài)德華《股市趨勢(shì)技術(shù)分析》
引言
TA-Lib,全稱“Technical Analysis Library”, 即技術(shù)分析庫(kù),是Python金融量化的高級(jí)庫(kù),涵蓋了150多種股票、期貨交易軟件中常用的技術(shù)分析指標(biāo),如MACD、RSI、KDJ、動(dòng)量指標(biāo)、布林帶等等。TA-Lib可分為10個(gè)子板塊:Overlap Studies(重疊指標(biāo)),Momentum Indicators(動(dòng)量指標(biāo)),Volume Indicators(交易量指標(biāo)),Cycle Indicators(周期指標(biāo)),Price Transform(價(jià)格變換),Volatility Indicators(波動(dòng)率指標(biāo)),Pattern Recognition(模式識(shí)別),Statistic Functions(統(tǒng)計(jì)函數(shù)),Math Transform(數(shù)學(xué)變換)和Math Operators(數(shù)學(xué)運(yùn)算),見(jiàn)下圖。本公眾號(hào)將以系列的形式詳細(xì)介紹talib技術(shù)指標(biāo)的實(shí)現(xiàn)和應(yīng)用,而本文作為開(kāi)篇,主要介紹Overlap Studies內(nèi)容。
安裝與使用
安裝:在cmd上使用“pip install talib”命令一般會(huì)報(bào)錯(cuò),正確安裝方法是,進(jìn)入https://www.lfd.uci.edu/~gohlke/pythonlibs/,下拉選擇TA_Lib-0.4.17-cp37-cp37m-win_amd64.whl(win系統(tǒng)64位,python3.7版本,根據(jù)自己系統(tǒng)和python版本選擇相應(yīng)的安裝包),將下載包放在當(dāng)前工作路徑中,然后在Anaconda Prompt(或windows的cmd)里面輸入命令:pip install TA_Lib-0.4.17-cp27-cp27m-win_amd64.whl。
使用:import talib as ta
Overlap Studies Functions重疊指標(biāo)
01 移動(dòng)平均線系列
移動(dòng)平均線是技術(shù)分析理論中應(yīng)用最普遍的指標(biāo)之一,主要用于確認(rèn)、跟蹤和判斷趨勢(shì),提示買入和賣出信號(hào),在單邊市場(chǎng)行情中可以較好的把握市場(chǎng)機(jī)會(huì)和規(guī)避風(fēng)險(xiǎn)。但是,移動(dòng)平均線一般要與其他的技術(shù)指標(biāo)或基本面相結(jié)合來(lái)使用,特別是當(dāng)市場(chǎng)處于盤整行情時(shí),其買入賣出信號(hào)會(huì)頻繁出現(xiàn),容易失真。
通用函數(shù)名:MA
代碼:ta.MA(close,timeperiod=30,matype=0)
移動(dòng)平均線系列指標(biāo)包括:SMA簡(jiǎn)單移動(dòng)平均線、EMA指數(shù)移動(dòng)平均線、WMA加權(quán)移動(dòng)平均線、DEMA雙移動(dòng)平均線、TEMA三重指數(shù)移動(dòng)平均線、TRIMA三角移動(dòng)平均線、KAMA考夫曼自適應(yīng)移動(dòng)平均線、MAMA為MESA自適應(yīng)移動(dòng)平均線、T3三重指數(shù)移動(dòng)平均線。
其中,close為收盤價(jià),時(shí)間序列,timeperiod為時(shí)間短,默認(rèn)30天,指標(biāo)類型matype分別對(duì)應(yīng):0=SMA, 1=EMA, 2=WMA, 3=DEMA, 4=TEMA, 5=TRIMA, 6=KAMA, 7=MAMA, 8=T3 (Default=SMA)
不同類型的移動(dòng)均線也有各自相應(yīng)的調(diào)用函數(shù):
#先引入后面可能用到的包(package)
importpandasaspd
importnumpyasnp
importmatplotlib.pyplotasplt
%matplotlib inline
#正常顯示畫圖時(shí)出現(xiàn)的中文和負(fù)號(hào)
frompylabimportmpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
#引入TA-Lib庫(kù)
importtalibasta
#查看包含的技術(shù)指標(biāo)和數(shù)學(xué)運(yùn)算函數(shù)
#print(ta.get_functions())
#print(ta.get_function_groups())
ta_fun=ta.get_function_groups()
ta_fun.keys()
#使用tushare獲取上證指數(shù)數(shù)據(jù)作為示例
importtushareasts
df=ts.get_k_data('sh',start='2000-01-01')
df.index=pd.to_datetime(df.date)
df=df.sort_index()
types=['SMA','EMA','WMA','DEMA','TEMA',
'TRIMA','KAMA','MAMA','T3']
df_ma=pd.DataFrame(df.close)
foriinrange(len(types)):
df_ma[types[i]]=ta.MA(df.close,timeperiod=5,matype=i)
df_ma.tail()
df_ma.loc['2018-08-01':].plot(figsize=(16,6))
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.title('上證指數(shù)各種類型移動(dòng)平均線',fontsize=15)
plt.xlabel('')
plt.show()
數(shù)據(jù)來(lái)源:tushare
#畫5、30、120、250指數(shù)移動(dòng)平均線
N=[5,30,120,250]
foriinN:
df['ma_'+str(i)]=ta.EMA(df.close,timeperiod=i)
df.tail()
df.loc['2014-01-01':,['close','ma_5','ma_30','ma_120','ma_250']].plot(figsize=(16,6))
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.title('上證指數(shù)走勢(shì)',fontsize=15)
plt.xlabel('')
plt.show()
數(shù)據(jù)來(lái)源:tushare
02 布林帶
布林帶(Bollinger Band),由壓力線、支撐線價(jià)格平均線組成,一般情況價(jià)格線在壓力線和支撐線組成的上下區(qū)間中游走,區(qū)間位置會(huì)隨著價(jià)格的變化而自動(dòng)調(diào)整。布林線的理論使用原則是:當(dāng)股價(jià)穿越最外面的壓力線(支撐線)時(shí),表示賣點(diǎn)(買點(diǎn))出現(xiàn)。當(dāng)股價(jià)延著壓力線(支撐線)上升(下降)運(yùn)行,雖然股價(jià)并未穿越,但若回頭突破第二條線即是賣點(diǎn)或買點(diǎn)。在實(shí)際應(yīng)用中,布林線有其滯后性,相對(duì)于其他技術(shù)指標(biāo)在判斷行情反轉(zhuǎn)時(shí)參考價(jià)值較低,但在判斷盤整行情終結(jié)節(jié)點(diǎn)上成功率較高。
計(jì)算方法:首先計(jì)出過(guò)去 N 日收巿價(jià)的標(biāo)準(zhǔn)差 SD(Standard Deviation) ,通常再乘 2 得出 2 倍標(biāo)準(zhǔn)差, Up 線為 N日平均線加 2 倍標(biāo)準(zhǔn)差, Down 線則為 N日平均線減 2 倍標(biāo)準(zhǔn)差。
代碼:ta.BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)
H_line,M_line,L_line=ta.BBANDS(df.close, timeperiod=20, nbdevup=2, nbdevdn=2, matype=0)
df1=pd.DataFrame(df.close,index=df.index,columns=['close'])
df1['H_line']=H_line
df1['M_line']=M_line
df1['L_line']=L_line
df1.tail()
df1.loc['2013-01-01':'2014-12-30'].plot(figsize=(16,6))
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.title('上證指數(shù)布林線',fontsize=15)
plt.xlabel('')
plt.show()
數(shù)據(jù)來(lái)源:tushare
03 其他指標(biāo)
df2=pd.DataFrame(df.close)
df2['HT']=ta.HT_TRENDLINE(df.close)
periods =np.array([3]*len(df), dtype=float)
df2['MAVP']=ta. MAVP(df.close,periods)
df2['MIDPOINT']=ta.MIDPOINT(df.close)
df2['MIDPRICE']=ta.MIDPRICE(df.high,df.low)
df2['SAR']=ta.SAR(df.high,df.low)
df2['SAREXT']=ta.SAREXT(df.high,df.low)
df2.tail()
df2.loc['2018-01-01':'2019-02-21',['close','HT','MAVP','MIDPOINT','MIDPRICE','SAR']].plot(figsize=(16,6))
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.title('上證指數(shù)的其他趨勢(shì)指標(biāo)線',fontsize=15)
plt.xlabel('')
plt.show()
數(shù)據(jù)來(lái)源:tushare
df2.loc['2018-01-01':'2019-02-21','SAREXT'].plot(figsize=(16,6))
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.title('上證指數(shù)的拋物線擴(kuò)展走勢(shì)',fontsize=15)
plt.xlabel('')
plt.show()
數(shù)據(jù)來(lái)源:tushare
均線策略回測(cè)
雙均線策略:分別選擇L天和S天的移動(dòng)平均線(L>S),如L=20,S=5,當(dāng)短周期S均線(5日均線)向上突破長(zhǎng)周期L均線(20日均線)時(shí),為買入點(diǎn);反之,當(dāng)S均線向下?lián)舸㎜均線時(shí)為賣出點(diǎn)。
標(biāo)的:中國(guó)平安(601318),期間:2014.1-2019.1,回測(cè)結(jié)果:
數(shù)據(jù)來(lái)源:萬(wàn)礦
布林線策略回測(cè)
標(biāo)的:黃金期貨
策略:下穿布林線上邊界做空,上穿布林線下邊界做多
(1)timeperiod=10,回測(cè)期間:2017.01.01-2019.02.21
數(shù)據(jù)來(lái)源:萬(wàn)礦
(2)timeperiod=10,回測(cè)期間:2016.01.01-2017.02.21
數(shù)據(jù)來(lái)源:萬(wàn)礦
關(guān)于Python金融量化
專注于分享Python在金融領(lǐng)域的實(shí)際應(yīng)用,包括金融數(shù)據(jù)分析、金融建模與量化投資等。加入知識(shí)星球,免費(fèi)獲取量化投資學(xué)習(xí)視頻、公眾號(hào)文章Python源代碼,一起學(xué)習(xí),共同進(jìn)步!
聯(lián)系客服