Pyalgotrade VWAP расчет с использованием исторических данных Yahoo, кажется, неверно
Я только начал с pyalgotrade, используя измененный пример кода, который я получил онлайн, который использует вычисление VWAP (усредненное по объему), а также собственный программный метод получения исторических данных Yahoo. Я заметил, что выходной расчет VWAP кажется ошибочным, поскольку Yahoo регулирует громкость, в то время как программный инструмент предполагает, что громкость не отрегулирована.
Вот код Обратите внимание на график, полученный после выполнения, и обратите внимание на прекращение расчета VWAP. Я сравнил данные Nasdaq с yahoos, которые он загрузил, и отметил, что громкость Yahoo скорректирована, хотя она не указана как скорректированная. Я установил флаг для использования скорректированных данных, но программное обеспечение не использует его для расчета VWAP, так как я полагаю, что предполагается, что объем не скорректирован.
Буду признателен, если кто-нибудь определит метод, с помощью которого я смогу исправить проблему. Метод, который я мог бы использовать для переопределения своих собственных вычислений VWAP, подойдет. Также я не знаю, как сообщить об ошибке поставщикам, так как я новичок в этом.
from pyalgotrade import strategy
from pyalgotrade.barfeed import yahoofeed
from pyalgotrade import plotter
from pyalgotrade.tools import yahoofinance
from pyalgotrade.technical import vwap #Volume Weighted Average Price
import os
class MyStrategy(strategy.BacktestingStrategy):
def __init__(self, feed, instrument, vwapWindowSize):
strategy.BacktestingStrategy.__init__(self, feed)
self.__instrument = instrument
self.setUseAdjustedValues(True) # use adjusted close
self.__vwap = vwap.VWAP(feed[instrument], vwapWindowSize ) # ,useTypicalPrice=True)
def getVWAPDS(self):
return self.__vwap
def onBars(self, bars):
vwap = self.__vwap[-1]
if vwap == None:
return
shares = self.getBroker().getShares(self.__instrument)
#priceAdj = bars[self.__instrument].getAdjClose()
price = bars[self.__instrument].getClose()
notional = shares * price
if price < vwap * 0.995 and notional > 0:
self.marketOrder(self.__instrument, -100)
elif price > vwap * 1.005 and notional < 1000000:
self.marketOrder(self.__instrument, 100)
def main(plot):
instrument = "aapl"
vwapWindowSize = 5
# Download the bars.
feed = yahoofinance.build_feed([instrument], 2011, 2016, "./data",)
myStrategy = MyStrategy(feed, instrument, vwapWindowSize)
if plot:
plt = plotter.StrategyPlotter(myStrategy, True, False, True)
plt.getInstrumentSubplot(instrument).addDataSeries("vwap", myStrategy.getVWAPDS())
myStrategy.run()
print "Result: %.2f" % myStrategy.getResult()
if plot:
plt.plot()
if __name__ == "__main__":
main(True)
1 ответ
Это будет исправлено в следующей версии. Спасибо за сообщение об этом.