第十屆量化投資國際峰會報名須知
量化投資,數據是基礎
量化投資的理念現在越來越被人熟知,不論是在學校還是在職場,對量化投資感興趣,想要一試身手,甚至是將Quant定為職業目標的人也越來越多。不過許多朋友現在還只是臨時搜羅有限的數據,做一些零星的研究、測試和計算。與其這樣沒有明確目標地小打小鬧,不如著手建立一個比較完善的「量化投資研究系統」,下面我將和朋友們分享一下我在這方面嘗試的心得。
中國有句古話叫做「兵馬未動,糧草先行」,對於量化投資研究而言應該改為「模型未動,數據先行」,高質量的數據是出色研究的基礎。需求決定功能,我們要做哪方面的量化投資研究,決定了我們需要哪些數據。
我所理解的量化投資研究大致包括3塊內容:
學術化的研究工作,例如金融時間序列分析,這一塊研究主要集中在各種金融產品的交易數據上,例如股票、期貨、期權的價格,基金淨值等等;
構建交易策略或投資組合,這一塊研究需要交易數據、宏觀經濟指標和公司財務數據等等;
策略回測,這一塊研究需要大量歷史交易數據,用來測試評估交易策略和投資組合。
「天下沒有免費的午餐」,為了獲得數據,要麼付出金錢成本,購買數據終端(例如Wind終端);要麼付出時間成本,自己動手搭建維護一個金融資料庫。如果沒有機會擺弄萬得、彭博,還是毛主席那句話——「自己動手,豐衣足食」。
資訊時代,最大的數據源就是網際網路,而且在絕大部分情況下,網際網路可以提供公開免費的數據。所以我們要搭建的資料庫實際上是依賴「網絡爬蟲」獲取網際網路上的數據。不過在討論如何獲取數據之前,為了確保將來的工作簡單高效,先要「約法三章」:
儘量以下載文件,而不是抓取網頁內容的方式獲得數據;
儘量減少抓取網頁的次數,換言之,一張網頁上的數據要儘可能的多;
儘量抓取靜態網頁內容,而不是動態網頁。(有一個簡單的規則區別靜態和動態網頁,如果網頁內容變化之後,地址欄裡的URL連結跟著變化,就是靜態網頁,反之則是動態的。)
尋找金融數據源
廢話不多說,下面正式討論如建立自己的金融資料庫(目前只限於股票和基金數據)。
首先來到上交所和深交所的網站,目的是找到股票代碼和指數代碼列表。深交所以文件下載的方式提供股票和指數代碼(業界良心),上交所則是以網頁形式提供。天天基金網以網頁的形式提供了基金代碼列表(網址http://www.1234567.com.cn/allfund.html)。
基金代碼(天天基金網)
接下來看股票和指數的交易數據,要想獲得這些數據,一個最自然的想法就是到主流門戶網站上去找。事實上網易、新浪、和訊和東方財富等門戶網站都以網頁的形式提供每日交易數據。不過網易這一次成為了業界良心,網易提供數據下載服務,可以下載csv文件獲得股票和指數的歷史交易數據,以及股票最近一周的高頻交易數據。網易提供的數據甚至包括除權調整過的昨收數據(媽媽再也不用擔心我計算收益率了,真是業界良心啊)。
歷史交易數據(平安銀行)
成交明細(平安銀行)
和交易相關的另一種重要數據是「復權因子」,可惜提供復權因子數據的網站並不多,新浪這一次成為了業界良心,新浪以靜態網頁的形式提供每日的復權因子。
復權因子(平安銀行)
基金淨值數據,和股票跟指數一樣,門戶網站大多以網頁的形式提供歷史淨值數據,不過和訊這一次做了業界良心,和訊在基金的歷史淨值網頁上展示了該基金所有的歷史淨值數據。
基金淨值(華夏成長)
一些基本資料層面的數據,例如上市公司的基本資料,基金的基本資料等,對於這些數據,網站之間的大同小異區別不大。
最後看上市公司的財務數據,有些類型的量化投資特別需要研究公司財務數據,尤其是量化選股,需要大量財務數據構造因子,用來對股票估值和預測未來收益率。不過對比多家網站之後,不幸地發現不同網站提供的財務數據格式不盡相同,數據內容也是有出入。這一部分數據的搜集比想像的要複雜得多,將來會專門寫一篇文章討論這個問題,暫時擱置一下。
開始搭建金融資料庫
通過上面的文章,數據源已經基本確定了,接下來就要「修渠引水,匯入水庫」。水庫的話,就選擇最常用的資料庫MySQL;水渠的話,這裡用R語言。
前面講過了,整個資料庫依賴網絡爬蟲獲得數據,所以修水渠之前要先掌握下面幾個方面的基本知識:
R的語法,以及如何使用RCurl、XML、xml2等R包設計爬蟲;
網頁的基本結構,以及如何利用FireFox瀏覽器的FireBug插件或Chrome瀏覽器研究網頁結構;
正則表達式;
XPath語法,以及使用XPath提取html文件中的特定節點。
看起來需要很多的知識準備,不過以我個人的經驗,每個方面只要掌握最基本的知識就可以利用R做出一個靠譜的爬蟲。如果想要集中時間系統化的學習上述知識,這裡推薦兩本書《Automated Data Collection with R》、《XML and Web Technologies for Data Sciences with R》和一篇網絡教程《55分鐘學會正則表達式》。
接下來用一個實例演示如何獲得數據。
首先,到交易所網站手工收集整理A股的股票代碼和指數代碼列表,分別保存在文件SH.A.list.txt、SH.IDX.list.txt、SS.A.list.txt、SS.IDX.list.txt中。用R函數readLines讀取稱為相應的字符串向量,接著構造「市場代碼向量」用來標識股票和指數對應的市場,滬市記為0深市記為1,將這些向量組合成數據框(data.frame,R中常用的數據結構,類似excel表格)A.list和IDX.list。
第二步,找到包含所需信息的網頁,解析網頁連結的模式。以平安銀行為例,現在想要獲得股票的首次上市日。網易平安銀行的網頁連結是http://quotes.money.163.com/1000001.html,1000001中開頭的1是市場代碼,000001是股票代碼。在Chrome中打開網頁,按F12打開網頁分析工具,找到「首次上市」節點,右鍵複製XPath,即「/html/body/div[2]/div[22]/div[2]/p[9]」。
在R中運行下面的語句:
# 加載xml2和stringr包
library(xml2)
library(stringr)
# 連結
url <- "http://quotes.money.163.com/1000001.html"
# 讀取網頁
html <- read_html(url)
# XPath
path <- "/html/body/div[2]/div[22]/div[2]/p[9]"
# 找到「首次上市」節點
date <- xml_find_all(html, xpath = path)
# 轉化成文本
date <- xml_text(date)
date
# 如果亂碼,修改編碼
Encoding(date) <- "UTF-8"
date
# 用正則表達式提取日期
date <- str_extract(date, "[0-9]{4}-[0-9]{2}-[0-9]{2}")
date
最後得到date=」1991-04-03」,正是想要的首次上市日期。
如果是下載文件的話,先要通過瀏覽器獲得下載地址,例如
其中藍色的是市場代碼,紅色的是股票代碼,綠色的是日期,紫色的是數據項。
R中的download.file函數可以用於下載文件,或是藉助RCurl中的getBinaryURL函數,並配合使用writeBin函數。在R中運行下面的語句:
url <- "http://quotes.money.163.com/service/chddata.html?code=1000001&start=19910403&end=20150629&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP"
# 方法一
download.file(url, destfile = "000001.csv")
# 方法二
file <- getBinaryURL(url)
writeBin(file, con = "000001.csv")
就可以下載平安銀行的歷史交易數據。
在成功獲得數據,並保存到若干csv、txt文件之後,最後一步就是導入資料庫MySQL。藉助R包RMySQL,可以實現R和MySQL的連接,在R環境中直接操作MySQL資料庫。
# 載入RMySQL包
library(RMySQL)
# 建立資料庫連接
conn <- dbConnect(MySQL(), dbname = "資料庫名", username = "用戶名", password = "密碼")
# 啟動非嚴格模式
dbSendQuery(conn, "SET @@sql_mode=ANSI;")
# win7環境下如果漢字亂碼,就運行這條命令
dbSendQuery(conn, "SET NAMES GBK")
將文件中的數據導入資料庫可以使用下面的R命令:
sql <- "load data infile 『文件名』
into table 表名
character set GBK
fields terminated by ','
lines terminated by '\r\n';"
dbSendQuery(conn, sql)
至此,金融資料庫從無到有。未來資料庫的維護工作可以安排在周末,利用一個下午的時間,運行R程序獲取這一周新增的數據,並導入MySQL。在實際操作中,建庫和維護會遇到很多瑣碎的細節問題,比如說網頁編碼、股票退市、新發股票、網站出現故障、表的設計等等,這裡不能展開來講,只能在動手的過程中自己摸索,具體問題具體分析具體解決。
【私募工場平臺介紹】
私募工場是目前國內最具有凝聚力的投顧培養平臺,堅持以資產配置為核心投資理念,開展覆蓋量化投資及對衝基金領域的權威培訓、FOF/MOM業務,目前已吸引上萬家優秀私募及數百家金融孵化機構入駐。
【「阿基米德」:投顧入駐計劃】
私募工場聯合各大期貨公司、證券公司、FOF專業管理機構,為優秀私募優先提供充足資金(優先或管理型),為有潛力私募提供產品孵化、場地支持、股權融資等服務,如果您是一家私募公司,不論是股票型還是期貨型,不論是量化型還是主觀型,不論是套利型還是對衝型.,請點擊公眾號底部菜單:私募平臺/投顧入駐或者直接聯繫微信15034081448加入私募工場投顧庫。
【「阿基米德」:資方入駐計劃】
如果您是劣後投資方、自帶劣後投顧、企業資金方,或者是能提供優先資金的銀行、FOF、信託、期貨公司及券商……,請點擊公眾號底部菜單:私募平臺/資金方入駐或者直接聯繫微信15034081448加入私募工場資方庫。
【「阿基米德」:保殼借殼】
不論您是急需保殼,還是期望借出已有的私募殼,均可以點擊公眾號底部菜單:私募平臺/殼資源交換或者直接聯繫微信15034081448諮詢。
【Quant求職】
私募工場立足對衝基金、量化投資專業領域,已有上萬家頂級優秀私募入駐,更有數百家專注量化研究的私募加盟,如果您在量化投研方面有自己的特色和優勢,請點擊公眾號底部菜單:私募平臺/Quant求職或者按照「姓名+專業+期望的職位」直接發給15034081448(微信),同時將個人簡歷發至郵箱506743560@qq.com。
【私募求才】
如果您對量化策略研究及交易人才,或者其他人才有需求,請點擊公眾號底部菜單:私募平臺/私募求才或者直接聯繫15034081448留下您的需求信息。
【私募工場社群系列】
私募工場專業投研社群系列私募工場業務交流社群系列
私募工場專家顧問群
私募工場綜合交流2000人付費大群
私募工場FOF/MOM研究
山西量化投資學會群
私募工場市場熱點交流
私募工場業務交流群
私募工場私募合規討論
私募工場期權線上培訓
私募工場期權量化群私募工場期權線下培訓
私募工場套利量化群
私募工場機構群:期貨
私募工場資產組合群
私募工場機構群:券商
私募工場風險管理群私募工場基金銷售群
私募工場高頻交易群
私募工場機構群:私募
私募工場技術指標量化群
私募工場技術研發群
私募工場統計建模量化群
私募工場私募運營實務培訓群
私募工場高級量化創新交流群
私募工場線上活動會務組
私募工場大宗商品投研群
私募工場論壇會務組
私募工場大數據專題群
私募工場京滬深寬客沙龍
私募工場德州撲克與博弈論交流群
私募工場媒體交流群
私募工場社群歡迎您的加入,請在公眾號後臺對話框提交您的名片,並文字發送「姓名+微信號+機構+職位」,稍後會有客服專員邀請您加入相應社群,由於申請者眾多,邀請會有延遲,請您靜待。由於公眾號後臺留言保存時間僅有48小時,所以請您務必留下您的微信號,並嚴格按照格式發送相關信息,私募工場會竭誠為您提供更優質更專業的服務。內容合作:果果(15034081448)
商務合作:果果(15034081448)
投稿郵箱:506743560@qq.com(註明投稿)
私募工場歷史文章(回復後面括弧中內容獲取系列全文)
精選精華文章(精華) | 《私募相關法規》系列(fg) | 金融模型·量化投資系列(lhtz) | 算法理論&代碼(sfdm) | SVM系列(svm) | 用R語言做數據分析(r) | 金融時間序列連載(jrsjxl) | 機器學習系列連載(jqxx) | 人工智慧系列(AI)| 傅立葉分析系列連載(fly) | 《宏觀經濟研究》系列(hgyj) | 《微觀經濟學》系列(wgjj) | 《大數據與金融業》資訊系列(dsj) | 國家戰略權威評論(zlpl) | 世紀大救市觀察系列(sjdjs) | 賭博與投資系列(dbytz) | 投資時鐘系列(tzsz) | 期貨講堂(qhjt) | 套利系列(套利系列) | 各交易所程序化交易細則徵求意見稿(cxhjyxz) | 索羅斯公開課系列(sls) | 量化投資付費問答(自動問答;自動提問;付費提問) | FOF/MOM系列(FOF) | 國家隊的前世今生(國家隊) | 美國金融工程專業申請指南(美國金融工程專業申請)
點擊「閱讀原文」進入可查看私募工場歷史公開課