はじめに
ここ1年半ほどで、半導体メーカーをはじめとして株価が大きく伸びた企業が目立ちましたね。「キオクシアのように、めっちゃ伸びる企業は他にどれくらいあったのか? 実際に一覧として見てみたい!」と思う方も多いのではないでしょうか。
しかし、証券会社の一般的なスクリーニングツールでは、「特定の期間の底値から天井値までの倍率」を正確に出すのは意外と難しいものです。
そこで今回は、Google ColabとPython(yfinance)を使って、東証全銘柄から「指定期間内に株価が2倍以上になった銘柄」を自動抽出するスクリプトを作成しました。これで「実際に大化けした企業の一覧」をサクッと出すことができます。
環境構築は一切不要で、Google Colabにコピペして実行するだけで動きます。
💡 このスクリプトのポイント(3つの罠の回避)
株価の倍率計算をプログラムで行う際、単純に「期間内の最高値 ÷ 最安値」で計算してしまうと、以下の3つの罠に引っかかります。本スクリプトではこれらをすべて排除するロジックを組んでいます。
-
時系列パラドックスの罠
- 【問題】「期間の最初に最高値」をつけ、その後暴落して「期間の最後に最安値」をつけた銘柄も「2倍(半値)になった」と誤判定されてしまう。
- 【対策】pandasの
cummin()(累積最小値)を使い、「常にその日以前の最安値」を基準に倍率を計算し、正しい時系列(底値→天井値)での上昇のみを捕捉します。
-
上場直後のデータ不足の罠
- 【問題】IPO直後などでデータが数日分しかない銘柄がノイズになる。
- 【対策】取得できた営業日が200日未満の銘柄はスキップします。
-
ボロ株(低位株)の罠
- 【問題】「10円の株が20円になった」といった実用性の低い銘柄が上位を独占してしまう。
- 【対策】底値が100円未満の銘柄を足切りします。
※なお、東証の銘柄コード一覧は有志がGitHubで公開しているCSV(Rawデータ)を直接読み込むため、面倒なGoogleドライブの連携やCSVのアップロードは不要です。
💻 抽出スクリプト本体
Google Colabのセルに以下のコードを貼り付けて実行してください。
(期間は 2025-01-01 〜 2026-06-21 で設定していますが、お好みで変更可能です)
# --- Google Colab専用:東証「2倍株」抽出スクリプト ---
import pandas as pd
import yfinance as yf
from google.colab import data_table
# 1. GitHub上のCSVから東証銘柄リストを直接読み込む
# raw.githubusercontent.com のURLを使用するように修正
github_csv_url = "https://raw.githubusercontent.com/kouji0705/kabu_code_list/main/jpx_stock_codes.csv"
print("銘柄リストを読み込んでいます...")
df_jpx = pd.read_csv(github_csv_url)
# プライム・スタンダード・グロースのみに絞る
target_markets = ["プライム(内国株式)", "スタンダード(内国株式)", "グロース(内国株式)"]
df_stocks = df_jpx[df_jpx["市場・商品区分"].isin(target_markets)].copy()
tickers = df_stocks["Ticker"].tolist()
print(f"解析対象: {len(tickers)}銘柄\n")
# 2. Yahoo Financeから株価データを一括ダウンロード
print("Yahoo Financeから株価データを一括ダウンロード中(数分かかります)...")
# ※期間はここで変更できます
data = yf.download(tickers, start="2025-01-01", end="2026-06-21", group_by='ticker', auto_adjust=True)
results = []
print("全銘柄の「2倍判定」を実行中...")
for ticker in tickers:
try:
df_kabu = data[ticker].dropna(subset=['High', 'Low'])
# 罠②対策:上場したて等のデータ不足銘柄を排除
if len(df_kabu) < 200:
continue
# 罠①対策:時系列パラドックスの回避(その日以前の最安値を基準にする)
rolling_min = df_kabu['Low'].cummin()
draw_up_series = df_kabu['High'] / rolling_min
max_multiple = draw_up_series.max()
# 倍率が2倍以上の銘柄のみを抽出
if max_multiple >= 2.0:
max_date = draw_up_series.idxmax()
min_date = df_kabu.loc[:max_date, 'Low'].idxmin()
min_price = df_kabu.loc[min_date, 'Low']
max_price = df_kabu.loc[max_date, 'High']
# 罠③対策:100円未満のボロ株ノイズを排除
if min_price < 100:
continue
info = df_stocks[df_stocks["Ticker"] == ticker].iloc[0]
results.append({
"コード": str(info["コード"]),
"銘柄名": info["銘柄名"],
"市場": info["市場・商品区分"].replace("(内国株式)", ""),
"業種": info["33業種区分"],
"底値": round(min_price, 1),
"底の日付": min_date.strftime('%Y-%m-%d'),
"天井値": round(max_price, 1),
"天井の日付": max_date.strftime('%Y-%m-%d'),
"最大倍率": round(max_multiple, 2)
})
except Exception:
continue
# 3. 結果の集計と画面表示
df_result = pd.DataFrame(results).sort_values(by="最大倍率", ascending=False)
print("\n完了しました!")
print(f"2倍達成した企業: {len(df_result)}社")
# メモリ上のデータフレームをインタラクティブ表(フィルタ・ソート機能付き)として表示
data_table.enable_dataframe_formatter()
df_display = data_table.DataTable(df_result, max_columns=10, num_rows_per_page=20)
df_display
📊 実際の実行結果と見方
指定期間(2025年1月〜2026年6月)で実行してみると、解析対象3,734銘柄のうち、なんと656社もの企業が2倍株を達成していることがわかります。
トップにはキオクシアホールディングス(最大倍率:約71倍)が君臨しており、他にもユニチカ(約35倍)や古河電気工業(約17倍)など、凄まじい伸びを見せた銘柄が次々とリストアップされます。
出力された表は、Google Colab標準の「インタラクティブ・テーブル」として表示されます。わざわざCSVに出力してExcelで開かなくても、画面上でそのまま以下の操作が可能です。
- ソート機能: 「最大倍率」の列名をクリックして降順に並び替える
- フィルタリング: 右上の「Filter」ボタンから「電気機器」など特定の業種だけで絞り込む
- 検索: 特定の銘柄コードや銘柄名でサクッと検索
特定のテーマ株がいつ頃底を打って急騰したのか、業種ごとの傾向などを分析するのに非常に便利です。ぜひコピペして、ご自身の手で分析を回してみてください!