FC2ブログ

【相場雑感】オプション・プライシング実践編②~プレミアム

とりあえずやってみましょう!



ここで必要になるのは金融工学でもプログラミングでもなく、『コピペ(コピー&ペースト)』という必殺技です(笑)



まずExcelで新規のワークブックを作ってください。

念のため、セキュリティレベルを確認し、マクロを有効にしておいてください。セキュリティ・レベルは「中」ぐらいがいいでしょうか。



そしてVisual Basic Editerを開いて、「挿入」→「標準モジュール」を選択してください。





しがないディーラーのブログ






とりあえずこんな感じになります。

真っさらな「標準モジュール」が出てきます。



そこに下記のややこしそうな部分を『コピペ』してください。





Function CallFv(残存日数, 現指数, 権利行使価格, 金利, IV)

If IsError(現指数) = False Then

If 残存日数 <= 0 Then

CallFv = 0

ElseIf 現指数 <= 0 Then

CallFv = 0

ElseIf 権利行使価格 <= 0 Then

CallFv = 0

ElseIf IV = 0 Then

CallFv = 現指数 - 権利行使価格

Else

Step0 = Application.Ln(現指数 / 権利行使価格)

Step1 = 残存日数 / 365

Step2 = (Step0 + (金利 + IV ^ 2 / 2) * Step1) / (IV * Sqr(Step1))

Step3 = Step2 - IV * Sqr(Step1)

Step4 = Application.NormSDist(Step2)

Step5 = Application.NormSDist(Step3)

Step6 = Exp(-金利 * Step1)

Step7 = 現指数 * Step4 - 権利行使価格 * Step6 * Step5

CallFv = Int(Step7 * 100 + 0.5) / 100

End If

Else

CallFv = 0

End If

End Function



Function PutFv(残存日数, 現指数, 権利行使価格, 金利, IV)

If IsError(現指数) = False Then

If 残存日数 <= 0 Then

PutFv = 0

ElseIf 現指数 <= 0 Then

PutFv = 0

ElseIf 権利行使価格 <= 0 Then

PutFv = 0

ElseIf IV = 0 Then

PutFv = 権利行使価格 - 現指数

Else

Step0 = Application.Ln(現指数 / 権利行使価格)

Step1 = 残存日数 / 365

Step2 = (Step0 + (金利 + IV ^ 2 / 2) * Step1) / (IV * Sqr(Step1))

Step3 = Step2 - IV * Sqr(Step1)

Step4 = Application.NormSDist(Step2)

Step5 = Application.NormSDist(Step3)

Step6 = Exp(-金利 * Step1)

Step7 = 現指数 * Step4 - 権利行使価格 * Step6 * Step5

Step8 = Step7 - 現指数 + 権利行使価格 * Step6

PutFv = Int(Step8 * 100 + 0.5) / 100

End If

Else

PutFv = 0

End If

End Function



VBAでは



Sub ○○○



End Sub



で作られる一定の処理をするプログラムと今回のように



Function ○○○()



End Function



で作られる「関数」があります。

この関数はExcelのワークシート上で何かを計算するときに使います。

例えばいくつかのセルにある数値を平均するときは



=Average(A1:A5)



といった具合に入力すれば、その範囲(ここではA1:A5)の数字の平均値が計算されます。



ここで作った二つの関数はコール・オプションとプット・オプションの価格を計算するプログラムです。



引数はあえて分かりやすいように日本語を使いました。



で、Excelのワークブックの方に戻り、こんな感じで入力してみてください。

A列にあるのは単なる見出し(=変数名)です。





しがないディーラーのブログ






そしてB列に数字を入力してみましょう。

とりあえずこのブログ作成時点で次のSQまで22日(残存期間)あるので、B2のセルには「22」という数字を入力します。

次にB3のセルには金曜日の日経平均株価の終値「9768.08」を入力します。

B4のセルには「10000(権利行使価格10000円)」

B5のセルには「0.1%(金利)」

B6のセルには「25%(IV)」



これらをただ入力しておいてください。

金利もIVもあくまで試しということで。



そして肝心なのはここから



B8のセルに以下の数式を入力してみてください。



=CallFv(B2,B3,B4,B5,B6)



すると「143.69」という数字が表示されるはずです。





しがないディーラーのブログ






こんな感じ(^^)



うまく数字が表示されない場合は、

マクロのセキュリティレベルが高くて有効になっていないか、違うワークブックにマクロ(標準モジュール)が作られてしまっているなどの理由が考えられます。



で、うまくいったと仮定して…



関数の説明をしましょう。



例えば、B2のセル「22」を「12」に変更してみてください。

するとB8のセルの数値は「86.28」に変わるはずです。



つまり10日後のオプション価格はこのように変化すると予測されるのです。

これまでの説明で出てきた「タイム・ディケイ(時間的価値の減少)」です。



逆に日数はそのまま「22」にして、現指数のところを「10500」に変更してみてください。

するとB8のセルは「576.73」に変わるはずです。



つまり日経平均株価が10500円まで上昇した場合、10000円の権利行使価格のオプション・プレミアム(価格)は576.73円になると予測されるのです。



もうお分かりですね。

このように数値を変更するだけで、コール・オプションの価格がどう変化するかを計算することができます。

プット・オプションの場合は「=Putfv()」という関数を使ってください。



これをいくつか組み合わせていけば、オプションのプレミアム(価格)の変化をシミュレーションしていくことができます。



複数のオプションでポジションを組んでいたとしても、それぞれを計算し、そのポジションに照らし合わせれば、ポジションの損益推移を予想することができるのです。





※お願い

ちなみにやってみた人。うまくいった、いかなかった、ちょっとコメントもらえると助かります。

Excelのバージョンによっても色々と違うので、どこで引っかかるかイマイチ読めません。ある程度リアクション確認して、大丈夫そうなら先に進みます。

コメントの投稿

非公開コメント

楽しみです。

XP,Excel2003では大丈夫でした。

この試み、勉強になります。感謝です。
今後の展開、楽しみです。

Re:楽しみです。

>smilesimileさん

コメントありがとうございます(^^)
なんとかいけそうですね。
少しずつ進めていきます♪

ダメでした

WINDOWS7ですが、EXCELではなく、KINGSOFTのSPREADSHEETを使っています。
EXCELとは互換性があるはずなのですが、どうもうまくいきませんでした。

格闘してみましたが解決しないので、頭冷やしてからまたTRYしてみます。

Re:ダメでした

>しゃらぽわさん
ワークシートは互換性かあっても、プログラム(ユーザー関数)までは互換性はないと思います。
可能なら、Excelで試してみてください。

Excel2003、2007でも大丈夫だったとコメント頂いています。
プロフィール

tetsu219

Author:tetsu219
元証券ディーラーです。
二十数年ディーラーやって、シンガポールにも一時期行ってヘッジファンドを立ち上げてみたりと色々やってきて、とある証券会社でディーリング部長になり、今はシンガポールでヘッジファンドの設立・経営をやっています。

基本仕事ネタです。
更新は気が向いたときだけ(^^;
でもこのブログを通じて運用を志す若い世代の人たちに何か伝えられること、その一助になればと思っています。

初期は限定記事にしていましたが、今は開き直って全部公開にしてますのでお気軽に(笑)

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR