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

1.移动平均线定义

移动平均线(Moving Average,简称MA)是利用统计分析的方法,将一定时期内的价格加以平均并将不同时间的平均值连接起来,便得到了移动平均线。移动平均线是用来观察价格波动趋势的技术指标之一,可帮助投资者确认现有的价格趋势,判断未来潜在的价格走势,发现价格即将反转的信号

2.移动平均线的种类

移动平均线的计算方法包含算术平均法、加权平均法和指数平滑移动法三种。根据计算方法的不同,移动均线可分为简单移动平均线(Simple Moving Average,简称SMA)、加权移动平均线(Weighted Moving Average,简称WMA)和指数平均数指标(Exponential Moving Average)。

3.移动平均线的周期

根据计算时间的长短,移动平均线又可分为短期、中期和长期移动平均线。最常见的移动平均线分别为5日、10日、20日、50日、100日、200日及250日。其中,5日和10日通常被视为短期移动平均线的计算周期;中期移动平均线计算周期通常为20日及50日;长期移动平均线则大多以100日、200日甚至250日为计算周期。

4.简单移动平均线案例

创建简单移动平均线策略,周期15天的简单移动平均线策略
买入与卖出算法:

  • 收盘价大于sma,买入
  • 收盘价小于等于sma,卖出
   #self.data.close是表示收盘价
        #收盘价大于sma,买入
        if self.data.close>self.sma:
            self.buy()
        
        #收盘价小于等于sma,卖出
        if self.data.close<=self.sma:
            self.sell()
# -*- coding: utf-8 -*-
"""
Created on Wed May 13 14:37:09 2020

@author: 觉醒2020
"""

# =============================================================================
# #框架使用流程
# #1.创建cerebro
# #cerebro = bt.Cerebro(**kwargs)
# #2.增加数据
# #cerebro.adddata(data)
# #3.增加策略
# #cerebro.addstrategy(MyStrategy, myparam1=value1, myparam2=value2)
# #4.增加其他元素
# #例如增加观察者addobserver (or addobservermulti)
# #5.改变broker
# #cerebro.broker = broker
# #6.接收通知
# #Cerebro.notify_store
# #运行cerebro
# #result = cerebro.run(**kwargs)
# #创建图表
# #cerebro.plot()
# =============================================================================


from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import datetime
import backtrader as bt # 引入backtrader框架



#简单移动平均线策略
#买入与卖出算法:
#   收盘价大于sma,买入
#   收盘价小于等于sma,卖出


class StrategyClass(bt.Strategy):
    '#简单移动平均线策略'
    
    def __init__(self):
        #sma源码位于indicators\sma.py
        #指标必须要定义在策略类中的初始化函数中
        #简单移动平均线
        self.sma=bt.ind.SimpleMovingAverage(period=15)
        
    def next(self):
        #self.data.close是表示收盘价
        #收盘价大于sma,买入
        if self.data.close>self.sma:
            self.buy()
        
        #收盘价小于等于sma,卖出
        if self.data.close<=self.sma:
            self.sell()
            

cerebro=bt.Cerebro()
datapath=".\\datas\\test\\000001.XSHE"
data=bt.feeds.GenericCSVData(dataname=datapath,
                             fromdate = datetime.datetime(2018, 1, 1),
                             todate = datetime.datetime(2020, 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)
#设置金额,默认是100000
cerebro.broker.set_cash(200000)
cerebro.run(maxcpu=1)
cerebro.plot()

运行结果
在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值