策略内容:

SMA短周期:20

SMA长周期:60

如果短周期上穿长周期则做多,如果短周期下穿长周期则平仓。

具体代码如下:

import backtrader as bt
import pandas as pd
import CeLv# 从csv获取数据
def csv_data():df = pd.read_csv('./数据.csv',names=['time', 'open', 'close', 'high', 'low', 'turn over','volume'])  df['datetime'] = pd.to_datetime(df['time'], unit='s')df = df.drop(columns='time')# df.columns = ['time', 'open', 'close', 'high', 'low', 'turn over', 'volume']df.set_index(keys='datetime', drop=True, append=False)return dfif __name__ == '__main__':df = csv_data()cerebro = bt.Cerebro()data = bt.feeds.PandasData(dataname=df, datetime='datetime',open='open', high='high', low='low',close='close', volume='turn over', openinterest=-1)cerebro = bt.Cerebro()  # 创建cerebro# 在Cerebro中添加价格数据cerebro.adddata(data)# 设置启动资金cerebro.broker.setcash(100000.0)# 设置交易单位大小cerebro.addsizer(bt.sizers.FixedSize, stake=5000)# 设置佣金为千分之一cerebro.broker.setcommission(commission=0.002)# 添加策略cerebro.addstrategy(CeLv.EmaAndDc)# 添加分析指标# 收益率cerebro.addanalyzer(bt.analyzers.Returns, _name='_Returns')# 收益期间cerebro.addanalyzer(bt.analyzers.TimeReturn, _name='_TimeReturn')# 计算最大回撤相关指标cerebro.addanalyzer(bt.analyzers.DrawDown, _name='_DrawDown')# 回撤期间cerebro.addanalyzer(bt.analyzers.TimeDrawDown, _name='_TimeDrawDown')# 计算年化夏普比率cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='_SharpeRatio', timeframe=bt.TimeFrame.Days, annualize=True,riskfreerate=0)  # 计算夏普比率# 交易统计信息,如获胜、失败次数cerebro.addanalyzer(bt.analyzers.TradeAnalyzer, _name='_TradeAnalyzer')result = cerebro.run()  # 遍历所有数据# 提取结果print('最终资金: %.2f' % cerebro.broker.getvalue())print("收益率: ",result[0].analyzers._Returns.get_analysis()['rtot'])print("--------------- 收益期间 -----------------")print(result[0].analyzers._TimeReturn.get_analysis())print("--------------- 最大回撤相关指标 -----------------")print(result[0].analyzers._DrawDown.get_analysis())print("--------------- 回撤期间 -----------------")print(result[0].analyzers._TimeDrawDown.get_analysis())print("夏普比率: ",result[0].analyzers._SharpeRatio.get_analysis()['sharperatio'])# 绘图cerebro.plot(style='candlestick')

策略部分:

class SmaCross(bt.Strategy):# 可配置策略参数params = dict(p1=20,  # 短期均线周期p2=60   # 长期均线周期)def __init__(self):sma1 = bt.ind.SMA(period=self.params.p1)  # 短期均线sma2 = bt.ind.SMA(period=self.params.p2)  # 长期均线self.crossover = bt.ind.CrossOver(sma1, sma2)  # 交叉信号self.order = Nonedef notify_order(self, order):if order.status in [order.Completed]:if order.isbuy():print('BUY EXECUTED, Price: %.2f, Cost: %.2f, Comm %.2f' %(order.executed.price,order.executed.value,order.executed.comm))self.buyprice = order.executed.priceself.buycomm = order.executed.commelse:  # 卖print('SELL EXECUTED, Price: %.2f, Cost: %.2f, Comm %.2f' %(order.executed.price,order.executed.value,order.executed.comm))self.bar_executed = len(self)def next(self):if not self.position:if self.crossover > 0:self.buy(size=1)  # 买入elif self.crossover < 0:self.close()  # 卖出

