Lab Research オプション・先物投資の基礎——デリバティブ投資の仕組みとリスク管理
目次
デリバティブ(金融派生商品)は、株式や債券などの基礎資産から価値が派生する金融商品だ。先物・オプション・スワップなどがあり、リスクヘッジや収益強化の手段として機関投資家から個人まで幅広く利用されている。しかし、レバレッジ効果による損失拡大のリスクも理解しておかなければならない。本記事では、オプション・先物取引の基本概念、仕組み、戦略、リスク管理を体系的に解説する。
デリバティブの基本——なぜ存在するのか
現物取引との違い
【現物取引 vs デリバティブ取引】
現物取引:
・その場で資産を売買
・価格変動リスクを即時に負う
・例:株式を 1 株 3,000 円で購入 → 所有権が移転
デリバティブ取引:
・将来の売買を「予約」する契約
・価格変動リスクを転嫁・調整可能
・例:3 ヶ月後に 1 株 3,000 円で購入する「権利」を購入
デリバティブの 3 つの目的:
- ヘッジ(リスク回避): 価格変動リスクを転嫁
- 投機(収益追求): レバレッジを活用した収益機会の拡大
- アービトラージ(裁定取引): 価格差を利用した無リスク利益
デリバティブの主な種類
| 種類 | 説明 | 特徴 |
|---|---|---|
| 先物(Futures) | 将来の特定日に、特定価格で売買する「義務」 | 取引所取引、標準化、証拠金必要 |
| オプション(Options) | 将来の特定日に、特定価格で売買する「権利」 | 権利行使の有無を選択可能 |
| スワップ(Swaps) | 2 当事者間でキャッシュフローを交換 | 相対取引、カスタマイズ可能 |
| CFD(差金決済) | 価格差のみを現金で決済 | 現物受け渡しなし、高レバレッジ |
オプション取引の仕組み
コールオプションとプットオプション
【オプションの 2 種類】
コールオプション(Call Option):
・「買う権利」
・基礎資産価格が上昇すると価値が増加
・買い手:上昇予想、売り手:横ばい・下落予想
プットオプション(Put Option):
・「売る権利」
・基礎資産価格が下落すると価値が増加
・買い手:下落予想、売り手:横ばい・上昇予想
オプションの 4 つのポジション
【オプション取引の基本ポジション】
1. コール買い(Long Call)
権利行使で「買える」→ 価格上昇で利益
最大損失:権利行使価格 + プレミアム
利益潜力:無限
2. コール売り(Short Call)
権利行使で「売らされる」→ 横ばい・下落で利益
最大利益:プレミアムの上限
損失潜力:無限
3. プット買い(Long Put)
権利行使で「売れる」→ 価格下落で利益
最大損失:権利行使価格 - プレミアム
利益潜力:権利行使価格まで
4. プット売り(Short Put)
権利行使で「買わされる」→ 横ばい・上昇で利益
最大利益:プレミアムの上限
損失潜力:権利行使価格まで
オプション価格の構成
def calculate_option_intrinsic_value(option_type, stock_price, strike_price):
"""オプションの内在価値計算"""
if option_type == 'call':
return max(0, stock_price - strike_price)
else: # put
return max(0, strike_price - stock_price)
def calculate_option_time_value(option_premium, intrinsic_value):
"""オプションの時間価値計算"""
return option_premium - intrinsic_value
# 例:コールオプション、株価 3,000 円、権利行使価格 2,800 円、プレミアム 250 円
stock_price = 3_000
strike_price = 2_800
premium = 250
intrinsic = calculate_option_intrinsic_value('call', stock_price, strike_price)
time_value = calculate_option_time_value(premium, intrinsic)
print(f"株価:{stock_price:,}円")
print(f"権利行使価格:{strike_price:,}円")
print(f"プレミアム:{premium:,}円")
print(f"内在価値:{intrinsic:,}円") # 200 円
print(f"時間価値:{time_value:,}円") # 50 円
オプション価格 = 内在価値 + 時間価値
- 内在価値: 権利行使した場合の利益(プラスのみ)
- 時間価値: 満期までの時間的価値(時間経過で減少 = 時間的減耗)
主要なギリシャ文字(リスク指標)
def calculate_delta(option_type, stock_price, strike_price, volatility, time_to_expiry, risk_free_rate):
"""デルタの簡易計算(Black-Scholes モデルに基づく)"""
import math
from scipy.stats import norm
# d1 の計算
d1 = (math.log(stock_price / strike_price) +
(risk_free_rate + 0.5 * volatility ** 2) * time_to_expiry) / \
(volatility * math.sqrt(time_to_expiry))
if option_type == 'call':
return norm.cdf(d1) # 標準正規分布の累積分布関数
else: # put
return norm.cdf(d1) - 1
def calculate_gamma(stock_price, strike_price, volatility, time_to_expiry, risk_free_rate):
"""ガンマの簡易計算"""
import math
from scipy.stats import norm
d1 = (math.log(stock_price / strike_price) +
(risk_free_rate + 0.5 * volatility ** 2) * time_to_expiry) / \
(volatility * math.sqrt(time_to_expiry))
return norm.pdf(d1) / (stock_price * volatility * math.sqrt(time_to_expiry))
# 使用例
stock_price = 3_000
strike_price = 3_000 # ATM(アット・ザ・マネー)
volatility = 0.25 # 25%
time_to_expiry = 30 / 365 # 30 日後
risk_free_rate = 0.001 # 0.1%
delta_call = calculate_delta('call', stock_price, strike_price, volatility, time_to_expiry, risk_free_rate)
delta_put = calculate_delta('put', stock_price, strike_price, volatility, time_to_expiry, risk_free_rate)
gamma = calculate_gamma(stock_price, strike_price, volatility, time_to_expiry, risk_free_rate)
print(f"コールオプションのデルタ:{delta_call:.3f}") # 約 0.50
print(f"プットオプションのデルタ:{delta_put:.3f}") # 約 -0.50
print(f"ガンマ:{gamma:.4f}")
主要なギリシャ文字:
| ギリシャ文字 | 意味 | 影響 |
|---|---|---|
| デルタ(Δ) | 原資産価格の変動に対するオプション価格の変化率 | コール:0〜1、プット:-1〜0 |
| ガンマ(Γ) | デルタの変化率(デルタの感応度) | 満期が近いと大きくなる |
| シータ(Θ) | 時間経過によるオプション価格の減少 | 売り手にはプラス |
| ベガ(ν) | ボラティリティの変化に対する感応度 | ボラティリティ上昇で価値増 |
| ロー(ρ) | 金利変化に対する感応度 | 金利上昇でコール価値増 |
先物取引の仕組み
先物契約の基本構造
【先物契約の要素】
1. 原資産:日経平均、TOPIX、金、原油、トウモロコシなど
2. 契約月:3 ヶ月、6 ヶ月、9 ヶ月、12 月(限月)
3. 限月価格:将来の売買価格
4. 証拠金:契約金額の 5-15%(レバレッジ効果)
5. 決済方法:SQ(特別清算指数)または現物受け渡し
先物取引の仕組み:
1. 証拠金を預入(契約金額の 10%)
↓
2. 先物契約を購入(買い建て)または売却(売り建て)
↓
3. 決済日まで保有、または反対売買で決済
↓
4. 損益確定(証拠金から差額が精算)
証拠金取引とレバレッジ
def calculate_futures_leverage(contract_value, margin_rate):
"""先物取引のレバレッジ計算"""
required_margin = contract_value * margin_rate
leverage = contract_value / required_margin
return required_margin, leverage
def calculate_futures_pnl(entry_price, exit_price, contract_size, position_type):
"""先物取引の損益計算"""
price_diff = exit_price - entry_price
if position_type == 'long':
pnl = price_diff * contract_size
else: # short
pnl = -price_diff * contract_size
return pnl
# 例:日経平均先物、38,000 円、契約額 1,000 万円、証拠金率 10%
contract_value = 38_000 * 1_000 # 3,800 万円(1,000 倍)
margin_rate = 0.10
margin, leverage = calculate_futures_leverage(contract_value, margin_rate)
print(f"契約金額:{contract_value:,.0f}円")
print(f"必要証拠金:{margin:,.0f}円")
print(f"レバレッジ:{leverage:.1f}倍")
# 損益計算:38,000 円で購入、39,000 円で売却(買い建て)
entry_price = 38_000
exit_price = 39_000
contract_size = 1_000 # 1,000 倍
pnl = calculate_futures_pnl(entry_price, exit_price, contract_size, 'long')
print(f"\n損益:{pnl:,.0f}円") # +100 万円
print(f"証拠金に対するリターン:{pnl / margin * 100:.1f}%") # +26.3%
レバレッジの両刃性:
- 価格変動が証拠金に対して増幅される
- 10% の価格変動 = 証拠金に対して 100% の損益(レバレッジ 10 倍の場合)
- 追加証拠金(マージンコール)のリスク
先物価格と現物価格の関係
【先物価格の決定】
先物価格 = 現物価格 × (1 + 金利 - 配当利回り) × 期間
・金利 > 配当利回り:先物高(コンタンゴ)
・金利 < 配当利回り:先物安(バックワーデーション)
裁定取引:
先物価格と理論価格が乖离すると、裁定取引の機会が生まれる。
先物高の場合:
1. 現物を売却
2. 先物を買入
3. 配当を受け取りながら先物価格の下落を待つ
4. 満期で現物受取 → 先物決済
5. 価格差(サヤ)を利益として確定
オプション戦略——実戦的な使い方
カバードコール(保有株の売却予約)
def calculate_covered_call_pnl(stock_price, stock_purchase_price, option_premium,
strike_price, final_stock_price):
"""カバードコールの損益計算"""
# 株式の損益
stock_pnl = final_stock_price - stock_purchase_price
# オプションの損益(売り建て)
if final_stock_price > strike_price:
# 権利行使される
option_pnl = option_premium - (final_stock_price - strike_price)
else:
# 権利行使されない
option_pnl = option_premium
return stock_pnl + option_pnl
# 例:3,000 円で購入した株式、3,100 円のコールを 100 円で売却
stock_purchase = 3_000
option_premium = 100
strike_price = 3_100
# 最終株価が 3,200 円になった場合
final_price = 3_200
pnl = calculate_covered_call_pnl(final_price, stock_purchase, option_premium, strike_price, final_price)
print(f"株式購入価格:{stock_purchase:,}円")
print(f"権利行使価格:{strike_price:,}円")
print(f"受取プレミアム:{option_premium:,}円")
print(f"最終株価:{final_price:,}円")
print(f"損益:{pnl:,.0f}円") # +200 円(株式益 200 円 + オプション益 0 円)
カバードコールの特徴:
- 保有株式を原資産としてコールオプションを売却
- 株式売却益 + オプションプレミアムで収益強化
- 株価上昇益は権利行使価格まで制限
- 下落リスクはプレミアム分だけ軽減
プロテクティブプット(下落ヘッジ)
def calculate_protective_put_pnl(stock_purchase_price, put_premium, strike_price, final_stock_price):
"""プロテクティブプットの損益計算"""
# 株式の損益
stock_pnl = final_stock_price - stock_purchase_price
# プットオプションの損益(買い建て)
if final_stock_price < strike_price:
put_payout = strike_price - final_stock_price
else:
put_payout = 0
put_pnl = put_payout - put_premium
return stock_pnl + put_pnl
# 例:3,000 円で購入した株式、2,800 円のプットを 80 円で購入
stock_purchase = 3_000
put_premium = 80
strike_price = 2_800
# 最終株価が 2,500 円に下落
final_price = 2_500
pnl = calculate_protective_put_pnl(stock_purchase, put_premium, strike_price, final_price)
print(f"株式購入価格:{stock_purchase:,}円")
print(f"権利行使価格:{strike_price:,}円")
print(f"支払プレミアム:{put_premium:,}円")
print(f"最終株価:{final_price:,}円")
print(f"損益:{pnl:,.0f}円") # -380 円(株式損 -500 円 + プット益 220 円)
print(f"下落ヘッジなしの場合:{final_price - stock_purchase:,.0f}円") # -500 円
プロテクティブプットの特徴:
- 保有株式の下落リスクをヘッジ
- 最大損失:株式購入価格 - 権利行使価格 + プレミアム
- 上昇潜力は維持(プレミアム分コスト)
- 保険のような機能
ストラドル(ボラティリティ戦略)
def calculate_straddle_pnl(call_premium, put_premium, strike_price, final_stock_price):
"""ストラドルの損益計算(買い)"""
# コールオプションの損益
if final_stock_price > strike_price:
call_payout = final_stock_price - strike_price
else:
call_payout = 0
# プットオプションの損益
if final_stock_price < strike_price:
put_payout = strike_price - final_stock_price
else:
put_payout = 0
total_premium = call_premium + put_premium
total_payout = call_payout + put_payout
return total_payout - total_premium
# 例:3,000 円のコールを 150 円、3,000 円のプットを 140 円購入
call_premium = 150
put_premium = 140
strike_price = 3_000
total_premium = call_premium + put_premium
# 最終株価が 3,500 円に上昇
final_price_up = 3_500
pnl_up = calculate_straddle_pnl(call_premium, put_premium, strike_price, final_price_up)
# 最終株価が 2,500 円に下落
final_price_down = 2_500
pnl_down = calculate_straddle_pnl(call_premium, put_premium, strike_price, final_price_down)
# 最終株価が 3,000 円で変わらず
final_price_same = 3_000
pnl_same = calculate_straddle_pnl(call_premium, put_premium, strike_price, final_price_same)
print(f"総プレミアム:{total_premium:,}円")
print(f"損益分岐点(上):{strike_price + total_premium:,}円") # 3,290 円
print(f"損益分岐点(下):{strike_price - total_premium:,}円") # 2,710 円
print(f"\n株価 3,500 円:{pnl_up:,.0f}円") # +210 円
print(f"株価 2,500 円:{pnl_down:,.0f}円") # +210 円
print(f"株価 3,000 円:{pnl_same:,.0f}円") # -290 円
ストラドルの特徴:
- 同じ権利行使価格のコールとプットを両方購入
- 大幅な価格変動(ボラティリティ上昇)で利益
- 株価が横ばいの場合、プレミアム全損
- 決算発表、イベント前後の戦略
バターフライ(レンジ相場戦略)
def calculate_butterfly_pnl(lower_strike, middle_strike, upper_strike,
net_premium, final_stock_price):
"""バタフライの損益計算(ロング)"""
if final_stock_price <= lower_strike:
payout = 0
elif final_stock_price < middle_strike:
payout = final_stock_price - lower_strike
elif final_stock_price <= upper_strike:
payout = upper_strike - final_stock_price
else:
payout = 0
return payout - net_premium
# 例:2,800 円コール買い、3,000 円コール 2 枚売り、3,200 円コール買い
lower_strike = 2_800
middle_strike = 3_000
upper_strike = 3_200
# ネットプレミアム(支払い)
net_premium = 50 # 全体としてデビット
# 最終株価が 3,000 円(中間権利行使価格)
final_price_at_middle = 3_000
pnl_middle = calculate_butterfly_pnl(lower_strike, middle_strike, upper_strike, net_premium, final_price_at_middle)
# 最大利益 = 権利行使価格間隔 - ネットプレミアム
max_profit = (middle_strike - lower_strike) - net_premium
print(f"権利行使価格:{lower_strike:,}円 - {middle_strike:,}円 - {upper_strike:,}円")
print(f"ネットプレミアム:{net_premium:,}円")
print(f"最大利益:{max_profit:,}円") # 150 円
print(f"損益分岐点(下):{lower_strike + net_premium:,}円") # 2,850 円
print(f"損益分岐点(上):{upper_strike - net_premium:,}円") # 3,150 円
print(f"\n株価 3,000 円:{pnl_middle:,.0f}円") # +150 円
バタフライの特徴:
- 3 つの権利行使価格を使用
- 株価が中間価格に収束すると最大利益
- 損失はネットプレミアムに限定
- レンジ相場での収益戦略
リスク管理——デリバティブの危険性
最大損失の把握
def calculate_max_loss(strategy_type, *params):
"""戦略別・最大損失計算"""
if strategy_type == 'long_call':
premium = params[0]
return -premium # プレミアム全損
elif strategy_type == 'long_put':
premium = params[0]
return -premium # プレミアム全損
elif strategy_type == 'short_call':
# 理論上は無限
return float('-inf')
elif strategy_type == 'short_put':
strike_price = params[0]
premium = params[1]
return -(strike_price - premium) # 株価ゼロの場合
elif strategy_type == 'futures_long':
margin = params[0]
return -margin # 証拠金全損(追証あり)
elif strategy_type == 'futures_short':
margin = params[0]
return -margin # 証拠金全損(追証あり)
else:
return None
# 例
print("コール買い最大損失:", calculate_max_loss('long_call', 100), "円") # -100 円
print("コール売り最大損失:", calculate_max_loss('short_call'), "円(無限)")
print("プット売り最大損失:", calculate_max_loss('short_put', 3_000, 100), "円") # -2,900 円
print("先物買い最大損失:", calculate_max_loss('futures_long', 300_000), "円") # -300,000 円
追証(追加証拠金)リスク
【追証の仕組み】
1. 証拠金預入(初期証拠金)
↓
2. 評価損が発生
↓
3. 証拠金維持率が低下
↓
4. 維持率 < 基準(例:80%)
↓
5. 追証通知(マージンコール)
↓
6. 追加資金を 2-3 営業日以内に預入
↓
7. 不能場合:強制決済(ロスカット)
追証リスクの例:
初期証拠金:100 万円(レバレッジ 10 倍 = 1,000 万円分のポジション)
価格変動 -10% → 評価損 100 万円
→ 証拠金残高:0 円
→ 維持率:0%(基準割れ)
→ 追証:100 万円以上
価格変動 -15% → 評価損 150 万円
→ 証拠金残高:-50 万円
→ 追証:150 万円以上
ポジションサイジング
def calculate_position_size(total_capital, risk_per_trade, stop_loss_distance):
"""ポジションサイズの計算(リスクベース)"""
risk_amount = total_capital * risk_per_trade
position_size = risk_amount / stop_loss_distance
return position_size, risk_amount
# 例:総資金 1,000 万円、1 トレードあたり 2% リスク、ストップロス 5%
total_capital = 10_000_000
risk_per_trade = 0.02 # 2%
stop_loss_distance = 0.05 # 5%
position_size, risk_amount = calculate_position_size(total_capital, risk_per_trade, stop_loss_distance)
print(f"総資金:{total_capital:,.0f}円")
print(f"1 トレードあたりリスク:{risk_per_trade*100:.0f}%")
print(f"ストップロス:{stop_loss_distance*100:.0f}%")
print(f"リスク許容額:{risk_amount:,.0f}円") # 20 万円
print(f"適正ポジションサイズ:{position_size:,.0f}円") # 400 万円
print(f"ポジションの割合:{position_size / total_capital * 100:.1f}%") # 40%
ポジションサイジングの原則:
- 1 トレードあたりリスク 1-2%: 総資金の 1-2% 以内に損失を制限
- ストップロス必須: 損失確定ラインを事前に設定
- レバレッジ過剰禁止: 証拠金に対するレバレッジ 5 倍以内が目安
- 相関リスク管理: 同方向のポジションを集中させない
バリュー・アット・リスク(VaR)
import numpy as np
from scipy.stats import norm
def calculate_var(position_value, volatility, confidence_level, time_horizon):
"""バリュー・アット・リスクの計算"""
# 信頼水準に対応する Z スコア
z_score = norm.ppf(1 - confidence_level)
# VaR 計算
var = position_value * volatility * abs(z_score) * np.sqrt(time_horizon)
return var
# 例:1,000 万円のポジション、日次ボラティリティ 2%、95% 信頼水準、1 日
position_value = 10_000_000
volatility = 0.02 # 2%
confidence_level = 0.05 # 95% 信頼水準
time_horizon = 1 # 1 日
var_95 = calculate_var(position_value, volatility, confidence_level, time_horizon)
print(f"ポジション価値:{position_value:,.0f}円")
print(f"日次ボラティリティ:{volatility*100:.1f}%")
print(f"信頼水準:{(1-confidence_level)*100:.0f}%")
print(f"VaR(1 日):{var_95:,.0f}円") # 約 32.9 万円
print(f"解釈:95% の確率で、1 日の損失は{var_95:,.0f}円を超えない")
VaR の解釈:
- 95% VaR が 30 万円 = 100 日中 95 日は 30 万円以下の損失
- 残る 5 日(月に 1-2 回)は 30 万円を超える損失の可能性
- VaR は「最悪のシナリオ」を過小評価する可能性がある
デリバティブ投資の始め方
個人投資家がアクセス可能な商品
| 商品 | 取引場所 | 最小取引単位 | レバレッジ |
|---|---|---|---|
| 日経平均先物 | 大証(CME) | 1 枚(38,000 円×1,000 倍) | 10 倍前後 |
| TOPIX 先物 | 大証 | 1 枚(2,700 円×10,000 倍) | 10 倍前後 |
| 日経平均オプション | 大証 | 1 枚(1,000 倍) | 20-50 倍 |
| CFD(株価指数) | 証券会社 | 1 単位から | 2-25 倍 |
| 先物投資信託 | 投資信託 | 100 円〜 | 2-5 倍 |
初心者が避けるべき戦略
【危険な戦略】
✗ ナaked Call Selling(無担保コール売り)
- 損失が無限大
- プロでも避けるべき
✗ 満期直前のアウト・オブ・ザ・マネー
- 時間的減耗が激しい
- 確率的に不利
✗ 追証前提のレバレッジ
- 資金管理が破綻
- 強制決済リスク
✗ コーレルしたポジションの集中
- リスクが分散されていない
- 相関崩壊で大損失
推奨される学習ステップ
Step 1: 基礎知識
・オプション・先物の仕組みを理解
・ギリシャ文字の意味を把握
・損益計算を自作できるレベルに
Step 2: シミュレーション
・過去データでバックテスト
・ペーパー取引で練習
・最大ドローダウンを確認
Step 3: 少額スタート
・証拠金の 1-2% から開始
・シンプルな戦略(カバードコール等)
・日志をつけて記録
Step 4: 逐步拡大
・戦略のバリエーションを増やす
・ポジションサイズを調整
・リスク指標を監視
まとめ
デリバティブ投資の核心:
- 基本概念: 現物取引との違い、3 つの目的(ヘッジ・投機・裁定)
- オプション: コール/プット、4 つのポジション、ギリシャ文字
- 先物: 証拠金取引、レバレッジ、先物価格の決定
- 戦略: カバードコール、プロテクティブプット、ストラドル、バタフライ
- リスク管理: 最大損失の把握、追証リスク、ポジションサイジング、VaR
- 学習ステップ: 基礎知識 → シミュレーション → 少額スタート → 逐步拡大
デリバティブは「両刃の剣」だ。適切に使用すればリスク管理や収益強化の強力な手段となるが、誤った使い方をすれば破綻の道につながる。
重要なのは、自身のリスク許容度を理解し、損失許容範囲内で取引することだ。
参考資料
- "Options, Futures, and Other Derivatives" John C. Hull 著
- "Option Volatility and Pricing" Sheldon Natenberg 著
- 日本取引所グループ(JPX):https://www.jpx.co.jp/
- 大証オプション・先物取引:https://www.jpx.co.jp/derivatives.html
- CME Group Education: https://www.cmegroup.com/education.html
- 金融庁「デリバティブ取引の仕組みとリスク」:https://www.fsa.go.jp/soudan/sympo/siryou/20170625/03.pdf
免責事項 — 当記事は情報提供を目的としており、特定の金融商品の売買を推奨するものではありません。投資判断はご自身の責任で行ってください。