如何重用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,那么您需要重新执行所有操作,而不仅仅是重置提要。
我定义一个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,那么您需要重新执行所有操作,而不仅仅是重置提要。