mcpField
B
baostock

baostock

github.com/atompilotデータ・データベース1957 回インストール33 週間前に更新
リポジトリ

baostock について

BaoStockは、中国A株の証券データを扱う無料のオープンソースプラットフォームです。統一されたPython APIを通じてデータを提供し、市場、企業、財務、マクロ経済データを必要とする分析者や開発者を対象とします。

主な機能

  1. 01日次、週次、月次、分足の過去相場
  2. 02株式、指数、業種の情報
  3. 03配当と調整係数のデータ
  4. 04四半期財務指標とレポート
  5. 05金利とマネーサプライのデータ

活用シーン

  1. 01A株の過去価格データセットの作成
  2. 02企業の財務指標の比較
  3. 03指数構成銘柄と業種分類の確認
  4. 04市場データと合わせたマクロ系列の分析

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/atompilot/baostock-skill --skill baostock

インストール後、Claude Code で/baostockを入力して読み込まれたか確認します。

詳細

BaoStock

概要

BaoStockは、中国A株向けの無料のオープンソース証券データプラットフォームです。統一されたPython APIを通じて、過去の相場データ、財務指標、マクロ経済データ、業種分類を提供し、pandas DataFrameを返します。

主な利点:無料で安定しており、長期間のデータ(1990年以降)を利用できます。レート制限やクレジットも必要ありません。

クイックスタート

インストール
pip install baostock
基本的な使用パターン
import baostock as bs
import pandas as pd

# 1. Login (required)
lg = bs.login()

# 2. Query data
rs = bs.query_history_k_data_plus(
    "sh.600000",
    "date,code,open,high,low,close,volume,amount",
    start_date="2024-01-01",
    end_date="2024-12-31",
    frequency="d",
    adjustflag="3",
)

# 3. Collect results (pandas 2.0+ compatible)
rows = []
while (rs.error_code == "0") and rs.next():
    rows.append(rs.get_row_data())
df = pd.DataFrame(rows, columns=rs.fields)

# 4. Logout
bs.logout()
株式コードの形式

BaoStockではexchange.code形式を使用します(区切り文字はドットです)。

取引所接頭辞例
上海(SSE)sh.sh.600000(SPDB)
深圳(SZSE)sz.sz.000001(Ping An Bank)

パラメーターの規則

  • 日付:YYYY-MM-DD(例:2024-12-31)
  • 株式コード:sh.600000、sz.000001
  • 戻り値の形式:rs.next()とrs.get_row_data()で反復処理し、DataFrameにまとめます
  • すべての戻り値は文字列です:数値列は手動でpd.to_numeric()を実行する必要があります

API リファレンス全体

I. 市場データ
1. 過去のK線:query_history_k_data_plus()

最も重要なAPIです。調整機能付きの日足/週足/月足/分足に対応しています。

rs = bs.query_history_k_data_plus(
    code="sh.600000",       # Stock code
    fields="date,code,...", # Return fields (comma-separated)
    start_date="2024-01-01",# Start date, default 2015-01-01
    end_date="2024-12-31",  # End date, default latest trading day
    frequency="d",          # Frequency
    adjustflag="3",         # Adjustment type
)

frequencyの値:

値頻度備考
"d"日足デフォルト
"w"週足
"m"月足
"5"5分足指数は分足に対応していません
"15"15分足
"30"30分足
"60"60分足

adjustflagの値:

値意味方法
"3"未調整デフォルト
"1"後方調整騰落率調整方式
"2"前方調整騰落率調整方式

注:BaoStockは「騰落率調整方式」を使用しています。他のプラットフォーム(例:Tongdaxin)とは異なります。

日足/週足/月足のフィールド:

フィールド説明型
date取引日str
code株式コードstr
open始値str→float
high高値str→float
low安値str→float
close終値str→float
preclose前日終値str→float
volume出来高(株)str→float
amount売買代金(人民元)str→float
adjustflag調整フラグstr
turn売買回転率(%)str→float。取引停止中は空文字列
tradestatus取引状況str。"1"=通常、"0"=取引停止
pctChg騰落率(%)str→float
peTTMPER(TTM)str→float
pbMRQPBR(MRQ)str→float
psTTMPSR(TTM)str→float
pcfNcfTTMPCFR(TTM)str→float
isSTST株かどうかstr。"1"=はい、"0"=いいえ

分足のフィールド:

フィールド説明
date日付
time時刻(形式:YYYYMMDDHHmmssSSS)
code株式コード
open始値
high高値
low安値
close終値
volume出来高
amount売買代金
adjustflag調整フラグ

