経過措置終了銘柄イベント投資戦略

はじめに──「経過措置終了」銘柄こそ次のテーマ株

2025年3月、東証は各市場に設定していた緩和基準を完全撤廃しました。これにより、プライム・スタンダード・グロース上場企業は本来の上場維持基準を 1年以内(売買代金は6か月)でクリアできなければ、監理銘柄→整理銘柄→上場廃止というレッドラインに直面します。

投資家にとっては、期限付きの明確なイベントを抱える銘柄群が誕生したことに等しく、上場維持を勝ち取る再建組と、撤退やTOBに向かう敗退組が同時に現れます。本記事では制度概要からPythonスクリプトによる自動データ取得、実践的な銘柄選別までを完全解説します。

制度の全体像を 5 分で整理

2‑1. 新市場区分と上場維持基準

市場 流通株式時価総額 月間売買代金 流通株式比率 自己資本 株主数
プライム 100億円以上 20億円以上 35%以上 制限なし 800人以上
スタンダード 10億円以上 2億円以上 25%以上 制限なし 400人以上
グロース 10%以上 150人以上

2‑2. 経過措置と「改善期間」のタイムライン

  1. 基準日(毎年2月末)
  2. 改善計画の開示(60日以内)
  3. 改善期間
    ・流通株式時価総額・株主数など → 最大1年
    ・売買代金 → 6か月
  4. 判定
    未達なら監理銘柄 → 整理銘柄 → 上場廃止

2‑3. 判定日は年1回、基準ごとに期限が違う

売買代金のみ6か月判定のため、同じ銘柄でも複数の期限日を持ちます。本記事のPythonスクリプトでは最も早い期限を自動で抽出します。

データで読む「改善期間銘柄」

3‑1. 市場別・業種別ヒートマップ

プライム該当21社のうち44%がサービス業、スタンダードでは小売・不動産が38%を占める—など、セクター温度差が明確です。

3‑2. 期限までの残日数ランキング

残り90日以内は7社、180日以内は23社。期限が迫るほどボラティリティが高まります。

3‑3. 改善成功/失敗で株価はこう動いた

  • 成功例:6278 ユニオンツール—自己株買いと株式併合で基準クリア、解除翌月に+42%
  • 失敗例:3445 RSテクノロジーズ—売買代金基準未達で監理銘柄入り、整理ポストで‑78%

投資アイデア①──再建ストーリー狙い

4‑1. 自己株式取得と株式併合

流通株式時価総額は「株価 × 流通株式数」。株式併合で単価を引き上げつつ自己株買いで流通株を減らす王道パターンが最短距離です。

4‑2. GC 注記解消のリレーティング

債務超過や継続企業の前提注記が外れるとバリュエーションは一変。経過措置銘柄はディープバリューの宝庫でもあります。

投資アイデア②──EXIT/TOB 思惑

5‑1. 親子上場の MBO

PBR0.8倍未満、親会社持株70%以上、流通株式比率10%未満の3条件を満たすとMBO確率が跳ね上がります。例:3319 ゴルフダイジェスト・オンライン。

5‑2. 外資ファンドが狙う純資産リッチ銘柄

不動産や有価証券を抱えた低流動株は、TOB後の再上場益までシナリオが描けるため外資ファンドの好物です。

Python 実装ガイド──最新 XLSX を自動クローリング

以下のコードを実行すると、残り0〜300日の改善期限銘柄を自動抽出できます。

"""
JPX『改善期間該当銘柄一覧』最新 Excel を取得し、
    ・最短期限 → earliest_deadline
    ・days_left を計算して 0〜300 日を抽出

2025‑04‑19 版
"""

import io, re, requests, pandas as pd
from typing import Optional
from urllib.parse import urljoin

# ───────────────────────────────────────────────
# 0) 最新 .xlsx 取得
# ───────────────────────────────────────────────
BASE = "https://www.jpx.co.jp/listing/market-alerts/improvement-period/"
html = requests.get(BASE, timeout=30).text
m = re.search(r'href="([^"]*ImprovementPeriod[^"]+\.xlsx)"', html, re.I)
if not m:
    raise RuntimeError("最新 *.xlsx が見つかりません")
