
昨天有读者建议我监测一下顶底分形,今天我已经把顶底分形的监测加好了。
首先介绍一下顶底分形:

顶分形是连续三根k线,中间的k线的最高价和最低价比两边k线的都要高
底分形是连续三根k线,中间的k线的最高价和最低价比两边k线的都要低
在backtrader中默认没有识别顶底分形的指标,我们可以创建一个识别顶底分形的指标。
创建一个indicator.py文件,在这个文件中来创建我们的顶底分形指标。
自定义的指标类要继承自bt.Indicator
,然后定义需要用到的线变量lines以及绘图参数,如果不定义绘图参数,则默认会在主图下用子图把定义的线画出来。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import backtrader as bt
class Pivot(bt.Indicator): lines = ('high_pivot','low_pivot') plotlines = dict( high_pivot=dict(color='green', ls='',marker='d',markersize='7.0'), low_pivot=dict(color='red', ls='',marker='d',markersize='7.0') ) plotinfo = dict() plotinfo['subplot'] = False plotinfo['plotlinelabels'] = True
|
然后在类的初始化方法__init__
中定义识别顶底分形的算法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| def __init__(self): super(Pivot, self).__init__() linehigh = bt.If(bt.And(bt.And( self.data.high(-1)>self.data.high(-2),self.data.high(-1)>self.data.high(0)), bt.And(self.data.low(-1)>self.data.low(-2),self.data.low(-1)>self.data.low(0)) ),self.data.high(-1)*1.01,-100) self.l.high_pivot=linehigh(1) linelow = bt.If(bt.And(bt.And( self.data.high(-1)<self.data.high(-2),self.data.high(-1)<self.data.high(0)), bt.And(self.data.low(-1)<self.data.low(-2),self.data.low(-1)<self.data.low(0)) ),self.data.high(-1)*1.01,-100) self.l.low_pivot=linelow(1)
|
定义好指标后,把它加到策略中就能用啦!
1 2 3 4 5 6 7
| class PivotStrategy(bt.Strategy): def __init__(self): ... self.pivot=indicator.Pivot(self.data,plotvaluetags=True) ....
|
下面是对沪深300ETF识别的结果:

震荡行情下顶底分形也会反复触发,所以顶底分形可以作为参考,在实际使用中也要参考别的指标。
希望这篇文章能帮助到大家。如果你有任何问题或建议,欢迎留言讨论,私信。感谢你的阅读,觉得不错,点个赞哦!还没有关注我的朋友可以关注 江达小记
