創り屋も行く1

こんにちは。Isodaです。
このエッセイは主にパソコン関連、
数もの(数学、数式など)、
ファイナンス、科学?等々の話題をメインに
取り上げていきます。
乞うご期待!

 

 

**********************

 

2013年12月7日
『ランダムウォーク&モンテカルロシミュレーション』

ランダムウォークという言葉をご存知だろうか。
酔っ払いが千鳥足でフラフラと左右にふれながらも、
目的地に向かって歩いていく様をあわらしたものだ。

このランダムウォーク。実はファイナンス理論でも
よく使われる言葉だ。

右に左にフラフラしながら、ある地点に向かって進行していく。
そう、株価やドル円などのグラフ模様。

……

株価はランダムに上昇と下降を繰り返すわけだから、
その動きを予測することは不可能ではないか。
ランダムウォーク理論の根拠になる考え方だ。

しかし、こうは考えられないだろうか。
株価がランダムな動きをするのなら、
ランダムウォークを大量に作って、
その動きを観察していけば、ある値に辿り着くのではないか。

仮に、その方法で株価を予測できないとしても、
なんらかの動きの参考になるのではないか。
そう考えたくもなる。

絶対的な予測は不可能だとしても、その動きを観察したいと。
仮説をたてて実証してみたくなると。

創り屋魂がフツフツと湧き出てくる。

じゃあ、いっちょ作りましょうか。
乱数を大量に発生させて動きを予測する。
ランダムウォーク&モンテカルロシミュレーションだ。

(ちなみにモンテカルロシミュレーションとは上記で書いたように、
大量の乱数を発生させて、ある数値を解き明かして
いこうというシミュレーション法だ。)

てな訳で、
エクセルVBAを使ってのシミュレーションソフトはこれ。

上の赤印のボタンを押すと乱数が発生。
この乱数は正規乱数で、日次標準偏差0.0126
(ボラティリティ)になるように設定されています。
(ちなみに、この数字に特に意味はありません。
年率標準偏差0.2(ボラティリティ)を
√250で割ったものです。)

その後いくつかの工程を経て、最終的にグラフに描画させる
までの機能を作ってみました。

ボタンを押すたびに新たな正規乱数が発生し、
新しいグラフを描画します。

1回1回押すのも面倒なので、ボタンを押す度に
数千回~数万回のループに突入させるのも可能。

しかし、エクセルのグラフ描画機能はそれだけ大量の計算には
ついて来れないでしょう。

なので、数百回以上ループさせたい場合は、
その計算結果のみをグラフ描画する設定にした方が無難でしょう。

一方、VBAで作ったならC言語でも作ろうと。
てな訳でCでも作ってみました。

VBAとCで作った結果の比較ですが、やはりC言語の
解析、描画スピードは早い。
VBAの比ではありません。

Cでの描画機能としては、gnuplotを採用。
わかりやすいように、10回のランダムウォークを
同時描画した画像をアップしておきましょう。

これを数万回連続で発生させて、
確率論の大数の法則を適用し、株価や円相場の動きを予測する。

ランダムウォーク&モンテカルロシミュレーション。
なんともすんごいシステムの完成です。
(自分で作っといてアレだが…。)

***********************

2013年11月9日
『最強の高次方程式解法を作ろう』

唐突ですが、
どんな高次方程式も解きたいと思ったことはありませんか。

4次方程式までなら解の公式はあるが、
5次以上の方程式に解の公式は無いと言う。

無くても解きたい。せめて近似値が知りたい。

そんなあなたに贈る解法がこれ。
「数値解析」です。

パソコンの発達した今、数値解析を使って、
どんな高次方程式もその近似値を解き明かしてしまおうって寸法です。

ファイナンス系に、よく出てくる問題がある。

問題例
年に5%のキャッシュフローが得られる債券がある。
5年後満期で満期時に100円が得られる。
今その債券の価格は100円です。
この債券の内部収益率(IRR)を求めよ。

経済、ファイナンス理論を学んだ人なら、
式自体をたてるのはさほど難しくはないだろう。

5/(1+x)+5/(1+x)^2+5/(1+x)^3+5/(1+x)^4+105/(1+x)^5=100
でいい。

問題はこのxが解けるかどうかなんですね。
以前にも書いたが、関数電卓や金融電卓なら簡単に解けます。
もちろん、エクセルでも然り。