分足には指数データやバリュエーション指標(peTTMなど)は含まれません。

2. 指数のK線

指数コードを指定し、同じquery_history_k_data_plus() APIを使用します。

指数コード
SSE総合指数sh.000001
SZSE成分指数sz.399001
CSI 300sh.000300
CSI 500sh.000905
ChiNext指数sz.399006

指数は分足に対応しておらず、日足/週足/月足のみ利用できます。

3. 指定日の全証券:query_all_stock()
rs = bs.query_all_stock(day="2024-12-31")
# Returns: code, tradeStatus columns
II. 基本情報
4. 株式の基本情報:query_stock_basic()
rs = bs.query_stock_basic(code="sh.600000")  # Single stock
rs = bs.query_stock_basic()                   # All stocks

戻り値:code、code_name、ipoDate、outDate、type(1=株式、2=指数、3=その他、4=転換社債、5=ETF)、status(1=上場、0=上場廃止)

5. 業種分類:query_stock_industry()
rs = bs.query_stock_industry(date="2024-12-31")  # Specific date
rs = bs.query_stock_industry()                     # Latest

戻り値:updateDate、code、code_name、industry、industryClassification

CSRC業種分類基準を使用します。

6. SSE 50 構成銘柄:query_sz50_stocks()
rs = bs.query_sz50_stocks(date="2024-12-31")

戻り値:updateDate、code、code_name

7. CSI 300 構成銘柄:query_hs300_stocks()
rs = bs.query_hs300_stocks(date="2024-12-31")
8. CSI 500 構成銘柄:query_zz500_stocks()
rs = bs.query_zz500_stocks(date="2024-12-31")
III. 配当と調整
9. 配当情報:query_dividend_data()
rs = bs.query_dividend_data(
    code="sh.600000",
    year="2024",
    yearType="report",  # "report"=announcement year, "operate"=ex-dividend year
)

戻り値:

フィールド説明
dividPreNoticeDate事前告知日
dividAgmPumDate株主総会発表日
dividPlanAnnounceDate配当案発表日
dividPlanDate実施発表日
dividRegistDate権利確定日
dividOperateDate権利落ち日
dividPayDate支払日
dividStockMarketDate株式上場日
dividCashPsBeforeTax1株当たり現金配当(税引前)
dividCashPsAfterTax1株当たり現金配当(税引後)
dividStocksPs1株当たり株式配当
dividCashStock配当・振替情報
dividReserveToStockPs1株当たり準備金の株式転換額
10. 調整係数:query_adjust_factor()
rs = bs.query_adjust_factor(
    code="sh.600000",
    start_date="2015-01-01",
    end_date="2024-12-31",
)

戻り値:code、dividOperateDate、foreAdjustFactor、backAdjustFactor、adjustFactor

IV. 四半期財務データ

すべての四半期 API で、同じパラメーターを使用します。

rs = bs.query_xxx_data(code="sh.600000", year=2024, quarter=2)
  • code:株式コード
  • year:会計年度(整数)
  • quarter:四半期(1/2/3/4)
11. 収益性:query_profit_data()

戻り値:

フィールド説明
code株式コード
pubDate公表日
statDate統計期間終了日
roeAvgROE(平均、%)
npMargin純利益率(%)
gpMargin売上総利益率(%)
netProfit純利益(CNY)
epsTTM1株当たり利益
MBRevenue主力事業の売上高(CNY)
totalShare発行済み株式総数
liqaShare流通株式数
12. 営業効率:query_operation_data()

戻り値:NRTurnRatio(売掛金回転率)、NRTurnDays、INVTurnRatio(在庫回転率)、INVTurnDays、CATurnRatio(流動資産回転率)、AssetTurnRatio(総資産回転率)

13. 成長性:query_growth_data()

戻り値:YOYEquity(株主資本の前年比)、YOYAsset(資産の前年比)、YOYNI(純利益の前年比)、YOYEPSBasic(基本 EPS の前年比)、YOYPNI(親会社株主に帰属する純利益の前年比)

14. 支払能力:query_balance_data()

戻り値:currentRatio、quickRatio、cashRatio、YOYLiability、liabilityToAsset、assetToEquity

15. キャッシュフロー:query_cash_flow_data()

戻り値:CAToAsset、NCAToAsset、tangibleAssetToAsset、ebitToInterest、CFOToOR、CFOToNP、CFOToGr

16. デュポン分析:query_dupont_data()

