2015-02-04 3 views
0

Я хотел бы использовать специально базу данных Google Finance от Quandl для загрузки цен на акции для проверки стратегии. Причина заключается в том, что Google Finance имеет чистые данные по сравнению с базами данных Quandl в WIKI и Yahoo для акций с поправкой на расколы и т.д. Как видно здесь последняя ссылка будет отображаться на сплиты с поправкой на:Загрузка данных Quandl в pandas с использованием тегов кода данных Quandl 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

Однако теги базы данных Google Quandl находится в форме GOOG/NYSE_IBM или GOOG/NASDAQ_AAPL, например, которые отличаются от тегов, как например WIKI/IBM, YAHOO/IBM.

Поскольку невозможно добавить теги NYSE или NASDAQ вручную для количества акций, перечисленных на этих биржах, существует ли эффективный способ загрузки данных запаса из Quandl с учетом списка запасов в кадре данных csv или pandas ?

Вот мой код 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() 

Я попытался с помощью панд, построенных в удаленном доступе к данным, и это тоже создает проблемы при передаче строки в качестве фондовых символов для арг. Также любые предложения о выполнении цикла в векторном виде оцениваются вместо итеративного и для общего логического потока. Заранее спасибо.

ответ