Backtrader量化平台教程(六)Analyzer
AD:(本人录制的backtrader视频课程,大家多多支持哦~ https://edu.csdn.net/course/detail/9040)
无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。教程链接:https://www.cbedai.net/qtlyx
1.什么是Anayzer
我们写了一个策略,跑了一下,看了一下图,觉得不错。但是,究竟我们的策略如何呢?譬如,Sharpe Ratio是多少,最大回撤是多少等等。这些指标我们如何获取呢?在backtrader中,给我们提供了获取这些指标的途径,就是Analyzer。顾名思义,就是分析师。
这里我们要提一下,Analyzer与Lines这一类数据是不一样的。显然的,Analyzer是在你跑完策略之后给你一个结果,不会每时每刻都有一个数据产生。但是我们要说明的是在backtrader的内部,其实Analyzer也是一种Lines,这可能是出于代码后期兼容性和可扩展性的考虑吧,作为end user,其实不用考虑那么多。
2.如何使用Anayzer
具体怎么使用Analyzer呢?和Strategy、Observe和Datas一样,我们把我们想要的Analyzer加入到cerebro中就可以了,具体使用的方法是:
addanalyzer()
# -*- coding: utf-8 -*-from __future__ import (absolute_import, division, print_function,unicode_literals)import datetime # For datetime objects
import pandas as pd
import backtrader as bt
import numpy as np# Create a Stratey
class MyStrategy(bt.Strategy):params = (('ssa_window', 15),('maperiod', 15),)def log(self, txt, dt=None):''' Logging function fot this strategy'''dt = dt or self.datas[0].datetime.date(0)print('%s, %s' % (dt.isoformat(), txt))def __init__(self):# Keep a reference to the "close" line in the data[0] dataseriesself.dataclose = self.datas[0].close# To keep track of pending orders and buy price/commissionself.order = Noneself.buyprice = Noneself.buycomm = Noneself.sma = bt.indicators.SimpleMovingAverage(self.datas[0], period=self.params.maperiod)def notify_order(self, order):if order.status in [order.Submitted, order.Accepted]:returnif order.status in [order.Completed]:if order.isbuy():self.log('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: # Sellself.log('SELL EXECUTED, Price: %.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):if not trade.isclosed:returnself.log('OPERATION PROFIT, GROSS %.2f, NET %.2f' %(trade.pnl, trade.pnlcomm))def next(self):self.log('Close, %.2f' % self.dataclose[0])if self.order:returnif not self.position:if self.dataclose[0] > self.sma[0]:self.log('BUY CREATE, %.2f' % self.dataclose[0])self.order = self.buy()else:if self.dataclose[0] < self.sma[0]:self.log('SELL CREATE, %.2f' % self.dataclose[0])self.order = self.sell()if __name__ == '__main__':cerebro = bt.Cerebro()cerebro.addstrategy(MyStrategy)dataframe = pd.read_csv('dfqc.csv', index_col=0, parse_dates=True)dataframe['openinterest'] = 0data = bt.feeds.PandasData(dataname=dataframe,fromdate = datetime.datetime(2015, 1, 1),todate = datetime.datetime(2016, 12, 31))cerebro.adddata(data)cerebro.broker.setcash(100.0)cerebro.addsizer(bt.sizers.FixedSize, stake=10)cerebro.broker.setcommission(commission=0.0)print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name = 'SharpeRatio')cerebro.addanalyzer(bt.analyzers.DrawDown, _name='DW')results = cerebro.run()strat = results[0]print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())print('SR:', strat.analyzers.SharpeRatio.get_analysis())print('DW:', strat.analyzers.DW.get_analysis())cerebro.plot()
用的还是我们之前SMA的例子。我们着重看一下我们的analyzer是怎么添加和使用的。
cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name = 'SharpeRatio')cerebro.addanalyzer(bt.analyzers.DrawDown, _name='DW')results = cerebro.run()strat = results[0]print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())print('SR:', strat.analyzers.SharpeRatio.get_analysis())print('DW:', strat.analyzers.DW.get_analysis())cerebro.plot()
我们看一下,在rcerebro run之前,我们先添加了两个analyzer:SharpeRatio和DrawDown,在添加的时候,我们分别对这两个anayzer命令名,也就是
_name = 'SharpeRatio'与 _name='DW'
_name='DW'
为了使用这一anayzer,我们需要获取cerebro run之后的返回值,然后获取策略相关信息,
results = cerebro.run()
strat = results[0]
这一部分在后续解析cerebro时再展开。
print('SR:', strat.analyzers.SharpeRatio.get_analysis())print('DW:', strat.analyzers.DW.get_analysis())
这里,我们就获取了这一策略的SharpeRatio与回撤的信息了。
我们可以看到,回撤信息布置最大回撤,还有好多。
3.有哪些指标
那么,具体,有哪些Analyzer呢?
笔者大概列了一下:
AnnualReturn
Calmar
DrawDown
TimeDrawDown
GrossLeverage
PositionsValue
PyFolio
LogReturnsRolling
PeriodStats
Returns
SharpeRatio
SharpeRatio_A
SQN
TimeReturn
TradeAnalyzer
Transactions
VWR
大概有这么些,具体后续用到了再详细讲解。
Backtrader量化平台教程(六)Analyzer相关推荐
- backtrader量化平台教程(二)第一个可用的策略
第一个可用的策略 指数基金的收益率怎么样? 写一个实用的策略,验证指数基金的收益情况. 获取回测数据 我们从证券宝baostock免费获取中证500(000905)指数数据. 这里我们写了一个工具ge ...
- Backtrader 基本使用教程 — 量化投资实战教程(1)
都说Python可以用于量化投资,但是很多人都不知道该怎么做,甚至觉得是非常高深的知识,其实并非如此,任何人都可以在只有一点Python的基础上回测一个简单的策略. Backtrader是一个基于Py ...
- 扫地僧AI量化平台Qlib给力教程系列一:核心篇
自从去年微软发表Qlib以来,Qlib经历重大升级修订,许多以往的技术介绍文章已经过时.不少学习了Qlib的小伙伴还是经常有疑问: Qlib中怎样使用自己的行情数据? Qlib中怎样自定义因子? In ...
- zipline量化平台----本地化(上)
无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.教程链接:https://www.cbedai.net ...
- backtrader量化回测,基础篇,附MACD交易回测代码
backtrader由德国工程师开发,拥有股票的回测,检测交易策略,支持期货实时交易,对于股票交易还在完善,我尝试了pylagotrade,vn.py,发现backtrader功能强大,交易策略全面, ...
- 如何使用ricequant量化平台进行落单和回测
如何使用ricequant量化平台进行落单和回测: def init(context): : context.s1 = "000001.XSHE" update_ ...
- python量化平台怎么搭建_Python_量化投资领域, 平台, 交易策略, 项目全覆盖
Python在量化领域的现状 就跟Java在web领域无可撼动的地位一样,Python也已经在金融量化投资领域占据了重要位置,从各个业务链条都能找到相应的框架实现. 在量化投资(证券和比特币)开源项目 ...
- Java在Quant应用_BigQuant人工智能量化平台使用
BigQuant人工智能量化平台使用 BigQuant人工智能量化平台使用 @Author : By Runsen 在2020年一月初,也是我大三上的寒假,我开始写书,为什么呢?因为化工原理和化工热力 ...
- 自己做量化交易软件(16)用小白通通量化AI框架打造自己的量化平台
最近一段时间,我主要学习python3和tkinter的窗口开发,对tkinter编程逐步了解. 此外,应广大朋友要求,我写了 一本学习python3学习书籍<小白学Python3实战搭建量化投 ...
- 【MATLAB Image Processing Toolbox 入门教程六】“导入、导出和转换”之“图像类型转换Ⅰ——在不同图像类型之间转换”
[MATLAB Image Processing Toolbox 入门教程六] 1 gray2ind函数 2 ind2gray函数 3 mat2gray函数 4 rgb2gray函数 5 rgb2in ...
最新文章
- 有没有想过,手写一个连接池?
- java list合并_Java流系列之第2部:使用流执行聚合
- MySQL的user表
- 启明云端分享| SSD201 / SSD202D 在IP广播的应用
- 缓冲区,粘包,解决粘包的方法,
- java1.8+pydev_Ubuntu 18.04.4 中使用 Eclipse+PyDev 配置 Python 开发环境
- 炫酷流光个人主页源码分享及在线部署教程
- 050、动手实验:使用 jstat 摸清线上系统的JVM运行状况
- vba字典重复key_利用VBA字典,提取两列数据的重复值
- 柳州楼顶种植水稻 国稻种芯·中国水稻节:广西12万亩米飘香
- 如何解决青年大学习的复制粘贴问题???
- Linux Shell重定向 管道命令 grep搜索 awk编程 sed文件操作高阶函数
- 舆情监测技术方案,网络舆情分析技术手段有哪些?
- 常用通信协议——IIC协议编程实现
- Python的pickle使用
- 角色原画设计中的节奏感如何把握?
- 关于电脑系统重装 bootmgr is missing
- 获取小程序链接地址的方式
- 面试应答有哪些话术和技巧?
- 【matlab矩阵运算】06、matlab索引:位置索引、线性索引和逻辑索引
热门文章
- nodejs初学者大全
- 程序员夏天穿格子衫,那么冬天穿什么?
- 抽象工厂模式之手机主题
- 如何在windows中配置自动生成崩溃文件(.dmp)
- urllib库如何设置代理如何传递并保存cookie【python爬虫入门进阶】(02-3)
- Android 沉浸式全面详解(这一篇文章就够了)
- Nginx框架之Lua拓展
- Diligent收购领先的批判性见解和分析SaaS提供商Insightia
- 十五、JDBC(高琪java300集+java从入门到精通笔记)
- css中“~”(波浪号)、“,”(逗号)、“+”(加号)和“”(大于号)详解