一、 Baostock 是什么?
Baostock(寶碩股票)是一個免費、開源的證券數據平臺(SDK),旨在為金融量化投資者、研究人員和學生提供穩定、準確、易用的A股歷史數據和相關金融數據。
其核心是一個?Python 庫,用戶通過調用其提供的API函數,即可便捷地獲取數據到本地進行分析和回測,無需復雜的爬蟲技術。
官方定位: “無需注冊,即可獲取大量準確、完整的證券歷史行情數據、上市公司財務數據等。”
二、 核心功能與數據范圍
Baostock 的數據覆蓋范圍是其最大的競爭力之一。
1. 行情數據 (核心)
- K線數據: 提供日、周、月級別的K線數據。
- 包含:日期、開盤價、最高價、最低價、收盤價、成交量、成交額、換手率、復權因子等。
- 復權處理: 支持前復權、后復權和不復權三種價格,極大地方便了量化回測。
- 時間范圍: 數據可追溯至1990-12-19(上證交易所開業初期),覆蓋了A股幾乎全部歷史。
2. 基本面數據 (價值)
- 公司資料: 上市公司基本信息、所屬行業、地域等。
- 財務數據: 按季度、年度提供資產負債表、利潤表、現金流量表的核心指標。
- 例如:每股收益、凈利潤、營業收入、資產負債率等
- 估值數據: 市盈率(PE)、市凈率(PB)、市銷率(PS)等,且提供動/靜態、滾動的計算方式。
3. 宏觀數據 & 行業數據
- 宏觀經濟指標: 如GDP、CPI、PPI、PMI、貨幣供應量(M0, M1, M2)等。
- 行業分類數據: 提供股票所屬的證監會、申萬等行業分類信息。
- 利率數據: 存貸款利率、國債收益率等。
4. 其他數據
- 融資融券數據
- 指數成分股數據
- 除除息信息、送股信息
三、 優勢 (Pros)
- 完全免費與開源: 這是其最吸引人的特點。相比于Wind、Choice等動輒數萬元的終端,Baostock 對個人投資者和研究者極其友好。代碼開源也意味著透明和安全。
- 數據質量高且準確: 數據經過清洗和整理,準確度較高,尤其是復權處理做得很好,避免了回測中的“坑”。
- 接口簡單易用: 純Python接口,API設計清晰,只需幾行代碼就能獲取數據,學習成本極低。對Python數據分析生態(Pandas, NumPy, Matplotlib)兼容性極佳,返回的數據通常是Pandas DataFrame格式,可直接進行分析和可視化。
- 數據歷史長度足夠: 長達30多年的歷史數據,足以滿足絕大多數長期策略回測的需求。
- 無需注冊和認證: 下載即用,沒有復雜的申請流程和API Key限制,降低了使用門檻。
- 穩定性與維護: 項目持續維護更新,社區有一定活躍度,遇到問題可以通過官方文檔或社區尋求幫助。
四、 劣勢與局限性 (Cons)
- 數據頻率限制: 最大的局限性在于不支持日內高頻數據(如1分鐘、5分鐘、Tick數據)。主要專注于日、周、月線級別的低頻數據。這對于需要高頻交易策略的研究者來說是不可用的。
- 實時性限制: 數據并非實時更新,通常有15分鐘左右的延遲。不適合用于實盤交易決策,更側重于歷史回測和研究。
- 數據廣度與深度: 雖然覆蓋了核心數據,但與付費的頂級終端(如Wind)相比,在數據的廣度和深度上仍有差距。例如,更細分的財務指標、詳細的研報數據、新聞輿情、大宗交易、龍虎榜等數據可能缺失或不如專業終端全面。
- API調用限制: 雖然沒有明確的文檔說明,但可能存在未公開的請求頻率限制。如果短時間內發出海量請求,IP可能會被暫時限制訪問。通常需要在自己的代碼中添加
time.sleep()
來規避。 - 依賴網絡與服務器: 數據獲取依賴于Baostock的服務器,如果服務器出現故障或維護,服務會中
五、 適用場景
- 個人量化愛好者/學習者: 學習和實踐量化交易的絕佳工具,零成本入門。
- 學術研究: 撰寫論文、進行金融市場相關實證研究的可靠數據來源。
- 中長期策略回測: 基于日線或周線數據的價值投資、趨勢跟蹤、因子投資等策略的回測。
- 基本面分析: 獲取和分析上市公司財務報表數據。
- 金融數據分析教學: 在高校課程中,作為學生練習數據獲取、清洗、分析和可視化的完美案例。
不適用場景:
- 高頻交易策略開發
- 實盤交易信號生成(因數據延遲)
- 需要極度深度和前沿數據的專業機構投資經理
六、 與替代品的對比
特性 | Baostock | Tushare | AkShare | Wind(萬得) / Choice(東方財富) |
---|---|---|---|---|
成本 | 完全免費 | 免費+積分(Pro版收費) | 完全免費 | 非常昂貴 |
數據頻率 | 日、周、月 | 日、周、月、分鐘、Tick(積分) | 日、周、月、分鐘、Tick | 全頻率,包括實時 |
數據范圍 | A股、宏觀、指數 | 非常廣泛(A股、港股、美股、期貨、期權等) | 極其廣泛(全球市場、宏觀、商品、新聞等) | 最全面、最權威 |
易用性 | 非常簡單 | 簡單(但接口版本多) | 接口較多,需查找 | 圖形界面+API,功能強大 |
實時性 | 延遲15分鐘 | 實時數據需積分/付費 | 實時/略有延遲 | 實時 |
核心用戶 | 初學者、研究者、個人 | 個人、專業開發者 | 專業開發者、研究者 | 專業機構、基金經理 |
簡單總結:
- Baostock:?“專注、簡單、免費的A股歷史數據專家”。
- Tushare/AkShare:?“免費且數據廣泛的爬蟲聚合庫”,功能更強大但接口可能更復雜。
- Wind/Choice:?“專業機構的全能武器”,無所不包但價格高昂。
七、 快速入門指南
安裝:pip install baostock
- 基本使用流程(四步曲):
python
import baostock as bs
import pandas as pd# 1. 登錄系統
lg = bs.login()
# 顯示登錄返回信息
print('login respond error_code:'+lg.error_code)
print('login respond error_msg:'+lg.error_msg)# 2. 獲取數據
# 查詢復權后(前復權)的日K線數據
rs = bs.query_history_k_data_plus("sh.600000","date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",start_date='2023-01-01', end_date='2024-01-01',frequency="d", adjustflag="2") # adjustflag: 2-前復權, 3-后復權# 3. 將數據轉換為pandas DataFrame
data_list = []
while (rs.error_code == '0') & rs.next():# 獲取一條記錄,將記錄合并在一起data_list.append(rs.get_row_data())
df = pd.DataFrame(data_list, columns=rs.fields)# 4. 登出系統
bs.logout()# 處理數據:轉換數據類型
df['close'] = df['close'].astype('float')
df['volume'] = df['volume'].astype('float')
print(df.head())
- 重要提示:
- 務必在程序結束前調用?
bs.logout()
。 - 獲取大量數據時,請在循環請求中添加?
time.sleep(0.5)
?以避免被限流。
總結
Baostock 是一個極其優秀、專注于A股歷史低頻數據的免費解決方案。?它以其簡單、可靠、免費的特性,成為了無數個人量化交易者和研究人員入門和研究的“第一塊基石”。
如果你的需求是:
- 免費
- 獲取A股漫長的歷史日線數據
- 進行中長期策略回測
- 學習Python量化分析
那么,Baostock 幾乎是你的不二之選。但如果你的需求擴展到高頻、實時或全球市場,則需要考慮 Tushare、AkShare 或付費的專業數據終端。