统计指标的计算:

在前面分析流程的过程中提到过barfeed中__onBars()方法。

def __onBars(self, dateTime, bars):# 计算统计指标
    self.__notifyAnalyzers(lambda s: s.beforeOnBars(self, bars))# 运行策略onBars方法,onBars方法正是我们买卖的核心,
    self.onBars(bars)# 3: Notify that the bars were processed.
    self.__barsProcessedEvent.emit(self, bars)

在该方法中做的第一件事就是进行统计分析,

self.__notifyAnalyzers(lambda s: s.beforeOnBars(self, bars))

这里的s代表的就是统计指标,在运行统计计算的时候先执行beforeOnBars操作。

在说明统计指标具体实现方法之前我们先来看一看统计指标时怎么使用的

from pyalgotrade.stratanalyzer import returnsmyreturn = returns.Returns()
myStrategy.attachAnalyzer(myreturn)

在此可以看到需要将统计分析方法注册到策略中,下面看一下注册的方法,

def attachAnalyzerEx(self, strategyAnalyzer, name=None):if strategyAnalyzer not in self.__analyzers:if name is not None:if name in self.__namedAnalyzers:raise Exception("A different analyzer named \'%s\' was already attached" % name)self.__namedAnalyzers[name] = strategyAnalyzerstrategyAnalyzer.beforeAttach(self)self.__analyzers.append(strategyAnalyzer)strategyAnalyzer.attached(self)
  • 先执行beforeAttach方法
  • 然后在策略__analyzers中注册统计指标,
  • 最后再执行attached方法
      比如在计算收益率Return中:
def beforeAttach(self, strat):# Get or create a shared ReturnsAnalyzerBase
    analyzer = ReturnsAnalyzerBase.getOrCreateShared(strat)analyzer.getEvent().subscribe(self.__onReturns)
        在此方法中向event中注册__onReturns方法,__onReturns是计算统计指标的核心方法。
        然后再看一下beforeOnBars方法。
def beforeOnBars(self, strat, bars):self.__portfolioReturns.update(strat.getBroker().getEquity())# Notify that new returns are available.
    self.__event.emit(bars.getDateTime(), self)

通过__event.emit()方法执行监听器中方法,运行在此之前注册的__onReturns方法,完成统计指标的计算。

在计算统计指标的时候并不是所有的统计方法都是通过这样的流程计算的,比如说在计算最大回撤中,在beforeOnBars中直接进行计算。

def beforeOnBars(self, strat, bars):equity = self.calculateEquity(strat)self.__currDrawDown.update(bars.getDateTime(), equity, equity)self.__longestDDDuration = max(self.__longestDDDuration, self.__currDrawDown.getDuration())self.__maxDD = min(self.__maxDD, self.__currDrawDown.getMaxDrawDown())

后续如果有需要在通过此类方法进行的计算的时候,按照具体需求可以按照不同的流程进行开发。

pyalgotrade源码分析4--PyAlgoTrade统计指标相关推荐

  1. 极光实时监听怎么调用_源码分析 Sentinel 实时数据采集实现原理(图文并茂)

    本篇将重点关注 Sentienl 实时数据收集,即 Sentienl 具体是如何收集调用信息,以此来判断是否需要触发限流或熔断. Sentienl 实时数据收集的入口类为 StatisticSlot. ...

  2. 源码分析 Sentinel 实时数据采集实现原理

    本篇将重点关注 Sentienl 实时数据收集,即 Sentienl 具体是如何收集调用信息,以此来判断是否需要触发限流或熔断. 本节目录 1.源码分析 StatisticSlot 1.1 Stati ...

  3. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  4. SpringBoot-web开发(四): SpringMVC的拓展、接管(源码分析)

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...

  5. SpringBoot-web开发(二): 页面和图标定制(源码分析)

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) 目录 一.首页 1. 源码分析 2. 访问首页测试 二.动态页面 1. 动态资源目录t ...

  6. SpringBoot-web开发(一): 静态资源的导入(源码分析)

    目录 方式一:通过WebJars 1. 什么是webjars? 2. webjars的使用 3. webjars结构 4. 解析源码 5. 测试访问 方式二:放入静态资源目录 1. 源码分析 2. 测 ...

  7. Yolov3Yolov4网络结构与源码分析

    Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 论文汇总 ...

  8. ViewGroup的Touch事件分发(源码分析)

    Android中Touch事件的分发又分为View和ViewGroup的事件分发,View的touch事件分发相对比较简单,可参考 View的Touch事件分发(一.初步了解) View的Touch事 ...

  9. View的Touch事件分发(二.源码分析)

    Android中Touch事件的分发又分为View和ViewGroup的事件分发,先来看简单的View的touch事件分发. 主要分析View的dispatchTouchEvent()方法和onTou ...

最新文章

  1. 冬奥会测试赛,助理裁判竟然是个AI!
  2. 使用 VNC 无屏幕远程连接树莓派
  3. Spring AOP 源码分析 - 筛选合适的通知器
  4. 【jenkins】jenkins CI/CD搭建基本过程
  5. 深入浅出MFC文档/视图架构之文档模板
  6. java字符串转字符串数组_Java字符串数组到字符串
  7. Android属于绑定服务特点是,android – 每个Service绑定是否需要一个ServiceConnection?...
  8. excel--text(双坐标图表)
  9. O2O、C2C、B2B、B2C是什么意思 有什么区别
  10. 百度AI战疫五十天:三场战役与一次胜利
  11. Opencv C++成长之路(七):RGB转换灰度图像
  12. authorize scope. userlocation需要在app.json中声明permission字段
  13. letter-shell | 一个功能强大的嵌入式shell
  14. Python爬虫之pyppeteer常用API快速上手
  15. 29条看了想哭的QQ签名
  16. 计算机电子电路基础教程视频,电子电路基础详细视频教学(100集)
  17. 【方法】blob类型地址的图片下载
  18. 梦龙国内外用料不同?究竟是不是双标?
  19. HTML+CSS美食静态网站设计【海鲜网站】web结课作业的源码 web网页设计实例作业
  20. 2022青海最新通信施工安全员模拟考试试题及答案

热门文章

  1. mysql 统计七日留存率_移动APP中,7日留存率到底如何定义?
  2. 20051114: 未麻的小屋
  3. win10系统桌面快捷方式图标变为白色方块如何解决
  4. 基于基础c语言的水仙花数编程方法
  5. BUUCTF中web方向题目记录(二)
  6. 装机记录Win10专业版可以做的事……
  7. 【读书笔记】程序员们需读的一本书《软技能:代码之外的生存指南》 | 约翰 Z.森梅兹
  8. python将中文数字转化成阿拉伯数字
  9. Android 解析Excel (xls格式)
  10. BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 概率与期望+高斯消元