1

我定义一个类如下。但我只能运行一次 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)

"""

4

1 回答 1

1

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

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)

如果您还想更改仪器/提要,则需要再次执行所有操作,而不仅仅是重置提要。

于 2021-04-09T03:34:36.623 回答