1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 打造属于自己的量化投资系统6——利用backtrader创建动量震荡指标AO

打造属于自己的量化投资系统6——利用backtrader创建动量震荡指标AO

时间:2021-02-08 07:05:17

相关推荐

打造属于自己的量化投资系统6——利用backtrader创建动量震荡指标AO

1.动量震荡指标AO定义

动量震荡指标(Awesome Oscillator简称AO)是AO指标是通过从5根价格线的中点的移动平均线值减去34根价格线的中点的移动平均线值得来的,其的计算公式为:

AO=SMA((H+L)/2,5)- SMA((H+L)/2,34)

AO的柱状图如果比前一根高,则标记为红色;反之若比前一根来的低,则标记为绿色。如此我们只要看颜色之改变,就能知道动能的改变了。

'''#动量震荡指标(Awesome Oscillator简称AO)公式:AO=SMA((H+L)/2,5)- SMA((H+L)/2,34)- median price = (high + low) / 2- AO = SMA(median price, 5)- SMA(median price, 34)'''def __init__(self):#源码位于indicators\awesomeoscillator.py#指标必须要定义在策略类中的初始化函数中self.ao=bt.ind.AO()def next(self):#最右一根线ao1=self.ao[0]#中间一个根线ao2=self.ao[-1]#最左一个根线ao3=self.ao[-2]if self.ao>0 and ao1>ao2 and ao2<ao3:self.buy()if self.ao<=0 and ao1>ao2 and ao2<ao3:self.sell()

2.AO指标的买卖使用技巧:
a.买入信号

买入信号:连续三根绿柱可考虑进入

碟型买入:所谓碟型指至少需要三根柱状图,中间之柱最低,而右方之柱比第一根柱高,如此便构成中间凹陷如同碟子一般之碟型。而碟子中,凹陷部份可以有几根柱状图则没有限制。当红柱出现在绿柱后超过第一个红柱,买入信号便产生了,我们便可作为进场之标志。穿越买入:当柱状图由零轴下翻转到零轴之上即产生穿越买入信号,穿越买入信号只需两根柱状图便可形成,而左边可以为红色也可以为绿色,但右边一定是为红色。而当信号产生时,我们便可作为进场之标志。双峰买入:当柱状图由左至右产生第二个低点,而第二个低点比第一个低点来的高即产生双峰买入。须注意图中两个低点之间柱状图皆在零轴以下而信号柱必定为红色。双峰买入为AO在零轴下唯一之买入信号。而在双峰买入发生前一定会先产生一个碟型卖出信号。

b.卖出信号

卖出信号:连续3根红柱可考虑卖出

在零轴线以下最新的绿柱线出现在红柱线之后就产生了碟型卖出信号; 最新的柱线从上向下穿越零轴线时就产生了穿越卖出信号;在零轴线以上最新的峰值低于前一个峰值并出现了一个绿柱线就产生了双峰卖出信号。

# -*- coding: utf-8 -*-"""Created on Wed May 13 14:37:09 @author: 觉醒"""from __future__ import (absolute_import, division, print_function,unicode_literals)import datetimeimport backtrader as bt # 引入backtrader框架#动量震荡指标(Awesome Oscillator简称AO)#买入与卖出算法:(以碟型买入与卖出为例子)#碟型买入:所谓碟型指至少需要三根柱状图,中间之柱最低,而右方之柱比第一根柱高,如此便构成中间凹陷如同碟子一般之碟型。而碟子中,凹陷部份可以有几根柱状图则没有限制。当红柱出现在绿柱后超过第一个红柱,买入信号便产生了,我们便可作为进场之标志。#碟型卖出:在零轴线以下最新的绿柱线出现在红柱线之后就产生了碟型卖出信号;class StrategyClass(bt.Strategy):'''#动量震荡指标(Awesome Oscillator简称AO)公式:AO=SMA((H+L)/2,5)- SMA((H+L)/2,34)- median price = (high + low) / 2- AO = SMA(median price, 5)- SMA(median price, 34)'''def __init__(self):#源码位于indicators\awesomeoscillator.py#指标必须要定义在策略类中的初始化函数中self.ao=bt.ind.AO()def next(self):#最右一根线ao1=self.ao[0]#中间一个根线ao2=self.ao[-1]#最左一个根线ao3=self.ao[-2]if self.ao>0 and ao1>ao2 and ao2<ao3:self.buy()if self.ao<=0 and ao1>ao2 and ao2<ao3:self.sell()cerebro=bt.Cerebro()datapath=".\\datas\\test\\000001.XSHE"data=bt.feeds.GenericCSVData(dataname=datapath,fromdate = datetime.datetime(, 1, 1),todate = datetime.datetime(, 3, 20),nullvalue=0.0,dtformat=('%Y-%m-%d'),datetime=0,high=3,low=4,open=1,close=2,volume=5,openinterest=-1)cerebro.adddata(data)cerebro.addstrategy(StrategyClass)#设置金额,默认是100000cerebro.broker.set_cash(200000)cerebro.run(maxcpu=1)cerebro.plot()

运行结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。