kessannote

競馬式スクリーンの出し方 v1

銘柄を「能力 × オッズ」で採点し、業種の勢いを馬場として添える。短信の表紙と株価だけで時点ごとの断面を組み、次の四半期までの騰落で効きを測る。

株式を競馬に見立てる。馬の能力が高くても人気で馬券が買われていれば配当は薄い。能力が 2、3 番手でも注目されていなければ配当は厚い。それに馬場の状態が乗る。

競馬 株式 v1 の定義
能力 会社が利益を生む力 会社予想の営業利益率・営業増益率・ROE
オッズ どれだけ買われていないか 予想 PER・PBR・ネットキャッシュ比率・52 週高値からの下落率
馬場 その業種への今の期待 業種の直近 20 営業日の中央値騰落

期待値 = 能力 × オッズ。 どちらも全銘柄の中の順位 (0〜1) にしてから掛ける。馬場は 掛けずに添え、あとで層別に見る。掛けるかどうかは検証してから決めるため。

想定する保有期間は 1 四半期。次の決算までに株価が期待値に寄るかを見る。

母集団

  • stocks.is_listed が true の銘柄。今の上場銘柄で過去の断面を作るので、上場廃止した 銘柄が落ちている
  • 時点の直前の営業日に値が付いた銘柄
  • 時点から 400 日以内に開示された決算短信があり、解析済みのもの。訂正短信は使わない

時点ごとの 3 要素は、その時点で読めた最新の短信 1 通と株価だけで作る。後から出た数字は 混ぜない。

値の取り方

短信の表紙 (tdnet_summary_facts) から通期の会社予想と期末の株式数を取る。要素名は会計基準で 末尾が変わる (…IFRS、…US) ので、まとめて拾う。連結と単体が両方あれば連結を取る。

項目 定義
株価 時点の直前の営業日の終値
時価総額 株価 × (発行済株式数 − 自己株式数)。短信の開示日から時点までに分割があれば比率で直す
予想 PER 株価 ÷ 通期予想 EPS。EPS が 0 以下なら順位を最下位 (0) に置く
PBR 時価総額 ÷ 自己資本 (OwnersEquity か IFRS の親会社所有者帰属持分)。表紙の最新の時点の値
ネットキャッシュ比率 (現預金 − 有利子負債) ÷ 時価総額。同じ短信の貸借対照表から。有利子負債は借入金・社債・CP の合計で、リース債務は含めない
52 週高値からの下落率 株価 ÷ 過去 365 日の最高終値 − 1
予想営業利益率 通期予想の営業利益 ÷ 売上高
予想営業増益率 表紙の「営業利益 対前期増減率」の予想値
予想 ROE 通期予想の親会社株主に帰属する当期純利益 ÷ 自己資本
業種の勢い 33 業種ごとに、直近 20 営業日の騰落率の中央値

各項目を時点ごとに percent_rank で 0〜1 の順位にする。高いほど良い向きに揃える。 PER と PBR は低いほど高順位、下落率は深いほど高順位。値が無い項目は順位に入れず、 残りの平均を取る。

  • 能力 = 予想営業利益率、予想営業増益率、予想 ROE の順位の平均
  • オッズ = 予想 PER、PBR、ネットキャッシュ比率、下落率の順位の平均
  • 馬場 = 業種の勢いの順位

株価の分割

株価は調整後終値を使い、無い行は生の終値で代える。調整後終値は分割だけを直した値で配当は 含まないため、分割の無い銘柄では終値と同じになる。過去の行の 8 割で調整後終値が NULL だが、 それは分割の無い銘柄で、値としては欠けていない。分割のあった銘柄は夜間バッチが取り直して 埋めている。

短信の開示日から時点までに分割があった場合、株式数と 1 株あたりの予想は開示時点の株数で 書かれている。開示日と時点の (調整後終値 ÷ 終値) の比で直す。

取り直しが届いていない銘柄が少し残る。飛びのある 507 銘柄のうち 25 で、新規上場と上場廃止が 大半になる。

効きの測り方

時点を四半期の頭に置き、次の時点の直前の営業日までの騰落率を先行リターンとする。最後の 時点だけ株価の最新日まで。

  • 期待値の 5 分位ごとに先行リターンの中央値・平均・上昇した割合
  • 能力とオッズをそれぞれ中央値で上下に割った 2×2
  • 要素ごとに、上位 20% と下位 20% の先行リターン中央値の差
  • 同じ差を時点別と市場区分別に
  • 時価総額 3 分位 × 割安 5 分位

中央値を主に読む。少数の急騰銘柄が平均を引っ張るため。

流し方

analysis/keiba-v1.sql をそのまま使う。時点をカンマ区切りで渡す。

psql "$DATABASE_URL" -v dates='2025-04-01,2025-07-01,2025-10-01' -f analysis/keiba-v1.sql

1 日だけ渡せばスクリーンになり、先行リターンは付かない。全時点で 40 秒ほど。

この版で出したレポート