A. 如何搭建自己的股票高頻資料庫(Python)
二話不說,先上結果。本文闡述了以下幾個方面:
下圖是編寫好的數據介面提取數據的示例。該數據介面支持多標的、多品種(股票、指數一起提取)、多欄位、多時間提取。並且支持不復權、後復權、等比前復權提取(前復權不太實用就沒有做)。而且速度巨快,沒有數據量的限制。如果你也覺得很香,請接著往下看,本文將手把手教你搭建這樣的資料庫。
資料庫搭建需要用到一些第三方庫,在各位動手之前請安裝:
本文的方法不涉及到常用的資料庫(不涉及MySQL、MongoDB),思路非常簡單,請各位放心食用。主要是使用pyarrow來加強代碼性能。雖然不涉及到常用資料庫,但這是我目前能想到的最有效的方法。
正所謂「巧婦難為無米之炊」,想搭建高頻資料庫,就需要一個數據源獲取高頻數據。在此,我推薦聚寬作為我們的數據源。 聚寬賬號的申請請點這里。新人用戶有每日100萬條數據,DataFrame的一行算一條,請各位務必珍惜自己的數據量。(不過我是正式用戶了,每天兩個億,就不太在意這一點哈哈。)
非會員的100萬條數據量能幹啥?我們來簡單計算以下:每個交易日有240條數據(4個小時,240條分鍾k線),假設一年有250個交易日,每隻股票每年需要佔用60000條數據。也即一日的數據量能夠提取一隻股票16年(100/6=16.66667)左右的股票分鍾數據。相當於資料庫的搭建過程還是相當艱難的,每天耗盡數據量只能下載好一隻股票的數據。(白嫖是這樣的啦,如果有條件可以聯系聚寬客服,購買正式賬號)
我們這里假設我們的資料庫記錄2015年至今的股票分鍾數據。(當然我自己的資料庫記錄的是2005年1月1日的全A股分鍾數據)這里,我們以貴州茅台(股票代碼 600519.XSHG)為例,演示數據的提取與保存。先看看數據如何從介面提取出來(這里需要用到各位申請的聚寬賬號):
來看看代碼運行的結果。
數據提取後,自然需要把數據保存起來。pandas.DataFrame有很多方便的方法可以將數據保存下來。為做對比,這里將數據保存為csv格式和ftr格式。
相對應的,我們可以用這樣的代碼將保存好的數據讀取進來。雖然pandas有read_feather函數,可以直接將ftr文件讀取進來,但這個速度比直接調用pyarrow的更慢一些。考慮到代碼性能,這里直接從pyarrow調用read_feather函數。
雖然兩種格式都能將數據完整地保存下來,但讀取速度上,ftr文件占據著絕對的優勢。因此,我們考慮到資料庫的性能以及資料庫所佔空間,我們選擇使用ftr格式儲存數據。feather正如他的名稱,像羽毛一樣輕,它所佔的空間會比csv更小。這是一種不佔空間,讀取速度又快的文件格式,太香了!
在前文中我提到了行情數據的提取、保存方法,並強調了一定要提取不復權的數據。這是為了與復權因子結合,還原各種形式的復權數據。至於復權的詳細定義,請參看 網路。
隨便打開一個股票看盤軟體,大致會有3種復權方式,即前復權、不復權、後復權。按照我自己的想法,可以這么理解:
在這樣的情況下,如果記錄價格數據,記錄前復權的數據是最沒有意義的,因為隔一段時間,歷史的價格就全變了。如果只做收益率相關研究的話,記錄後復權數據是可以的。然而,我們這里要搭建資料庫,所以採取「記錄不復權數據」加上「復權因子」還原的方法。
我們著手提取復權因子。在提取之前,不妨再理順一下思路:
思路理順了,我們來看看後復權因子的提取方法:
有了復權因子,如何計算復權價格?請接著看第3節——數據介面編寫。
提取了行情數據和復權因子數據,應當找個地方把它們存放起來。我分了兩個文件夾來保存我的數據。
在你搜集了足夠多隻股票的分鍾數據後,就能夠來到這一步,編寫一個數據介面方便調用數據。
數據介面的編寫重難點在於股票價格復權的計算。這里同樣以貴州茅台(股票代碼 600519.XSHG)為例來演示如何進行復權的計算。復權的核心在於下面這個公式:
[公式]
先來看看我們如何提取貴州茅台在一段時間(這里為2015-01-01至2021-09-08)內的後復權分鍾數據。(這里千萬不能將交易量和交易額一起拿去復權了。只有價格數據需要復權。(我不太確定交易量要不要,要的話我就改一改嘿嘿))
看看代碼運行的效果。
那麼,等比前復權該如何實現呢?其實很簡單,只需要在框定了復權因子的時間後,讓復權因子全序列除以最後一個復權因子,即得到前復權因子。將這個前復權因子乘上不復權的價格,即可得到等比前復權的價格數據。
以下是數據介面的全部代碼,裡面有挺多細節(但挺簡單的),我就不再贅述了。
要更新資料庫的數據,則是將資料庫中的所有數據文件逐個讀取進來,取最後一天作為start_date,然後取今天作為end_date。將新數據合並到原有的DataFrame中並保存就完成了數據的更新。數據更新比較耗時,也需要一定的數據量。不過,不論如何,我們來看看數據更新的代碼。
在編寫完這些代碼後,我把這些代碼整合成了一個python文件【high_freq_db.py】放在了site-package中,方便以後數據的調用和更新。
親愛的讀者,感謝你讀到這里。本文講述了我搭建我的股票高頻資料庫的方法。畢竟我的專業是金融而非計算機,難免會有不足的地方,懇請大家在評論區指出。(華工封校了,我也快瘋了,所以一天寫了兩篇東西。。。。)
另外,這個資料庫完全搭建起來之後會非常大(行情數據佔80GB左右,包含指數和個股ftr文件),維護起來也比較費時費力,就不對外公布了(我也不知道怎麼公布【手動捂臉】)。如確有需要,可以和我私信。
再次感謝大家的閱讀!
——————————————————
2022年5月27日更新:
有不少小夥伴想要這個數據,目前我已經整理好上傳至網路網盤啦。數據和完整代碼私聊獲取。
獲取數據請只用於學習,勿直接用於投資決策!
B. 怎麼做實時的股票資料庫
如果主站提供有相關的介面的話,可以調主站的介面.如果主站不提供相關介面.那就不不斷抓取.獲取最新的信息了.
C. 鑲$エ鏁版嵁搴
鑲$エ鏁版嵁搴撴槸涓縐嶄笓闂ㄧ敤浜庡瓨鍌ㄣ佺$悊鍜屽垎鏋愯偂紲ㄧ浉鍏蟲暟鎹鐨勬暟鎹搴撶郴緇熴
鑲$エ鏁版嵁搴撶殑鏍稿績鍔熻兘鏄鎻愪緵鍏ㄩ潰銆佸噯紜鍜屽疄鏃剁殑鑲$エ鏁版嵁銆傝繖浜涙暟鎹鍖呮嫭浣嗕笉闄愪簬鑲$エ浠鋒牸銆佹垚浜ら噺銆佸競鍊箋佸競鐩堢巼銆佹瘡鑲℃敹鐩娿佽偂鎮鐜囩瓑鍩烘湰淇℃伅錛岃繕鍖呮嫭鍏鍙哥殑璐㈠姟鏁版嵁銆佹柊闂誨姩鎬併佸垎鏋愬笀鎶ュ憡絳夋繁鍏ヤ俊鎮銆傞氳繃鑲$エ鏁版嵁搴擄紝鎶曡祫鑰呭彲浠ユ柟渚垮湴鑾峰彇鎵闇鏁版嵁錛屼負鎶曡祫鍐崇瓥鎻愪緵鏈夊姏鏀鎸併
鑲$エ鏁版嵁搴撶殑璁捐¢氬父闇瑕佽冭檻鍒版暟鎹鐨勭粨鏋勫寲鍜屾爣鍑嗗寲銆傝繖鎰忓懗鐫鏁版嵁闇瑕佷互涓瀹氱殑瑙勫垯鍜屾牸寮忚繘琛屽瓨鍌錛屼互渚垮悗緇鐨勬煡璇㈠拰鍒嗘瀽銆傚悓鏃訛紝鏁版嵁搴撹繕闇瑕佸叿澶囬珮鏁堢殑鏁版嵁澶勭悊鑳藉姏錛岃兘澶熷簲瀵瑰ぇ閲忕殑鏁版嵁璇誨啓鎿嶄綔錛岀『淇濇暟鎹鐨勫疄鏃舵у拰鍑嗙『鎬с
鍦ㄥ疄闄呭簲鐢ㄤ腑錛岃偂紲ㄦ暟鎹搴撳箍娉涘簲鐢ㄤ簬閲戣瀺鍒嗘瀽銆侀噺鍖栦氦鏄撱侀庨櫓綆$悊絳夐嗗煙銆備緥濡傦紝閲戣瀺鍒嗘瀽甯堝彲浠ラ氳繃鑲$エ鏁版嵁搴撴煡璇㈢壒瀹氳偂紲ㄧ殑鍘嗗彶浠鋒牸鏁版嵁錛岃繘琛岃秼鍔垮垎鏋愬拰棰勬祴銆傞噺鍖栦氦鏄撹呭彲浠ュ埄鐢ㄦ暟鎹搴撲腑鐨勫疄鏃舵暟鎹錛岀紪鍐欎氦鏄撶瓥鐣ュ苟榪涜屽洖嫻嬨傞庨櫓綆$悊浜哄憳鍒欏彲浠ラ氳繃鏁版嵁搴撶洃鎺ц偂紲ㄥ競鍦虹殑娉㈠姩鍜岄庨櫓錛屽強鏃墮噰鍙栧簲瀵規帾鏂姐
鎬諱箣錛岃偂紲ㄦ暟鎹搴撴槸閲戣瀺棰嗗煙涓嶅彲鎴栫己鐨勯噸瑕佸伐鍏鳳紝瀹冩彁渚涗簡鍏ㄩ潰銆佸噯紜鍜屽疄鏃剁殑鑲$エ鏁版嵁錛屼負鎶曡祫鑰呭拰閲戣瀺鏈烘瀯鎻愪緵浜嗗己澶х殑鍐崇瓥鏀鎸併傞殢鐫縐戞妧鐨勮繘姝ュ拰閲戣瀺甯傚満鐨勫彂灞曪紝鑲$エ鏁版嵁搴撶殑鍔熻兘鍜屽簲鐢ㄤ篃灝嗕笉鏂鎵╁睍鍜屾繁鍖栥
D. 開發炒股軟體,從哪裡獲得股票數據
行情數據源在上交所和深交所。需要購買。而且很貴。
象我們平常看到行情,是券商營業部所買,我們連到他們伺服器,而接收到數據。
P2P數據介面使用說明(1)2009-03-18 08:58介面使用說明:
1. 壓縮包包含四個文件,分別為P2P.exe,P2P.CFG,zlib.dll和使用說明.txt,可以解壓到任意盤任意目錄下使用。
2. 支持的行情分析軟體有:
(1) 分析家2006,2005等,要求分析家主窗口標題最前面的幾個字是"分析家 -",是否是破解版關系不大,最好是下載分析家官方網站的正版分析家,網址是http://www.fxj.com.cn,分析家其他版本號是否支持,我也沒全做試驗。
(2) 飛狐交易師,支持飛狐交易師,要求飛狐交易師主窗口標題最前面的幾個字是"飛狐交易師"或"證券分析師",是否是破解版關系不大,最好是支持正版,用正版的。
(3) 大智慧新一代,要求大智慧主窗口標題最前面的幾個字是"大智慧Level" 支持的版本號有 09.0226,08.0907,08.0801,07.0205 共四個。
註:如果分析軟體的窗口標題不符合上面說的,則分析軟體無法接收數據。以上三個分析軟體最好都是正版的,只要下載正版的軟體,安裝後,無需做任何修改即可使用。介面再次說明一下,介面中的四個文件解壓到任意目錄下使用都可以,而無需解壓到某個分析軟體的某個目錄下,或替代某個分析軟體的某個文件。介面完全是綠色的,無需安裝,也不會在注冊表中留下任何信息。
3. 每天9:15分以後用行情軟體中的數據管理功能先清除當天的行情數據,然後把右下角「發送數據」發送數據前面的鉤選上。
4. 如果不能在開盤前打開該軟體,比如10點半才打開,那麼該介面會自動補充10點半之前的行情數據,為了能夠盡快的把前面的數據補充完畢,請把速度調節到100以上。但如果是飛狐,則把該值調低一些,否則飛狐會來不及處理數據,把大量的數據放到內存中,造成飛狐使用內存越來越大,最後由於內存耗完造成飛狐或介面非法退出。大智慧和分析家則不存在這個問題。
5. 收盤後,該介面具有白天行情的回放功能,回放前,最好先清除行情軟體中當天的行情數據。
6. 該介面由於是P2P接收數據,因此數據接收需要種子,只有和別的種子連上了,你就能接收數據了,你至少要和一個種子連上,當然,你連上別的種子後,你也就能稱為種子了,你也就能為別的人提供數據服務功能了。
7. 兩個人要連接成功,最好兩個人中有一個人的IP地址是公網地址,如果兩個全是內網地址則相互無法直接聯通,必須藉助第三方才能聯通,該方法這里不再介紹了。
8. 如果網路情況比較良好,則行情數據的延時一般不會大於0.5秒。
9. 介面的P2P連接信息中的欄位說明
(1). 遠程完成--為該IP接收到完整數據包的個數。
(2). 遠程請求--為該IP請求你發送的數據包序號。
(3). 本機請求--為本機請求遠程發送數據包序號。
(4). 請求返回--遠程響應本機請求的次數。
E. 如何開發股票交易軟體
股票軟體開發的方法如下:
1、股票軟體開發定製分析:然後把它用軟體工程開發語言(形式功能規約,軟體需求分析就是回答做什麼的問題。一個對用戶的需求進行去粗取精、去偽存真、正確理解。即需求規格說明書)表達進去的過程。本階段的基本任務是和用戶一起確定要解決的問題,建立軟體的邏輯模型,編寫需求規格說明書文檔並最終得到用戶的認可。需求分析的主要方法有結構化分析方法、數據流程圖和數據字典等方法。本階段的工作是根據需求說明書的要求,設計建立相應的軟體系統的體系結構,並將整個系統分解成若干個子系統或模塊,定義子系統或模塊間的介面關系,對各子系統進行具體設計定義,編寫軟體概要設計和詳細設計說明書,資料庫或數據結構設計說明書,組裝測試計劃;
2、股票軟體開發設計:也可以是可組合、可分解和可更換的功能單元。模塊,股票軟體設計可以分為概要設計和詳細設計兩個階段。實際上軟體設計的主要任務就是將軟體分解成模塊是指能實現某個功能的數據和程序說明、可執行程序的順序單元。可以是一個函數、過程、子程序、一段帶有順序說明的獨立的順序和數據。然後進行模塊設計。概要設計就是結構設計,其主要目標就是給出軟體的模塊結構,用軟體結構圖表示。詳細設計的首要任務就是設計模塊的順序流程、演算法和數據結構,主要任務就是設計資料庫,常用方法還是結構化順序設計方法;
3、股票軟體開發定製編碼:即寫成以某一順序設計語言表示的「源程序清單」充沛了解軟體開發語言、工具的特性和編程風格,軟體編碼是指把軟體設計轉換成計算機可以接受的順序。有助於開發工具的選擇以及保證軟體產品的開發質量;
4、股票軟體開發測試:關鍵在於理解測試方法。不同的測試方法有不同的測試用例設計方法。兩種常用的測試方法是白盒法測試對象是源程序,股票軟體測試的目的以較小的代價發現盡可能多的錯誤。要實現這個目標的關鍵在於設計一套出色的測試用例(測試數據和預期的輸出結果組成了測試用例)如何才幹設計出一套出色的測試用例。依據的順序內部的邏輯結構來發現軟體的編程錯誤、結構錯誤和數據錯誤。結構錯誤包括邏輯、數據流、初始化等錯誤。用例設計的關鍵是以較少的用例覆蓋盡可能多的內部順序邏輯結果。白盒法和黑盒法依據的軟體的功能或軟體行為描述,發現軟體的介面、功能和結構錯誤。其中介面錯誤包括內部、外部介面、資源管理、集成化以及系統錯誤;
5、股票軟體開發與維護:對軟體產品所進行的一些軟體工程的活動。即根據軟體運行的情況,維護是指在已完成對軟體的研製(分析、設計、編碼和測試)工作並交付使用以後。對軟體進行適當修改,以適應新的要求,以及糾正運行中發現的錯誤。編寫軟體問題演講、軟體修改演講。
F. 在哪裡可以找到股票歷史數據形成的資料庫
在股票行情軟體中,通過K線圖可以查看歷史數據,步驟如下:
1. 打開股票行情軟體;
2. 輸入要查看的股票代碼,並按【ENTER】鍵;
3. 進入股票分時走勢圖,點擊F5即可查看日K線圖;
4. 在日K線圖上,通過按上下方向鍵調整時間,向下鍵可以顯示上市以來的所有日K線,向上鍵則顯示最近的日K線,同時按向上鍵還會放大日K線,使數據更清晰可見;
5. 將滑鼠移到每一根日K線上,可以查看當日的K線詳情,包括最高價、最低價、成交價、成交量、漲跌幅及換手率等數據;
6. 雙擊K線,還可以查看當日的股票走勢圖,更加直觀地了解股價變化。
此外,除了軟體自帶的K線圖功能,還可以訪問各大財經網站或專業的數據平台獲取更詳盡的歷史數據。這些平台通常會提供豐富的歷史數據資源,包括但不限於股票的價格走勢、交易量、財務指標等,幫助投資者進行深入的分析和研究。
對於投資者而言,掌握這些工具和資源至關重要。通過分析歷史數據,投資者可以更好地理解市場趨勢,做出更加明智的投資決策。無論是個人投資者還是機構投資者,都可以從歷史數據中找到寶貴的信息,為自己的投資策略提供支持。
因此,無論是通過軟體自帶功能還是訪問專業平台,獲取股票歷史數據都是十分必要的。這些數據不僅有助於投資者了解市場的過去,還能為預測未來的市場走勢提供重要的參考依據。
G. 量化投研基礎設施:股票日頻資料庫的搭建
搭建本地股票日頻資料庫,為量化投研提供堅實基礎
背景與需求
本文旨在手搓一個股票日頻資料庫,以滿足量化投資書籍編寫與本地數據介面實現的需求。使用tushare作為數據源,提供穩定可靠的數據,同時,通過代碼實現資料庫搭建,便於後續章節的深入探討與因子計算。
准備工作
選用tushare作為數據來源,安裝庫並獲取token。考慮數據儲存方式,推薦使用交易日為單位的文件夾結構,結合feather文件提高讀取速度,確保高效數據介面的實現。復權數據處理也納入考量,為量化分析提供完整數據集。
資料庫搭建與優化
採用交易日為更新單位,簡化資料庫維護流程。選擇feather文件格式,利用pandas的高效性能,實現數據的快速讀寫。在數據介面設計上,支持按股票代碼、日期、復權方式與欄位查詢,確保研究需求的靈活滿足。復權操作確保數據的准確性和分析的可靠性。
Python實現與功能
代碼實現包括數據提取、數據介面設計與數據更新功能。數據提取部分遍歷交易日,合並股票日度行情與復權因子,保存至feather文件。數據介面提供按參數查詢所需數據的能力,數據更新功能確保資料庫的及時更新,滿足研究與分析需求。
測試與應用
通過示例展示了如何調用介面獲取特定股票的後復權數據與全市場數據,驗證了數據介面的靈活性與高效性。量化研究應聚焦於核心問題,而非基礎設施層面的細節,確保在這些基礎上深入研究,實現真正意義上的價值。
H. 如何下載股票歷史成交數據到Excel或txt
以華中智能股票軟體為例:(以Think pad X13 銳龍版筆記本電腦,Windows 10 操作為例)首先切換到要下載數據的股票K線形態,按「F1」進入「日線某某股票歷史成交」,點擊滑鼠右鍵->數據導出->導出所有數據->在「請選擇導出的類型」中選擇excel或txt
補充資料:
如何獲取所有股票歷史數據:
如果要對股市進行分析,首先就要獲取所有股票的歷史數據,只有通過股票的歷史數據,我們才能分析出股市的規律。
(以Think pad X13 銳龍版筆記本電腦,Windows 10 操作為例)
一、工具/原料
1、EXCEL2007或者以上版本,不能使用WPS
2、電腦1g內存1核處理器及以上配置
3、擁有較強邏輯分析能力以及少量智慧及以上的大腦一顆
方法/步驟:
第一步,獲取股票代碼,復制其中一部分到第一個工作表A4到A127,然後通過程序把每一個代碼寫入到不同的工作表A2位置,並對該工作表以該股票代碼命名。程序如下:
Sub 工作表命名()
For i = 4 To 127
Sheets(i).Range("a2") = "'" & Sheets(1).Range("a" & i)
Next i
For i = 4 To Sheets.Count
Sheets(i).Name = Sheets(i).Range("a2").Value
Next
End Sub
第二步,獲取股票歷史數據。代碼如下:
Private Function GetSource(sURL As String) As String
Dim oXHTTP As Object
Set oXHTTP = CreateObject("MSXML2.XMLHTTP")
oXHTTP.Open "GET", sURL, False
oXHTTP.Send
GetSource = oXHTTP.responsetext
Set oXHTTP = Nothing
End Function
Sub 歷史數據()
Dim objXML As Object
Dim txtContent As String
Dim i As Integer
Dim strCode As String
Dim gp As String
Dim kaishihang
Dim arr, arr1, arr2, arr3, arr4, arr5, arr6, arr7, arr8, arr9, arr10, arr11
On Error Resume Next
EndRow = Range("a65536").End(xlUp).Row
startRow = 4
If startRow <= EndRow Then
Range(Cells(startRow, 1), Cells(EndRow, 11)).Value = ""
Else
Exit Sub
End If
Set objXML = CreateObject("Microsoft.XMLHTTP")
gp = [A2]
For h = 1 To 4
For m = 1 To 4
kaishihang = [A65535].End(xlUp).Row
nian = Replace(Str(Year(Now) + 1 - h), " ", "")
ji = Replace(Str(4 + 1 - m), " ", "")
With objXML
.Open "GET", "http://quotes.money.163.com/trade/lsjyj_" + gp + ".html?year=" + nian + "&season=" + ji + "", False
.Send
If objXML.Status = 200 Then
txtContent = .responsetext
arr = Split(txtContent, "'>