1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 打造属于自己的量化投资系统3——利用backtrader创建加权移动平均线策略

打造属于自己的量化投资系统3——利用backtrader创建加权移动平均线策略

时间:2020-01-25 06:22:27

相关推荐

打造属于自己的量化投资系统3——利用backtrader创建加权移动平均线策略

1.加权移动平均线定义

加权移动平均线 (Weigted Moving Average,WMA ) 将过去某特定时间内的价格取其平均值,它比重以平均线的长度设定,愈近期的收市价,对市况影响愈重要。计算方式是基于加权移动平均线日数,将每一个之前日 数比重提升。每一价格会乘以一个比重,最新的价格会有最大的比重,其之前的每一日的比重将会递减。

2.加权移动平均线的加权方式

加权的原因是基于移动平均线中,最近一日的收盘价对未来价格波动的影响最大,因此赋予它较大的权值。加权方式分为四种:

a.末日加权移动平均线:

计算公式:

b.线性加权移动平均线:

计算公式:

=(c11+c22+…+cn*n)/((1+n)*n/2)=2/((1+n)*n)

'''#加权移动平均线策略(线性加权移动平均线)公式:2/((1+n)*n)*(c1*1+c2*2+....+cn*n)- weights = range(1, period + 1)- coef = 2 / (period * (period + 1))=- movav = coef * Sum(weight[i] * data[period - i] for i in range(period))'''def __init__(self):#wma源码位于indicators\wma.py#指标必须要定义在策略类中的初始化函数中#加权移动平均线self.wma=bt.ind.WeightedMovingAverage(period=15)def next(self):#self.data.close是表示收盘价#收盘价大于wma,买入if self.data.close>self.wma:self.buy()#收盘价小于等于wma,卖出if self.data.close<=self.wma:self.sell()

c.梯型加权移动平均线:

计算方法(以5日为例):

[(第1日收盘价+第2日收盘价)×1+(第2日收盘价+第3日收盘价)×2+(第3日收盘价+第4日收盘价)×3+(第4日收盘价+第5日收盘价)×4]/(2×1+2×2+2×3+2×4),即为第五日的阶梯加权移动平均线。

d.平方系数加权移动平均线:

公式(以5日为例):

MA=[(第1日收盘价×1×1)+( 第2日收盘价×2×2)+( 第3日收盘价×3×3)+( 第4日收盘价×4×4)+( 第5日收盘价×5×5)]/(1×1+2×2+3×3+4×4+5×5)

3.加权移动平均线的公式

W(t)=weight factor Close(t)=收盘价

4.加权移动平均线案例

# -*- 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框架#加权移动平均线策略#买入与卖出算法:# 收盘价大于wma,买入# 收盘价小于等于wma,卖出class StrategyClass(bt.Strategy):'''#加权移动平均线策略(线性加权移动平均线)公式:2/((1+n)*n)*(c1*1+c2*2+....+cn*n)- weights = range(1, period + 1)- coef = 2 / (period * (period + 1))=- movav = coef * Sum(weight[i] * data[period - i] for i in range(period))'''def __init__(self):#wma源码位于indicators\wma.py#指标必须要定义在策略类中的初始化函数中#加权移动平均线self.wma=bt.ind.WeightedMovingAverage(period=15)def next(self):#self.data.close是表示收盘价#收盘价大于wma,买入if self.data.close>self.wma:self.buy()#收盘价小于等于wma,卖出if self.data.close<=self.wma: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()

运行结果

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