しかし、PCマニアとしてはそれだけでは納得できない。
なんとしても自力で解きたい。
それもプログラムで…。

ってな訳で、こいつを解くプログラムをC言語で作ることにしました。
久々のC言語での製作なので、
指をよくストレッチしてパソコンの前に座って、
さあいってみよう。

まずは解法チェック。
いろいろな解き方があるが、どれを使おうか。
いろいろ調べてみたが、気になる2つの方法が見つかった。

ニュートン法と2分法である。

ニュートン法は、まず関数f(x)=0の解xaに近い点のx1をとる。
次にf(x1)の接線とx軸との交点を次のx2にする。
この作業を繰り返してxiの値を解に近づけていく方法。

一方の2分法。
f(x)=0の解xの値を求める方法で、解の両側の値を
初期値で指定して、その範囲を半分づつ狭めていくという方法。
(説明がシンプル過ぎてわかりづらいですね。
それぞれの詳しい解析法は専門のサイトを参照してください。)

さて、当初はニュートン法で作ろうと思ったのだが、
いろいろ試した結果、数式によっては解が収束しないことがある。

特に上記の債券の数式はどうにも解が求まらない。

電卓では求まるし、電卓の仕様ではニュートン法を
使っているようなので、理論的には近似解まで辿り着くのだろう。

しかし、当方の「ざっくりC言語プログラム」では解が出ない。
もうちょっと真剣に作ればなんとかなりそうだが、
せっかく作っても求まらない数式があるのでは
作り甲斐が無いので、もう一つの方法、2分法を使うことにした。

この方法は理論的には必ず解に収束するという。
いいですねえ、この響き。やりがいがあるってもんです。

じゃあ、早速作ってみましょうってことで、
調べて、作って、テストして、完成したソースコードがこちら。

2分法gnuplot版だ。
(ちなみにこのプログラムの数式は、
x^5-3*x^4-3*x^3-8*x^2+8*x-10
^を*に変換して
x*x*x*x*x-3*x*x*x*x-3*x*x*x-8*x*x+8*x-10
で入力してある。
冒頭の債券の式ではないので、あしからず。)

さて、このソースで採用したgnuplotとは
フリーの描画ソフトのことで、数式を入力すると下の写真
のようにグラフを描いてくれるソフトだ。

2分法は仕様で、f(x)=0のところを通過するxの値を
求めるので、その近辺の数値を初期値として入力しなければならない。

てことは、どうしてもグラフを描かないと初期値がわからないんですね。
アバウトでいいので、グラフが欲しい。
そんな希望にぴったりのソフトがこのgnuplotなんです。

こいつとC言語を使って完成したソフトを早速使ってみよう。

まずcygwinのgccで、完成したソースnibun010.cをコンパイルする。

nibun010.exeを起動する。

gnuplotが自動で立ち上がって、数式のグラフを自動で描画してくれる。

おおむね、-8から+9位のところで
f(x)=0を通過している模様だ。

続いて、起動したnibun010.exeに
leftnumberに0
rightnumberに10を入れる。

kai 4.119828
近似解が求まった。

合っているのか、数式処理ソフトmaximaで検算してみる。
(このmaximaの遊び方は、後日取り上げていきます)

合っていますね。


(上記赤丸が実数解)

それ以外にもいろんな数値を入れては試してみる。
全てクリア。
なかなか使い勝手はいいですね。

ちなみに、冒頭の債券の数式も難なく解法に成功しております。

0.051…。
約5%と出ました。

maximaで確認。
合っていますね。

さて、
この完成したソフトはコンパイル済みのものを公開します。
興味のある方は解凍して使ってみてください。

C言語で2分法 gnuplot版
C言語で2分法 gnuplot描画無し版

それじゃあ、
お次はニュートン法を、もういっちょやっつけますか。

***********************

2013年11月5日
『Visual Basicで遊ぶ』

今回はWindows用ソフトを作れる「Visual Basic」を
ちょいと紹介してみたいと思う。

前回ご紹介したC言語は中級~上級のプログラマーには
非常に好かれる言語なのだが、
これからプログラミングを始めたい初級者の方々には
イマイチとっかかる魅力が少ない。

CUIのインターフェイス。制作過程は文字ばっかりという、
一言で言うと地味なんですね。

