如何重用pyalgotrade的实例策略class

How to reuse the instance strategy class of pyalgotrade

我定义一个class如下。但是我只能 运行 myStrategy 一次。如果我再次更改参数和 运行 myStrategy,则没有任何变化。我希望在不同的股票和参数下多次使用相同的策略。

"""

from pyalgotrade import strategy
from pyalgotrade.barfeed import quandlfeed
from pyalgotrade.technical import atr
from pyalgotrade.technical import highlow
from pyalgotrade.technical import ma


class turtleStrategy(strategy.BacktestingStrategy):
    def __init__(self, feed, instrument, period):
        strategy.BacktestingStrategy.__init__(self,feed,1000000)
        #super(turtleStrategy, self).__init__(feed,1000000)
        self.__instrument = instrument
        self.__period = period
        self.__position = None
        barsDs = feed[instrument]
        self.__atr = atr.ATR(barsDs,period)
        self.__closePrice = feed[instrument].getCloseDataSeries()
        self.__hband = highlow.High(self.__closePrice,period)
        self.__lband = highlow.Low(self.__closePrice,period)
    
    def onBars(self,bars):
        
        try:
            high = self.__hband.getDataSeries()[-2]
            low = self.__lband.getDataSeries()[-2]
        except:
            return
                
        price = bars[self.__instrument].getClose()
        
        if self.__position is None:
            if price > high:
                shares = int(self.getBroker().getCash() / price)
                self.marketOrder(self.__instrument,shares)
        elif price < low:
            self.marketOrder(self.__instrument,self.getBroker().getShares())

rdat = "...\FREE.csv"
instrument = "FREE"
period = 20
feed = quandlfeed.Feed()
feed.addBarsFromCSV(instrument,rdat)

myStrategy = turtleStrategy(feed,instrument,period)

"""

如果你只是想改变周期,你可以试试这个:

rdat = "...\FREE.csv"
instrument = "FREE"
feed = quandlfeed.Feed()
feed.addBarsFromCSV(instrument,rdat)

for period in [20, 30, 40]:
    feed.reset()
    myStrategy = turtleStrategy(feed, instrument, period)

如果您还想更改 instrument/feed,那么您需要重新执行所有操作,而不仅仅是重置提要。