2016-11-21 4 views
0

У меня есть стратегия, которая состоит из нескольких технических индикаторов для генерации сигнала покупки.PYALGOTRADE - Несколько тикеров

Как я могу реализовать это с помощью Pyalgotrade для нескольких списков тиккеров таким образом, чтобы стратегия не анализировалась на основе каждого кода, а на результатах всех сделок, сделанных из всех списков?

Ниже Вы найдете код, иллюстрирующий различные части программы (пример):

from pyalgotrade import strategy 
from pyalgotrade.barfeed import yahoofeed 
from pyalgotrade.technical import ma 


class MyStrategy(strategy.BacktestingStrategy): 
    def __init__(self, feed, instrument, smaPeriod): 
     super(MyStrategy, self).__init__(feed, 1000) 
     self.__position = None 
     self.__instrument = instrument 
     # We'll use adjusted close values instead of regular close values. 
     self.setUseAdjustedValues(True) 
     self.__sma = ma.SMA(feed[instrument].getPriceDataSeries(), smaPeriod) 

    def onEnterOk(self, position): 
     execInfo = position.getEntryOrder().getExecutionInfo() 
     self.info("BUY at $%.2f" % (execInfo.getPrice())) 

    def onEnterCanceled(self, position): 
     self.__position = None 

    def onExitOk(self, position): 
     execInfo = position.getExitOrder().getExecutionInfo() 
     self.info("SELL at $%.2f" % (execInfo.getPrice())) 
     self.__position = None 

    def onExitCanceled(self, position): 
     # If the exit was canceled, re-submit it. 
     self.__position.exitMarket() 

    def onBars(self, bars): 
     # Wait for enough bars to be available to calculate a SMA. 
     if self.__sma[-1] is None: 
      return 

     bar = bars[self.__instrument] 
     # If a position was not opened, check if we should enter a long position. 
     if self.__position is None: 
      if bar.getPrice() > self.__sma[-1]: 
       # Enter a buy market order for 10 shares. The order is good till canceled. 
       self.__position = self.enterLong(self.__instrument, 10, True) 
     # Check if we have to exit the position. 
     elif bar.getPrice() < self.__sma[-1] and not self.__position.exitActive(): 
      self.__position.exitMarket() 


def run_strategy(smaPeriod): 
    # Load the yahoo feed from the CSV file 
    feed = yahoofeed.Feed() 
    feed.addBarsFromCSV("orcl", "orcl-2000.csv") 

    # Evaluate the strategy with the feed. 
    myStrategy = MyStrategy(feed, "orcl", smaPeriod) 
    myStrategy.run() 
    print "Final portfolio value: $%.2f" % myStrategy.getBroker().getEquity() 

run_strategy(15) 

ответ

0

Держите текущие позиции в массиве. Например:

само положение .__ = []

Загрузите несколько инструментов и во время onbars проходным их всех.

Существует немало примеров, и группа Google является хорошим ресурсом.

https://groups.google.com/forum/#!topic/pyalgotrade/s45Dy39vimk

+0

спасибо за ссылку. не могли бы вы дать псевдокод? Мне трудно с этой частью. – RageAgainstheMachine