我使用pyalgotrade
作为一种交易策略,我想在一个列表中使用多个股票代码。在
它现在的设置方式是,为列表中的每个股票代码运行策略,但我希望它能将它们作为一个综合策略来运行。在
我该怎么做?
代码如下:
from pyalgotrade.tools import yahoofinance
from pyalgotrade import strategy
from pyalgotrade.barfeed import yahoofeed
from pyalgotrade.technical import stoch
from pyalgotrade import dataseries
from pyalgotrade.technical import ma
from pyalgotrade import technical
from pyalgotrade.technical import highlow
from pyalgotrade import talibext
from pyalgotrade.talibext import indicator
import numpy as np
import talib
testlist = ['aapl', 'msft', 'z']
class MyStrategy( strategy.BacktestingStrategy ):
def __init__( self, feed, instrument ):
strategy.BacktestingStrategy.__init__( self, feed )
self.__position = []
self.__instrument = instrument
self.setUseAdjustedValues( True )
self.__prices = feed[instrument].getPriceDataSeries()
self.__stoch = stoch.StochasticOscillator( feed[instrument], 20, dSMAPeriod = 3, maxLen = 3 )
def onBars( self, bars ):
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
bar = bars[self.__instrument]
self.info( "%s,%s,%s" % ( bar.getClose(), self.__PPO[-1], slope ) )
if self.__PPO[-1] is None:
return
for inst in self.__instrument:
print inst
#INSERT STRATEGY HERE
def run_strategy():
# Load the yahoo feed from the CSV file
instruments = ['aapl', 'msft', 'z']
feed = yahoofinance.build_feed(instruments,2015,2016, ".")
# Evaluate the strategy with the feed.
myStrategy = MyStrategy(feed, instruments)
myStrategy.run()
print "Final portfolio value: $%.2f" % myStrategy.getBroker().getEquity()
run_strategy()
你可以用这个例子来指导多种工具的交易:http://gbeced.github.io/pyalgotrade/docs/v0.18/html/sample_statarb_erniechan.html
feed
是pyalgotrade.feed.BaseFeed
的实例。它包含一个或多个工具BarDataSeries
,它定义了一个价格序列。当调用feed[instrument]
时,您将得到这个仪器的BarDataSeries
。 您需要一个for loop
来处理每个单独的仪器。添加一个专门的类来处理每个工具,这将使您的代码更干净。请参见InstrumentManager
类。我修正了很多程序错误。在相关问题 更多 >
编程相关推荐