Я использую pyalgotrade
для торговой стратегии, где я хочу использовать несколько тикеров в списке.Как создать сложную стратегию, используя несколько инструментов, в 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()
Я бы предложил вести с 'из импорта pyalgotrade *, потому что это кажется немного исчерпывающим для отдельных лиц, если в классе не существует переменного противоречия. – GreenHawk1220
@ GreenHawk1220 Спасибо, сделаю! Любая идея, как это работает с несколькими инструментами? – RageAgainstheMachine
Вам нужно найти способ объединить их все вместе. Я не знаком с библиотекой 'pyalgotrade', но я думаю, что проблема заключается в том, что вы выполняете каждый элемент в массиве по отдельности. Хотя я могу ошибаться. Я бы предложил найти способ комбинировать массив с тем, где вы все еще можете работать с ним, но я вполне мог ошибаться, потому что я действительно не знаком с 'pyalgotrade'. – GreenHawk1220