【手把手教你】量價關係分析與Python實現

如果操作過量,即使對市場判斷正確,仍會一敗塗地。——索羅斯

引言

成交量是股票市場的溫度計,許多股票的瘋狂上漲並非基本面發生了實質性的變化,而是短期籌碼和資金供求關係造成的。量價關係分析法是一種將價格走勢與成交量變化相結合的研究方法,正所謂,大軍未動,糧草先行。成交量一直被看為是股票市場的「糧草」,成交量的變化是股價變化的前兆。因此,成交量是分析判斷市場行情,並作出投資決策時的重要依據,也是各種技術分析指標應用時不可或缺的參照。

本文延續「手把手教你使用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

運用要點:

  • AD測量資金流向,AD向上表明多方佔優勢,反之表明空方佔優勢;
  • AD與價格的背離可視為買賣信號:底背離考慮買入,頂背離考慮賣出;
  • AD指標無需設置參數,但在應用時,可結合均線、MACD、KDJ等指標進行分析;
  • AD指標忽略了缺口的影響,有時無法真實反映價格與成交量的關係。

02 A/D Oscillator 震蕩指標

震蕩指標是計算長短周期的AD差,將資金流動情況與價格行為相對比,用來研判市場中資金流入和流出的情況。

函數名:ADOSC

調用格式:ta. ADOSC(high,low,close,volume,

fastperiod=3,slowperiod=10)

計算方法:fastperiod AD - slowperiod AD,AD的計算同上。

運用要點:

  • 交易信號是背離:看漲背離做多,看跌背離做空;
  • 股價與90天移動平均結合,與其他指標結合;
  • 由正變負賣出,由負變正買進。

03OBV - 能量潮

全稱為 On Balance Volume, 由 Joe Granville 提出,通過統計成交量變動的趨勢推測股價趨勢。

函數名:OBV

調用格式:ta.OBV(close, volume)

計算公式:以某日為基期,逐日累計每日股票總成交量,若隔日指數或股票上漲,則基期OBV加上本日成交量為本日OBV。隔日指數或股票下跌, 則基期OBV減去本日成交量為本日OBV。

研判:

  • 以「N」字型為波動單位,一浪高於一浪稱「上升潮」,下跌稱「跌潮」;
  • 上升潮買進,跌潮賣出;
  • 須配合K線圖、股價走勢和其他指標。

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 | 量化交易 | 技術分析 |