もちろんこのシンプルさが逆に言えば上級者に好まれる理由で、
長くプログラミングをしていると、何となくCを使いたくなるもんです。
しかし、地味である点は否めない。

そこで登場するのがこのVisual Basic。
名前にビジュアルがくっついてる位ですから、グラフィカルな
ソフトを作るのに非常に適しています。

学生などの若いプログラマー志望の人たちには非常に入りやすいですね。

使っている言語もBASICを基準にしてあるので簡単。

制作過程で必要なフォームやボタンも部品として最初から
用意されているので、ちょっとしたソフトなんかは、
ものの数分でできてしまう。

当方が使っているのは Visual Basic 6.0ですが、
興味のある人は是非最新版を使ってみて欲しい。

さあ、そんな訳で、例によって「習うより慣れろ」で早速始めてみましょう。

まずVisual Basicを起動する。
するとこんなフォームが立ち上がる。

さて、何を作りますか。
最初は超簡単なソフトがいいでしょう。

では、ボタンを押すと「今日の天気は晴れです。」と表示されるソフト。
これを作ってみましょう。

左欄から「CommandButton」ボタンをクリック。
Form上に矢印が出るので、適当なところをクリックして
ボタンの大きさを決める。

「Command1」ボタンが表示される。

続いて、この「Command1」をダブルクリック。
するとソースコードを書き込むエディタが現れる。

ここにはすでに何行かのソースコードが書き込まれている。
※ちなみに当方の仕様で、背景色は色付きにしています。
通常は真っ白背景です。

Private Sub Command1_Click()
End Sub

こいつは「Command1」ボタンをクリックすると、
何がしたいのかを書き込むところ。

この
Private Sub Command1_Click()
の後に、
MsgBox (“今日の天気は晴れです。”)
を書き込む。

ちなみに、このMsgBox ()ってのは、
()内の文字をメッセージボックスで表示しろって命令です。

Private Sub Command1_Click()
MsgBox (“今日の天気は晴れです。”)
End Sub

これでオーケー。
C言語のように末尾の「;」なんか気にしなくてOKです。
適当に入力して「Enter」キーを押せば
Visual Basicがうまいこと調節してくれます。
ここら辺も初心者には楽な仕様ですね。

さて、上部の右向き▲「開始」ボタンを押してみよう。

作ったソフトが起動される。
「Command1」ボタンをクリック。

「今日の天気は晴れです。」と表示される。

「OK」ボタンを押すと消える。

どうでしょう。簡単ですね。
ここまで、ほんの2、3分です。

続いてこいつをexeファイルとして独立させましょう。

Visual Basicの左上「ファイル」をクリック。
「Project1.exeの作成」をクリック。

保存する場所を聞いてくるので、そのまま適当な場所へ保管。
名前は「晴れ晴れボックス」とでも名付けましょう。
これでexeファイルが作れました。

こいつを単体で起動させます。
「晴れ晴れボックス.exe」をダブルクリック。

単体で起動しました。ボタンを押します。

どうでしょう。簡単ですね。
「晴れ晴れボックス.exe」という、立派なプログラムの完成です。

このソフトを配布するもよし、自分自身で使ってもよし。
もちろんソフトですから、いいものであれば有償で専門サイトで
売買してください。
全てはプログラマーであるあなたの自由です。

さて、こんな感じで作っていけば、C言語とはかなり見た目の
違うソフトが簡単に作れてしまうんですね。

何でもそうですが、入り口はやさしい方がいいです。
で、ある程度のレベルに達したら、少しづつ難しいことにチャレンジしていく。

中級クラスまでは普通にやっていれば誰でも到達するけど、
そこから先、上級レベルになるには努力が必要だってことです。

でも、最初から努力するのは今の若手にはなかなか難しい。
なので、いきなりC言語でソフトを作るより、
Visual Basicなんかで簡単に作れる環境を与えてやるってのも
必要な気がします。

「ITと数学力の強化」。
これが将来の日本を支える原動力になると思ってますから。

さて、話は横道にそれましたが、これだけではつまらないので、
もういっちょ作ってみましょう。

データベースソフトのAccessで簡単なデータベースを作って、
そいつをVisual Basicに連動させてみます。

そいつがこれです。

詳しい制作工程は省きますが、Visual Basicを使えば簡単に
データベースに接続可能です。

