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

article/2025/9/18 21:53:33

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


http://chatgpt.dhexx.cn/article/lXrfls5V.shtml

相关文章

平滑KDJ指标公式,减少无效金叉死叉

软件自带的KDJ指标比较敏感&#xff0c;在震荡上涨或者震荡下跌时会反复出现金叉死叉信号&#xff0c;不利于指标的使用以及进一步开发。为了减少无效金叉死叉&#xff0c;本文对KDJ指标公式进行平滑处理。 一、KDJ指标对比 以下为软件自带的KDJ指标&#xff0c;加上了图标。本…

用python找出400多万次KDJ金叉死叉,胜率有多高?附代码

引言: 邢不行的系列帖子“量化小讲堂”&#xff0c;通过实际案例教初学者使用python进行量化投Z&#xff0c;了解行业研究方向 这是邢不行第90期量化小课堂分享 作者 l 邢不行 不知道大家有没有发现&#xff0c;打开任意一个交易软件&#xff0c;无论是针对A股、美股、期货、…

金叉死叉图解,金叉死叉的短线操作方法

小沙我自己长期以来一直对二级市场交易很有热情,从三年前开始,就不断地在理论实践两方面逐渐加深对于金融市场的理解,最近发现一个叫QR量化社区的平台,也给了自己很多灵感。经历了最近的市场波动,突然来了动力,在此就分享一篇自己这段时间的一点总结。 最近,股票市场不…

python股票量化交易(4)---金叉与死叉

纯是济世之心&#xff0c;则为端。苟有一毫媚世之心&#xff0c;即为曲。纯是爱人之心&#xff0c;则为端。有一毫愤世之心&#xff0c;即为曲。纯是敬人之心&#xff0c;则为端。有一毫玩世之心&#xff0c;即为曲。 文章目录 什么是金叉与死叉金叉与死叉的运算绘制金叉与死叉…

量化交易——双均线策略(金叉死叉)

一、双均线概念 均线&#xff1a;对于每一个交易日&#xff0c;都可以计算出前N天的移动平均值&#xff0c;然后把这些平均值连起来&#xff0c;成为一条线&#xff0c;就叫做N日移动平均线。移动平均线常用线有5日、10日、30日、60日、120日的指标。 5日和10日的是短线操作参照…

什么是金叉、死叉

转载自&#xff1a;http://blog.sina.com.cn/s/blog_1578c31fd0102wuxu.html 均线系统最基本最简单第一大战法就是“金叉做多&#xff0c;死叉做空”&#xff0c;它是趋势发生转变的重要信号。金叉也称“黄金交叉”&#xff0c;就是一条短期均线成功上穿另一条长期均线&#xf…

“鬼影”浅析 - 反病毒,信息安全,网络安全,反木马,病毒资讯平台,安全解决方案,电脑使用技巧,杀毒软件交流,anti-virus,民间反病毒联盟

访问原文 这个鬼影病毒相信大家都比较熟悉&#xff0c;但是最近似乎那个什么XX工作室已经宣布停止开发了&#xff0c;所以逐渐淡出的人们的视线&#xff0c;但是这个病毒的技术含量比较高&#xff0c;值得去学习…… 鬼影主体:WMPLAYER.EXE MD5:f377e0f7c8f1a37cd5c92cf7aea3c8…

写计算机病毒吗,会写计算机病毒很牛吗

满意答案 djipuh90 2016.02.11 采纳率&#xff1a;52% 等级&#xff1a;12 已帮助&#xff1a;8216人 先假设你说的病毒是os系统病毒&#xff0c;以windows系统为例 类似熊猫烧香这种层次的病毒&#xff0c;大概只能算是非常非常普通的&#xff0c;技术上也没有什么特别之处…

鬼影3分析笔记

这是学习笔记&#xff0c;供自己再次调试回忆&#xff0c;别人看没什么价值&#xff0c;因为写的太乱了。而且有些点自己也没理清 前面是wowocock老师的文档 首先根据教程了解到感染好mbr之后存在磁盘最后的区段的信息有 1.ProtectMode Code是Hook了OsLoader.exe之后获得控制…

鬼影病毒分析报告

鬼影病毒分析报告 一、 鬼影病毒概述 这是一个***下载器&#xff0c;使用了ring3恢复内核钩子、感染磁盘引导区&#xff08;MBR&#xff09;、多种方法结束杀毒软件等 技术自启动并对抗杀毒软件。完全感染后&#xff0c;是一个看不到可疑文件、没有启动项、普通重装系统也无法解…

