Main Content

単一期間の資産裁定取引の調査

この例では、単一期間、2 状態の資産ポートフォリオにおける基本的な裁定取引についての概念を考察します。ポートフォリオは債券、買い建て株式、株式の買い建てコール オプションで構成されています。

以下の Symbolic Math Toolbox™ 関数を使用します。

  • equationsToMatrix: 線形方程式系を行列に変換します。

  • linsolve: 系の解を求めます。

  • diagなどの標準の MATLAB® 関数と等価なシンボリック関数。

この例では、単一期間、2 状態シナリオにおけるリスク中立的な確率と買い入れ価格をシンボリックに導出します。

ポートフォリオのパラメーターの定義

この期間での無リスク レートを表すシンボリック変数 r を作成します。r が正の値であるという仮定を設定します。

syms r positive

単一期間の開始時 time = 0 のパラメーターを定義します。ここで、S0 は株価、C0 はコール オプション行使価格 K です。

syms S0 C0 K positive

次に、期間の終了時 time = 1 のパラメーターを定義します。期間の終了時に可能な 2 状態を U (この期間の株価が上昇) と D (この期間の株価が下落) としてラベル付けします。したがって、SUSD は状態 U と D の株価、CU は状態 U のコール オプションの価値です。SD<=K<=SU であることに注意してください。

syms SU SD CU positive

time = 0 での債券価格は 1 です。この例では市場摩擦のコストを無視していることに注意してください。

time = 0 での価格を列ベクトルにまとめます。

prices = [1 S0 C0]'
prices = 

(1S0C0)

time = 1 におけるポートフォリオの決済を payoff 行列にまとめます。payoff の列は状態 D と U の決済に対応します。行は債券、株、コール オプションの決済に対応します。債券の決済は 1 + r です。状態 D のコール オプションの決済は行使されていないので 0 です (SD<=K による)。

payoff = [(1 + r), (1 + r); SD, SU; 0, CU]
payoff = 

(r+1r+1SDSU0CU)

CU は状態 U で SU - K の価値があります。この値を payoff に代入します。

payoff = subs(payoff, CU, SU - K)
payoff = 

(r+1r+1SDSU0SU-K)

リスク中立的な確率の解

状態 U および D に到達する確率を定義します。

syms pU pD real

裁定取引がない場合、eqns == 0 は常に true であり、pUpD は正でなければなりません。

eqns = payoff*[pD; pU] - prices
eqns = 

(pDr+1+pUr+1-1SDpD-S0+SUpU-C0-pUK-SU)

方程式を変換してリスク中立的な確率を使用します。

syms pDrn pUrn real;
eqns = subs(eqns, [pD; pU], [pDrn; pUrn]/(1 + r))
eqns = 

(pDrn+pUrn-1SDpDrnr+1-S0+SUpUrnr+1-C0-pUrnK-SUr+1)

未知の変数は pDrnpUrn および C0 です。これらの未知の変数を使用して線形方程式系を行列形式に変換します。

[A, b] = equationsToMatrix(eqns, [pDrn, pUrn, C0]')
A = 

(110SDr+1SUr+100-K-SUr+1-1)

b = 

(1S00)

linsolve を使用してリスク中立的な確率と買い入れ価格の解を求めます。

x = linsolve(A, b)
x = 

(S0-SU+S0rSD-SU-S0-SD+S0rSD-SUK-SUS0-SD+S0rSD-SUr+1)

解の検証

リスク中立的な確率 x(1:2) では、ポートフォリオの期待収益率 E_return が無リスク レート r と等しいことを確認してください。

E_return = diag(prices)\(payoff - [prices,prices])*x(1:2);
E_return = simplify(subs(E_return, C0, x(3)))
E_return = 

(rrr)

裁定取引ゼロ違反のテスト

裁定取引ゼロ違反のテストの例として、r = 5%S0 = 100K = 100 の値を使用します。SU < 105 の場合、pDrn = xSol(1) が負のため (SU >= SD)、裁定取引ゼロ条件の違反です。さらに、コール オプション価格が xSol(3) 以外の場合、裁定取引が存在します。

xSol = simplify(subs(x, [r,S0,K], [0.05,100,100]))
xSol = 

(-SU-105SD-SUSD-105SD-SU20SD-105SU-10021SD-SU)

コール オプション価格を表面としてプロット

50 <= SD <= 100 および 105 <= SU <= 150 の場合のコール オプション価格 C0 = xSol(3) をプロットします。原株価の "分散" が高くなると (SD = 50, SU = 150 など)、コール オプションの価値が上がることに注意してください。

fsurf(xSol(3), [50,100,105,150])
xlabel SD
ylabel SU
title 'Call Price'

Figure contains an axes object. The axes object with title Call Price contains an object of type functionsurface.

参考文献

Advanced Derivatives, Pricing and Risk Management: Theory, Tools and Programming Applications by Albanese, C., Campolieti, G.