バックテストに必要なのは:配分法(変動率調整法)、わかりやすい例で説明します。同様に、加減算調整ができない理由を例を用いて説明し、Python で過去のデータを取得するための配分法データソースをおすすめします。
核心概念:なぜ配当修正が必要なのか?
投資の世界において、株式の価格は単に売買によって変動するだけではありません。上市公司が行う行為、例えば配当金の発行、株式分割、増資などは、株価に直接影響を与えますが、これらの変動は会社の真の価値の上昇または下落を反映しているわけではありません。
たとえば、昨日終値が100円だった株式を保有していたとします。今日、会社が1株あたり5元の発行済みの現金配当金を発行するというプロセスを「除算」と呼びます(除算)。配当金を発行すると会社の総価値は減少するため、取引所は株価を5元下落させ、始値が95円になります。
もし、95元と昨日の100元を使って上昇率を計算した場合、「-5%」という結論が得られます。しかしこれは明らかに誤りです。なぜなら、あなたの口座には5元の現金が増加し、あなたの総資産は損失していませんから。
配当修正(Reinvestment/Adjustment) の目的は、配当金、株式分割などの非市場取引要因によって生じる株価の「ギャップ」を埋め、株価の真の動きを復元し、正確な収益率を計算したり、戦略を検証したりするために使用されることです。
配当法(変動幅調整法):通俗例の解説
核心思想: 配当法は、あなたが受け取ったすべての配当金や株式分割を、受け取るその瞬間に、当時の株価で即座に買い直すという仮定に基づいています。それは「総資産の変動率」に焦点を当てています。 例: あなたは 1日目 に 100元 の価格で 1 株 “マギカルカンパニー” の株式を購入します。あなたの総資産は 100元 です。 2日目、市場が変化していませんが、会社が 1 株あたり 2元 の配当金を発行することを発表しました。
- 除息後、株価は自動的に 100 元から 98元 に下落します。
- その時点で、あなたの保有ポジションは 1 株の株式(98元)+ 2元の現金になります。
- あなたの総資産は依然として 98 + 2 = 100元 で変わりません。 3日目、マギカルカンパニーの株価が 98 元から 102.9元 に上昇します。
- 変動率はどれくらいですか?それは
(102.9 - 98) / 98 = 5%
です。 - あなたの総資産は現在いくらになりますか?
- もし配当金を再投資しなければ:1 株の株式(102.9 元)+ 2 元の現金 = 104.9 元。
- 私たちが配当法を使って「複利調整」された価格を計算する場合、私たちは 2 元の現金を除息日(2日目)に 98 元の株価で即座に買い直すと仮定します。ただし、計算を簡略化するために、配当法は単純に昨日の価格に基づいて変動率を乗算します。 配当法の計算ロジック: それは、2日目の総資産(100元)と1日目の総資産(100元)の比率が 0% の増加であることを示唆しています。3日目の総資産は、2日目に比べて 5% 上昇します。 したがって、それは次のような複利調整された価格シーケンスを構築します:
- 1日目複利調整価格: 100 元
- 2日目複利調整価格: 総資産が変化していないため、昨日の終値に基づいて今日の真の変動率を反映するように調整します。調整方法は、昨日の複利調整価格に今日の実際の変動率を加算することです。ただし、除息日当日、実際の変動率は 0%(総資産が変わらないため)であり、複利調整価格はそのままか、または技術的な調整が行われます。ここでは単純に3日目の価格を見ています。
- 3日目複利調整価格:
1日目の複利調整価格 * (1 + 0%) * (1 + 5%)
は不正確です。正しいロジックは、除息前の価格を基準として、それを「割引」することです。 より明確な前複利の角度で理解しましょう: - 3日目 の終値は 102.9 元 です。(基準)
- 2日目 の終値は 98 元 です。
- 1日目 の終値は 100 元ですが、2日目に除息(株価が 100 から 98 に下がったため、98/100 = 0.98 で割引された)が発生したため、これを後の価格と一致させるために調整する必要があります。
- 修正された1日目の価格 =
102.9 / (1 + 5%) / (100/98)
… この計算は非常に複雑です。 最も簡単な理解方法(変動幅調整法): 配当法の核心は、その期間内の変動幅が「配当金を再投資」戦略の下での総収益率と一致するように、2日目から3日目の複利調整価格の変動幅を保証することです。
- 修正された1日目の価格 =
- 1日目の終値から3日目の終値まで、あなたの実際の総収益率は
(104.9 - 100) / 100 = 4.9%
です。(ここでは配当金を再投資していないと仮定します)
なぜ「加減法複権」は使えないのか?
核心思想: 加減法複権は、単純な足し算によって配当金を直接除息前の株価に加えることを試みます。 例(前文を参考に):
- 第一天終値:100元
- 第二天除息2元、終値:98元
- 第三天上昇5%、終値:102.9元
加減法の誤った論理: それは、第二日の98元が2元の配当金によって減少したため、その2元を「戻す」必要があると考えるでしょう。
- 計算される第二日の「複権価格」=98 + 2 = 100元
- 計算される第三日の「複権価格」=102.9 + 2 = 104.9元
現在、この「複権価格」系列を使って第三日の変動率を計算します。
- 変動率 =
(104.9 - 100) / 100 = 4.9%
問題はどこにあるのか?
この4.9%の変動率は間違っています!前述したように、株価の実変動率は(102.9 - 98) / 98 = 5%
です。加減法で得られた4.9%は、株の実際の成長能力を過小評価しています。
なぜ過小評価されるのか? それは、加減法が「複利」効果を考慮していないためです。比例法では、2元の配当金も5%という速度で成長すると仮定しますが、加減法はそれを粗暴に2元として扱い、その後の投資の増加に組み込まないと考えています。時間の経過とともに、配当回数が増えるにつれて、この誤差はますます大きくなり、バックテストの結果が大きく歪んでしまいます。特に高配当株においては顕著です。
一言でまとめると: 加減法は価格系列の「成長率」情報を破壊し、収益率の計算を誤らせる。比例法は実際の「収益率」を保持しており、バックテストの正しい選択である。
Pythonで過去のデータ「配分法」データソースのおすすめ
実践において、私たちは通常、自分で複利調整を計算する必要はありません。専門的なデータプロバイダーは、すでに計算された複利調整後の価格を直接提供してくれます。APIを呼び出す際に、正しい価格タイプを選択するだけで済みます。これは一般的に「Adjusted Price」(調整後価格)と呼ばれます。
以下に、Pythonで複利調整後の過去のデータを取得するために高く評価されているデータソースをいくつかご紹介します。
-
yfinance (Yahoo Finance)
- メリット: 完全無料、使いが簡単で、個人開発者や初心者にとって最初の選択肢です。提供されるデータはデフォルトで配分法(前複利調整)されています。
- デメリット: データがクリーンでない場合や、まれに遅延が発生する可能性があります。非常に厳格なビジネス戦略の場合には、より専門的なデータソースが必要になる場合があります。
- Pythonでの使用例:
-
TuShare
- メリット: 国内で非常に人気のある金融データインターフェースで、A株、香港株、米国株など豊富なデータを提供しています。データ品質は高く、ポイント制度があり、基本的なデータは無料で利用できます。明確な複利調整因子と複利調整後の行情インターフェースを提供しています。
- デメリット: トークンを取得するために登録する必要があります。一部の高度なデータや高頻度の呼び出しにはポイントが必要です。
- Pythonでの使用例(事前にトークンを取得する必要があります):
-
baostock
- メリット: 無料でオープンソースの中国A株証券データプラットフォームです。データの安定性と正確性が高く、複利調整オプションも提供しています。
- デメリット: 主にA株市場をカバーしています。
- Pythonでの使用例:
-
商用級データソース (Quandl/FactSet, Refinitiv, Bloomberg)
- メリット: データ品質が最も高く、カバー範囲が最も広く、更新頻度が最も速く、プロフェッショナルなAPIと技術サポートを提供しています。
- デメリット: 非常に高価で、主に金融機関や企業ユーザーを対象としています。
初心者へのアドバイス: yfinance または TuShare から始めてください。これらのデータソースは、学習、研究、および個人プロジェクトのバックテストのニーズを満たし、配分法複利調整データの理解と適用に役立ちます。APIを呼び出す際には、「Adjusted」または「複利調整済み」オプションを選択することを必ず確認してください。