PyAlgoTrade使得绘制策略执行变得非常简单

  1. from pyalgotrade import strategy
  2. from pyalgotrade.technical import ma
  3. from pyalgotrade.technical import cross
  4. class SMACrossOver(strategy.BacktestingStrategy):
  5. def __init__(self, feed, instrument, smaPeriod):
  6. super(SMACrossOver, self).__init__(feed)
  7. self.__instrument = instrument
  8. self.__position = None
  9. # We'll use adjusted close values instead of regular close values.
  10. self.setUseAdjustedValues(True)
  11. self.__prices = feed[instrument].getPriceDataSeries()
  12. self.__sma = ma.SMA(self.__prices, smaPeriod)
  13. def getSMA(self):
  14. return self.__sma
  15. def onEnterCanceled(self, position):
  16. self.__position = None
  17. def onExitOk(self, position):
  18. self.__position = None
  19. def onExitCanceled(self, position):
  20. # If the exit was canceled, re-submit it.
  21. self.__position.exitMarket()
  22. def onBars(self, bars):
  23. # If a position was not opened, check if we should enter a long position.
  24. if self.__position is None:
  25. if cross.cross_above(self.__prices, self.__sma) > 0:
  26. shares = int(self.getBroker().getCash() * 0.9 / bars[self.__instrument].getPrice())
  27. # Enter a buy market order. The order is good till canceled.
  28. self.__position = self.enterLong(self.__instrument, shares, True)
  29. # Check if we have to exit the position.
  30. elif not self.__position.exitActive() and cross.cross_below(self.__prices, self.__sma) > 0:
  31. self.__position.exitMarket()
  1. from pyalgotrade import plotter
  2. from pyalgotrade.barfeed import yahoofeed
  3. from pyalgotrade.stratanalyzer import returns
  4. import sma_crossover
  5. # Load the yahoo feed from the CSV file
  6. feed = yahoofeed.Feed()
  7. feed.addBarsFromCSV("orcl", "orcl-2000.csv")
  8. # Evaluate the strategy with the feed's bars.
  9. myStrategy = sma_crossover.SMACrossOver(feed, "orcl", 20)
  10. # Attach a returns analyzers to the strategy.
  11. returnsAnalyzer = returns.Returns()
  12. myStrategy.attachAnalyzer(returnsAnalyzer)
  13. # Attach the plotter to the strategy.
  14. plt = plotter.StrategyPlotter(myStrategy)
  15. # Include the SMA in the instrument's subplot to get it displayed along with the closing prices.
  16. plt.getInstrumentSubplot("orcl").addDataSeries("SMA", myStrategy.getSMA())
  17. # Plot the simple returns on each bar.
  18. plt.getOrCreateSubplot("returns").addDataSeries("Simple returns", returnsAnalyzer.getReturns())
  19. # Run the strategy.
  20. myStrategy.run()
  21. myStrategy.info("Final portfolio value: $%.2f" % myStrategy.getResult())
  22. # Plot the strategy.
  23. plt.plot()

代码正在做3件事情:

  • 从CSV文件加载Feed。
  • 使用Feed提供的栏和附带的StrategyPlotter来运行策略。
  • 制定策略
    如下样子:

作者:readilen
链接:http://www.jianshu.com/p/b90f58c6a54c
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

