<p><code>feed</code>是<code>pyalgotrade.feed.BaseFeed</code>的实例。它包含一个或多个工具<code>BarDataSeries</code>,它定义了一个价格序列。当调用<code>feed[instrument]</code>时,您将得到这个仪器的<code>BarDataSeries</code>。
您需要一个<code>for loop</code>来处理每个单独的仪器。添加一个专门的类来处理每个工具,这将使您的代码更干净。请参见<code>InstrumentManager</code>类。我修正了很多程序错误。在</p>
<pre><code>class InstrumentManager():
def __init__(self, feed, instrument):
self.instrument = instrument
self.__prices = feed[instrument].getPriceDataSeries()
self.__stoch = stoch.StochasticOscillator( feed[instrument], 20, dSMAPeriod = 3, maxLen = 3 )
self.__signal = None
def onBars(self, bars):
bar = bars.getBar(self.instrument)
if bar:
self.__PPO = talibext.indicator.PPO( self.__prices, len( self.__prices ), 12, 26, matype = 1 )
try: slope = talib.LINEARREG_SLOPE( self.__PPO, 3 )[-1]
except Exception: slope = np.nan
print( "%s,%s,%s" % ( bar.getClose(), self.__PPO[-1], slope ) )
if self.__PPO[-1] is None:
return
# set signal in some conditions. eg self.__signal = 'buy'
def signal():
return self.__signal
class MyStrategy( strategy.BacktestingStrategy ):
def __init__( self, feed, instruments ):
strategy.BacktestingStrategy.__init__( self, feed )
self.__position = []
self.__feed = feed
self.__instruments = instruments
self.setUseAdjustedValues( True )
self.instManagers = {}
self.loadInstManagers()
def loadInstManagers(self):
for i in self.__instruments:
im = InstrumentManager(self.__feed, i)
self.instManagers[i] = im
def updateInstManagers(self, bars):
for im in self.instManagers.values():
im.onBars(bars)
def onBars( self, bars ):
self.updateInstManagers(bars)
for inst in self.__instruments:
instManager = self.instManagers[inst]
print inst
# Do something by instManager.signal()
</code></pre>