戻り値:dupontROE、dupontAssetSto498(株主資本倍率)、dupontAssetTurn、dupontPnitoni、dupontNitogr、dupontTaxBurden、dupontIntburden、dupontEbittogr

17. 業績速報:query_performance_express_report()

戻り値:performanceExpPubDate、performanceExpStatDate、performanceExpRevenue、performanceExpDeductedNP、performanceExpNetProfit、performanceExpEPSChgPct、performanceExpROEChgPct など

18. 業績予想:query_forecast_report()

戻り値:profitForcastExpPubDate、profitForcastExpStatDate、profitForcastType(増益/減益/黒字転換/初の赤字/黒字継続/赤字継続/小幅増益/小幅減益/不確実)、profitForcastAbstract、profitForcastChgPctUp、profitForcastChgPctDwn

V. マクロ経済データ
19. 預金金利:query_deposit_rate_data()
rs = bs.query_deposit_rate_data(start_date="2020-01-01", end_date="2024-12-31")

戻り値:pubDate、depositType、depositRate

20. 貸出金利:query_loan_rate_data()
rs = bs.query_loan_rate_data(start_date="2020-01-01", end_date="2024-12-31")

戻り値:pubDate、loanType、loanRate

21. 預金準備率:query_required_reserve_ratio_data()
rs = bs.query_required_reserve_ratio_data(start_date="2020-01-01", end_date="2024-12-31")

戻り値:pubDate、effectiveDate、deposit(大手機関)、smallDeposit(小規模機関)

22. マネーサプライ(月次):query_money_supply_data_month()
rs = bs.query_money_supply_data_month(start_date="2020-01", end_date="2024-12")

戻り値:statYear、statMonth、m0Month、m0YOY、m0ChainRelative、m1Month、m1YOY、m1ChainRelative、m2Month、m2YOY、m2ChainRelative

23. マネーサプライ(年次):query_money_supply_data_year()
rs = bs.query_money_supply_data_year(start_date="2020", end_date="2024")

戻り値:statYear、m0、m1、m2

よくある注意点

1. すべての戻り値は文字列です

BaoStock はすべてのフィールドを文字列として返します。手動で変換する必要があります。

df["close"] = pd.to_numeric(df["close"], errors="coerce")
2. 取引停止日は売買回転率が空文字列になります

取引停止日は売買回転率として "" が返されます。直接 float() に変換すると失敗します。

df["turn"] = pd.to_numeric(df["turn"], errors="coerce")  # "" → NaN
3. pandas 2.0 以降との互換性

BaoStock は内部で、pandas 2.0 以降で削除された DataFrame.append() を使用しています。データを手動で収集する必要があります。

# BAD: rs.get_data() crashes on pandas 2.0+
df = rs.get_data()

# GOOD: Manual collection
rows = []
while (rs.error_code == "0") and rs.next():
    rows.append(rs.get_row_data())
df = pd.DataFrame(rows, columns=rs.fields)
4. login/logout は標準出力にメッセージを表示します

BaoStock の login() と logout() は標準出力にメッセージを表示します。次のように抑制します。

import os, contextlib
with open(os.devnull, "w") as devnull:
    with contextlib.redirect_stdout(devnull):
        bs.login()
5. 分足の time フィールド形式

分足の time フィールドは YYYYMMDDHHmmssSSS(17 桁の文字列)です。

# "20240102093500000" → "2024-01-02 09:35:00"
t = "20240102093500000"
dt = f"{t[:4]}-{t[4:6]}-{t[6:8]} {t[8:10]}:{t[10:12]}:{t[12:14]}"
6. 調整方法は他のプラットフォームと異なります

BaoStock は騰落率による調整方法を使用しているため、Tongdaxin の固定小数点方式と比べて絶対価格にわずかな差が生じます。

7. 接続が切断された場合は再ログインが必要です

ネットワークの中断後や長時間アイドル状態が続いた後は、BaoStock の接続が失効することがあります。再試行と再ログインのロジックを追加します。

try:
    rs = bs.query_history_k_data_plus(...)
except Exception:
    bs.logout()
    bs.login()
    rs = bs.query_history_k_data_plus(...)  # Retry
8. 指数は分足に対応していません

指数コード(例:sh.000001)は、分足の頻度ではエラーを返さずに空のデータを返します。

9. ETF の対応範囲は限定的です

BaoStock の ETF データの対応範囲は限定的です。ETF の相場情報には、pytdx または tushare の使用を検討してください。

公式リソース

コメント