0

私は pyalgotrade を始めたばかりで、 VWAP (出来高調整平均)計算を使用するオンラインで入手した修正サンプル コードと、yahoo 履歴データを取得するソフトウェア独自の方法を使用しています。 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)
4

1 に答える 1

0

次のバージョンで修正される予定です。ご報告いただきありがとうございます。

于 2016-03-06T01:49:28.387 に答える