これで、Accessのmdbデータのお好きな所を一瞬で閲覧チェック可能。

ちなみに、今回作ったソフトはパフォーマンス表。
Accessを使って、時間加重収益率で各種パフォーマンスを
データベース化し、Visual Basicで閲覧するといったソフトです。

こういった専門のソフトも、元になるデータベースさえ用意して
あれば、ものの数分で作れてしまうんですね。

どうでしょうか。
こういったツールを使って、我々クリエイター達は、
芸術はもちろん、電子書籍、ソースコード等々、
創作できるものはどんどん創り出していきましょう。

Let’s try.

***********************

2013年9月22日
『C言語で遊ぶ』

プログラミングを習得したい場合、まずアセンブラというプログラム言語を学ぶ。
アセンブラは命令も少ない上に、ハードの知識も必要なので、
好き嫌いの分かれる言語だろう。
電子工作などをやる方には非常になじみ深い言語だ。

アセンブラの次に学ぶのがだいたいC言語。
プログラミングの基本言語なので、VBやJavaなんかを使いたい人も、
Cからスタートする。

そこで今回はこのC言語をちょいと使って、どんな雰囲気で
Cによるソフトが作られるのかを紹介しよう。

まず必要な道具は、パソコン、Cコンパイラ、テキストエディタの3点。
パソコンはWinでもLinux、Macでもなんでもいいのだが、今回はわかりやすく
Windowsでいってみましょう。

まずはCコンパイラ。
Cコンパイラっていうのは、テキストエディタで作ったC言語のソースコードを
マシンに読めるように変換してくれるソフト。
ちなみに、この変換作業を「コンパイル」って言うんです。
コンパイルするソフトだから「コンパイラ」。そのまんまですね。

フリーのCコンパイラは「Cygwin」っていう有名なソフトの中にあるので、
今回はこいつを使ってみましょう。
「Cygwin」のダウンロード先はGoogleなんかで検索すればすぐに出てきます。
公式 Cygwinのサイト http://www.cygwin.com/

インストール方法は専門のサイトがたくさんあるので、そちらを検索してください。
※ちなみに「Cygwin」ってのはWIN上でUNIXライクな環境を作り出すソフトです。
そのため、いろんなソフトがこの中に入っているんですね。
今回はこの「Cygwin」の中にある「gcc」っていうCコンパイラを使用します。

続いてテキストエディタ。
こいつはWin標準の「メモ帳」でも可能。
筆者はフリーソフトの「TeraPad」っていうエディタを使ってます。
このソフトは入力背景の色を変えられるので、長時間の作業でも目にやさしいのがいいんですね。
検索すればダウンロード先が表示されるので、ご希望の方は使ってみてください。
※ちなみにwordなんかのワープロソフトはプログラミングには使えません。
プログラムは純粋なテキストでないとダメなんです。
ワープロソフトで作られた文字にはいろんな情報が含まれているので、
そのままでは使えません。テキストエディタで作りましょう。

さて、それでは早速C言語で簡単なプログラムを作ってみましょう。
まずテキストエディタに下記のソースコードを記入してください。
(全角文字はダメ。全て半角文字で記入)

#include <stdio.h>
int main(){
printf(“Hello pasokon\n”);
return 0;
}

(ちなみに上記画像の左欄外の数字は記入しなくて可。
このテキストエディタの仕様です。)

上記のソースはC言語を学ぶ時に最初に習う定番のソースコードです。
以下、大まかな意味を記します。

#include <stdio.h>
stdio.hを使うぜ。

int main(){ }
定番の表記法です。{ }の中にプログラムを書きます。
最初の()の中には引数を入れます。空欄でもいいので、
今回はわかりやすく空欄でいきましょう。
ちなみに「int」は型の一種。戻り値にint型の値を返すって意味です。
最初はこんなもんかと思って使ってればOKです。

printf(“Hello pasokon\n”);
printfは()文字を画面に表示しろという命令です。
「Hello pasokon」って文字を画面に表示せいって意味です。

return 0;
終りの合図です。
無くても動きますけど、int型mainには入れとかないと、コンパイラに
怒られます。

次にこのファイルに名前を付けて保存します。
とりあえず「test3.c」としましょう。
ここで注意点。
拡張子は必ず「.c」で保存してください。普通に保存すると「.txt」になるので注意が必要です。

