如果操作過量,即使對市場判斷正確,仍會一敗塗地。——索羅斯
引言
成交量是股票市場的溫度計,許多股票的瘋狂上漲並非基本面發生了實質性的變化,而是短期籌碼和資金供求關係造成的。量價關係分析法是一種將價格走勢與成交量變化相結合的研究方法,正所謂,大軍未動,糧草先行。成交量一直被看為是股票市場的「糧草」,成交量的變化是股價變化的前兆。因此,成交量是分析判斷市場行情,並作出投資決策時的重要依據,也是各種技術分析指標應用時不可或缺的參照。
本文延續「手把手教你使用Python的TA-Lib」系列,著重介紹交易量指標(Volume Indicators)及其運用。【手把手教你】股市技術分析利器之TA-Lib(一)主要探討了重疊指標的相關原理與Python實現,【手把手教你】股市技術分析利器之TA-Lib(二)則著重介紹了TA-Lib中強大的數學運算、數學變換、統計函數、價格變換、周期指標和波動率指標函數及其應用實例。TA-Lib的安裝使用可查看以前推文。
01 A/D Line 累積派發線
Chaikin Accumulation/Distribution Line (AD),是Marc Chaikin提出的用來平衡交易量的指標,以當日收盤價、最高價和最低價來估算一段時間內該股票累積的資金流量, 用來確定潛在的趨勢以及預測趨勢反轉。
函數名:AD
調用格式:ta.AD(high,low,close,volume)
計算方法: AD=前日AD值+(多空對比*成交量)
多空對比=((收盤價-最低價)-(最高價-收盤價))/(最高價-收盤價);注意:當最高價等於最低價時,多空對比 = (收盤價 / 昨收盤) - 1
運用要點:
02 A/D Oscillator 震蕩指標
震蕩指標是計算長短周期的AD差,將資金流動情況與價格行為相對比,用來研判市場中資金流入和流出的情況。
函數名:ADOSC
調用格式:ta. ADOSC(high,low,close,volume,
fastperiod=3,slowperiod=10)
計算方法:fastperiod AD - slowperiod AD,AD的計算同上。
03OBV - 能量潮
全稱為 On Balance Volume, 由 Joe Granville 提出,通過統計成交量變動的趨勢推測股價趨勢。
函數名:OBV
調用格式:ta.OBV(close, volume)
計算公式:以某日為基期,逐日累計每日股票總成交量,若隔日指數或股票上漲,則基期OBV加上本日成交量為本日OBV。隔日指數或股票下跌, 則基期OBV減去本日成交量為本日OBV。
研判:
04 應用實例代碼
#先引入後面可能用到的包(package) import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline
#正常顯示畫圖時出現的中文和負號 from pylab import mpl mpl.rcParams[font.sans-serif]=[SimHei] mpl.rcParams[axes.unicode_minus]=False
#引入TA-Lib庫 import talib as ta
#獲取交易數據函數,這裡使用tushare的老介面,比較方便 import tushare as ts def get_data(code,start=2018-11-01,end=2019-03-26): df=ts.get_k_data(code,start,end) df.index=pd.to_datetime(df.date) df=df.sort_index() return df[[open,close,high,low,volume]]
#獲取當前交易是所有股票代碼和名字 basics=ts.get_stock_basics() print(len(basics)) #basics.head()
3602
index={上證綜指: sh,深證成指: sz,滬深300: hs300, 創業板指: cyb, 上證50: sz50,中小板指: zxb}
#將當前交易的股票和常用指數代碼和名稱寫入字典,方便調用 stock=dict(zip(basics.name,basics.index)) stocks=dict(stock,**index)
#使用matplotlib畫k線圖以及 import matplotlib.patches as patches def plot_line(name): code=stocks[name] data=get_data(code) fig = plt.figure(figsize=(12,5)) ax1 = fig.add_axes([0, 1, 1, 1]) ax1.set_title(name+"K線圖與交易量指標", fontsize=15) ax1.set_xlim(-1, len(data)+1)
for i in range(len(data)): close_price,open_price = data.iloc[i, 1], data.iloc[i, 0] high_price, low_price = data.iloc[i,2], data.iloc[i, 3] trade_date = data.index[i] if close_price > open_price:#畫陽線 ax1.add_patch(patches.Rectangle((i-0.2, open_price), 0.4, close_price-open_price, fill=False, color=r)) ax1.plot([i, i], [low_price, open_price], r) ax1.plot([i, i], [close_price, high_price], r) else:#畫陰線 ax1.add_patch(patches.Rectangle((i-0.2, open_price), 0.4, close_price-open_price, color=g)) ax1.plot([i, i], [low_price, high_price], color=g) ax1.set_title("Price", fontsize=15, loc=left, color=r) #設置x軸標籤 ax1.set_xticks(range(0,len(data),5))#位置 ax1.set_xticklabels([(data.index[i]).strftime(%Y-%m-%d) for i in ax1.get_xticks()] , rotation=20) high, low, close, volume = np.array(data[high]),np.array(data[low]),np.array(data[close]),np.array(data[volume]) #計算AD線 AD = ta.AD(high, low, close, volume) #計算ADOSC線 ADOSC = ta.ADOSC(high,low, close, volume, fastperiod=3, slowperiod=10) #計算OBC線 OBV = ta.OBV(close, volume)
ax2 = ax1.twinx() ax2.plot(AD, color=r, linewidth_=2, label=AD) ax2.plot(ADOSC, color=b, linewidth_=2, label=ADOSC) ax2.plot(OBV, color=y, linewidth_=2, label=OBV) ax2.legend(loc=0)
plot_line(東方通信)
plot_line(上證綜指)
plot_line(創業板指)
plot_line(中國平安)
最後,在萬礦上使用AD線進行了歷史回測,作為演示例子,這裡只對東方通信和中國平安股票進行了回測,期間為2018年1月1日至2019年3月25日。從AD線單一指標回測來看,在市場反彈或形成向上趨勢時跑贏市場,但是最大回撤也比較大,如東方通信達到43.2%,當然這與回測期間和標的選擇有很大的關係。這裡只是作為演示例子,深入研究還得待結合其他指標。
東方通信AD線回測結果:
中國平安AD線回測結果:
價量分析系統屬於技術分析,而技術分析是股票分析的溫度計。溫度計無法預測未來的準確溫度,更不可能決定溫度。因此,技術分析只是告訴你發生了什麼,但不能預測未來會發生什麼。不要過於依賴技術指標提供的信號,市場總是充滿突發性的事件,交易者情緒波動較大,因此股價並不是總是沿著規律運行。在使用量價關係時,不僅要分析量價關係中量的變化對價的影響,還應該分析量變化的原因,更應該知道這些變化之後交易者的情緒或行為,只有這樣才能真正體會量價關係的精髓,提高自己預判的準確率。
關於Python金融量化
專註於分享Python在金融量化領域的應用。加入知識星球,可免費獲取30多g的Python量化投資視頻資料、公眾號文章完整源碼、量化投資前沿分析框架,向博提問、結識圈內朋友等。
推薦閱讀:
TAG:Python | 量化交易 | 技術分析 |