【手把手教你】量价关系分析与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 npimport matplotlib.pyplot as plt%matplotlib inline #正常显示画图时出现的中文和负号from pylab import mplmpl.rcParams['font.sans-serif']=['SimHei']mpl.rcParams['axes.unicode_minus']=False#引入TA-Lib库import talib as ta#获取交易数据函数,这里使用tushare的老接口,比较方便import tushare as tsdef 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()3602index={'上证综指': '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 patchesdef 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金融量化

(0)

相关推荐