保存先は「C:\cygwin\home\あなたのユーザ名」です。
これも適当な場所に保存するとNGです。Cコンパイラが
わかる場所に保存しましょう。

さて、ちゃんと保存されたか確認してみましょう。
cygwinを起動。
起動はデスクトップ上のアイコンをクリック。
またはスタートメニューのcygwinをクリック。

さて起動すると真っ黒い画面が出ます。

見慣れないととっつきづらい画面ですが、これはCUIと言って
PCの基本画面みたいなもんです。数十年前のコンピューターは全部これです。
MacintoshやWindowsが、GUIと呼ばれる今の絵柄のある見やすい画面を
作ってくれたんですね。感謝です。

さてプログラミングをしたいって方は、この真っ黒画面に慣れないといけません。
この画面はマウスは使わずキーボードのみで操作していきます。
まずはこの画面の文字をお好みの大きさに拡大しましょう。
「Ctrl」「+」キーで、お好みの大きさになります。
逆に小さくするには「Ctrl」「-」キー。

続いて、先ほど保存した「test3.c」ファイルがあるか確認しましょう。
画面のカーソルが点滅している所に、
dir
を入力
enter

写真のようにtest3.cがありますね。

続いて、こいつをコンパイルしてみます。
gcc test3.c
を入力
enter

画面上は何も変化無しです。でもこれでOK。

コンパイルできたか確認。
もう一度
dir
を入力
enter

※ここで入力の手間を省きましょう。
キーボードの矢印キーで入力履歴が出るので、
こちらを使えば簡単に表示されます。

「a.exe」ファイルがありましたか。あればコンパイル成功です。

続いて、このa.exeを実行してみましょう。
画面に
「./a」を入力
enter
※こいつは同じ階層にある「a」ってファイルを実行せよって命令です。
「Hello pasokon」の文字が出る。

実行完了ですね。

「a.exe」だと名前がわかりづらいので、「test3.exe」としてコンパイルしましょう。
gcc -o test3 test3.c
を入力
enter
※「-o 好きな名前」で、「好きな名前.exe」ファイルが作られます。

もう一度
dir
enter

これでtest3.exeファイルが作られたので実行します。
画面に
「./test3」を入力
enter
再び「Hello pasokon」の文字が出る。

さあ、どうでしょう。
ここまで成功したあなたは、ある意味立派なCプログラマーの卵です。
ここから先は、いろんなCのソースコードを入力して→コンパイル→実行で
腕を磨いてください。

プログラミングってのは何か一つの言語を習得してしまえば、他の言語もスーっと入ってきます。
まずはCを遊んでみましょう。
いつの日か、Linuxのソースコードをいじれる日が来るかも知れませんぞ。

***********************

2013年8月30日
『関数電卓fx-375esで標準正規分布値を出すぞ』

金融工学の分野でちょいちょい出てくるのが、
ブラック・ショールズ式。
ブラック・ショールズ式ってのは、1973年に
フィッシャー・ブラックとマイロン・ショールズが共同で発表した、
オプション取引のプレミアムを求める方程式だ。
(後にロバート・マートンが厳密な証明を与えている。
また、1997年に2名がノーベル経済学賞を受賞
(他1名は故人)。)

じゃあ、そんな数式をまずはご覧頂こう。

この数式の利用法自体は、さほど難しくはない。
最初はとっつきづらいが、意味がわかってくると何てことなくなる。
そこら辺の詳しいいきさつは、

拙書 「金融電卓HP30b & エクセル
ブラック・ショールズ式の使い方」
(ペンネーム 糸田コウにて執筆。アマゾンで発売中)

を読んで欲しい。

さて、このブラック・ショールズ式。
よく見てみると小難しそうなのが、3つの文字である。

e^
ln()
N()

e^は指数関数。ネイピア数2.7182…のべき乗です。
エクセルではexp()を使う。

ln()はかっこ内の自然対数を求める。

N()は確率累積密度関数
(積分で面積を求める例のやつです)。

この3つの項の計算を済ませれば、
上記の数式もただの四則演算に過ぎない。
(S、N、r、σ他などの文字には例題等から直接数値を代入できる。)

エクセルを使えば全ての数値を出せるのだが、他に方法はないものか。
手持ちに関数電卓があるので、こいつで計算できないものかと考えた。
ちなみに関数電卓はカシオのfx-375esだ。

