ページファンダメンタルズ · 11 / 29
ファンダメンタルデータ
開発中:ファンダメンタルデータはまだ完全には機能していません。IDE やバックテストでこの機能を使うと、一貫性のないファンダメンタルデータ(欠落したフィールド、一致しないレポート日、不安定なバー整列スナップショット)が返ることがあります。将来のリリースでファンダメンタルデータが安定版とされるまで、結果は実験的なものとして扱ってください。
QuantCraft のストラテジーは、OHLCV の価格バーと並べて企業の財務データ(貸借対照表、キャッシュフロー計算書、損益計算書、決算履歴/予想)を使えます。データは QuantCraft のファンダメンタルデータサービスからシンボルごとに一度だけ読み込まれ、日付をキーとするテーブルとして整理され、バックテスト中はバーに整列したスナップショットとしてストラテジーに提供されます。コールバックのタイミングはストラテジーのライフサイクルに従います。シンボルと日付は Test(コードの実行)で設定します。
3 つの財務諸表に加えて、レシオ(91 種類)、1 株あたりの値、バリュエーションのマルチプルと利回り、品質スコア(Piotroski F、Altman Z-prime、Beneish M)も得られます — すべてポイントインタイムで、すべて任意です。これらはシンボルごとに順次展開されるため、すべてのアクセスをガードしてください。raw["metricsInputs"] is None は、バンドルがそれらより前のものであることを意味します。
このページで扱う内容:
- どのような財務諸表データが利用できるか
- 日付をキーとするテーブルがどう整理されているか
- バックテスト中にバー整列ペイロードがコールバックにどう届くか
**関連:**グローバルな Fama-French ファクターリターンのデータセット(ティッカーごとではない)は別の機能です — Fama-French ファクター(
fama_french.qc、コールバック引数なし)を参照してください。ファクターのrowsは、リストのインデックスではなくYYYYMM文字列をキーとします。
得られるもの
各ファンダメンタルデータのバンドルは、1 つのティッカーに対する単一の JSON オブジェクトで、次を含みます。
- 貸借対照表 —
quarterlyとyearlyのレポート。 - キャッシュフロー —
quarterlyとyearlyのレポート。 - 損益計算書 —
quarterlyとyearlyのレポート。 - 決算(Earnings):
- History — レポート日ごとの発表 EPS と予想、サプライズ。
- Trend — 先行予想、EPS トレンド、アナリストの修正。
- Annual — 会計年度ごとの
epsActual。
- レシオ —
quarterlyとyearlyの財務レシオ(マージン、リターン、流動性、レバレッジ)。 - Financials extended — 基本の損益計算書、貸借対照表、キャッシュフロー計算書にはない
quarterlyとyearlyの拡張指標。 - 1 株あたり —
quarterlyとyearlyの 1 株あたりの値(提出時のまま。その期間の株式分割ベースでの株数)。 - バリュエーション —
quarterlyとyearlyの時価総額、企業価値、マルチプル、利回りと、日付のないlatestオブジェクト。 - スコア —
quarterlyとyearlyの Piotroski F、Altman Z-prime、Beneish M と、notApplicableReason。 - TTM — 直近 12 か月の単一オブジェクト(期間ごとには分割されない)。
- 指標の出所 — フラットな
metricsInputs/metricsHealthオブジェクト。metricsInputsは、指標の拡張前のバンドルではNoneです。 - 提出履歴 —
quarterlyとyearlyの提出メタデータ(書式の種類、提出日、期末をキーとする)。バンドルに含まれていれば、バー整列のcurrent(...)スナップショットにも含まれます。生のテーブルはf.tables["filingHistory.quarterly"]で引き続き利用できます。 - 企業情報 — フラットなエンティティのメタデータ(名称、CIK、SIC、住所、取引所、ティッカー)。日付をキーとせず、バー整列スナップショットにも含まれません。
f.raw["companyInfo"]でアクセスします。
各レポートは、たとえば totalAssets、cash、freeCashFlow、totalRevenue、netIncome、epsActual、epsEstimate、surprisePercent のような camelCase の指標からなる行です。数値は、基になる JSON では文字列で届くことがあり、欠けているフィールドは None で返ります。
特定のティッカーがすべてのセクションを公開しているとは限りません。ティッカーで利用できるフィールドは、ファンダメンタルデータ対応状況エクスプローラーで確認してください。
日付をキーとするテーブル
上記の各セクションについて、ファンダメンタルデータは日付をキーとするテーブルとして整理されます。行はレポート日(YYYY-MM-DD)をキーとし、指標は価格履歴のようにインデックスできる並列リストとして公開されます。
標準のテーブルパス:
| パス | 意味 |
|---|---|
balanceSheet.quarterly / balanceSheet.yearly | 貸借対照表のスナップショット |
cashFlow.quarterly / cashFlow.yearly | キャッシュフロー計算書 |
incomeStatement.quarterly / incomeStatement.yearly | 損益計算書 |
earnings.History | 発表 EPS、予想、レポートごとのサプライズ |
earnings.Trend | アナリスト予想、EPS トレンド、修正 |
earnings.Annual | 年次の epsActual |
ratios.quarterly / ratios.yearly | 財務レシオ(マージン、リターン、流動性、レバレッジ) |
financialsExtended.quarterly / financialsExtended.yearly | 拡張財務指標 |
perShare.quarterly / perShare.yearly | 1 株あたりの値(提出時のまま) |
valuation.quarterly / valuation.yearly | バリュエーションのマルチプルと利回り |
scores.quarterly / scores.yearly | Piotroski / Altman / Beneish |
filingHistory.quarterly / filingHistory.yearly | 提出メタデータ(書式の種類、提出日) |
テーブルではないもの。valuation.latest、scores.notApplicableReason、ttm、metricsInputs、metricsHealth、companyInfo は日付をキーとしないため、tables、lists、バー時点のすべてのスナップショットには含まれません — これは意図的です。
| テーブルではない | 理由 |
|---|---|
valuation.latest | 日付キーの隣にある単一のオブジェクトで、期間ではない |
scores.notApplicableReason | 日付キーの隣にある文字列 |
ttm | 単一のオブジェクト。値は行の dict ではなくスカラー |
metricsInputs / metricsHealth | フラットな出所オブジェクト |
companyInfo | フラットなエンティティのメタデータ |
これらはすべて期間ごとではなくアップロード時点の値なので、tables に含めないことで、バー時点のすべてのスナップショットからも除外されます。そのため、バックテストが 2019 年のバーで今日の価格を誤って読むことはありません。代わりに f.raw を通じてアクセスしてください。空のブロック({"quarterly": {}, "yearly": {}}。金融セクターの提出者の scores がこの形です)は、テーブルをまったく登録しません。
インデックスの規約:新しい順
これらのテーブルのどれでも、インデックス 0 が最新の対象期間、インデックス 1 がその前の期間、というようになります。これは QuantCraft の他の部分での価格系列の扱いと一致します。
バンドルを直接読み込みたい場合(たとえばバックテストの外で)、基本の形は次のとおりです。
from quantcraft.fundamentals import QcFundamentals
f = QcFundamentals(token, "fundamentals/AAPL.json.gz")
latest_total_assets = f.tables["balanceSheet.quarterly"]["totalAssets"][0]
prior_total_assets = f.tables["balanceSheet.quarterly"]["totalAssets"][1]
same = f.lists["balanceSheet.quarterly.totalAssets"][0]
whole = f.raw読み込んだバンドルから読み取れるもの:
| 属性 | 得られるもの |
|---|---|
f.raw | デコードされた JSON ツリー全体。 |
f.symbol | 解決されたティッカー(例:"AAPL")。 |
f.tables | ドット区切りのパス(例:"balanceSheet.quarterly")をキーとする DateKeyedTable オブジェクトの dict。 |
f.table(path) | 単一の DateKeyedTable への便利なアクセサー。 |
f.lists | "<tablePath>.<fieldName>" をキーとするフラットなマップ。値は新しい順に整列。 |
DateKeyedTable は periods(YYYY-MM-DD のキー、新しい順)と columns(フィールド → 値)を公開し、table["fieldName"] によるインデックスをサポートします。
実行時のフィールド探索は簡単です。
sorted(f.lists.keys())はすべてのフラットな系列を、sorted(t.columns.keys())は 1 つのテーブルの列を表示します — サーバーがフィールドを追加・削除したときに便利です。
バックテストにおけるバー整列ペイロード
バックテストでは、ファンダメンタルデータを生のテーブルとして読むのではなく、エンジンが現在のバーに適したレポートを選択し、スナップショットとしてコールバックに渡します。これをバー整列ペイロードと呼びます。
バックテストのファンダメンタルデータの設定
Run backtest の Symbol & data タブで:
- Uses fundamentals (select if your strategy requires fundamental data) をオンにします(サインインが必要 — B2 のファンダメンタルデータファイルを読み込むために、QuantCraft がセッショントークンを送信します)。バルクフォワードとチャートフォワードでは Use fundamentals (optional) と表示されます。ビルドでファンダメンタルデータ機能が利用可能な場合にチェックボックスが表示されますが、Premium であるか無料データアクセスが有効でない限り無効(Premium のヒント付き)です。
- 複数選択から1 つ以上のファンダメンタルデータバンドルを選びます(
fundamentals/AAPL.json.gzのようなパス)。
**Screener のシンボルソース(バックテスト)または Screener のターゲット(AutoTrading / QuantCloud のバルク実行)**では、何も選ぶ必要はありません。ファンダメンタルデータをオンにすれば、スクリーンが選んだすべてのシンボルがそれぞれ独自のバンドルを持つため、fundamentals.current(bar["t"], symbol=symbol) がそれぞれで機能します。バンドルは Screener 自身のダウンロードから取得され(二重に取得されることはありません)、Screener がまだダウンロードしていないシンボルは一度だけ取得されて保持されます。ライブ実行では、バンドルは再スクリーニングのたびに追従します。手動での選択も追加分として引き続き受け付けられます(たとえばベンチマークのティッカー)。データを読み込めなかったシンボルは、実行を失敗させる代わりに None を返します — Output パネルに読み込めた件数が表示されます。
**OHLCV のシンボルとファンダメンタルデータのシンボルは独立しています。**ブローカーフィードで RNMBY をバックテストしながら、RHM.XETRA のファンダメンタルデータを読み込めます — コードでは、正しいティッカーを fundamentals.current(..., symbol="RHM.XETRA")(またはそれに相当するもの)に渡してください。
複数のバンドルが選択されている場合、特定のバンドルが必要なときは、fundamentals.current / get_data_with_offset に明示的な symbol= を使ってください。バー整列スナップショットに使われるプライマリバンドルは、エンジンが別のルールを適用しない限り、シンボルリストの最初の OHLCV シンボルがデフォルトです。
コールバックの外で低レベルのテーブルアクセスをするには、None でない場合に quantcraft.process.runtime の qc_fundamentals を使います(例:qc_fundamentals.raw["companyInfo"])。これはプライマリバンドルだけを保持します。他のティッカーには、コールバックの fundamentals ハンドルを symbol= とともに使ってください。
ファンダメンタルデータが設定されていない場合、エンジンは単に fundamentals=None をコールバックに渡すので、ガードで対処します。
ポイントインタイム(バックテスト):バックテストエンジンと Debug Test はどちらも BacktestFundamentals(..., backtest_mode=True) を構築するため、current / get_data_with_offset は提出日によるゲーティング(use_filing_date=True)を使います — 期間の filing_date がバーの時刻より後の場合、その期間は除外されます。期間に使える filing_date がない場合は、期間が終了した日にレポートを見えるようにするのではなく、想定される提出期限が代わりに使われます — 期末から四半期テーブルで 45 日、年次で 90 日(default_filing_lag_days)です。フォワード実行は期末による対象判定(backtest_mode=False)を使います。IDE のバックテストでは、コールバックの fundamentals ハンドルを推奨します。use_filing_date=True なしで生の qc_fundamentals.get_data_with_offset(...) を呼ぶと、提出日に対して先読みになる可能性があります。
フォワード実行:ライブ実行は、ファンダメンタルデータを約1 時間ごとに、また Screener のデータが更新されてから約 5 分以内に再読み込みします。再読み込みに失敗した場合は、以前のデータが維持されます。フォワード実行の「今」は本当に今日なので、アップロード時点のブロック(raw["ttm"]、raw["valuation"]["latest"] など)はそこでは先読みではなく最新のデータです。
**旧来のコールバック:**古いストラテジーは、
BacktestFundamentalsの代わりに別のqc_fundamentals引数や生の dict を使っていることがあります。現在のシグネチャでは、fundamentalsをon_bar/on_tickの 3 番目の引数として渡します。モジュールレベルのエイリアスfundamentals_as_of_barは、同じバー整列ペイロードの形に対応します。
fundamentals コールバックパラメータ
ファンダメンタルデータが読み込まれていると、エンジンは BacktestFundamentals ハンドルを fundamentals 引数として on_bar、on_tick、そして(フォワード実行で使う場合は)on_timer に渡します。
def on_bar(bar_index, bar, fundamentals=None, symbol=None):
if fundamentals is None:
return
snap = fundamentals.current(bar["t"])
bs_q = (snap.get("balanceSheet") or {}).get("quarterly") or {}
total_assets = bs_q.get("totalAssets")| メソッド/メンバー | 目的 |
|---|---|
fundamentals.current(bar_time, symbol=None) | そのバーの時刻でのスナップショット dict(バックテストでは提出日でゲート)。任意の symbol で読み込み済みのどのバンドルかを選択し、プライマリなら省略します。バンドルにあれば filingHistory を含みます。 |
fundamentals.get_data_with_offset(bar_time, offset, *, symbol=None, print_on_shortfall=True) | 選択したバンドルの、サブテーブルごとの N 期前の期間(current と同じ提出日モード)。 |
fundamentals.symbols | 読み込み済みの各バンドルの大文字キーのタプル。 |
fundamentals.primary_symbol() | symbol を省略したときに使われるプライマリキー。 |
fundamentals.reload_all() | すべてのバンドルを再ダウンロードします。フォワード実行では自動的に呼ばれるので、通常は必要ありません。 |
スナップショットの形
バー整列スナップショットは、このバーの時点で有効な期間だけを含むネストした dict です(IDE のバックテストでは提出日でゲート)。null でない各セクションには、periodEnd とレポートの指標が含まれます。
{
"barTime": "2026-06-01T00:00:00+00:00",
"symbol": "AAPL",
"balanceSheet": {
"quarterly": { "periodEnd": "2026-03-31", "totalAssets": 352000000.0, "cash": 51000000.0 },
"yearly": { "periodEnd": "2025-09-30", "totalAssets": 344000000.0 }
},
"cashFlow": {
"quarterly": { "periodEnd": "2026-03-31", "freeCashFlow": 24500000.0 }
},
"incomeStatement": {
"quarterly": { "periodEnd": "2026-03-31", "totalRevenue": 95000000.0, "netIncome": 23000000.0 }
},
"earnings": {
"History": { "periodEnd": "2026-03-31", "reportDate": "2026-05-02", "epsActual": 1.53 },
"Trend": null,
"Annual": { "periodEnd": "2025-09-30", "epsActual": 6.13 }
},
"ratios": {
"quarterly": { "periodEnd": "2026-03-31", "grossMargin": 0.47, "operatingMargin": 0.31, "currentRatio": 1.04 },
"yearly": { "periodEnd": "2025-09-30", "grossMargin": 0.46, "currentRatio": 0.87 }
},
"financialsExtended": {
"quarterly": { "periodEnd": "2026-03-31", "ebitda": 38000000000.0, "ebitdaMargin": 0.40 },
"yearly": { "periodEnd": "2025-09-30", "ebitda": 134000000000.0 }
},
"perShare": {
"quarterly": { "periodEnd": "2026-03-31", "bookValuePerShare": 4.3, "grahamNumber": null },
"yearly": null
},
"valuation": {
"quarterly": {
"periodEnd": "2026-03-31",
"marketCap": 3812000000.0,
"priceToEarningsRatio": null,
"earningsYield": -5.0,
"priceBasis": "split-adjusted",
"approximate": true
},
"yearly": null
},
"scores": {
"quarterly": { "periodEnd": "2026-03-31", "piotroskiFScore": 3, "beneishMScore": -1.94 },
"yearly": null
},
"filingHistory": {
"quarterly": { "periodEnd": "2026-03-31", "formType": "10-Q", "filedAt": "2026-05-02" },
"yearly": { "periodEnd": "2025-09-30", "formType": "10-K", "filedAt": "2025-10-31" }
}
}バーの時刻以前に該当する期間がない場合、Trend は null になることがあります。上記の earningsYield: -5.0 の隣の priceToEarningsRatio: null は、データの欠損ではなく赤字企業です — バリュエーションを参照してください。
スナップショットには決して含まれないもの:ttm、valuation.latest、scores.notApplicableReason、metricsInputs、metricsHealth、companyInfo。これらは期間ごとではなくアップロード時点の値で、バーに添付するとバックテストに将来の情報が漏れてしまいます。qc_fundamentals.raw[...] から読み取ってください。
同じバーごとの dict は、構造化されたバックテスト結果の各行の fundamentals フィールドにも現れるため、ストラテジー内で見えるものが結果データに表示されるものと一致します。
古い期間の参照(get_data_with_offset)
バーの時点での最新レポートではなく、前のレポート — 前の四半期、前の会計年度、前の決算行 — が欲しいことがあります。
prior = fundamentals.get_data_with_offset(bar["t"], 1)
prev_bs_q = (prior or {}).get("balanceSheet", {}).get("quarterly")動作:
- 各サブテーブルは独立してインデックスされます。
offset=1では、balanceSheet.quarterlyセクションは 1 四半期戻り、balanceSheet.yearlyは 1 会計年度戻ります。 - サブテーブルに現在のバーより前の履歴が十分にない場合、返される dict ではそのセクションは
nullになります(1 行のメモが出力されることがあります)。 - 形は
current(...)と同じで、トップレベルに"offset": <int>が加わります。 - 生の
QcFundamentalsAPI では、推奨されるシグネチャはf.get_data_with_offset(bar_time, offset, *, print_on_shortfall=True, use_filing_date=False)です。モジュールレベルの関数get_data_with_offset(qc, bar_time, offset, *, print_on_shortfall=True)にはuse_filing_dateパラメータがなく、常に期末による対象判定を使います。ポイントインタイムのデータには、メソッドをuse_filing_date=Trueで呼ぶか(またはコールバックのハンドルを使うか)してください。デフォルトのuse_filing_date=Falseは期末による対象判定のみを意味します(提出日に対して先読みになる可能性があります)。use_filing_date=Trueでは、filing_dateが欠けている期間は、期末から 45 日(四半期)/90 日(年次)という想定期限にフォールバックします。IDE のバックテストでは、提出日によるゲーティングを自動的に使うコールバックのfundamentalsハンドルを推奨します。
複数シンボルのファンダメンタルデータ
(クロスセクショナルまたは比較ストラテジーのために)複数のバンドルを読み込む場合、symbol="TICKER" でどれから読むかを選べます。
def on_bar(bar_index, bar, fundamentals=None, symbol=None):
if fundamentals is None:
return
primary_snap = fundamentals.current(bar["t"])
msft_snap = fundamentals.current(bar["t"], symbol="MSFT")
aapl_prior = fundamentals.get_data_with_offset(bar["t"], 1, symbol="AAPL")symbolを省略するとプライマリバンドルが使われます。読み込まれているのが 1 つだけならそれ、そうでなければ設定されていればfundamentals.primary、なければ取引中のシンボル、なければアルファベット順で最初の読み込み済みティッカーです。複数シンボルや Screener の実行では、このフォールバックが黙って間違った企業になることがあるため、そこでは必ずsymbol=symbolを渡してください。fundamentals.symbolsは、現在読み込まれているすべての大文字のティッカーキーを一覧します。fundamentals.primary_symbol()はプライマリキーを返します。- バックテストで取引するシンボルは、読み込むファンダメンタルデータのシンボルと異なっていてもかまいません — たとえば、
AAPLとMSFTのファンダメンタルデータを読みながらSPYを取引できます。
使用できるバーの時刻
current(...) と get_data_with_offset(...) はどちらも複数の時刻形式を受け付けるので、bar["t"]、bar.t[0]、または独自の値を渡せます。
datetime(ナイーブなものは UTC として扱う)、date、- ISO 文字列(末尾の
Zを含む)、 - UNIX エポック秒(
int/float)。
実用的なパターン
よくある形をいくつか示します。
def on_bar(bar_index, bar, fundamentals=None, symbol=None):
if fundamentals is None:
return
snap = fundamentals.current(bar["t"])
if not snap:
return
bs_q = (snap.get("balanceSheet") or {}).get("quarterly") or {}
is_q = (snap.get("incomeStatement") or {}).get("quarterly") or {}
if (bs_q.get("totalAssets") or 0) > 0 and (is_q.get("netIncome") or 0) > 0:
...def on_bar(bar_index, bar, fundamentals=None, symbol=None):
if fundamentals is None:
return
snap = fundamentals.current(bar["t"]) or {}
prior = fundamentals.get_data_with_offset(bar["t"], 1) or {}
cur = ((snap.get("incomeStatement") or {}).get("quarterly") or {}).get("totalRevenue")
prev = ((prior.get("incomeStatement") or {}).get("quarterly") or {}).get("totalRevenue")
if cur and prev:
revenue_growth = (cur - prev) / prevファンダメンタルデータのフィールドリファレンス
フィールドの有無はシンボルによって異なります — すべての発行体がすべての行を報告するわけではありません。特定のバンドルが実際に何を公開しているかは、実行時に
sorted(f.lists.keys())またはsorted(t.columns.keys())で確認してください。数値は文字列で届くことがあるため、計算にはfloat(...)で変換してください。
貸借対照表
テーブル:balanceSheet.quarterly、balanceSheet.yearly
| フィールド | フィールド |
|---|---|
accountsPayable | longTermInvestments |
accumulatedAmortization | negativeGoodwill |
accumulatedDepreciation | netDebt |
accumulatedOtherComprehensiveIncome | netInvestedCapital |
additionalPaidInCapital | netReceivables |
capitalLeaseObligations | netTangibleAssets |
capitalStock | netWorkingCapital |
capitalSurpluse | noncontrollingInterestInConsolidatedEntity |
cash | nonCurrrentAssetsOther |
cashAndEquivalents | nonCurrentAssetsTotal |
cashAndShortTermInvestments | nonCurrentLiabilitiesOther |
commonStock | nonCurrentLiabilitiesTotal |
commonStockSharesOutstanding | otherAssets |
commonStockTotalEquity | otherCurrentAssets |
currency_symbol | otherCurrentLiab |
currentDeferredRevenue | otherLiab |
date | otherStockholderEquity |
deferredLongTermAssetCharges | preferredStockRedeemable |
deferredLongTermLiab | preferredStockTotalEquity |
earningAssets | propertyPlantAndEquipmentGross |
filing_date | propertyPlantAndEquipmentNet |
goodWill | propertyPlantEquipment |
intangibleAssets | retainedEarnings |
inventory | retainedEarningsTotalEquity |
liabilitiesAndStockholdersEquity | shortLongTermDebt |
longTermDebt | shortLongTermDebtTotal |
longTermDebtTotal | shortTermDebt |
shortTermInvestments | temporaryEquityRedeemableNoncontrollingInterests |
totalAssets | totalCurrentAssets |
totalCurrentLiabilities | totalLiab |
totalPermanentEquity | totalStockholderEquity |
treasuryStock | warrants |
キャッシュフロー
テーブル:cashFlow.quarterly、cashFlow.yearly
| フィールド | フィールド |
|---|---|
beginPeriodCashFlow | endPeriodCashFlow |
capitalExpenditures | exchangeRateChanges |
cashAndCashEquivalentsChanges | filing_date |
cashFlowsOtherOperating | freeCashFlow |
changeInCash | investments |
changeInWorkingCapital | issuanceOfCapitalStock |
changeReceivables | netBorrowings |
changeToAccountReceivables | netIncome |
changeToInventory | otherCashflowsFromFinancingActivities |
changeToLiabilities | otherCashflowsFromInvestingActivities |
changeToNetincome | otherNonCashItems |
changeToOperatingActivities | salePurchaseOfStock |
currency_symbol | stockBasedCompensation |
date | totalCashflowsFromInvestingActivities |
depreciation | totalCashFromFinancingActivities |
dividendsPaid | totalCashFromOperatingActivities |
損益計算書
テーブル:incomeStatement.quarterly、incomeStatement.yearly
| フィールド | フィールド |
|---|---|
costOfRevenue | netIncomeFromContinuingOps |
currency_symbol | netInterestIncome |
date | nonOperatingIncomeNetOther |
depreciationAndAmortization | nonRecurring |
discontinuedOperations | operatingIncome |
effectOfAccountingCharges | otherItems |
ebit | otherOperatingExpenses |
ebitda | preferredStockAndOtherAdjustments |
extraordinaryItems | reconciledDepreciation |
filing_date | researchDevelopment |
grossProfit | sellingAndMarketingExpenses |
incomeBeforeTax | sellingGeneralAdministrative |
incomeTaxExpense | taxProvision |
interestExpense | totalOperatingExpenses |
interestIncome | totalOtherIncomeExpenseNet |
minorityInterest | totalRevenue |
netIncome | |
netIncomeApplicableToCommonShares |
決算 — History
テーブル:earnings.History(レポート日ごとの発表 EPS と予想)
| フィールド | 説明 |
|---|---|
beforeAfterMarket | 市場時間に対していつレポートが公表されたか |
currency | 報告通貨 |
date | 期末日 |
epsActual | 発表 EPS |
epsEstimate | コンセンサス EPS 予想 |
epsDifference | epsActual − epsEstimate |
reportDate | 数値が発表された日 |
surprisePercent | EPS サプライズ(パーセント) |
決算 — Trend
テーブル:earnings.Trend(先行予想と修正)
| フィールド | フィールド |
|---|---|
date | epsTrendCurrent |
period | epsTrend7daysAgo |
growth | epsTrend30daysAgo |
earningsEstimateAvg | epsTrend60daysAgo |
earningsEstimateLow | epsTrend90daysAgo |
earningsEstimateHigh | epsRevisionsUpLast7days |
earningsEstimateYearAgoEps | epsRevisionsUpLast30days |
earningsEstimateNumberOfAnalysts | epsRevisionsDownLast7days |
earningsEstimateGrowth | epsRevisionsDownLast30days |
revenueEstimateAvg | |
revenueEstimateLow | |
revenueEstimateHigh | |
revenueEstimateYearAgoEps | |
revenueEstimateNumberOfAnalysts | |
revenueEstimateGrowth |
決算 — Annual
テーブル:earnings.Annual(年次の発表 EPS)
| フィールド | 説明 |
|---|---|
date | 会計年度の期末日 |
epsActual | 発表された年次 EPS |
レシオ
テーブル:ratios.quarterly、ratios.yearly
指標の拡張以降、91 個の指標があります(date、currency_symbol、filing_date を数えると 94 キー)。最初に元のセットを示し、運転資本以降はすべて新規です。展開の途中にあるシンボルは元のセットしか持たないことがあるため、実際のリストは sorted(f.table("ratios.quarterly").columns.keys()) で確認してください。
元のセット
このグループのマージンとリターンのフィールド(
grossMargin、operatingMarginなど)は小数の割合です — パーセントにするには 100 を掛けてください。debtToEquityはdebtToEquityRatioに名前が変わりました。
| フィールド | フィールド |
|---|---|
grossMargin | currentRatio |
operatingMargin | quickRatio |
netProfitMargin | cashRatio |
returnOnAssets | debtToEquityRatio |
returnOnEquity | debtToAssetsRatio |
operatingCashFlowMargin | interestCoverageRatio |
freeCashFlowMargin | assetTurnover |
freeCashFlowToNetIncome | inventoryTurnover |
receivablesTurnover |
運転資本
| フィールド | 備考 |
|---|---|
daysSalesOutstanding | 日数、小数 2 桁 |
daysInventoryOutstanding | 日数、小数 2 桁 |
daysPayablesOutstanding | 日数、小数 2 桁 |
cashConversionCycle | 日数、小数 2 桁 — 符号付き。負(支払う前に回収する)は望ましい状態であり、エラーではない |
operatingCycle | 日数、小数 2 桁 |
payablesTurnover | 単純な小数 |
workingCapitalTurnover | 単純な小数 |
fixedAssetTurnover | 単純な小数 |
netWorkingCapitalToAssets | 単純な小数 |
defensiveIntervalRatio | 単純な小数 |
レバレッジとカバレッジ
すべて単純な小数(小数 4 桁)。
| フィールド | フィールド |
|---|---|
totalDebtToEquityRatio | netDebtToFreeCashFlowRatio |
netDebtToEquityRatio | equityMultiplier |
longTermDebtToEquityRatio | ebitdaInterestCoverageRatio |
longTermDebtToCapitalRatio | cashFlowInterestCoverageRatio |
capitalizationRatio | cashFlowToDebtRatio |
debtToEbitdaRatio | debtServiceCoverageRatio |
netDebtToEbitdaRatio |
リターン
| フィールド | 備考 |
|---|---|
effectiveTaxRate | % |
returnOnInvestedCapital | % |
returnOnCapitalEmployed | % |
returnOnTangibleEquity | % |
cashReturnOnInvestedCapital | % |
operatingReturnOnAssets | % |
returnOnEquityDupontMargin | % |
returnOnEquityDupontTurnover | 単純な小数 |
returnOnEquityDupontLeverage | 単純な小数 |
nopat | 金額の文字列、小数 2 桁 — それ以外はすべて数値のブロックの中の例外 |
investedCapital | 金額の文字列、小数 2 桁 |
capitalEmployed | 金額の文字列、小数 2 桁 |
マージンと資本集約度
| フィールド | 備考 |
|---|---|
ebitMargin | % |
ebitdaMargin | % |
pretaxMargin | % |
researchAndDevelopmentToRevenue | % |
sellingGeneralAdministrativeToRevenue | % |
stockBasedCompensationToRevenue | % |
capexToRevenue | % |
capexToOperatingCashFlow | % |
accrualsRatio | % |
assetQualityRatio | % |
capexToDepreciationRatio | 単純な小数(小数 4 桁) |
cashConversionRatio | 単純な小数(小数 4 桁) |
配当・還元
すべてパーセント(小数 2 桁):dividendPayoutRatio、freeCashFlowPayoutRatio、shareholderPayoutToFreeCashFlow、retentionRatio、sustainableGrowthRate。
前年比の成長
すべてパーセント(小数 2 桁)。売上/純利益/EPS の成長はここには重複して含まれません — earnings.Trend にあります。
| フィールド | フィールド |
|---|---|
grossProfitGrowthYoY | totalAssetsGrowthYoY |
operatingIncomeGrowthYoY | totalStockholderEquityGrowthYoY |
ebitdaGrowthYoY | totalDebtGrowthYoY |
operatingCashFlowGrowthYoY | dividendsPaidGrowthYoY |
freeCashFlowGrowthYoY | sharesDilutedGrowthYoY — 負は自社株買いを意味する |
capitalExpendituresGrowthYoY | bookValuePerShareGrowthYoY |
CAGR — yearly のみ
すべてパーセント(小数 2 桁)で、すべての quarterly 期間では null です — 四半期の期間でこれらを要求するフィルターやルールは、すべてのシンボルを不合格にします。
revenueCagr3y / revenueCagr5y、netIncomeCagr3y / netIncomeCagr5y、epsCagr3y / epsCagr5y、freeCashFlowCagr3y / freeCashFlowCagr5y、dividendCagr3y / dividendCagr5y。
Financials extended
テーブル:financialsExtended.quarterly、financialsExtended.yearly
フィールドはシンボルによって異なるため、ここでは列挙しません。読み込んだバンドルが何を公開しているかは、実行時に確認してください。
t = f.table("financialsExtended.quarterly")
if t:
print(sorted(t.columns.keys()))一般的なフィールドには、拡張された EBITDA 指標、運転資本の構成要素、基本の損益計算書にはない 1 株あたりのデータがあります。
廃止されたフィールド:
ebitda、ebitdaMargin、enterpriseValue、priceToEarnings、priceToBook、priceToSales、evToEbitda、evToRevenueは、直近 12 か月ベースで計算されるバリュエーションとレシオのバージョンに置き換える形で、Financials extended から撤回されつつあります(そのため値が異なります)。
1 株あたり
テーブル:perShare.quarterly、perShare.yearly
提出時のままの記録です。sharesOutstanding はその期間について報告された株式分割ベースなので、分割をまたいで比較することはできません。比較が必要なものにはバリュエーションを使ってください。特に記載がなければ、値は小数 4 桁の文字列です。
| フィールド | 備考 |
|---|---|
date | 期末日 |
sharesOutstanding | 小数 2 桁の文字列 |
sharesBasis | "dei" / "weightedAverageSharesDiluted" / "weightedAverageSharesBasic" |
bookValuePerShare, tangibleBookValuePerShare | |
revenuePerShare, ebitdaPerShare | |
operatingCashFlowPerShare, freeCashFlowPerShare | |
cashPerShare, netCashPerShare | |
netDebtPerShare, totalDebtPerShare | |
workingCapitalPerShare, retainedEarningsPerShare | |
dividendsPaidPerShare | |
netCurrentAssetValuePerShare | グレアムの NCAV |
grahamNumber |
バリュエーション
テーブル:valuation.quarterly、valuation.yearly(テーブルではない valuation.latest を加えたもの)
3 つのルール:
- マルチプルは
marketCap / 集計値であり、price / perShareではありません。perShareから再計算しないでください — 再表示された比較値のせいで、古い期間では両者が食い違います。 - **符号付きの利回りの隣にある
Noneのマルチプルは、バグではなく正しい状態です。**以下の分母が正でない場合は null と記されたマルチプルは、分母が正でないときにNoneになり、利回りとbookToMarketRatioは符号を保ちます。赤字企業はpriceToEarningsRatio: NoneとearningsYield: -5.0を示します。 - マルチプルは直近 12 か月ベースで、四半期の期間でも同じです — 四半期の PER は、1 四半期を年換算したものではなく、本物の直近 12 か月 PER です。
メタデータ
| フィールド | 備考 |
|---|---|
date | 期末日 |
sharePrice | 小数 4 桁の文字列 |
priceDate | YYYY-MM-DD |
priceLagDays | 整数 |
priceBasis | "as-quoted"(最新)/ "split-adjusted" / "unreconciled" — "unreconciled" は疑ってかかってください |
approximate | 過去の期間では true(残余の配当バックアジャスト) |
sharesRebased | 株数が現在の分割ベースに移し替えられた |
sharesOutstanding | 小数 2 桁の文字列、現在の分割ベース — 古い期間では perShare.sharesOutstanding(提出時のまま)と異なる |
規模:marketCap、enterpriseValue — 小数 2 桁の金額文字列。
マルチプル(小数 4 桁の数値)
| フィールド | 分母が正でない場合は null |
|---|---|
priceToEarningsRatio | はい |
priceToBookRatio | はい |
priceToTangibleBookRatio | はい |
priceToSalesRatio | |
priceToFreeCashFlowRatio | はい |
priceToOperatingCashFlowRatio | はい |
pegRatioTrailing | はい |
enterpriseValueToEbitdaRatio | はい |
enterpriseValueToEbitRatio | はい |
enterpriseValueToSalesRatio | |
enterpriseValueToFreeCashFlowRatio | はい |
enterpriseValueToOperatingCashFlowRatio | |
enterpriseValueToInvestedCapitalRatio | |
bookToMarketRatio | 符号を保つ |
netDebtToMarketCapRatio | |
marketCapToTotalAssets | |
altmanZScore |
利回り — 小数 2 桁のパーセント、符号付き:earningsYield、ebitToEnterpriseValueYield、freeCashFlowYield、operatingCashFlowYield、dividendYield、buybackYield、shareholderYield。
valuation.latest — 期間ではありません。上記のすべてのフィールドに加えて、priceAsOf、priceAgeDays、priceSource、fundamentalsAsOf、ttmBasis を持つ単一のオブジェクトです。日付キーの隣にあるため、テーブルのエントリーではなく、バー時点のスナップショットにも決して現れません — バックテストで読むと先読みになります。qc_fundamentals.raw["valuation"]["latest"] でアクセスしてください。価格が得られない場合は None です。
スコア
テーブル:scores.quarterly、scores.yearly
| フィールド | 備考 |
|---|---|
date | 期末日 |
piotroskiFScore | 0〜9 の整数 |
piotroskiComponents | オブジェクトまたは None — キーは roaPositive、cfoPositive、roaImproved、accrualQuality、leverageImproved、currentRatioImproved、noShareIssuance、grossMarginImproved、assetTurnoverImproved、それぞれ 1、0、または None |
altmanZScorePrivate | 小数 4 桁 — Z-prime、簿価ベースの自己資本 |
beneishMScore | 小数 4 桁 |
beneishComponents | オブジェクトまたは None — キーは dsri、gmi、aqi、sgi、depi、sgai、tata、lvgi(小数 4 桁の数値) |
予想される 2 つの欠落(どちらもエラーではありません):
- 提出者の最も古い期間にはスコアがありません — 比較する前年が必要だからです。
- SIC 6000〜6799(銀行、証券会社、保険会社、REIT)では、両方のバケットが空で、
scores.notApplicableReasonは"financial-sector-sic"です。これは「データなし」ではなく「該当なし」として扱ってください。qc_fundamentals.raw["scores"]["notApplicableReason"]から読み取ります。
TTM
ttm はテーブルではなく単一のオブジェクトで、どのバーの時点でもなくアップロード時点での直近 12 か月の集計値です。スナップショットには決して現れません。qc_fundamentals.raw["ttm"] でアクセスしてください(フォワード実行では安全、バックテストでは先読み)。
- メタデータ:
basis("quarterly"/"annual")、asOf、periodsUsed(list[str])、complete(bool)、synthetic(bool — 会計上の第 4 四半期が再構成された。通常は正常で、たいていtrue)、coverageDays(約 365)。 - フロー — 4 四半期分を合計。
epsBasic/epsDiluted(小数 4 桁)を除き、小数 2 桁の文字列:totalRevenue、grossProfit、operatingIncome、ebit、ebitda、netIncome、epsBasic、epsDiluted、depreciationAndAmortization、interestExpense、incomeBeforeTax、incomeTaxExpense、costOfRevenue、sellingGeneralAdministrative、researchDevelopment、taxProvision、totalCashFromOperatingActivities、totalCashflowsFromInvestingActivities、capitalExpenditures、freeCashFlow、dividendsPaid、stockBasedCompensation、paymentsForRepurchaseOfCommonStock、proceedsFromIssuanceOfCommonStock、repaymentsOfLongTermDebt。 - 時点残高 — 最新の期間で、合計されません。小数 2 桁の文字列:
totalAssets、totalLiab、totalStockholderEquity、totalCurrentAssets、totalCurrentLiabilities、totalDebt、netDebt、cashAndShortTermInvestments、goodWill、intangibleAssets、netWorkingCapital、retainedEarnings、netReceivables、inventory、accountsPayable、propertyPlantAndEquipmentNet、preferredStockTotalEquity、commonStockSharesOutstanding、minorityInterest。
指標の出所(metricsInputs / metricsHealth)
指標がどこから来たかを説明するフラットなオブジェクト:
"metricsInputs": {
"metricsVersion": 1,
"priceAsOf": "2026-08-21",
"priceSource": "…" | null, // source of valuation.latest
"historicalPriceSource": "stooq" | null, // source of valuation.quarterly/yearly
"sharesSource": "dei" | "weightedAverageSharesDiluted" | "weightedAverageSharesBasic" | null,
"dividendSource": "nasdaq" | "edgar-xbrl" | "cash-flow" | null,
"ttmBasis": "quarterly" | "annual" | null,
"historicalValuation": true
}
"metricsHealth": {
"prices": "ok" | "stale" | "absent", // current price for valuation.latest
"historicalPrices": "ok" | "absent",
"splits": "ok" | "absent",
"calendar": "ok" | "absent"
}価格ベースのフィールドに頼る前に、metricsHealth["prices"] != "absent" を確認してください。"stale" は引き続き使えます — priceAsOf と照らし合わせます。**metricsInputs is None は、指標の拡張前のバンドルを意味します。**フィールドはシンボルが再アップロードされるにつれて現れるため、しばらくはカバレッジにばらつきがあります。上記のすべてのブロックを任意のものとして扱ってください。
指標ブロックの型の規約
| 区分 | JSON の型 | 小数桁 | 例 |
|---|---|---|---|
| 金額の集計値 | 文字列 | 2 | "4519282704050.00" |
1 株あたりの値、sharePrice | 文字列 | 4 | "309.3500" |
| 株数 | 文字列 | 2 | "14608963000.00" |
| レシオ/マルチプル/回転率/カバレッジ/スコア | 数値 | 4 | 28.0462 |
| パーセント(マージン、リターン、利回り、配当・還元、成長、CAGR、税率) | 数値 | 2 | 42.35 は 42.35% を意味する |
| 日数(DSO / DIO / DPO / CCC / 営業サイクル) | 数値 | 2 | 29.2 |
件数(piotroskiFScore、priceLagDays) | 数値 | 整数 | 8 |
| 日付 | 文字列 | — | YYYY-MM-DD |
**すべての指標は個別に null になりえます。**期間オブジェクトは、メタデータ以外のキーがすべて null の場合は丸ごと省略されます。ブロックは空のとき {"quarterly": {}, "yearly": {}} になり、null になることも省略されることもありません。NaN / Infinity は現れません。
企業情報
companyInfo はフラットなオブジェクトです — 日付をキーとせず、current(...) / get_data_with_offset(...) のスナップショットには現れません。直接アクセスしてください。
info = f.raw["companyInfo"]| フィールド | 型 | 備考 |
|---|---|---|
entityType | string | null | 例:"operating" |
entityName | string | null | 法人名 |
cik | string | null | SEC セントラルインデックスキー |
sic | string | null | SIC 業種コード |
sicDescription | string | null | 人が読める SIC カテゴリ |
stateOfIncorporation | string | null | 2 文字の州コード |
fiscalYearEnd | string | null | "MMDD" 形式、例:"0926" = 9 月 26 日 |
category | string | null | 提出者カテゴリ |
phone | string | null | 連絡先の電話番号 |
exchanges | string[] | 取引所コード |
tickers | string[] | ティッカーシンボル |
businessAddress | object | null | street1、street2、city、stateOrCountry、zipCode |
注意点と落とし穴
- **常に
Noneをガードしてください。**ファンダメンタルデータが設定されていなければ、fundamentalsはNoneです。スナップショットの中でも、個々のセクション(例:earnings.Trend、scores)は一部のバーでnullになることがあり、指標の拡張ブロックは古いバンドルでは完全に欠けていることがあります。 - 複数シンボルおよび Screener の実行では、常に
symbol=を渡してください — プライマリバンドルへのフォールバックが、いま扱っているティッカーとは限りません。 - **数値は文字列のことがあります。**基になる JSON は数値指標を文字列で送ってくることが多いので、計算するときは
float(...)で変換してください。 - 新しい順のインデックスは、日付をキーとするテーブルとオフセット参照の両方に適用されます — インデックス
0はバーの時点で最も新しい対象期間、1はその前、というようになります。 - どのレポートが「現在」かは、バーのタイムスタンプが基準です —
bar["t"](またはbar.t[0])をそのまま渡してください。自分で解析する必要はありません。

