用Python 打造自己的股市資料庫— 美股篇 - Medium
文章推薦指數: 80 %
各家財經資料庫都有其所長,例如Bloomberg 及Datastream 的資料涵蓋率極廣,且資料品質極高 ... Yahoo Finance:主要的資料來源處/ 美股資料品質不錯 ...
UpgradeOpeninappHomeNotificationsListsStoriesWritePublishedinAI股仔-創新投資理財模式用Python打造自己的股市資料庫—美股篇PythonDIY資料庫系列;YahooFinanceAPI;FREDAPI;GoogleTrendsAPI股仔與新創夥伴合作打造的美股資訊站—FinGuider,歡迎前往體驗!小小前言所謂『垃圾進,垃圾出』,不論是開發策略也好或是數據分析也好,如果使用的數據資料來源不可靠,那出來的成品也難以說服他人。
我們要開發A.I.策略前進股市,首要關鍵就是取得良好的財經資料庫。
首選:從知名財經資料庫取得數據資料,但要付錢市面上有許多知名的財經資料庫可以選擇,Bloomberg、Datastream、MetaStockXenith、Wind、CMoney、TEJ…。
各家財經資料庫都有其所長,例如Bloomberg及Datastream的資料涵蓋率極廣,且資料品質極高;Wind的中國資料庫非常優秀,API使用體驗也佳;CMoney及TEJ在台灣資料庫上資料完整,費用也較為親民。
針對你主力投資的市場,衡量費用預算後,就可從中選擇出符合需求的財經資料庫,透過專業財經資料庫取得數據資料絕對會是策略開發的首選。
未來我也會撰寫《財經資料庫PythonAPI》這一系列的文章,分享如何透過PythonAPI快速的從這些財經資料庫中取得資料,不用手動按個老半天。
次選:透過Python從各大網站中免費取得數據資料,建立自己的資料庫如果暫時沒法購買資料庫,難道策略研究、數據分析就要中斷了嗎?不!這篇就是要教大家如何從各大知名網站中,善用Python套件,透過簡單的語法有效取得大量數據資料!讓我們開始吧!連結引導:(未刊登)用Python打造自己的股市資料庫—《台股篇》(未刊登)用Python打造自己的股市資料庫—《陸股篇》研究美股,需要什麼資料?資料庫的內容越豐富,後續研究開發越有利。
本文將教大家取得以下資料:公司資料:公司基本資料、市值、經營業務、產業類別…基本面資料:三大財報資料、每股盈餘、ROE…價量資料:調整後開高低收、成交量、股利、股票分割…總體經濟資料:公債殖利率、國內生產總值、消費者物價指數…個股情緒資料:個股搜尋熱度數據…上哪找這些資料?知道需要什麼資料後,下一個問題就是去哪取得這些資料。
前提是,有2個條件需要符合:1.資料來源可信度要夠(確保資料品質)2.要能透過python自動排程取得(方便建構大樣本資料庫)這裡就把符合條件的網站推薦給大家:YahooFinance:主要的資料來源處/美股資料品質不錯FRED:滿滿的總體經濟數據GoogleTrends:可獲得股票關鍵字搜尋流行度的資料它們都有很好的pythonAPI讓大家可以用簡單的code輕鬆建立起自己的美股資料庫喔!需要安裝的PythonModules我們先把所需modules安裝好。
pipinstallyfinance#YahooFinancepythonAPIpipinstallfredapi#FREDpythonAPIpipinstallpytrends#GoogleTrendspythonAPI等待安裝的時候,我們可以先建立資料夾,作為我們的美股資料庫!從YahooFinance取得個股資料我們將透過yfinance這個API取得以下資料:公司資料:公司基本資料、市值、經營業務、產業類別…基本面資料:三大財報資料、每股盈餘、ROE…價量資料:調整後開高低收、成交量、股利、股票分割…STEP1:資料庫中的股票代碼所有資料庫都會分別替每一支個股取一個獨特的股票代碼,美股在不同資料庫的代碼有良好的一致性,但仍有小部份股票代碼會有差異,舉例:『Apple』不管在哪個資料庫的股票代碼都是『AAPL』『BerkshireHathaway』在YahooFinance中的股票代碼是『BRK-B』『BerkshireHathaway』在CMoney中的股票代碼是『BRK.B』既然要從YahooFinance取得資料,就要先取得YahooFinance中的股票代碼清單。
股票代碼清單是根據自己想研究的標的所建立,這裡舉兩個範例:最近一日交易量最大的前100檔熱門美股S&P500的成份股名單範例1:最近一日交易量最大的前100檔熱門美股善用YahooFinance中的Screeners功能,可以建立不同主題的股票清單這裡我選擇了MostActives股票清單,從下圖中可以得知MostActives這份清單的篩股條件,點選『Edit』可以隨意修改篩股準則。
底下MatchingStocks表格呈現出篩選出來的股票清單,再依據Volume成交量來進行排序再往下拉,可以看到這份表格預設是呈現25檔股票,我們將它改成一次呈現100檔股票設定好之後,可以點選剛剛『Edit』旁有一個『SaveAs』將這份清單下載後,再匯入Python處理。
更快的辦法,是直接用pandas的read_html語法,把這份表格抓下來範例2:最新的S&P500成份股名單首先當然會想看看YahooFinance可否點出S&P500的成份股名單,結果發現YahooFinance並無提供這個資料這樣的話就只好從外部找了。
因為是S&P500,從Google輕鬆搜尋一下子就找到需要的清單,資料來自Slickcharts。
我們用一樣的語法,輕鬆抓到這份表格。
但要注意!Slickcharts替股票命名的方式跟YahooFinance稍有不同!有些股票有類別之分,股票代碼與股票類別透過特殊符號隔開,Slickcharts採用的符號是『.』,而YahooFinance採用的符號是『-』。
因此我們補上了一行code,把符號做一個修改!{2019/11/11更新}近期發現上述code會被slickcharts阻擋,故在此提供另一段code去提取股票代碼:#安裝所需module-requestspipinstallrequestsSTEP2:用yfinance批次爬取股票資料解決了股票代碼的問題後,可以開始爬取資料。
這裡依序示範爬取:公司資料→基本面資料→價量資料→個股選擇權資料先整理出yfinance會用到的語法:#必要步驟!告訴python你的標的股票是什麼stock=yf.Ticker('股票代碼')#取得各種資料stock.info#取得公司資料stock.financials#取得損益表stock.balance_sheet#取得資產負債表stock.cashflow#取得現金流量表stock.history#取得價量資料+股利發放資料+股票分割資料※GET公司資料我們將做出一張如下圖的大表格,裡頭記載yfinance所提供的公司資料欄:公司資料項目(共70種資料項目)列:公司股票代碼(下圖以S&P500成份股為例)程式碼以及敘述如下:※GET基本面資料再來我們把三大財報資料給爬下來,由於美股財報日期不一,所以每一檔個股的三份財報都分開儲存比較好備註:yfinance所提供的財報資料只有最近4季,算是一個小缺點。
程式碼以及敘述如下:※GET價量資料+股利發放+股票分割接下來我們來爬取最重要的價量資料以及個股所有歷史財務操作紀錄,每檔個股存一份完整的資料備註:此處下載的開、高、低、收資料全部都經過『股利』以及『股票分割』的還原喔!程式碼以及敘述如下:從FRED取得總體經濟資料FRED(FederalReserveEconomicData)的總體經濟資料非常完善,資料可靠度極高,第三方提供的pythonAPI選擇也多達三種以上,絕對是取得總體經濟資料的首選。
而首要步驟,就是先申請一個FRED帳號,再申請一組專屬的API序號,過程完全免費喔!STEP1:需要先申請FRED帳號+API序號請點選『FREDAPI申請』進入下圖FRED的網頁右上角有一個『MyAccount』,我們點進去後,再點選『CreateNewAccount』申請FRED帳號成功申請帳號後,就會自動導過來會員帳號頁面,我們點選『APIKeys』,再點選『+RequestAPIKeys』就好了喔!STEP2:用fredapi取得需要的總體經濟資料來了解一下FRED資料長怎樣1.舉例『wage』也就是薪資相關的數據好了!2.在FRED中,跟『wage』有關聯的數據至少有7個大分類,例如:*355:MinimumWageRates、*439:MeanHouseholdWagesAdjustedbyCostofLiving…3.每一個大分類都有一個專屬的『大分類ID』,就是前面的那個數字4.而每一個大分類底下,又會有N的子項目,例如355:MinimumWageRates底下:*FEDMINNFRWG:NonfarmWorkersMinimumHourlyWage*FEDMINFRMWG:FarmWorkersMinimumHourlyWage5.每一個子項目也有一個專屬的『子項目英文代碼』,就是前面的那串英文字所以呢!如果我想得到『非農就業的最低工資』這項經濟數據,就要先得到:『大分類ID』:355『子項目英文代碼』:FEDMINNFRWG待會那段fredapi爬資料的程式碼,當中的流程就是:1.先取得FRED有發布過什麼大分類的表,得到相對應的『大分類ID』2.看看大分類的內容,選擇你需要的大分類,當然也可全選3.我會提供一個從大分類表中進行關鍵字搜尋的程式碼,方便大家查詢(舉例:搜尋"wage"、"interest"、"gdp"、"yield"等等)4.創造一個以季為更新單位總表5.開始迴圈爬資料:5-1.第一層迴圈(大分類):每個大分類底下,篩選出『最熱門的前三子項目』,以及相對應的『子項目英文代碼』(當然也可以整個FRED所有項目內容都爬取下來,這邊僅做示範)5-2.第二層迴圈(子項目):陸續將每一個項目放入該總表裡面,完成你的經濟數據庫!完成的經濟資料庫會長這樣:程式碼以及敘述如下:從GoogleTrends取得關鍵字搜尋量資料完成了個股資料以及總體經濟面資料後,已經足以開發投資策略了。
但是大數據時代資料不嫌多,而且現代人只要有什麼事情想知道,都會先去Google一番,Google搜尋熱度逐漸成為了一項很不錯的數據。
這段就是教大家怎麼用GoogleTrends的pythonAPI—pytrends,準備一份股票代碼搜尋熱度的資料。
完成後的GoogleTrends個股代碼搜尋熱度表格會長這樣:程式碼以及敘述如下:這樣就完成了95%的GoogleTrends個股搜尋熱度資料庫了,為什麼是95%呢?因為熟悉GoogleTrends的使用者應該有看過下圖的一段話。
這段話是描述GoogleTrends將一段時間數據標準化的方式。
而我們取巧獲得長期間日頻率資料的方式,是每270天為一個時間區間推進一次去爬取日資料。
這就產生了一個小小的問題:Day1~Day270期間的最大值,是Day1~Day270期間的標準化方式Day271~Day540期間的最大值,是Day271~Day540期間的標準化方式所以資料合併在一起的時候,每一段資料標準化的依據都是不同的!因此我們還需要做一些調整,請見下方程式碼以及描述:這樣就終於完成了!終於建好美股資料庫了!希望大家滿意這篇教學~如果喜歡這篇文章,歡迎按下拍手給我支持,你們的鼓勵能驅使我加速寫出更多優質文章喔!感謝各位!MorefromAI股仔-創新投資理財模式透過A.I.演算法讓投資理財變得更有趣且更效率!ReadmorefromAI股仔-創新投資理財模式GetstartedAIStockBoy568Followers如果喜歡我的作品,歡迎FOLLOW我的臉書專頁:https://www.facebook.com/A.I.StockBoyFollowRelatedPlotVolatilitySurfaceinPythonusingThisisatutorialonhowtoplotavolatilitysurfaceusingplot_trisurf()frommplot3d.Thefunctionrequires3vectors:X,Y,andZ…PythonTuplesTupleItems — DataTypesChangetheworkingdirectoryofJupyterandJupyterLabonWindowsenvironmentIvisualizedglobalfoodpricesforeachcountryusingpythonHelpStatusWritersBlogCareersPrivacyTermsAboutKnowable
延伸文章資訊
- 1國際金融- Yahoo奇摩股市
Yahoo奇摩股市提供您最即時的國際指數、美股、歐股、港滬深股、加密貨幣、ADR、原物料等報價資訊, 協助投資人立足台灣,佈局全球。
- 2Yahoo奇摩股市– 台股報價股票投資組合外匯及財經 - Google ...
你的必備個人化投資工具,追縱心水股票,一個平台睇盡全球逾40個交易所報價(包括美股、港股、A股、期油、金價、虛擬貨幣),並獲得相關新聞和股價異動通知,助你 ...
- 3用Python 打造自己的股市資料庫— 美股篇 - Medium
各家財經資料庫都有其所長,例如Bloomberg 及Datastream 的資料涵蓋率極廣,且資料品質極高 ... Yahoo Finance:主要的資料來源處/ 美股資料品質不錯 ...
- 4國際指數- Yahoo奇摩股市
- 5美股- Yahoo奇摩股市
Yahoo奇摩股市提供台灣投資人道瓊工業、那斯達克等交易所的指標美股即時報價,包含Facebook、Apple、Amazon、Netflix、Google等尖牙股。