0

戦略をバックテストするための株価をダウンロードするために、特に Quandl の Google Finance データベースを使用したいと考えています。その理由は、分割などを調整した株式について、Quandl の WIKI や Yahoo データベースと比較して、Google Finance がクリーンなデータを持っているためです。

https://www.quandl.com/WIKI/AAPL-Apple-Inc-AAPL

https://www.quandl.com/YAHOO/AAPL-AAPL-Apple-Inc

https://www.quandl.com/GOOG/NASDAQ_AAPL-Apple-Inc-AAPL

ただし、Quandl の Google データベース タグは、たとえば GOOG/NYSE_IBM または GOOG/NASDAQ_AAPL の形式であり、WIKI/IBM、YAHOO/IBM などのタグとは異なります。

NYSE や NASDAQ のタグを手動でこれらの取引所に上場されている株式数に追加することは現実的ではないため、csv または pandas データフレーム内の株式のリストを指定して、Quandl から株式データをダウンロードする効率的な方法はありますか?

ここに私のコードFWIWがあります:

nyseList = pd.read_csv('dowjonesIA.csv')  # read csv
masterList = pd.DataFrame(nyseList.Ticker)  # save symbols only into another df

 for index, rows in masterList.iterrows():
     ticker = masterList.loc[index]  # this will not work for passing element
     stock = Quandl.get(ticker, trim_start="2000-01-01", trim_end="2015-01-01")
#stock = Quandl.get("GOOG/NASDAQ_AAPL", trim_start="2000-01-01", trim_end="2015-01-01")  #this is the actual format that works

 # lags data for signal
 stock['diff'] = (stock.Open - stock.Close.shift(1))/stock.Close.shift(1)

 lowerBound = -0.08
 upperBound = 0.08

#generate signal based on 8% rule
stock['signal'] = np.where(stock['diff'] >= upperBound, 1.0, np.where (stock['diff'] <= lowerBound, -1.0, 0.0))

initialCapital = 100000.0
accountLimit = 0.05

#calculate size based on account risk and price
stock['position'] = (stock.signal*initialCapital*accountLimit)/stock.Open

#shows if there is a position open
stock['open trade'] = np.where(stock['position'] > 0, 1.0, np.where(stock['position'] < 0, -1.0, 0.0))

#determine profit/loss
stock['pnl'] = (stock.position*stock.Close) - (stock.position*stock.Open)

#sums up results to starting acct capital
stock['equity curve'] = initialCapital + stock.pnl.cumsum()

print(stock.head(20))  # is dataframe

# plots test results
stock['equity curve'].plot()
plt.show()

リモートデータアクセスに組み込まれたpandasを使用してみましたが、文字列を引数のストックシンボルとして渡すときにも問題が発生します。また、反復ではなくベクトル化された方法でループを実行するための提案、および一般的なロジック フローを評価します。前もって感謝します。

4

1 に答える 1