投資の成績を振り返るとき、多くの人は「どれだけ利益が出たか」という利回りばかりに目を向けがちです。しかし、安定して資産を増やし続けるプロの投資家が最も重視するのは、実は「どれだけ資産が減る可能性があるか」というリスクの側面です。
この記事では、資産の最大下落幅を示す指標「ドローダウン」に焦点を当て、Pythonを使って自動計算する方法を解説します。過去の暴落時に自分の資産がどう動いたかを具体的な数字で把握できれば、急な相場急変にも慌てない、強固なリスク管理体制を整えることができます。
投資のリスク管理に欠かせないドローダウンとは?
ドローダウンとは、ある期間において資産が最も増えた「ピーク(高値)」から、その後どれだけ下落したかを示す指標です。利回りが「攻め」の指標であるのに対し、ドローダウンは「守り」の指標といえます。
この章では、ドローダウンの定義や最大ドローダウン(MDD)の重要性、そして回復にかかる期間の考え方について整理します。これらの概念を正しく理解することで、自分が運用している投資信託や株の「本当のリスク」が見えてくるはずです。
資産の最高値からどれだけ落ちたかを数値化する
ドローダウンを計算する際は、常にその時点までの「過去最高値」を基準にします。例えば、資産が100万円から120万円まで増えた後、100万円まで下がったとします。この場合、元の100万円ではなく、ピークである120万円から計算して「約16.6%の下落」と捉えるのがドローダウンの考え方です。
なぜ元の金額ではなく最高値から測るのかというと、投資家にとって「一度手にした含み益が消えるストレス」を正確に反映するためです。
高値を更新し続けている間はドローダウンは0%ですが、一度でも下落が始まれば、再び高値を更新するまでマイナスの数字が記録され続けます。これを可視化することで、自分の資産がどれくらいの期間、含み損の状態に耐えていたのかを客観的に振り返ることが可能です。
最大ドローダウン(MDD)は戦略の限界を示す
数あるドローダウンの中でも、観測期間中で最も深い谷となった下落率を「最大ドローダウン(MDD)」と呼びます。これは、その投資戦略を続けていた場合に遭遇した「過去最悪のシナリオ」を意味します。
例えば、ある投資信託のMDDが-30%であれば、あなたは運用中に資産が3割削られる場面に必ず直面したということです。
多くの投資家は、好調な時期の利回りを見て投資を始めますが、いざMDD級の下落が来ると恐怖で狼狽売りをしてしまいます。
あらかじめMDDを把握しておくことは、「これくらいの下落は過去にもあったことだ」と自分に言い聞かせ、運用を継続するための精神的なお守りになります。
下落から復活するまでの回復期間も考慮する
ドローダウン分析では、下落の「深さ」と同じくらい、元の高値に戻るまでの「長さ」も重要視されます。これをリカバリー期間(回復期間)と呼びます。
資産が30%下落した際、1ヶ月で戻るのと、3年かかるのとでは、投資家の精神的な負担は全く異なります。
- 下落の深さ:一度に受けるダメージの大きさ
- 回復の長さ:資金が拘束され、含み損に耐える時間の長さ
- 再高値更新:戦略が再び機能し始めた証明
Pythonで分析を行う際は、最大の下落率だけでなく、この「谷の中にいた期間」も算出することで、より実戦的なリスク管理が可能になります。
Pythonでドローダウンを自動計算する手順
ドローダウンの手計算は非常に面倒ですが、Pythonのライブラリ「Pandas」を使えば数行のコードで完了します。一度仕組みを作ってしまえば、S&P500や日経平均、仮想通貨など、どんな銘柄でも一瞬で分析できるようになります。
ここでは、分析の準備として必要なライブラリの導入から、データの取得方法までを具体的に解説します。プログラミングが初めての方でも、決まった型を覚えるだけで十分に使いこなせます。
分析に必要なライブラリを導入する
まずは株価データの取得と計算に欠かせない「2つの武器」を準備します。以下のライブラリを使えば、複雑な計算式を自分で書く必要はありません。
分析をスムーズに進めるために、まずは環境を整えましょう。
- yfinance:株価データをネットから取ってくる道具
- pandas:表形式でデータを計算する超強力な道具
- matplotlib:結果をグラフにするための道具
これらは世界中のデータサイエンティストが愛用している標準的なライブラリです。ターミナルやコマンドプロンプトで pip install yfinance pandas matplotlib と入力するだけで準備が整います。
yfinanceで過去の株価データを取得する
データの準備ができたら、実際に解析したい銘柄のデータをダウンロードします。yfinanceを使えば、ティッカーシンボル(銘柄コード)を入れるだけで、数十年分のデータを数秒で取得可能です。
例えば、米国の代表的な指数であるS&P500のデータを取得してみましょう。
import yfinance as yf
# S&P500のデータを取得(ティッカーは ^GSPC)
df = yf.download("^GSPC", start="2000-01-01")
# 終値だけを抽出
df = df[['Close']]
たったこれだけで、2000年からの日々の価格データが手に入ります。自分でExcelに数字を打ち込む手間はもう必要ありません。
累積最高値を算出してデータの列に追加する
ドローダウン計算の最大のポイントは「その日までの最高値」を追いかけ続けることです。Pandasには、そのための専用関数 cummax() が用意されています。
この関数を使うことで、株価が上がれば最高値を更新し、下がれば以前の最高値を維持する列を簡単に作れます。
以下のコードを実行して、データの構造を確認してみましょう。
# その日までの累積最高値を計算
df['Peak'] = df['Close'].cummax()
この「Peak(最高値)」の列があることで、現在の価格がピークからどれだけ離れているかを瞬時に比較できるようになります。
過去の最大下落幅(MDD)を算出してリスクを可視化
準備が整ったら、いよいよドローダウンの計算に入ります。計算自体は非常にシンプルで、「現在の価格が最高値から何パーセント下がっているか」を全期間で算出するだけです。
この章では、ドローダウンを算出するロジックと、その中から過去最悪の記録(MDD)を抜き出すコードを解説します。数字としてワーストケースを直視することで、投資判断の解像度が格段に上がります。
下落率を計算するロジックを把握する
ドローダウンの計算式は「(現在の価格 - 過去最高値) ÷ 過去最高値」です。この結果は常に0以下の数値になり、0なら高値更新中、マイナスが深いほど大きく売られていることを示します。
具体的にどう動くか、以下の例を見てみましょう。
- 最高値10,000円、現在9,000円の場合:(9,000 – 10,000) / 10,000 = -10%
- 最高値10,000円、現在11,000円の場合:(11,000 – 11,000) / 11,000 = 0%(最高値が更新されるため)
このように、常にその時点での「一番高かった時」と比較し続けるのがルールです。
全期間のワースト記録を特定して出力する
ドローダウンの列ができたら、その中の最小値(最もマイナスが大きい値)を探します。それが最大ドローダウン(MDD)です。
Pandasの min() 関数を使えば、数千行のデータの中から一瞬でワースト記録を見つけ出せます。
この数字こそが、あなたがその投資を続けていた場合に耐えなければならなかった「最大の下落」です。例えば、ITバブル崩壊やリーマンショックの際、どれほどのダメージを受けたのかが具体的なパーセンテージで明らかになります。
具体的な計算コードを動かしてみる
では、これまでのロジックをまとめた実際のコードを見てみましょう。驚くほど短く、シンプルな記述で終わります。
この数行で、投資のリスク管理に不可欠な指標が算出されます。
# ドローダウンの列を作成
df['Drawdown'] = (df['Close'] - df['Peak']) / df['Peak']
# 最大ドローダウン(MDD)を特定
max_drawdown = df['Drawdown'].min()
print(f"最大ドローダウン: {max_drawdown:.2%}")
この結果が、例えば「-50%」などと表示されたとき、あなたは「この戦略を続けるなら半分になる覚悟が必要だ」と冷静に判断できるようになります。
資産の下落をチャートにして視覚的に把握する
数字だけでは実感が湧きにくいリスクも、グラフにすることで「恐怖」がリアルに伝わります。投資分析の世界には「アンダーウォーターチャート(潜水チャート)」と呼ばれる、下落幅だけに注目した特殊なグラフがあります。
この章では、Matplotlibを使って下落のダメージを可視化する方法を紹介します。価格が上昇しているときには隠れているリスクを、あえて「谷」として描き出すことで、戦略の安定性を一目で見極められるようになります。
アンダーウォーターチャートで下落の深さを可視化する
アンダーウォーターチャートは、グラフの上端を0%(最高値)とし、そこからの下落幅を塗りつぶしで表示するものです。まるで水面(最高値)から水底へ潜っていくような見た目からその名がつきました。
このグラフを作ると、資産がいつ、どれくらいの深さまで沈んでいたのかが一目瞭然です。
# アンダーウォーターチャートの描画
df['Drawdown'].plot.area(color='red', alpha=0.3)
真っ赤に染まった谷が深いほど、その時期に大きな損失を抱えていたことを示します。
下落が続いている「谷」の長さを計測する
グラフを見ると、下落の深さだけでなく「谷の幅(長さ)」にも注目してください。なかなか水面(0%)に戻ってこられない期間は、投資家にとって非常に苦しい時期です。
この期間を視覚的に把握することで、資金が効率よく増えていた時期と、ただ耐えていた時期を区別できます。
例えば、価格はそれほど下がっていない(谷が浅い)のに、いつまでも0%に戻らない銘柄は、回復力が弱い可能性があります。
一方で、一瞬深く沈んでもすぐ戻る銘柄は、ボラティリティは高いものの回復力が強いと判断できます。
価格推移とドローダウンを並べて比較する
通常の価格チャートとドローダウンチャートを上下に並べて表示させると、より深い分析が可能です。
価格が順調に上がっているように見える局面でも、裏側でどれくらいのドローダウンが発生していたかを確認しましょう。
| チャートの種類 | 確認できること |
| 価格チャート | 資産がどれくらい増えたか(リターン) |
| ドローダウンチャート | 資産がどれくらい減ったか(リスク) |
これらを並べることで、「リターンを得るために、どれほどのストレスを許容したのか」という費用対効果ならぬ「リスク対効果」を冷静に分析できるようになります。
算出されたドローダウンからリスクを判定する基準
最大ドローダウン(MDD)の数値が出たら、次はその数字を自分のリスク許容度と照らし合わせます。投資の世界には、人が冷静さを保てる下落率の目安というものがあります。
ここでは、算出された数値をどう投資判断に活かすべきか、具体的な判定基準を解説します。数字を出すだけで満足せず、それが「自分の戦略として合格かどうか」を判断する目を養いましょう。
自分のメンタルが耐えられる下落率を知る
一般的に、個人投資家は資産が20%減るとパニックになりやすく、30%を超えると「これ以上減る前に投げ売りしたい」という衝動を抑えるのが難しくなると言われています。
Pythonで算出したMDDが、あなたの想定を大きく超えていた場合は、戦略そのものを見直すべきです。
例えば、「期待リターンは年10%だが、過去に一度40%下落している」という戦略があったとします。
この40%の下落に耐えられないのであれば、どんなに期待リターンが魅力的でも、あなたにとってその投資は「不適切」ということになります。
リカバリーファクターで運用の効率を評価する
利回りとMDDのバランスを測る指標に「リカバリーファクター」があります。これは「純利益 ÷ 最大ドローダウン(絶対値)」で算出される数値です。
ドローダウンという「リスク」に対して、どれだけ効率よく「リターン」を上げているかを測る物差しになります。
- リカバリーファクターが高い:少ないリスクで大きな利益を得ている
- リカバリーファクターが低い:大きな下落に耐えた割に利益が少ない
この数値が例えば「2.0」を超えているような戦略は、リスク管理と収益性のバランスが非常に優れていると評価できます。
過去の暴落局面と現在の数値を比較する
現在のドローダウンを、2008年のリーマンショックや2020年のコロナショック時の数値と比較してみましょう。
今の相場が「歴史的な暴落」の入り口にいるのか、あるいは「よくある一時的な調整」に過ぎないのかを冷静に判断できます。
以下の表は、一般的なリスク許容度の目安です。
| 下落率(ドローダウン) | 投資家の精神状態 | 推奨されるアクション |
| -5% 〜 -10% | 「少し下がったな」程度 | 特になし(計画通りの運用) |
| -15% 〜 -20% | 「大丈夫かな?」と不安になる | 資産配分の再確認 |
| -30% 〜 -50% | 恐怖で夜も眠れなくなる | リスク資産の売却や分散 |
自分のモデルで算出したMDDが、この表のどこに位置するかを常に意識してください。
ドローダウンを最小限に抑えるための3つの工夫
最大下落幅を把握できたら、次はそれを「どうやって小さくするか」を考えます。ドローダウンを抑えることは、複利効果を最大化し、長期的に資産を増やすための最も効率的な方法です。
ここでは、Pythonでの分析結果をもとに、実際にドローダウンを軽減するための具体的なテクニックを3つ紹介します。
相関の低い資産を組み合わせて分散投資する
一つの銘柄だけでなく、動きが異なる資産(アセットクラス)を組み合わせるのが基本です。例えば、株が下がるときに上がる傾向がある債券や金をポートフォリオに加えます。
これをPythonで検証すると、単体で持つよりも全体のドローダウンが劇的に浅くなることが数字で証明されます。
「卵を一つのカゴに盛るな」という格言通り、分散投資はドローダウンという谷を埋めるための最も強力な手段です。
キャッシュポジションの比率を調整する
すべての資金を常に投資に回すのではなく、一定割合を「現金(キャッシュ)」で持っておくことも重要です。
現金はドローダウンが0%の資産ですので、組み込むだけでポートフォリオ全体の最大下落幅を確実に押し下げてくれます。
- 相場が過熱している時は現金を増やす
- ドローダウンが深くなった時に現金を投入して買い増す
このように「攻めの現金」を持つことで、資産曲線はより滑らかになり、暴落時も落ち着いて相場を眺められるようになります。
逆指値注文を併用して機械的に損失を食い止める
下落が一定のライン(例えば最高値から-10%など)に達した際に、機械的に売却する「逆指値(損切り)」を設定しておくのも有効です。
Pythonでの分析から「この戦略は15%以上下がると回復に時間がかかる」と分かっているなら、その手前で一度撤退するルールを作ることができます。
感情が入ると「いつか戻るはず」と持ち続けてしまいますが、ドローダウン分析に基づいた出口戦略があれば、致命的なダメージを避けることが可能になります。
まとめ:負け方をコントロールして投資を継続しよう
投資で勝ち続けるために必要なのは、無敵の予測力ではなく、自分がどれだけ負けられるかを知る「リスクの把握」です。ドローダウン分析は、そのための最も客観的な手段になります。
今回のポイントを簡単に振り返りましょう。
- 定義: ドローダウンは過去最高値からの下落幅。0%に近いほど優秀。
- 算出: Python(Pandas)の
cummax()を使えば数行で自動計算できる。 - 可視化: アンダーウォーターチャートを作り、下落の「深さ」と「長さ」を直視する。
- 判定: 最大ドローダウン(MDD)が自分のメンタルの限界を超えていないか確認する。
- 対策: 分散投資やキャッシュ比率の調整で、資産の「谷」を浅くする工夫をする。
大きなリターンを追い求める前に、まずは自分の投資先が「過去にどれだけ沈んだのか」を計算してみてください。最悪の事態を数字で受け入れられたとき、あなたは本当の意味で、長期投資のスタートラインに立つことができます。

