python在变量中添加多个项目

时间:2017-03-03 02:50:12

标签: python pyalgotrade

我正在尝试在工具变量中添加多个股票报价(例如APPL,TSLA,AMZN),以便metaplotlib可以为多个股票报价生成布林带图。现在它只显示一个股票的图表。 / p>

我尝试将该乐器用作词典,然后尝试使用if循环,但它没有奏效。请告知我是否必须采用不同的方式或任何其他简单的方式来实现它。

items

1 个答案:

答案 0 :(得分:2)

这应该有所帮助:

from pyalgotrade import strategy
from pyalgotrade import plotter
from pyalgotrade.tools import yahoofinance
from pyalgotrade.technical import bollinger
from pyalgotrade.stratanalyzer import sharpe


class BBands(strategy.BacktestingStrategy):
    def __init__(self, feed, instruments, bBandsPeriod):
        strategy.BacktestingStrategy.__init__(self, feed)
        self.__instruments = instruments

        self.__bbands = {}
        for instrument in instruments:
            self.__bbands[instrument] = bollinger.BollingerBands(feed[instrument].getCloseDataSeries(), bBandsPeriod, 2)

    def getBollingerBands(self):
        return self.__bbands

    def onBarsPerInstrument(self, instrument, bars):
        bbands = self.__bbands[instrument]
        lower = bbands.getLowerBand()[-1]
        upper = bbands.getUpperBand()[-1]
        if lower is None:
            return

        shares = self.getBroker().getShares(instrument)
        bar = bars[instrument]
        if shares == 0 and bar.getClose() < lower:
            sharesToBuy = int(self.getBroker().getCash(False) / bar.getClose())
            self.marketOrder(instrument, sharesToBuy)
        elif shares > 0 and bar.getClose() > upper:
            self.marketOrder(instrument, -1*shares)

    def onBars(self, bars):
        for instrument in self.__instruments:
            self.onBarsPerInstrument(instrument, bars)


def main(plot):
    instruments = ["AAPL", "ORCL"]
    bBandsPeriod = 40

    # Download the bars.
    feed = yahoofinance.build_feed(instruments, 2015, 2016, ".")

    strat = BBands(feed, instruments, bBandsPeriod)
    sharpeRatioAnalyzer = sharpe.SharpeRatio()
    strat.attachAnalyzer(sharpeRatioAnalyzer)

    if plot:
        plt = plotter.StrategyPlotter(strat, True, True, True)
        for instrument in instruments:
            bbands = strat.getBollingerBands()[instrument]
            plt.getInstrumentSubplot(instrument).addDataSeries("upper", bbands.getUpperBand())
            plt.getInstrumentSubplot(instrument).addDataSeries("middle", bbands.getMiddleBand())
            plt.getInstrumentSubplot(instrument).addDataSeries("lower", bbands.getLowerBand())

    strat.run()
    print "Sharpe ratio: %.2f" % sharpeRatioAnalyzer.getSharpeRatio(0.05)

    if plot:
        plt.plot()


if __name__ == "__main__":
    main(True)