阅读 811

Python量化交易进阶讲堂-TA-Lib库量价指标分析

《Python实战-构建基于股票的量化交易系统》小册子主要侧重于 Python 实战讲解,但在内容设计上提供了前置基础章节帮助读者快速掌握基础工具的使用。

同时我们会持续更新一些关于Python和量化相关扩展文章,帮助大家夯实基础和增值学习效果。在小册子《股票数据可视化:自定义Matplotlib版股票行情界面》一节中使用TA-Lib库实现MACD指标,其实TA-Lib的10个功能组,如下所示:

  • Overlap Studies(重叠研究)
  • Momentum Indicators(动量指标)
  • Volume Indicators(交易量指标)
  • Cycle Indicators(周期指标)
  • Price Transform(价格变换)
  • Volatility Indicators(波动率指标)
  • Pattern Recognition(模式识别)
  • Statistic Functions(统计函数)
  • Math Transform(数学变换)
  • Math Operators(数学运算)

本次专栏篇我们来介绍下Volume Indicators——成交量指标。

成交量指当日成交的股票总手数(1手=100股),它能够真实地反映市场的内在动能,将量和价的变化相结合分析有助于掌握价格走势本质上的强弱度,比如通常所说的量价背离就是确认趋势反转的可靠线索。因此,成交量指标是交易决策时的重要依据,也是各种技术指标分析时不可或缺的参照。 TA-Lib的成交量指标主要包括'AD', 'ADOSC', 'OBV'这三个指标,如下所示:

print(talib.get_function_groups()['Volume Indicators']) # ['AD', 'ADOSC', 'OBV']
复制代码

接下来我们分别介绍如何使用TA-Lib实现这三个指标。

AD - Chaikin A/D Line

Chaikin Accumulation/Distribution Line由Marc Chaikin提出,计算公式为:AD=前一日AD值+(CLV*成交量)

CLV = ((Close-Low)-(High-Close))/( High - Low)

从公式中可知,它以当日收盘价与最高价、最低价的关系来估算一段时间内股票累积的成交量,以此分析多空双方力量的变化,能够有效地寻找突破的趋势或者提前预测反转。

TA-Lib提供AD指标的调用接口为:real = AD(high, low, close, volume)。我们用例程来了解下具体的实现,如下所示:


# 计算AD线
AD = talib.AD(df_stock.High, df_stock.Low, df_stock.Close, df_stock.Volume)
df_AD = pd.DataFrame(AD, index=df_stock.index, columns=['AD'])
df_AD.loc['2018-01-01':'2019-01-01'].plot(figsize=(16, 6))
plt.show()

复制代码

在实际应用时的判断依据为:当A/D线在上升时说明多方占优势,交易者在收集该股票;当A/D线在下降时,说明空方占优势,交易者在派发该股票。如果A/D线上升的同时,价格也在上升,则说明上升趋势被确认,产生买入信号;如果A/D线下降的同时,价格也在下降,则说明下降趋势被确认,产生卖出信号;如果A/D线下降的同时,价格在上升,二者产生背离,说明价格的上升趋势减弱,有可能反转下跌;如果A/D线上升的同时,价格在下降,二者产生背离,说明价格的下降趋势减弱,有可能反转回升。实际操作中,可以与一些反转指标共同使用。

ADOSC - Chaikin A/D Oscillator

Chaikin A/D Oscillator是在AD指标的基础上计算长短周期的AD差,用于进一步观察市场中资金流动情况,计算公式为:fastperiod AD - slowperiod AD。

从公式中可知,该指标类似于双均线交叉的判断,当短期均线穿越长期均线看多,即数值为正时看多,反之依然。因此操作时可遵循数值由正变负时卖出,由负变正时买进的原则。

TA-Lib提供ADOSC指标的调用接口为:real = ADOSC(high, low, close, volume, fastperiod=3, slowperiod=10)。我们用例程来了解下具体的实现,如下所示:

# 计算ADOSC线
ADOSC = talib.ADOSC(df_stock.High, df_stock.Low, df_stock.Close, df_stock.Volume, fastperiod=3, slowperiod=10)
df_ADOSC = pd.DataFrame(ADOSC, index=df_stock.index, columns=['ADOSC'])
df_ADOSC.loc['2018-01-01':'2019-01-01'].plot(figsize=(16, 6))
plt.show()
复制代码

OBV - On Balance Volume On Balance Volume由 Joe Granville 提出,主要计算累积的成交量,以某日为基期,逐日累计每日股票总成交量。若隔日指数或股票上涨,则基期OBV加上本日成交量为本日OBV。隔日指数或股票下跌, 则基期OBV减去本日成交量为本日OBV。

TA-Lib提供ADOSC指标的调用接口为:real = OBV(close, volume)。我们用例程来了解下具体的实现,如下所示:

# 计算OBC线
OBV = talib.OBV(df_stock.Close, df_stock.Volume)
df_OBV = pd.DataFrame(OBV, index=df_stock.index, columns=['ADOSC'])
df_OBV.loc['2018-01-01':'2019-01-01'].plot(figsize=(16, 6))
plt.show()
复制代码

在实际应用时的判断依据为:当OBV指标增大时,说明累积成交量在增加,可以推测当前的价格变化为正值,当期的股价是上升的;累积成交量的增大也体现了市场的活跃度增加,短期内股票价格可能继续上升,释放出买入信号;当OBV指标减小时,说明累积成交量在减小,可以推测当前的价格变化为负值,当期的股价是下跌的;市场的活跃度减弱,短期内股票价格可能还会下跌,释放出卖出信号。

接下来我们结合K线和成交量来观察'AD', 'ADOSC', 'OBV'这三个指标的变化。我们可以调用小册子《股票数据可视化:自定义Matplotlib版股票行情界面》的代码分别绘制上证综指、浙大网新的量价技术分析图,如下所示:

关于完整代码可以加入小册子交流群获取。更多的量化交易内容欢迎大家订阅小册子阅读