pythonで学ぶ金融工学 (為替オプション、仕組預金)

3項ツリーはいったん置いといて、為替オプションを取り上げる。

ネット銀行のホームページを見ていて、メガバンなんかと比べてもあらゆる手数料が低くて金利も高いんだけど、仕組み預金なんかは相変わらず爽やかに売られたりしている。ので、そのカラクリを…と。

為替が絡む仕組み預金でよくあるのは、100万をある期間預けて満期の為替レートによって戻ってくる元本の通貨が異なる、というもの。その代り超高金利

例えば、今1ドル106円とする。3ヶ月間預けて、そのときの為替が105円より円安(つまり110円とか120円とか)だったら100万円で返ってきて、105円より円高(90円とか)だったら、ドルで返ってくる。返ってくるドルの量は、100万/105=9583ドル。その代わり、金利が年率10%とかで、3か月預けただけでも100万*10%/4 で25000円も利子がつく。ちなみに今の定期の金利は0.3%とかなので超高金利とわかる。

ここで、ドルで戻ってきた場合が曲者で、円高の時にドルで返ってくるというのは、実質的に元本が目減りしているということ。実際、例えば1ドル100円になっているとすると、9583*100=958,300円。で、100万預けたのに元本が958300円になっている。

そもそも105円なのが3か月で100円になることないだろう…と思い勝ちなのが次のポイントで、ここでは実は金利差から円高に向かいやすいということは分かっている。

金利がr(%)だとすると、T(年)後の価値はexp(rT)と書ける。1ドル105円、ドル金利は3%、円金利は0.3%だとすると、105円を1年運用すると105.315。一方ドルを1年運用すると1.03045。よって1年後は、大体105.315/1.03045=102.203くらいとなる。

pythonで書くとすると、下記(エクセルでもできますが)。
import math
JPY=105*math.exp(0.003*1)
USD=1*math.exp(0.03*1)
return JPY/USD

より一般的に、将来の為替レートを返すプログラムは、
def FxRate(Spot,r1,r2,T):
import math
Fx1=Spot*math.exp(r1*T)
Fx2=math.exp(r2*T)
return Fx1/Fx2
で表される。すると、金利の方が低い場合には期間が長くなるほど円高に向かうということがわかる。
さっきの条件で10年までだとこんな感じ↓

で、これは実は為替のオプションが組まれたオプションとなっている。満期においてドル円の交換をしている。預金している方から見ると、ドルが上がったら何も起きないが、ドルが下がったら支払が発生することに相当する。その支払額は、(満期の実際のレート-105)*9583(円)。ということで、ドルのプットオプションに相当。ポジションとしてはプットの売りになっているので、プレミアム相当分が高金利の原資となっている。

というわけで、為替オプションは、ドリフトに金利の項をつけるだけ(文末にコード載せます)。ここから算出できるオプションプレミアムが本来この仕組み預金を行う人(オプション売る側)が得る価値。一方で、仕組み預金を行う人が実際に得る価値は金利部分。なので、金利とプレミアムを比較してトントン、あるいは万が一金利の価値のほうが高いなら組む価値があるが、それ以外なら、期待値上は負けている。

というわけで、高金利が魅力的で面白い商品だけど、注意が必要。

def FxOption(Spot,r1,r2,sigma,strike,T):
import random
import math
d=
rate=

sum=0

#Random variate
for i in range(0,10001):
d.append(random.normalvariate(0,1))

#Rate at T
for i in range(0,10001):
rate.append(math.exp*1*Spot)

#Call:
for i in range(0,10001):
if rate[i]>K:
sum=sum+rate[i]-K
else:
for i in range(0,10001):
if rate[i]

*1:r1-r2)/100.0-0.5*sigma**2)*T+d[i]*sigma*math.sqrt(T