量化交易学习(六十五)backtrader识别各种k线形态

k线浓缩了一段时间内股市的走势,通过k线图的排列组合能够揭示股市中的一些信号。作为成熟的回测框架,backtrader自然也支持对各种k线形态的识别。今天这篇来讲一下怎么用backtrader识别各种k线形态。

backtrader是通过talib实现k线形态的识别的,虽然backtrader内置了talib,但是需要用户自行安装talib,不然不能用。

talib的安装教程可以看PyPI上的说明:https://pypi.org/project/TA-Lib/,也可以看我以前写的这篇文章 二十二

简单来说,安装talib的python接口封装可以用pip:

1
python -m pip install TA-Lib

但是python接口封装需要依赖c版的talib库,talib库的安装相对麻烦一些。

对于mac系统:

1
brew install ta-lib

对于windows系统:

下载 ta-lib-0.4.0-msvc.zip,地址:https://sourceforge.net/projects/ta-lib/files/ta-lib/0.4.0/ta-lib-0.4.0-msvc.zip/download , 然后解压到 C:\ta-lib.

对于linux系统:
下载源码后自行编译,源码地址:https://sourceforge.net/projects/ta-lib/files/ta-lib/0.4.0/ta-lib-0.4.0-src.tar.gz/download

1
2
3
4
5
$ tar -xzf ta-lib-0.4.0-src.tar.gz
$ cd ta-lib/
$ ./configure --prefix=/usr
$ make
$ sudo make install

talib 指标的使用和 backtrader 其他指标不太相同,常规的指标是在 bt.indicators 包下的,而talib的指标是放在 bt.talib 包下的。

在ide中talib的指标没有自动补全,想知道有哪些可用的talib指标可以用bt.talib.tafunctions这个列表来获取:

1
print(bt.talib.tafunctions)

输出结果如下:

1
['HT_DCPERIOD', 'HT_DCPHASE', 'HT_PHASOR', 'HT_SINE', 'HT_TRENDMODE', 'ADD', 'DIV', 'MAX', 'MAXINDEX', 'MIN', 'MININDEX', 'MINMAX', 'MINMAXINDEX', 'MULT', 'SUB', 'SUM', 'ACOS', 'ASIN', 'ATAN', 'CEIL', 'COS', 'COSH', 'EXP', 'FLOOR', 'LN', 'LOG10', 'SIN', 'SINH', 'SQRT', 'TAN', 'TANH', 'ADX', 'ADXR', 'APO', 'AROON', 'AROONOSC', 'BOP', 'CCI', 'CMO', 'DX', 'MACD', 'MACDEXT', 'MACDFIX', 'MFI', 'MINUS_DI', 'MINUS_DM', 'MOM', 'PLUS_DI', 'PLUS_DM', 'PPO', 'ROC', 'ROCP', 'ROCR', 'ROCR100', 'RSI', 'STOCH', 'STOCHF', 'STOCHRSI', 'TRIX', 'ULTOSC', 'WILLR', 'BBANDS', 'DEMA', 'EMA', 'HT_TRENDLINE', 'KAMA', 'MA', 'MAMA', 'MAVP', 'MIDPOINT', 'MIDPRICE', 'SAR', 'SAREXT', 'SMA', 'T3', 'TEMA', 'TRIMA', 'WMA', 'CDL2CROWS', 'CDL3BLACKCROWS', 'CDL3INSIDE', 'CDL3LINESTRIKE', 'CDL3OUTSIDE', 'CDL3STARSINSOUTH', 'CDL3WHITESOLDIERS', 'CDLABANDONEDBABY', 'CDLADVANCEBLOCK', 'CDLBELTHOLD', 'CDLBREAKAWAY', 'CDLCLOSINGMARUBOZU', 'CDLCONCEALBABYSWALL', 'CDLCOUNTERATTACK', 'CDLDARKCLOUDCOVER', 'CDLDOJI', 'CDLDOJISTAR', 'CDLDRAGONFLYDOJI', 'CDLENGULFING', 'CDLEVENINGDOJISTAR', 'CDLEVENINGSTAR', 'CDLGAPSIDESIDEWHITE', 'CDLGRAVESTONEDOJI', 'CDLHAMMER', 'CDLHANGINGMAN', 'CDLHARAMI', 'CDLHARAMICROSS', 'CDLHIGHWAVE', 'CDLHIKKAKE', 'CDLHIKKAKEMOD', 'CDLHOMINGPIGEON', 'CDLIDENTICAL3CROWS', 'CDLINNECK', 'CDLINVERTEDHAMMER', 'CDLKICKING', 'CDLKICKINGBYLENGTH', 'CDLLADDERBOTTOM', 'CDLLONGLEGGEDDOJI', 'CDLLONGLINE', 'CDLMARUBOZU', 'CDLMATCHINGLOW', 'CDLMATHOLD', 'CDLMORNINGDOJISTAR', 'CDLMORNINGSTAR', 'CDLONNECK', 'CDLPIERCING', 'CDLRICKSHAWMAN', 'CDLRISEFALL3METHODS', 'CDLSEPARATINGLINES', 'CDLSHOOTINGSTAR', 'CDLSHORTLINE', 'CDLSPINNINGTOP', 'CDLSTALLEDPATTERN', 'CDLSTICKSANDWICH', 'CDLTAKURI', 'CDLTASUKIGAP', 'CDLTHRUSTING', 'CDLTRISTAR', 'CDLUNIQUE3RIVER', 'CDLUPSIDEGAP2CROWS', 'CDLXSIDEGAP3METHODS', 'AVGPRICE', 'MEDPRICE', 'TYPPRICE', 'WCLPRICE', 'BETA', 'CORREL', 'LINEARREG', 'LINEARREG_ANGLE', 'LINEARREG_INTERCEPT', 'LINEARREG_SLOPE', 'STDDEV', 'TSF', 'VAR', 'ATR', 'NATR', 'TRANGE', 'AD', 'ADOSC', 'OBV']

其中以CDL为前缀的就是用来识别K线形态的方法。

下面以识别锤子线和倒锤子线为例说明怎么使用talib库:
31e72d67d4a7084837f8dfd553e37fdc.png
锤子线对应 CDLHAMMER 函数,倒锤子线对应 CDLINVERTEDHAMMER 函数,如果不知道用法可以用help函数来获取函数的说明:

1
help(bt.talib.CDLHAMMER)

输出结果如下:

033f14e2d9613c7e4221d99b3d497f7a.png

大家在使用时,通过help的介绍就能知道要填哪些参数,怎么用它了。

在策略中可以这样使用:

1
2
3
4
class DemoStrategy(bt.Strategy):
def __init__(self):
self.hammer = bt.talib.CDLHAMMER(self.data.open, self.data.high, self.data.low, self.data.close,plotvaluetags=False)
self.inverthammer=bt.talib.CDLINVERTEDHAMMER(self.data.open, self.data.high, self.data.low, self.data.close,plotvaluetags=False)

结果如下,这里以恒生科技ETF为例,K线上标有红色菱形的是锤子线,K线上标有蓝色菱形的是倒锤子线。

Figure_0.png


希望这篇文章能帮助到大家。如果你有任何问题或建议,欢迎留言讨论,私信。感谢你的阅读,觉得不错,点个赞哦!还没有关注我的朋友可以关注 江达小记

江达小记