Backtrader简单均线交易策略“金叉和死叉”

1、使用5日均线和10日均线

MA5和MA10的交叉点作为买入和卖出信号

交易策略是量化交易的核心,MA均线策略也称为SMA均线策略,是量化交易的最简单的量化交易策略之一,当5日均线向上穿过10日均线的时候,我们称为金叉,当5日均线向上穿过10日均线的时候,我们成为死叉。本使用的是极宽量化交易的包。

2、导入包

import sys;
sys.path.append("topqt/")#
import matplotlib as mpl
import matplotlib.pyplot as plt#
import os,time,arrow,math,random,pytz
import datetime  as dt
#
import backtrader as bt
import topquant2019 as tq

3、设置交易策略

Backtrader的策略函数源自Strategy类函数,一个完整的策略函数至少要包括以下两个策略函数。
(1)init:策略初始化函数
(2)next:策略执行函数
(3)notify_order:订单信息管理函数
(4)notify_trade:交易信息管理函数
(5)stop:策略回测结束函数
(6)log:自定义输出函数
本案例中时间周期为5天和10天,在init初始化函数的重点是增加了一组MA均线指标。

程序调用的是Backtrader内部指标模块indicators,周期参数变量是均线函数内部的变量名称period,不同指标参数变量名称是不同的。周期参数数值。使用的是策略定义的周期变量,数值为5天和10天。

#----------------------# # 创建一个自定义策略类class
# class TQSta001(bt.Strategy):class TQSta001(bt.Strategy):"""继承并构建自己的bt策略"""# 定义MA均线策略周期参数变量def log(self, txt, dt=None, doprint=True):''' 日志函数,用于统一输出日志格式 '''if doprint:dt = dt or self.datas[0].datetime.date(0)print('%s, %s' % (dt.isoformat(), txt))def __init__(self):# 初始化相关数据self.dataclose = self.datas[0].closeself.order = Noneself.buyprice = Noneself.buycomm = None# 五日移动平均线self.sma5 = bt.indicators.SimpleMovingAverage(self.datas[0], period=5)# 十日移动平均线self.sma10 = bt.indicators.SimpleMovingAverage(self.datas[0], period=10)def notify_order(self, order):"""订单状态处理Arguments:order {object} -- 订单状态"""if order.status in [order.Submitted, order.Accepted]:# 如订单已被处理,则不用做任何事情return# 检查订单是否完成if order.status in [order.Completed]:if order.isbuy():self.log('买单执行BUY EXECUTED,成交价: %.2f,小计 Cost: %.2f,佣金 Comm %.2f' % (order.executed.price,order.executed.value,order.executed.comm))self.buyprice = order.executed.priceself.buycomm = order.executed.commelif order.issell():self.log('卖单执行SELL EXECUTED,成交价: %.2f,小计 Cost: %.2f,佣金 Comm %.2f'  % (order.executed.price,order.executed.value,order.executed.comm))self.bar_executed = len(self)# 订单因为缺少资金之类的原因被拒绝执行elif order.status in [order.Canceled, order.Margin, order.Rejected]:self.log('Order Canceled/Margin/Rejected')# 订单状态处理完成,设为空self.order = Nonedef notify_trade(self, trade):"""交易成果Arguments:trade {object} -- 交易状态"""if not trade.isclosed:return# 显示交易的毛利率和净利润self.log('OPERATION PROFIT, GROSS %.2f, NET %.2f' %(trade.pnl, trade.pnlcomm), doprint=True)def next(self):''' 下一次执行 '''# 记录收盘价self.log('Close, %.2f' % self.dataclose[0])# 是否正在下单,如果是的话不能提交第二次订单if self.order:return# 是否已经买入if not self.position:# 还没买,如果 MA5 > MA10 说明涨势,买入if self.sma5[0] > self.sma10[0]:self.order = self.buy()else:# 已经买了,如果 MA5 < MA10 ,说明跌势,卖出if self.sma5[0] < self.sma10[0]:self.order = self.sell()def stop(self):self.log(u'(金叉死叉有用吗) Ending Value %.2f' %(self.broker.getvalue()), doprint=True)

4、设置交易策略

if __name__ == '__main__':cerebro = bt.Cerebro()dmoney = 100000.0cerebro.broker.setcash(dmoney)dcash0 = cerebro.broker.startingcashrs0 = 'data/stk/'xcod = '002046'fdat = rs0 + xcod + '.csv't0str,t9str='2018-01-01','2018-12-31'data=tq.pools_get4fn(fdat,t0str,t9str)cerebro.adddata(data)cerebro.addstrategy(TQSta001)# 设置佣金cerebro.broker.setcommission(commission=0.01)cerebro.addsizer(bt.sizers.FixedSize,stake=10)cerebro.run()dval9 = cerebro.broker.getvalue()kret = (dval9 - dcash0)/dcash0*100print('\t起始资金 Starting Portfolio Value: %.2f' % dcash0)print('\t资产总值 Final Portfolio Value: %.2f' % dval9)print('\tROI投资回报率 Return on investment: %.2f %%' % kret)cerebro.plot()

5、结果展示


