chottoshitahanashi’s diary

基本的に間違ったことばかり書いてるブログ。検索ひっかかるな

為替リスク

sp500が1年後にx倍、為替が一年後y倍になっているとすると円に戻した時トータルでr=xy倍になる。r, x, yが確率変数なのでR=XYと書く。Xの平均と標準偏差をmx,sx, Yの平均と標準偏差をmy=1,syとするとトータルの平均はmr=mx*my、分散は積の分散なのでsr^2=(sx^2+mx^2)*(sy^2+my^2)-mx^2*my^2。リターンはmr-1=mx*my-1=mx-1,リスクはsqrt((sx^2+mx^2)*(sy^2+my^2)-mx^2*my^2)。これが単一年度。なぜかhttps://www.coursera.org/lecture/portfolio-risk-management/currency-risk-risk-ZS5lyでは積の分散でなく和の分散を用いている(動画120秒くらい)。

import math

def calc_risk_return(sx, mx, sy, n):
    '''
    sx: investment standard deviation (risk)
    mx: investment mean value (return + 1.0)
    sy: currency exchange standard deviation (risk)
    n: number of years
    '''
    # assume currency exchange mean value == 1.0
    my = 1.0
    nx = sx * math.sqrt(n)  # n_year_risk_x
    ny = sy * math.sqrt(n)  # n_year_risk_x
    result_risk = math.sqrt((nx**2 + mx**2) * (ny**2 + my**2) - mx**2 * my**2)
    result_return = mx ** n - 1.0
    print 'risk=%f, return=%f' % (result_risk, result_return)

>>> calc_risk_return(sx=0.1654272, mx=1.08752, sy=0.08, n = 1)
risk=0.187378, return=0.087520
>>> calc_risk_return(sx=0.1654272, mx=1.08752, sy=0.08, n = 10)
risk=0.605697, return=1.314049
>>> calc_risk_return(sx=0.1654272, mx=1.08752, sy=0.08, n = 30)
risk=1.098040, return=11.391320
>>>
>>> calc_risk_return(sx=0.1654272, mx=1.08752, sy=0.00, n = 1)
risk=0.165427, return=0.087520
>>> calc_risk_return(sx=0.1654272, mx=1.08752, sy=0.00, n = 10)
risk=0.523127, return=1.314049
>>> calc_risk_return(sx=0.1654272, mx=1.08752, sy=0.00, n = 30)
risk=0.906082, return=11.391320
  • 為替変動と株の値動きなど複数の確率変数が絡む場合標準偏差は値の大きい方に引きずられる。なので為替変動よりもはるかに小さな変動を持つ外貨預金でおいておくのは理にかなっていない(リスクが大きく、リターンが小さい)。
  • 複数の確率変数が絡む場合の標準偏差には積の分散を用いたがこれでいいのか?
  • 複数年運用は理にかなっている。いろんな人の意見を聞くとリスクを年率換算せず複数年運用時のガウス分布形状を見て検討するのが良さげ
  • 平均と分散が固定してるのが前提なので現実世界とは乖離している。考え方の参考程度にすべきだろう。