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