参考链接:

https://zhuanlan.zhihu.com/p/133637955

Backtrader简单均线交易策略“金叉和死叉”相关推荐

  1. Python量化编程如何判断均线数据是金叉还是死叉?-股市数据均线策略编程分析

    Python量化编程如何判断均线数据是金叉还是死叉?-股市数据均线策略编程分析 以平安银行的股票数据为例进行分析 1.使用tushare获取股市数据,直接上代码: import pandas as p ...

  2. 金叉和死叉看哪几条线?股票macd金叉和死叉怎么看?

    资本市场上,每天都在演绎着转瞬即逝的遗憾,和曙光来临的场景.怎么更好的把握住机遇,人工智能和<股市三大猜想>指出人类在金融领域探索的脚步从未停止过.资本追逐利益是投资者的责任与使命,是金融 ...

  3. 点滴:均线交易策略代码的参考

    两条均线的三种交易方法 当均线金叉(短期大于长期均线)时候买进,死叉(短期小于长期)时卖出. 当价格上穿两条均线时买入,但价格下穿其中一条均线时卖出. 当两条均线都处于向上方向时买入,当两条均线都处于 ...

  4. 均线交易策略的回测 r_使用r创建交易策略并进行回测

    均线交易策略的回测 r R Programming language is an open-source software developed by statisticians and it is w ...

  5. python股票回测_Python量化交易-回测简单的交易策略

    这篇文章主要介绍如何使用Python对一些简单的交易策略进行回测,对这块比较感兴趣的朋友可以看一看. 1.获取证券数据 本文以A股市场为例,先获取A股近10年的数据并保存到数据库. 1.1.安装数据库 ...

  6. 用python自动生成交易策略_Python-回测简单的交易策略

    这篇文章主要介绍如何使用Python对一些简单的交易策略进行回测,对这块比较感兴趣的初学者可以看一看.文章主要分为以下几个部分: 1.获取证券数据 2.编写交易逻辑 3.模拟交易操作 4.统计结果和绘 ...

  7. 【技术分享】MA21日均线交易策略

    文章目录 1.前言 1.1.相关术语 1.2.MA均线系统设置分类 1.3.斐波那契数列 2.MA21日均线 2.1.MA21日均线 2.2.MA21日均线交易策略 2.3.MA21日均线案例分析 1 ...

  8. python回测工具_Python-回测简单的交易策略

    这篇文章主要介绍如何使用Python对一些简单的交易策略进行回测,对这块比较感兴趣的初学者可以看一看.文章主要分为以下几个部分: 1.获取证券数据 2.编写交易逻辑 3.模拟交易操作 4.统计结果和绘 ...

  9. 金融量化-金叉和死叉

    金融量化分析-金叉和死叉 ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt import ...

  10. macd金叉kdj死叉的准确率_MACD金叉不涨又死叉

    小王根据<乔博士:MACD指标详解>学习到的内容,于是QR社区写下心得分享给大家,MACD金叉KDJ死叉 以下QR社区告诉我们MACD金叉KDJ死叉的解释: MACD指标(Moving A ...

最新文章

  1. opencv入门 - 显示图像学习总结
  2. python程序设计典型例题-python 大题 典型
  3. 宝塔执行sh文件_宝塔面板未授权访问
  4. 用状态空间法(卡尔曼滤波)解决深度高斯过程问题
  5. sqlserver compact sdf, sqlite 数据库 在net中相对路径设置方法 - 摘自网络
  6. matlab 7.9.0 帮助翻译--size函数
  7. php long2ip,php 中IPV6 ip2long的问题解决办法
  8. maven junit测试_使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开
  9. html 跟随鼠标移动线条,canvas跟随鼠标移动的随机线条
  10. [BUGKU][CTF][Reverse][2020] Reverse writeup 1-7 暂时肝不动了
  11. STM32与SHT1X温湿度传感器通讯
  12. java map reduce 原理_MapReduce实现原理详解
  13. 八大看点丨第十届数据技术嘉年华精彩抢先速览
  14. 有一天我突然接到他的电话
  15. 命令窗口ping oracle,Oracle中tnsping命令解析
  16. Centos7下安装svnadmin
  17. 电气工程师证书如何考试拿证
  18. 事后诸葛亮项目总结会议
  19. MATLAB启动慢解决措施
  20. 面试神仙打架?探秘华为人工智能工程师岗位

热门文章

  1. angular7.0+ngx-weui公众号开发,开发及框架搭建(一)
  2. VRRP 网关冗余备份
  3. scrapy重试机制_Scrapy项目之User timeout caused connection failure(异常记录)
  4. 浅析淘宝数据魔方技术架构
  5. android pin码 经典蓝牙_请问 蓝牙 的自动设置PIN码 功能该怎么实现。
  6. 支持全球科研抗疫,艾柏森成功研发Omicron变异株重组蛋白
  7. PS 学习笔记(一)
  8. c语言max()头文件,C语言:min和max头文件
  9. oracle11g跟踪,Oracle 11g DRCP连接跟踪配置
  10. 关于机器人方面的sci论文_机器人期刊_SCI