【手把手教你】量价关系分析与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天移动平均结合,与其他指标结合;
由正变负卖出,由负变正买进。
03
OBV - 能量潮
全称为 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的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天移动平均结合,与其他指标结合;
由正变负卖出,由负变正买进。
03
OBV - 能量潮
全称为 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线回测结果:
结语
价量分析系统属于技术分析,而技术分析是股票分析的温度计。温度计无法预测未来的准确温度,更不可能决定温度。因此,技术分析只是告诉你发生了什么,但不能预测未来会发生什么。不要过于依赖技术指标提供的信号,市场总是充满突发性的事件,交易者情绪波动较大,因此股价并不是总是沿着规律运行。在使用量价关系时,不仅要分析量价关系中量的变化对价的影响,还应该分析量变化的原因,更应该知道这些变化之后交易者的情绪或行为,只有这样才能真正体会量价关系的精髓,提高自己预判的准确率。