【Python量化策略】SMA双均线策略相关推荐

  1. Python量化交易02——双均线策略(移动平均线)

    参考书目:深入浅出Python量化交易实战 本次带来最经典的交易策略,双均线策略的构建和其回测方法. 双均线一般采用5天均值和10天均值,如果5日均线上穿突破了10日均线,说明股价在最近的涨势很猛,买 ...

  2. 量化交易入门----双均线策略

    本文采用了聚宽平台接口进行量化策略设置: 一.效果图 双均线策略:双均线策略,当五日均线位于十日均线上方则买入,反之卖出. 二.证券知识: 策略收益(Total Returns) 最容易理解的一个概念 ...

  3. Python数据分析之股票双均线策略制定

    Python数据分析之股票双均线策略制定 需求:双均线策略制定 库 tushare包 预处理数据 df = pd.read_csv('./maotai.csv').drop(labels='Unnam ...

  4. 双均线策略(期货)——Python量化

    双均线策略 目录 双均线策略 1. 原理 均线的"前世今生" 均线理论为什么有效? 均线理论的缺陷 均线理论的改进 2. 策略逻辑 3. 策略代码 4. 回测结果与稳健性分析 1. ...

  5. 2020-12-24 如何编写一个简单的双均线策略

    如何编写一个简单的双均线策略 目的:编写一个无需写入函数.类的简单策略,对比文字与代码表达的区别,了解编写逻辑与原理 策略类型:双均线策略 策略原理: 双均线策略,指的是运用两条不同周期的移动平均线, ...

  6. 双均线策略构建及回测

    # python构建双均线策略 # 均线策略中最常见的一种方法是根据长期均线和短期均线的交叉情况来确定交易信号,即:当短期均线从下往上穿越长期均线时,形成金叉,做多: # 反之,当长期均线从上往下穿越 ...

  7. 【CTA系列】复合中短周期双均线策略

    本篇文章是基于研究报告的复现作品,旨在记录个人的学习过程和复现过程中的一些思路. 感谢中信期货研究员前辈的宝贵思路. 一.策略简介 1.双均线策略 均线是最经典的传统技术指 标之一 ,最早由美国投资专 ...

  8. Python量化交易实战-38使用开源项目回测双均线策略

    B站配套视频教程观看 使用PyAlgoTrade回测双均线策略 双均线策略:长短周期均线,通过金叉,死叉的方式买入卖出股票,获取收益的策略. 回顾上节课代码的部分,上节课完成了可视化代码的部分, 主要 ...

  9. python双均线策略,当五日均线位于十日均线上方则买入,反之卖出。(聚宽量化平台使用)

    ''' ** python双均线策略,当五日均线位于十日均线上方则买入,反之卖出.(聚宽量化平台使用) ** ''' 初始化函数,设定要操作的股票.基准等等 def initialize(contex ...

最新文章

  1. linux java连接redis_java 连接linux的redis 报错。但是linux 客户端可以连接redis
  2. relationship between freedom,potential, risk
  3. python eval()函数用法以及可能出现的问题
  4. 15岁大学毕业,一生800多篇专著论文,双眼失明却凭一条公式称霸数学界
  5. leetcode 106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树思考分析
  6. js中的children实时获取子元素
  7. html thead隐藏,HTML的thead标签
  8. 程序员跳槽时,如何正确做好职业规划?
  9. opencv曝光算法_【OPENCV】高反差保留算法
  10. 《代码大全2》第3章 三思而后行,前期准备
  11. mpd无法启动的案例及解决
  12. 一站式、整套智能家居解决方案——HomeKit?绿米?华为还是智汀?
  13. matlab处理李航《统计学方法》感知机学习算法---原始形式
  14. python之DataFrame篇
  15. 电子科技大学图论期末复习重点(杨春老师强调+往年期末卷子总结)
  16. java 文件压缩zip【两种方式】
  17. 3D Touch 的实现:
  18. 信息收集的利器,Google骇客语法
  19. 名词解释---《集成版》
  20. 如何判断苹果手机是否为国航

热门文章

  1. 22. 将文件映射到内存
  2. 第六届全国大学生生物医学工程创新设计竞赛参赛经历
  3. 什么是智能卡与IC卡
  4. 微信预约 php,php版微信公众平台实现预约提交后发送email的方法
  5. 中文文本分析, Text-Analysis
  6. 【JavaScript】延时器定时器使用
  7. 根据数据库中的出生年份计算年龄
  8. ALEXA站长全攻略(转)
  9. iframe页面的内嵌框架
  10. dcs常用的冗余方式_一种DCS系统冗余网络设备电源配置的制作方法