2017-03-03 2 views
0

Ich versuche, die mehreren Aktienkurse (zBAPPL, TSLA, AMZN) in der Instrument-Variable, so dass Metaplotib Bollinger-Band-Diagramm für mehrere Aktienkurse generieren können. Jetzt zeigt es nur die Grafik für eine Aktie.Python Hinzufügen mehrerer Elemente in Variable

Ich habe versucht, das Instrument als Wörterbuch und dann versuchte mit der if-Schleife, aber es hat nicht funktioniert. Bitte geben Sie an, ob ich es anders implementieren oder auf andere einfache Weise implementieren muss.

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, instrument, bBandsPeriod): 
    strategy.BacktestingStrategy.__init__(self, feed) 
    self.__instrument = instrument 
    self.__bbands = bollinger.BollingerBands(feed[instrument].getCloseDataSeries(), bBandsPeriod, 2) 

def getBollingerBands(self): 
    return self.__bbands 

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

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


def main(plot): 
instrument = "AAPL" 
bBandsPeriod = 40 

# Download the bars. 
feed = yahoofinance.build_feed([instrument], 2015, 2016, ".") 

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

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

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

if plot: 
    plt.plot() 


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

Antwort

2

Dies sollte helfen:

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) 
Verwandte Themen