量化交易学习(六十五)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 | $ tar -xzf ta-lib-0.4.0-src.tar.gz |
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库:

锤子线对应 CDLHAMMER 函数,倒锤子线对应 CDLINVERTEDHAMMER 函数,如果不知道用法可以用help函数来获取函数的说明:
1 | help(bt.talib.CDLHAMMER) |
输出结果如下:

大家在使用时,通过help的介绍就能知道要填哪些参数,怎么用它了。
在策略中可以这样使用:
1 | class DemoStrategy(bt.Strategy): |
结果如下,这里以恒生科技ETF为例,K线上标有红色菱形的是锤子线,K线上标有蓝色菱形的是倒锤子线。

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