pyalgotrade教程3--策略结果可视化与评价指标
来源:互联网 发布:数据分析师证 编辑:程序博客网 时间:2024/04/30 13:34
我们写好策略,最好回测后,其实是很有必要看一下我们策略的效果,一般采用可视化的折线图与一些指标相结合的方式来评价一个策略。
1.策略可视化
在pyalgotrade中,已经为我们提供了很好用的可视化模块了,plotter。
所以,一开始我们先导入模块。
from pyalgotrade import plotter
把策略的净值图、买卖开仓情况绘制出来其实很简单,把我们的策略实例化之后,传给plotter就可以了。
myStrategy = MyStrategy(feed, "fd")# 策略实例化plt = plotter.StrategyPlotter(myStrategy) # 传入策略myStrategy.run()# 运行策略myStrategy.info("Final portfolio value: $%.2f" % myStrategy.getResult())plt.plot()# 绘制效果如如下:
可以看出,只有交易的时点标志和portfolio的净值曲线。
2.评价指标
对于一个策略而言,评价指标当然有很多。
这一类,在pyalgotrade里面都封装在了pyalgotrade.stratanalyzer里面,里面大概有如下几类评价指标:
a) class pyalgotrade.stratanalyzer.returns.Returns(maxLen=None)
Returns:包含两种,一个是累计收益率,通过getCumulativeReturns()获得;一种是每个bar的收益率,通过getReturns()获得,返回值都是一个DataSeries
b) class pyalgotrade.stratanalyzer.sharpe.SharpeRatio(useDailyReturns=True)
参数为真,表示使用每日的收益率计算sharpratio,否则的话,按照bar算。通过getSharpeRatio(riskFreeRate, annualized=True)来获得夏普率,其中,第一个参数是无风险利率,后面一个是是否年化的设置。
c) class pyalgotrade.stratanalyzer.drawdown.DrawDown()
回测的指标,有两个:
getLongestDrawDownDuration(),返回的是datetime.timedelta类型,表示最长的回撤时间长度。
getMaxDrawDown(),返回的是最大回撤。
d) class pyalgotrade.stratanalyzer.trades.Trades
这个指标的内容很多。
getCount():返回总的交易次数
getProfitableCount():返回盈利的交易次数
getUnprofitableCount():返回亏损的交易次数
getEvenCount():返回不赚不亏的交易次数
getAll():返回一个numpy.array的数据,内容是每次交易的盈亏
getProfits():返回一个numpy.array的数据,内容是,每次盈利交易的盈利
getLosses():返回一个numpy.array的数据,内容是每次亏损交易的亏损额
getAllReturns():返回一个numpy.array的数据,内容是每次交易的盈利,是百分比的形式
getPositiveReturns():返回一个numpy.array的数据,内容是,每次盈利交易的收益
getNegativeReturns():返回一个numpy.array的数据,内容是每次亏损交易的损失
下面是四种情况下的手续费
getCommissionsForAllTrades()
getCommissionsForProfitableTrades()
getCommissionsForUnprofitableTrades()
getCommissionsForEvenTrades()
使用这些指标的步骤如下:
(1)import相关指标
from pyalgotrade.stratanalyzer import returns, sharpe, drawdown, trades(2)构实例化一个指标的类
sharpe_ratio = sharpe.SharpeRatio()(3)向策略中添加这个指标类
myStrategy.attachAnalyzer(sharpe_ratio)(4)运行策略
myStrategy.run()(5)获取结果
print "sharpe_ratio", sharpe_ratio.getSharpeRatio(0)这里,0是无风险利率。
3.代码
# coding=utf-8from pyalgotrade import plotterfrom pyalgotrade.stratanalyzer import returns, sharpe, drawdown, tradesfrom pyalgotrade import strategyfrom pyalgotrade.bar import Frequencyfrom pyalgotrade.barfeed.csvfeed import GenericBarFeedfrom pyalgotrade.technical import ma# 1.构建一个策略class MyStrategy(strategy.BacktestingStrategy): def __init__(self, feed, instrument): super(MyStrategy, self).__init__(feed) self.__position = None self.__sma = ma.SMA(feed[instrument].getCloseDataSeries(), 150) self.__instrument = instrument self.getBroker() def onEnterOk(self, position): execInfo = position.getEntryOrder().getExecutionInfo() self.info("BUY at %.2f" % (execInfo.getPrice())) def onEnterCanceled(self, position): self.__position = None def onExitOk(self, position): execInfo = position.getExitOrder().getExecutionInfo() self.info("SELL at $%.2f" % (execInfo.getPrice())) self.__position = None def onExitCanceled(self, position): # If the exit was canceled, re-submit it. self.__position.exitMarket() def getSMA(self): return self.__sma def onBars(self, bars):# 每一个数据都会抵达这里,就像becktest中的next # Wait for enough bars to be available to calculate a SMA. if self.__sma[-1] is None: return #bar.getTyoicalPrice = (bar.getHigh() + bar.getLow() + bar.getClose())/ 3.0 bar = bars[self.__instrument] # If a position was not opened, check if we should enter a long position. if self.__position is None: if bar.getPrice() > self.__sma[-1]: # 开多头. self.__position = self.enterLong(self.__instrument, 100, True) # 平掉多头头寸. elif bar.getPrice() < self.__sma[-1] and not self.__position.exitActive(): self.__position.exitMarket()# 2.获得回测数据,官网来源于yahoo,由于墙的关系,我们用本地数据feed = GenericBarFeed(Frequency.DAY, None, None)feed.addBarsFromCSV("fd", "fd.csv")# 3.实例化策略myStrategy = MyStrategy(feed, "fd")# 4.设置指标和绘图sharpe_ratio = sharpe.SharpeRatio()myStrategy.attachAnalyzer(sharpe_ratio)plt = plotter.StrategyPlotter(myStrategy)# 5.运行策略myStrategy.run()myStrategy.info("Final portfolio value: $%.2f" % myStrategy.getResult())# 6.输出夏普率、绘图print "sharpe_ratio", sharpe_ratio.getSharpeRatio(0)plt.plot()
- pyalgotrade教程3--策略结果可视化与评价指标
- pyalgotrade教程5--多标的策略
- GC策略的评价指标
- 失真度量与评价指标
- 评价指标
- 评价指标
- ROC曲线与AUC--模型评价指标
- 图像质量评价与结构相似性指标
- scikit-learn中拟合结果的评价指标
- 多目标跟踪评价指标与经典测试集
- 机器人系统常用仿真软件介绍效果与评价指标
- 【数学建模】熵值法与多指标评价系统
- MANET性能评价指标
- 分类器评价指标
- 学术论文评价指标
- 分类器评价指标
- svm评价指标公式
- 图像质量评价指标
- Animated之实例篇
- java集合框架之栈Stack
- ubuntu安装图形化界面
- 数据库读取数据与某一字符串判断是否相等问题
- 如何使用 Mac Android Studio 做安卓真机调试 详细配置步骤
- pyalgotrade教程3--策略结果可视化与评价指标
- OpenGl(jogl)分形算法生成树
- 垃圾回收机制如何优化程序
- Python3 爬虫
- Intellij idea创建javaWeb以及Servlet简单实现
- VS 动态链接库(.dll)的加载问题
- 【笔记】ViewPager+自定义控件实现的日历控件CalenderView
- 定时任务demo
- Drools 运行时出现 java.lang.RuntimeException: wrong class format 问题解决