PyalgoTrade 绘图(七)的更多相关文章

  1. HTML5基础总结

    HTML5是HTML语言的第五次重大版本升级,新增了如下内容:1.新增<video>.<audio>标签在页面上直接播放多媒体资源;2.新增<input>标签的ty ...

  2. Python·Jupyter Notebook各种使用方法

    PythonJupyter Notebook各种使用方法记录持续更新 一 Jupyter NoteBook的安装 1 新版本Anaconda自带Jupyter 2 老版本Anacodna需自己安装Ju ...

  3. 初学者需要IPython 与 Jupyter Notebook 吗?

    ipython 是 jupyter notebook的前身并拥有ipython的全部功能         jupyter拥有 cell, markdown 整合的功能, 能同时运行代码, 而且是多组的 ...

  4. Python·Jupyter Notebook各种使用方法记录

    标签(空格分隔): Python 一 Jupyter NoteBook的安装 1 新版本Anaconda自带Jupyter 2 老版本Anacodna需自己安装Jupyter 二 更改Jupyter ...

  5. ApacheCN C/C++ 译文集 20211201 更新

    笨办法学C 中文版 前言 导言:C的笛卡尔之梦 练习0:准备 练习1:启用编译器 练习2:用Make来代替Python 练习3:格式化输出 练习4:Valgrind 介绍 练习5:一个C程序的结构 练 ...

  6. ApacheCN 数据科学译文集 20211109 更新ApacheCN 数据科学译文集 20211109 更新

    计算与推断思维 一.数据科学 二.因果和实验 三.Python 编程 四.数据类型 五.表格 六.可视化 七.函数和表格 八.随机性 九.经验分布 十.假设检验 十一.估计 十二.为什么均值重要 十三 ...

  7. ApacheCN 数据科学译文集 2020.8

    协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>,生活原则 2.3.c 在线阅读 ApacheCN 面试求职交流群 724187166 Apach ...

  8. ApacheCN Pandas 教程集

    Pandas 秘籍 零.前言 一.Pandas 基础 二.数据帧基本操作 三.开始数据分析 四.选择数据子集 五.布尔索引 六.索引对齐 七.分组以进行汇总,过滤和转换 八.将数据重组为整齐的表格 九 ...

  9. 精通 Pandas · 翻译完成

    协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 面试求职交流群 724187166 ApacheCN 学习资源 ...

随机推荐

  1. C#判断用户是手机访问还是PC访问

    今天在做一个wap网站时,需要限制PC用户访问.网上找了很多资料,效果都不怎么理想.其实原理就是根据HTTP_USER_AGENT判断检查用户在用什么浏览器,再根据业务做相应的逻辑处理. 代码如下: ...

  2. C语言中exit函数的使用

      exit() 结束当前进程/当前程序/,在整个程序中,只要调用 exit ,就结束 return() 是当前函数返回,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一 ...

  3. samba创建权限(复制)

    1.今天发现用samba挂载开发过程中,发现别人的权限和我的经常不一致,导致提交git的时候都被提交了,心想应该有哪里有一个统一设置的可以设置用户的默认权限,后来百度之后找到下面的文章,以后创建文件和 ...

  4. Bootstrap table前端分页(ssm版)

    说明bootstrap table可以前端分页,也可以后端sql用limit分页.前端分页下性能和意义都不大,故一般情况下不用这种,请看我的另一篇后端分页的博客源码下载地址:https://git.o ...

  5. zoj3696Alien's Organ (二项分布,泊松分布求近似值)

    /*二项分布即重复n次的伯努利试验,每次发生的概率一样,假设成功的概率是p,那么失败的概率就是1-p: 二项分布的概率公式:试验中发生K次的概率是 P(ξ=K)= C(n,k) * p^k * (1- ...

  6. JS的 instanceof 方法

    http://www.cnblogs.com/jasonxuli/p/6769282.html 这是 2014-12-10 发在 iteye 上的文章 今天突然想起js的原型继承模型和相关的proto ...

  7. BZOJ2221: [Jsoi2009]面试的考验

    传送门 一句话题意,给定一个序列,询问区间内差值的绝对值的最小值. 这道题之前见过一次,似乎是在一次UER上,那一道题当时是用了近似算法才能过. 数据保证数列随机. 这道题显然非常适合离线的做法,考虑 ...

  8. [数据库] - org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection

    MySQL的驱动改名了,如果使用原来的com.mysql.jdbc.Driver 那么会提醒驱动不正常了,那么新的MySQL驱动名为:com.mysql.cj.jdbc.Driver 之后还报错,如题 ...

  9. G_M_网络流A_网络吞吐量

    调了两天的代码,到最后绝望地把I64d改成lld就过了,我真的是醉了. 网络吞吐量 题面:给出一张(n个点,m条边)带权(点权边权均有)无向图,点权为每个点每秒可以接受发送的最大值,边权为花费,保证数 ...

  10. vs_u8前缀

    1.ZC: 个人测试下来,VS2015开始 支持 u8前缀. 2.What's New for Visual C++ in Visual Studio 2015 https://msdn.micros ...