【手把手教你】量价关系分析与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 应用实例代码
计算交易量指标并可视化
#使用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('创业板指')
最后,在万矿上使用AD线进行了历史回测,作为演示例子,这里只对东方通信和中国平安股票进行了回测,期间为2018年1月1日至2019年3月25日。从AD线单一指标回测来看,在市场反弹或形成向上趋势时跑赢市场,但是最大回撤也比较大,如东方通信达到43.2%,当然这与回测期间和标的选择有很大的关系。这里只是作为演示例子,深入研究还得待结合其他指标。
东方通信AD线回测结果:
中国平安AD线回测结果:
结语
价量分析系统属于技术分析,而技术分析是股票分析的温度计。温度计无法预测未来的准确温度,更不可能决定温度。因此,技术分析只是告诉你发生了什么,但不能预测未来会发生什么。不要过于依赖技术指标提供的信号,市场总是充满突发性的事件,交易者情绪波动较大,因此股价并不是总是沿着规律运行。在使用量价关系时,不仅要分析量价关系中量的变化对价的影响,还应该分析量变化的原因,更应该知道这些变化之后交易者的情绪或行为,只有这样才能真正体会量价关系的精髓,提高自己预判的准确率。
关于Python金融量化