用友与鬼影病毒

昨天一客户打电话&#xff0c;说软件无法登陆。 上门查看现象如下&#xff1a; 用友服务无法启动&#xff0c;双击启动&#xff0c;报错&#xff1a;本地计算机上的用友通服务启动后又停止了。一些服务自动停止&#xff0c;如果它们没有什么可做的&#xff0c;例如性能和日志警…

鬼影病毒

鬼影病毒是指寄生在磁盘 主引导记录&#xff08;MBR&#xff09;&#xff0c;即使格式化重装系统&#xff0c;也无法清除的病毒。 2010年3月15日&#xff0c;国内某安全中心发现一种被命名为“鬼影”的电脑病毒&#xff0c;由于该病毒成功运行后&#xff0c;在进程中、系统启动…

鬼影病毒6.0分析

原理图 文件名功能1001.exe主模块camhgzsswk.sys释放模块p2phook.sys释放模块的克隆p2pc.ini攻击模块配置文件safemon.dll注入攻击模块beep.sys持久化攻击模块 主模块1001.exe [1]创建用户mima1&#xff0c;运行ipconfig进行掩饰。 [2]释放病毒驱动sys文件。 [3]将病毒驱动注…

鬼影病毒和浏览器锁狼狈为奸,用户浏览器遭强行劫持

鬼影病毒和浏览器锁狼狈为奸&#xff0c;用户浏览器遭强行劫持 据金山毒霸安全实验室监测&#xff0c;发现鬼影病毒变种再次高发&#xff0c;其中一个伪装成阿里旺旺的变种感染量就达1.6万台/天。中毒电脑桌面出现多个图标&#xff0c;浏览器被锁定为go2000.com或soolaa.com&am…

新鬼影病毒

今天和明天是最后两天宿舍有空调的日子啦,暑假宿舍没空调啊,悲催T__T 好吧,今天是最精华的部分啦对于鬼影3的分析,剩下的都是浮云啦,alg.exe不准备分析了,能用OD调试的货.分析起来只是时间问题.但是MBR和之后的保护模式的代码就不一样啦同学们,纯静态分析,伤不起啊,各种硬编码,…

股票量化分析指标公式是什么?

股票量化分析指标公式是什么&#xff1f;其公式为&#xff1a;量比现成交总手/(过去5日平均每分钟成交量当日累计开市时间)。 股票量化分析指标API调用流程&#xff08;部分&#xff09; “股票量化分析指标”是指可以用具体数据反映的指标&#xff0c;比如成交量、市盈率和日…

基于macd、kdj、ma技术指标分析股票多空方向——应用开发4 分析技术指标一系列形态结果

接上一节&#xff0c;我们计算获取了技术指标的结果total_df&#xff0c;结果如下图 我们需要显示股票最近10天的分析结果&#xff0c;对此我们只需要截取total_df前12天数据就可以了。 #获取前12天的数据 total_dftotal_df.iloc[-12:,:] total_df 对应列的数字0&#xff5e;9…

波段炒股看什么指标最准,怎么才能把股票波段做好?

波段炒股看什么指标最准&#xff0c;怎么才能把股票波段做好&#xff1f;股票有不少盈利方式&#xff0c;可是这样的盈利方式&#xff0c;你会吗&#xff1f;做波段盈利的好处在哪里呢&#xff1f; 股票做波段赢利率&#xff0c;针对股票市场的波段操作特点&#xff0c;波段操作…

基于macd、kdj、ma技术指标分析股票多空方向——应用开发3 计算股票相关技术指标数据

接上一节&#xff0c;我们获取了000001.SZ股票过去一年的历史数据stock_df&#xff0c;接下来我们就计算技术指标 所用包 pandas_ta import pandas_ta as ta 关于pandas_ta 可以在GitHub - twopirllc/pandas-ta: Technical Analysis Indicators - Pandas TA is an easy to …

股票 - - 常用指标【下】

股票 - - 常用指标【下】 接上一篇文章,文章地址&#xff1a;八、巴菲特最看重的指标1. 简介 九、快速读懂股票的估值1.前言2.市盈率3.知识点 十、筹码分布 - - 一个一用就上瘾的指标1.一个关于筹码的故事2.关于筹码的形态单峰密集状态双峰密集状态多峰密集形态 3.上述三种形态…