このサイトについて
このサイトで使用するデータについて
本サイトのコード例は、すべて仮想のサンプルデータで動作します。
本サイトでは日本株の分析にあたり、株価データの取得に J-Quants APIを紹介していますが、 J-Quants APIの規約により、本サイトでは記事中のコード例はすべて仮想のサンプルデータで動作するようにしています。 そのため、実際の株価データを使用した分析結果の掲載はしていません。
サンプルデータは Python の乱数生成機能で作成した架空の数値データです。 株価に見られるトレンド・周期的な変動・日々のばらつきを数式で再現しています。 乱数の seed を固定しているため、同じコードを実行すれば同じ結果が再現されます。
サンプルデータの生成方法
記事中で使用するサンプルデータは、以下の関数で生成しています。 乱数の seed を固定しているため、同じコードを実行すれば同じ結果が再現されます。
株価の時系列データ
株価の時系列はトレンド + 周期(sin 波) + ノイズの 3 要素で構成しています。
import numpy as npimport pandas as pd
def generate_stock_prices( n_tickers: int = 5, n_days: int = 250, seed: int = 42,) -> pd.DataFrame: """仮想の株価時系列(日次四本値)を生成する。
列名は J-Quants API V2 の /equities/bars/daily に準拠する。
Parameters ---------- n_tickers : int 銘柄数。 n_days : int 営業日数(デフォルト 250 ≒ 約 1 年)。 seed : int 乱数シード(再現性のため固定)。
Returns ------- pd.DataFrame columns: Date, Code, O, H, L, C, Vo """ rng = np.random.default_rng(seed=seed) dates = pd.date_range("2025-06-01", periods=n_days, freq="B") records = []
for i in range(n_tickers): code = f"{1301 + i}" base = rng.uniform(800, 5000) # 初期株価 trend = rng.uniform(-0.02, 0.06) # 年率トレンド amplitude = rng.uniform(0.03, 0.10) # sin 波の振幅(比率) period = rng.uniform(40, 80) # 周期(営業日) vol = rng.uniform(0.01, 0.025) # 日次ボラティリティ
t = np.arange(n_days) cycle = amplitude * np.sin(2 * np.pi * t / period) noise = rng.normal(0, vol, size=n_days) log_returns = trend / 250 + cycle / 250 + noise close = base * np.exp(np.cumsum(log_returns)) close = np.round(close, 1)
# Open / High / Low / Volume を Close から簡易生成 spread = rng.uniform(0.005, 0.015, size=n_days) high = np.round(close * (1 + spread), 1) low = np.round(close * (1 - spread), 1) open_ = np.round(low + (high - low) * rng.random(n_days), 1) volume = rng.integers(50_000, 2_000_000, size=n_days)
for j in range(n_days): records.append({ "Date": dates[j], "Code": code, "O": open_[j], "H": high[j], "L": low[j], "C": close[j], "Vo": int(volume[j]), })
return pd.DataFrame(records)銘柄情報と財務データ
ケーススタディや財務分析の記事では、架空の企業リストと財務指標を生成します。
def generate_market_data( n_companies: int = 80, seed: int = 42,) -> dict[str, pd.DataFrame]: """仮想の上場企業データ一式を生成する。
列名は J-Quants API V2 に準拠する(listed: /equities/master、 statements: /fins/summary、prices: /equities/bars/daily)。 V2 では財務情報の銘柄コード列も Code に統一されている。
Returns ------- dict with keys: "listed" — Code, CoName, S33Nm "statements" — Code, DiscDate, Sales, EPS, FDivAnn "prices" — Code, Date, C """ rng = np.random.default_rng(seed=seed)
sectors = [ "情報・通信業", "電気機器", "医薬品", "銀行業", "輸送用機器", "化学", "機械", "食料品", "小売業", "建設業", "鉄鋼", "海運業", "証券、商品先物取引業", "不動産業", "サービス業", ]
codes = [f"{1301 + i}" for i in range(n_companies)] sector_assign = rng.choice(sectors, size=n_companies) names = [f"サンプル商事{i + 1:03d}" for i in range(n_companies)]
listed = pd.DataFrame({ "Code": codes, "CoName": names, "S33Nm": sector_assign, })
# --- 財務情報 --- eps = np.round(rng.lognormal(mean=4.5, sigma=0.8, size=n_companies), 1) net_sales = np.round(rng.lognormal(mean=10, sigma=1.2, size=n_companies), 0) base_dps = np.round(rng.exponential(scale=40, size=n_companies), 1) base_dps[rng.random(n_companies) < 0.15] = 0.0 # 約 15% は無配
statements = pd.DataFrame({ "Code": codes, "DiscDate": pd.Timestamp("2026-05-15"), "Sales": net_sales, "EPS": eps, "FDivAnn": base_dps, })
# --- 株価(直近終値) --- close = np.round(rng.lognormal(mean=7.0, sigma=0.8, size=n_companies), 1)
prices = pd.DataFrame({ "Code": codes, "Date": pd.Timestamp("2026-05-27"), "C": close, })
return {"listed": listed, "statements": statements, "prices": prices}列名は J-Quants API V2 に準拠
サンプルデータの列名(カラム名)は J-Quants API V2 の項目名に準拠しています。
V2 の項目名は O(始値)や C(終値)のような省略名です。
列名を V2 に合わせておくことで、サンプルのコードを、
データ取得部分だけ差し替えればそのまま実データに適用できます。
各記事のコードは、以下の列名を前提に書かれています。
| 取得元(エンドポイント) | 列名 | 説明 |
|---|---|---|
| listed(/equities/master) | Code | 銘柄コード |
| listed(/equities/master) | CoName | 会社名 |
| listed(/equities/master) | S33Nm | 33 業種区分名 |
| statements(/fins/summary) | Code | 銘柄コード |
| statements(/fins/summary) | DiscDate | 開示日 |
| statements(/fins/summary) | Sales | 売上高 |
| statements(/fins/summary) | EPS | 1 株あたり純利益 |
| statements(/fins/summary) | FDivAnn | 通期予想 1 株あたり配当 |
| prices(/equities/bars/daily) | Date | 取引日 |
| prices(/equities/bars/daily) | O / H / L / C | 始値・高値・安値・終値 |
| prices(/equities/bars/daily) | Vo | 出来高 |
一部のライブラリ(例: mplfinance)は Open/High/Low/Close/Volume
という列名を要求します。その場合は rename で V2 の省略名から変換してから渡します。
実データへの切り替え
サンプルデータで手法を理解したあとは、実際の株価データで試してみることをおすすめします。 データの入手方法は株価データの入手方法で解説しています。
切り替えに必要な変更は、各記事のコード冒頭にあるデータ生成部分だけです。 たとえば以下のように書き換えます。
# 変更前: サンプルデータdata = generate_market_data()listed = data["listed"]
# 変更後: J-Quants API(V2)から取得# 列名(Code, CoName など)はサンプルデータと一致するため、# 取得部分だけ差し替えればコードはそのまま動くimport jquantsapi
client = jquantsapi.Client()listed = client.get_listed_info()免責
本サイトの内容は学習目的であり、特定の銘柄や手法の 売買を推奨するものではありません。
- 投資判断はご自身の責任において行ってください。
- 過去のデータ・バックテスト結果は将来の成果を保証しません。
- 記事中のコード例は、そのまま実取引に使うことを想定していません。