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()
运行结果