• PyalgoTrade 绘图(七)


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

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

    代码正在做3件事情:

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



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

  • 相关阅读:
    Git 思想和工作原理
    scala 内部类
    nginx -stream(tcp连接)反向代理配置 实现代理ldap转发
    【转载】Keepalived安装使用详解
    【转载】Linux内存中buffer和 cached的比较
    【转载】Vmware Vconverter从物理机迁移系统到虚拟机P2V
    InfluxDB 备份和恢复
    Mongodb 主从同步
    Redis主从同步
    ActiveMQ 高可用集群安装、配置(ZooKeeper + LevelDB)
  • 原文地址:https://www.cnblogs.com/zhanglong8681/p/7569242.html
Copyright © 2020-2023  润新知