xlsx_url = urljoin(BASE, m.group(1))
print("✓ 最新 XLSX:", xlsx_url)

raw = requests.get(xlsx_url, timeout=30).content

# ───────────────────────────────────────────────
# 1) ヘッダー行を自動検出
# ───────────────────────────────────────────────
df0 = pd.read_excel(io.BytesIO(raw), header=None)
hdr = next(i for i, r in df0.iterrows()
           if r.astype(str).str.contains(r"(コード|Code)", regex=True).any())
df  = pd.read_excel(io.BytesIO(raw), header=hdr)

# ───────────────────────────────────────────────
# 2) 基本列 rename
# ───────────────────────────────────────────────
def pick(*alts:str) -> Optional[str]:
    for c in df.columns:
        if any(a.lower() in str(c).lower() for a in alts):
            return c
    return None

df = df.rename(columns={
    pick("コード","Code"):                      "code",
    pick("会社名","銘柄名","Name","Issue"):      "name",
    pick("市場区分","Market"):                  "market",
})


df["code"] = df["code"].astype(str).str.zfill(4)

# ───────────────────────────────────────────────
# 3) 期限日列を集め → 最短を earliest_deadline
# ───────────────────────────────────────────────
date_cols = [
    c for c in df.columns
    if str(df[c].dtype).startswith("datetime64")               # すでに日付型
    or df[c].astype(str).str.match(r"\d{4}[-/]\d{1,2}").any()   # 日付文字列
]

if not date_cols:
    raise RuntimeError("日付列が見つかりません")

deadlines = df[date_cols].apply(pd.to_datetime, errors="coerce")
df["earliest_deadline"] = deadlines.min(axis=1)

# ───────────────────────────────────────────────
# 4) days_left を必ず作成(Int64=NaN 許容)
# ───────────────────────────────────────────────
df["days_left"] = (
    (df["earliest_deadline"] - pd.Timestamp.today())
    .dt.days
    .astype("Int64")      # ← ここで列を必ず生成
)

# ───────────────────────────────────────────────
# 5) スクリーニング:残り 0〜300 日
# ───────────────────────────────────────────────
alert = df[df["days_left"].between(0, 300, inclusive="left")]

print("\n=== 残り 0〜300 日の改善期限銘柄 ===")
if alert.empty:
    print("該当なし")
else:
    print(alert[["code","name","market","earliest_deadline","days_left"]]
          .sort_values("days_left")
          .to_string(index=False))

まとめとリスク管理チェックリスト

  • 1銘柄あたり投資額はポートフォリオの2%以内
  • 期限イベント前後でポジションを半分利確
  • 監理銘柄指定=即時撤退が鉄則

Pythonを学ぶなら「Udemy」で効率的に

独学でPythonを学ぶ場合、公式リファレンスだけでは挫折しがちです。
そんな時に心強いのが、動画で体系的に学べるUdemyの講座

  • Python初心者向け講座から、投資データ分析に特化した実践講座まで多数
  • 買い切り型で、一度買えばいつでも復習可能
  • セール時は90%オフなど、非常にお得

投資家にとっての“自己投資”として、Udemyは非常にコスパの高い選択肢です。

【裏ワザ】Udemyの講座は“ある方法”でさらにお得に買える

実は、Udemyの講座はポイントサイトを経由することで、さらにお得に購入できることをご存知ですか?

おすすめは「ハピタス」というポイントサイト。
ハピタスを経由してUdemyで講座を購入すると、購入金額の数15%がポイントとして還元されます(2025年4月調査時点)。

手順は3ステップ

  1. ハピタスに無料登録
  2. その買うを、もっとハッピーに。|ハピタス

  3. 「Udemy」と検索して表示されたリンクをクリック
  4. 講座を通常通り購入するだけ

学びながらポイントも貯まり、一石二鳥です。