ぱっと見たところ、eやlnの記号がある。
こりゃ何とかなりそうだってことで、計算してみた。

上記の3つの文字が求まればいいので、まずは適当な数字を入れてみよう。
eを表記して指数に0.03*2を入れてみる。
答え1.0618…。

合っているのだろうか。エクセルで確認してみる。
エクセルを起動し、exp(0.03*2)を数式バーに入力。

答え1.0618…。
合っている。

続いて、電卓のlnを押す。
15000を入力。
すると、
9.6158…。

これもエクセルで確認。
ln(15000)を数式バーに入力。
9.6158…。
OKだ。

順調ですね。

最後にN()を求めたい。
ところが、N()の記号がどこにも無い。
こいつはまいった。
関数電卓ではN()は無理なのか。
電卓のマニュアルを隅々まで凝視する。
すると一つのヒントが…。

「標準正規分布の分布確率を計算できます。」とある。
「むむっ。これではないか。ここにチャンスあり」と独り納得する。

ちなみに正規分布ってのは、統計の基本となる
最も重要な確率分布で、資料をいくつかの階級に分けた時の
資料分布の一つのこと。

で、標準正規分布ってのは、正規分布の一種で、
平均値0、標準偏差1のことを言う。

言葉で説明するとわかりづらいので、下記のグラフをどうぞ。

よく見かけるグラフですよね。
こいつのオレンジ色部分の面積を求めたいとする。
(ちなみにオレンジ色部分が
左隅で止まっているように見えますが、
理論上は-∞までずっと伸びていると思ってください。)

このグラフが確率密度関数の場合、オレンジ色の面積=確率となるんです。
てことは、ある特定範囲の変数の確率を求めたいなら
面積を求めよってことです。
じゃあ面積を求めましょうと。
関数電卓のテーブル表に平均値0.標準偏差1のグラフを作ります。

//////////////////////

ここからは関数電卓fx-375esで標準正規分布を求める利用法です。
興味のある方だけどうぞ。

まず、電卓の
MODE
3 :stat
1 :1-var

すると表が出る。

ここへ
-1
=
1
=
と入力。

ACボタンで一旦、表の外へ出る。
shift
1
4 :var

2 :xバー
=
すると
0
平均値0ですね。

shift
1
4 :var

3 :σx
=
1

標準偏差1ですね。
これで準備OK。

標準正規分布のお好きな数値を入れれば、面積が求まります。
まずはやってみましょう。

shift
1
5 :distr

1~4までの数字あり。
1 :Pは「-∞」から入力した数値までの面積。
2 :Qは「0」から入力した数値までの面積。
3 :Rは入力した数値から「∞」までの面積。

1 😛
を選択。
数字を入れます。
1.25
=
0.8943…。

これで下記のオレンジ色部分の面積が求まりました。

-∞から1.25までの変数の出る確率が約89.4%ってことです。

合っているかエクセルで確認。
エクセルで標準正規分布の面積を求めるには、
NORMSDIST()関数を使います。
()の中に求めたい数値を入れればいいので、
NORMSDIST(1.25)をエクセルの数式バーに入力。
enter
0.8943…。
合ってますね。

もういっちょラストに0から1までの値を入れてみましょう。
shift
1
5 :distr

2 :Q
を選択。
数字を入れます。
1
=

0.3413…。

2倍にすると-1から1までの面積約68%になります。
バッチリですね。

※ちなみに標準正規分布(正規分布も)の値は、
平均値±1標準偏差まで約68%、
平均値±2標準偏差まで約95%、
平均値±3標準偏差まで約99.7%に収まります。

利用法ここまで。
////////////////

続いていろんな数字を入れては、エクセルで確認。
全て合致する。

便利ですね。よく解説書の巻末に載っている
標準正規分布表より細かい値も出せます。
これはいい。

ちなみに、上記のN()は数値積分を使って求めることもできます。
どちらの方法がいいかは人それぞれ。
数値積分での求め方は、
「金融電卓HP30b & エクセル
ブラック・ショールズ式の使い方」

を参照してください。

さて、こうやって冒頭の3つの文字さえ電卓で出せれば、
あとは紙と鉛筆で、上記のブラック・ショールズ式も求まります。
電卓1台でオプションのプレミアムが出せるって訳です。

以上、関数電卓の裏技ご紹介…。

「金融電卓HP30b & エクセル

ブラック・ショールズ式の使い方」

************************


2013年7月27日
『エクセルで遊ぶ』

エクセルといえば、windowsパソコンの表計算ソフト。
ワープロソフトのwordと並んで、ビジネス系ソフトの代表選手である。

今回はこのエクセルを使って、ちょいと遊んでみようと思う。
事の発端はこの数式。
100=4*(1+0.03)^3/(1+r)^4+4*(1+0.03)^2/(1+r)^4+4*(1+0.03)/(1+r)^4+(4+100)/(1+r)^4
数式の苦手な人には呪文に見え、数式大好き人間にはフムフムと言いたくなる式だろう。

ファイナンス理論の本を読んでいるとよく出てくる用語に
IRR(内部収益率)とか、
NPV(正味現在価値)なんてのがある。

このIRRやNPVは「金融電卓」があれば計算できるのだが、
上記の式は金融電卓でも解の導き方がわからない。(単に私の不勉強かも知れないが)

理数系の学生さんがよく使う「関数電卓」なんかだとxの文字が入れられ、
solve機能が付いているものなら簡単な方程式は解を見つけられる。
(とは言っても電卓で解きやすいように移行したり何だりと、
ある程度人間の力が必要だ。
一般の電卓にも解けないような数式を、
紙と鉛筆があれば中学生でも解けてしまう人間てのは、
ほんとにすごいなと思ったりする。)

てことで登場したのがエクセルだ。
なんといってもパソコンの表計算ソフトである。
こんな式はオチャノコサイサイで解けるでしょうと。
じゃ、やってみましょうと。

まずは先ほどの式をもう一度記す。
100=4*(1+0.03)^3/(1+r)^4+4*(1+0.03)^2/(1+r)^4+4*(1+0.03)/(1+r)^4+(4+100)/(1+r)^4

ここで左辺の100を右辺に移項する。
0=4*(1+0.03)^3/(1+r)^4+4*(1+0.03)^2/(1+r)^4+4*(1+0.03)/(1+r)^4+(4+100)/(1+r)^4-100

次にこの式のrをエクセルでお馴染みのセル番号に変える。
とりあえず、「A2」に変えてみよう。
0=4*(1+0.03)^3/(1+A2)^4+4*(1+0.03)^2/(1+A2)^4+4*(1+0.03)/(1+A2)^4+(4+100)/(1+A2)^4-100

これで準備OKだ。さしものエクセルと言えども、両辺のどちらかを0にしたり、
文字をセル番号に入れ替えたりしないと解きようがない。
人間ほど器用ではないのだ。

さあ、いよいよ入力してみよう。
まずエクセルを起動し、セル「A1」にカーソルをあわせる。

上部の数式入力バーに、先ほど変換した数式を入力する。

続いて「ツール」 「ソルバー」をクリック
(さて、ここで同じことをやろうとしているあなたへ。
もし「ソルバー」が表示されない時は、あなたのエクセルにソルバー機能が
組み込まれていないのだ。
同じ表示内の「アドイン」をクリックして「ソルバー」をインストールしてほしい。)

「ソルバー パラメータ設定」で
目的セル 「A1」
目標値 「値」をチェックして「0」
変化させるセル 「A2」
入力したら「実行」をクリック。

すると…。

「ソルバー 探索結果」に「最適解が見つかりました」の表示が出る。

「OK」クリックで、「A2」セルに解が表示される。

さて、この方程式の解は
「0.039441…」

ん~ん。果たして合っているのだろうか。
電卓で検算したいのだが…。メンドウだ。
てなわけで、エクセルでの検算だ。

シートを変えて、「D5」セルあたりをクリック。
上記の数式バーに、左辺が100の方程式の「A2」を先ほどの解である
「0.0394409316292627」に変えた式を入力。

「OK」をクリック。

「D5」セルに「100」の表示。

検算の結果、ほぼ正しい(≒100)ことが証明された。

さすがエクセル。手計算では無理。電卓でも無理。
そんな方程式も瞬時に解いてしまうなんて。
お仕事で使うだけじゃなく、結構数字遊びもできそうな本格ソフトだ。

じゃこれで例の…。
「フェルマーの最終定理」入力してみますか。
(どうやって入力するんじゃい。)

創り屋も行く 2014年はこちら。