暇人の研究室

金融工学やR言語・統計学について書いてます。

<

【ファイナンス】企業価値とは何なのか?

 

企業の価値とは?

 

企業の価値とは何なのでしょうか?企業の価値とは、ざっくりいうとその企業を自分のものにするためにいくら払えばいいのかということです。

 

つまり企業の発行している株式をすべて購入すればいいという事なので、『企業価値=株価×発行済み株式数』と表すことが出来ます。

 

これは時価総額も意味しており、企業価値=株式時価総額ということが言えます。もちろん企業価値とはこんな単純ではなく、色々調整すべき点がありますがとりあえずこの認識で問題ないです。

 

そして、価値とは現在ではなく将来にわたって生み出される価値もあります。この将来生み出される価値の値を、現在の値に割り引くという考え方を『割引現在価値』と言います。

 

⇨ 【ファイナンス】 割引現在価値(NPV)とは? 

 

 

企業内でのプロジェクトや企業の価値を把握する上での基本的な考え方は、そのプロジェクト、または企業が将来生み出すであろう利益(キャッシュフロー)を現在の価値に割引くというものです。これが有名なDCF法(ディスカウントキャッシュフロー法)です。他にも企業価値についてはキャッシュフロー(現金の流れ)だけではなく、配当性向で見る方法や残余利益で見る方法もありますが、DCF法は簿記とかでも出題されますし、正確かどうかは置いといて王道の計算方法です。

 

 

f:id:oruka199665:20170606170546p:plain

参照http://www.growin.jp/report/report02/?pa=4

 

 

DCF法による投資の判断は『現在の投資額が、将来生み出す利益を割引率rで現在価値に割り引いた数値が大きいか小さいか』で判断します。

 

つまり『現在の投資額 < その投資によって将来生み出されるキャッシュフローの割引現在価値』ならば、その投資は有効(儲かる)だと判断されます。

 

一応上の図にもあるように継続価値(ターミナルバリュー:TV)がある場合はそれも考慮します。

 

そしてここで問題になってくるのが、将来生み出されるであろうキャッシュフローの割引率をどうする設定するかです。ここがDCF法の肝であり、短所であります。

 

この割引率 r は、その投資額を調達するために掛かったコストです。つまり企業ならば企業の投資プロジェクトは銀行からお金を借りて行うので、その借入金の利子率となります。

 

そして企業価値の算定ならば、企業が将来獲得する見込みのキャッシュフローの正確性に基づいた割引率を設定します。もちろん将来の利益には不確実性とものが常に付きまといます。

 

将来入るアテのあった金が入らなかったというのは私たちだけではなく、企業にも頻繁に起こりうるのです。むしろ企業の方は自転車操業で経営しているところが大半なので一回金が詰まっただけで倒産なんてことが余裕で起こります。

 

バブル期にあった連鎖倒産などはそのいい例です。与太話はさておき、ファイナンスの世界ではこの不確実性をリスクとしています。そしてリスクが大きければ割引率は大きくなり、逆に小さければ割引率が少なくなります。この企業価値に使われる割引率を資本コストと言います。

 

【金融知識】資本コストとは何なのか?

【株価分析】 DCF法による株価の算出方法 (理論株価 その4) 

 

 

DCF法自体は企業内での投資プロジェクトの成否の判断などには一定の有用性のある評価方法だと考えますが、株式投資においては正直なところあまりあてになりません。実際の株価との連動具合でいくと残余利益モデルの方が当てはまりがいいです。

 

というのも上でチラッと述べたようにDCF法は将来生み出される利益を現在価値に割り引いてそれが投資額より大きいか小さいかで投資の是非を判断します。問題はその割引率なのです。

 

普通の設備投資ならば、割引率は銀行からの借入金の利子率などの数値で問題ないのですが、企業価値の場合は資本コストの数値を使います。この資本コストの数値設定の基準がダメなのです。

 

資本コストの設定はCAPM理論による式を使いますがCAPM理論が現実ではありえない前提のもとに定義された理論なので、現実で使うのは本来おかしいのです。(まあ他に有効そうな資本コストの定義方法がないからと仕方なく使われている状態ですが・・・)

 

というわけで、DCF法は簿記とかでも出てくるし社会に出るうえでは必須知識だけど、株式投資で使えないという感じです。

 

 

【R言語】xtsパッケージによる時系列データの操作

 

Rでは時系列データを扱うための様々なパッケージまたはクラス(オブジェクト)が用意されています。今回はその1つであるxtsパッケージについて紹介していきます。

 

古いRの参考書だと時系列データは全部tsパッケージでやっているものがよくありますが、金融データに関してはxtsパッケージでやる方が絶対効率がいいので、もし株価収益率などの金融データを分析するのであれば間違いなくインストールしておいた方がいいパッケージです。

 

xtsパッケージはzooパッケージの派生形であり、金融データ分析において便利な関数が豊富に揃っており、データフレームやTSなどの他のデータ形式からの変換が簡単に行うことができるのも魅力の一つです。

 

 

・パッケージのインストールと読み込み

 

>install.packages("quantmod")   ##インストール

>library(quantmod)  ##パッケージ読み込み

 

 

ここはいつも通りですね。このパッケージにはsample_matrixというデータが内蔵されているので、これを使ってxtsパッケージの簡単な操作を行ってきます。

 

 ♯♯♯ サンプルデータの読み込み

> data(sample_matrix) 

 

 ♯♯データの型の確認

> class(sample_matrix)  
[1] "matrix"

 

♯♯xtsに変換
> sample_matrix<-as.xts(sample_matrix) 

 

♯♯データの型の確認
> class(sample_matrix)  
[1] "xts" "zoo"

 

 

 

・データフレームのxts形式の変換

 一応説明書によると ↑ のようにas.xts()で変換できるとあるのですが、実際にやるとなぜかうまくいかないことがあります。解決策としては一回zooパッケージを通すというのがいいようです。

 

 

 

・データの中身の確認

 

 > head(sample_matrix)
Open High Low Close
2007-01-02 50.03978 50.11778 49.95041 50.11778
2007-01-03 50.23050 50.42188 50.23050 50.39767

 

・データの操作

 

###2007年5月3日のデータを取得

> sample_matrix['2007-05-03']
Open High Low Close
2007-05-03 49.46328 49.69097 49.46328 49.58677

 

###指定した期間のデータを抽出(1/2~1/7)

> sample_matrix['2007-01-01/2007-01-07']
Open High Low Close
2007-01-02 50.03978 50.11778 49.95041 50.11778
2007-01-03 50.23050 50.42188 50.23050 50.39767
2007-01-04 50.42096 50.42096 50.26414 50.33236
2007-01-05 50.37347 50.37347 50.22103 50.33459
2007-01-06 50.24433 50.24433 50.11121 50.18112
2007-01-07 50.13211 50.21561 49.99185 49.99185

 

###指定した期間以降のデータを抜き出す

> sample_matrix['2007-04-01::']
Open High Low Close
2007-04-01 48.94407 48.97816 48.80962 48.87032
2007-04-02 48.90488 49.08400 48.90488 49.06316

‥‥

 

 

 

 

・XTSの分離

 

時系列データをRで触ったことのある人なら一度は経験があると思いますが、時系列データの数字の部分をほかのパッケージの関数で操作したいのに、左端の日にちの部分が邪魔してエラーが出てしまうことがよくあります。そういったことへの対策として、xtsは日付部分とデータ部分を分離させることができます。

 

 

###データ部分を抽出
>coredata(sample_matrix)

> head(coredata(sample_matrix))
Open High Low Close
[1,] 50.03978 50.11778 49.95041 50.11778
[2,] 50.23050 50.42188 50.23050 50.39767

 

###時間部分を取得
>index(sample_matrix)

> head(index(sample_matrix))
[1] "2007-01-02 JST" "2007-01-03 JST" "2007-01-04 JST" "2007-01-05 JST"
[5] "2007-01-06 JST" "2007-01-07 JST"

 

 →詳しくは

 

 

ちなみに金融データを扱う場合はxtsの他にもquantmodというパッケージもとても便利です。→【R言語】 quantmodパッケージの基本的な使い方 

 

 

追記:Rで金融データを分析するにあたっては金融データ解析の基礎 という本がとても分かりやすく参考になりました。とてもオススメです。→書評

 

 

 

www.dmjtmj-stock.com

 

【R言語】Rでブラック・ショールズ・モデルの計算をしてみる その2

 

www.tkstock.site

 

↑に引き続き、今度はプットオプションの価格をBSモデルを使って計算していきます。

 

 コールオプションが買う権利であるのに対して、プットオプションは売る権利なので、行使価格Kの値は大きい(原資産額が低い)ほど大きな利益をあげることのできる可能性があるため、そのプットオプションの価値は高まります。

 

もちろん、原資産が行使額Kより高くなった場合はオプションから得られる利益はマイナスであるため、コールオプションと同じように、権利行使をせずプットオプションの権利購入額分が損失となります。

 

 

そして、プットオプションの解はしたように定義することができます。

 

プットオプションの価格(P₀)=e(-r×t)×K×N(-d2) - S0×N(-d1)

 

またプットオプションとコールオプションは↓のような関係にあるためこれを利用して計算していきます。

 

P₀=C₀-S₀+e(-r×t)

 

この関係をプットコールパリティと言います。

 

これをRで書くと下のようになります。

 

###bsモデルからコールオプションとプットオプションの価格を計算する###

> blackscholes<-function(S,K,r,sigma,T)
+ {
+ d1<-(log(S/K)+(r+sigma^2/2)*T)/(sigma*sqrt(T))
+ d2<- d1 - sigma*sqrt(T)
+ C0<-S*pnorm(d1)-exp(-r*T)*K*pnorm(d2)
+ P0<-C0-S+exp(-r*T)*K
+
+ return(c("コールオプション価格"=C0,"プットオプション価格"=P0))
+ }
>
>
> blackscholes(100,50,0.05,0.3,7)
コールオプション価格 プットオプション価格
66.736094 1.970498

 

 

 

このようにBSモデルを使えば原資産価格。行使価格・無リスク金利・ボラティリティ・期間が分かればオプション価格を計算することが可能です。

 

しかし現実ではオプション価格は既に分かっていて、このモデルを逆算することによってボラティリティ(IV:インプライドボラティリティ)を計算するというパターンの方が多いです。

 

ヒストリカルボラティリティとインプライドボラティリティ

 

 

 

【R言語】Rでブラック・ショールズ・モデルの計算をしてみる その1

 

www.tkstock.site

 

 

今回はRを使ってブラックショールズモデルの関数を作ってみます。

 

 

www.tkstock.site

 

 

今回は公式の通り、原資産額(S)・行使価格(K)・ボラティリティ(σ)・無リスク金利(r)・期間(T)を使ってコールオプションの価格(原資産額Sの金融商品をt期間後に行使価格Kを買う事のできる権利)を計算していきます。

 

###ブラックショールズモデルによってコールオプション価格を計算する関数を作る###

 

> blackscholes  <- function(S,K,r,sigma,T)
+ {
+ d1 <- (log(S/K)+(r+sigma^2/2 )*T) / (sigma*sqrt(T))
+ d2 <- d1 - sigma*sqrt(T)
+ C0<-S*pnorm(d1)-exp(-r*T)*K*pnorm(d2)
+ return(c("コールオプション価格"=C0))
+ }

 

 

これで関数が完成しました。次はこれに引数(S,K,r,sigma,T)に適当な数値を入れて関数を動かします。

 

###無リスク金利が0.05のとき、原資産額100の金融商品(ボラティリティ0.3)を7期間後に行使価格100を買う事のできる権利の価格を計算する###

 

> blackscholes(100,100,0.05,0.3,7)

 

コールオプション価格

43.41978  

 

コールオプションとは原資産価格Sの商品を、一定期間後に行使額Kで購入して売却するものなので、行使額Kが低ければ低いほど利益は大きくなるということになります。(行使額が原資産額を上回ってしまった場合は権利を行使しないことにより権利購入額分の損をすることになります。)

 

なので、行使額Kの値を低くすればするほどそのコールオプションの価値は上昇することになります。

 

> blackscholes(100,50,0.05,0.3,7) ##行使価格50のとき
コールオプション価格
66.73609

> blackscholes(100,30,0.05,0.3,7) ##行使価格30のとき
コールオプション価格
79.18537
> blackscholes(100,10,0.05,0.3,7) ##行使価格10のとき
コールオプション価格
92.95525

 

次にプットオプション(売る権利)の価格を計算していきます。

 

 

ブラック・ショールズ・モデル(BSモデル)を文系にも分かりやすく説明していく

 

 

導入

 

金融工学を勉強するにあたってまず知っておかなければいけないのが、ブラックショールズモデルというやつです。

 

このブラックショールズモデルというのは、金融工学の上では基礎中の基礎的な感じでよく話に上がりますが、その理論体系を理解するのは私みたいな文系からするとかなり厳しく感じました。(色んな参考書を読み漁って、高校の頃2Bまでしかやってなかった頭をフルに回転させて、なんとかブラウン運動とか微分方程式とか一通り理解できたつもり・・・です。)

 

参考書とかだと、まず式が先行して脳が理解することを拒否してしまうという方も多いと思うので、今回は超極力数式は使わずに解説していきたいと思います。(BSモデルの理論や式とかの詳しい話はコチラ)

 

 

 ブラック・ショールズ・モデルとは?

 

B&Sモデルは、1973年にアメリカのフィッシャー・ブラック(Fischer Black)とマイロン・ショールズ(Myron Scholes)が共同で発表し、ロバート・マートン(Robert C. Merton)によって証明されたオプション価格評価モデルで、ヨーロピアンタイプ(満期日にのみ行使可能なオプション)のオプション価格を計算するモデルです。

 

www.dmjtmj-stock.com

 


このモデルは、計算に必要なデータ(株価、行使価格、期間、変動率、金利)は市場で入手できるうえ、計算にかかる時間が非常に短いため、今でも実務界で広く利用されています。

 

とりあえず細かい説明は省いて、このモデルを何ができるのかというとオプション価格の計算ができるのです。このモデルが発表された当時は、まだ金融市場に数学を応用されておらず、BSモデルはその第一歩でした。

 

このためBSモデルの発見者であるフィッシャー・ブラックは、のちにノーベル経済学賞を受賞しています。まあそれくらい凄い数式なのだからマスターすれば、投資で大儲けできるのでは?と思う人もいるかもしれませんが、発見者の1人であるマイロン・ショールズと証明を行ったロバート・マートンが参加して設立した資金運用ファンドは大赤字を出して倒産しています。

 

なので、このモデルがそのまま使えるわけではなく、あくまで証券市場を数式で解き明かそうとした開拓者的な側面が強いです。一応フォローしておくと、決してブラック・ショールズ・モデルの理論自体が完全におかしいわけではないので、BSモデルの派生形が今もなお実務や分析でも使われていますし、研究も盛んです。

 

 

ブラック・ショールズ・モデルの意味

 

 このブラック・ショールズ・モデルが何をできるのかというと、あるオプション商品の権利行使時価格を、株価、行使価格、期間、変動率、金利から計算できるのです。

 

ですが現実はオプション価格の算出よりも、この式を応用したインプライドボラティリティの計算することの方が多いです。

 

ボラティリティとは? 

ヒストリカルボラティリティとインプライドボラティリティ

 

 

そして、ブラックショールズモデルの式はこんな感じです。

 

f:id:oruka199665:20170509181033p:plain

 

C(t,S): オプション価格の関数
t: 時間
S: 原資産価格(株価など)
K:満期時の価格
r: 無リスク資産の利子
σ: 資産価値の変動率
Φ:ガウス積分あるいは誤差関数
e:ネイピア数=2.71

 

eにrtという指数が付いているのは、時点 t で発生するキャッシュ・フローを、連続複利金利 r で現在価値に割引くためです。→【金融工学】 自然対数と複利計算

 

このモデルは前提として、数学や統計をやっていないとまず意味が分かりませんし、理論の途中で出てくる確率微分方程式に至っては大学教授レベルでちゃんと理解できる代物なので、理解できなくてもいいと思います。

 

ですが、とりあえずこのモデルの存在を知らないと金融工学モグリ同然なので、理解できなくても、こういうものがあるんだなぁというくらいは知っておいた方がいいと思います。

 

 

 

www.tkstock.site

 

 

【R言語】functionで関数を自作するための基礎知識 その1

 

Rの長所としてはfunction()という関数を使うことで特定の変数に自分の作った計算コードを保存できるという点があります。まあ自分で複雑なfunctionのスクリプトを書いてパッケージが作れるくらいが理想なのですが、現実はパッケージ頼りという人が結構多いと思います。

 

まあオブジェクト指向とif・forってプログラミングで一番躓く場所なので、そうなのも残念ながら当然という感じもしますが、とりあえずパッケージの関数の中身を見てRでは >?関数名 で関数の中身を見ることができます。

 

あーこういう処理をしてるんだなというのを少しずつ勉強していけば、いずれ自分でスクリプトを描けるようになると思います。

 

 

 

というわけで今回はfunction()の基本的な書き方について見ていきます。まず、function()を使った関数の定義式の書き方はこんな感じです。

 

 

>関数名 <- function( 引数1, ・・・ , 引数n ) {

<関数本体>

}

 

試しに簡単な関数を自作してみます。

 

##足し算する関数の作成##

> add<-function(x=10,y=20){
+ x+y
+ }

 

##引数を指定しなかった場合デフォルトの数値が使われる

 > add()
[1] 30

 

##引数を指定するとその値で計算してくれる

> add(100,200)
[1] 300

 

 

 

今度は少し実践的な書き方を見ていきます。関数で様々な演算を行った後に、計算結果を返すときは return または invisible を利用するのが一般的です。

 

return の場合は、計算結果を返すと同時に画面上に結果が表示されます。一方、invisible は計算結果を返しますが結果は画面上に表示されません。

 

 

 

###  return で返す関数 ###
> add <- function(x = 10, y =20) {
+ p <- x + y
+ return(p)
+ }



###  invisible で返す関数 ###
> add2 <- function(x =10, y = 20) {
+ p <- x + y
+ invisible(p)
+ }

 

 

関数の計算結果を受け取る変数があると、計算結果が変数に代入されるため、return と invisible どっちでも同じになります。

 

>x1 <- plus1(15, 25)
>x1
## [1] 40

>x2 <- plus2(15, 25)
>x2
## [1] 40

 


しかし、関数の計算結果を受け取る変数がないと、return だと計算結果が画面上に表示させるのに対して、invisible では計算結果を画面上に表示されず、見かけだけだと何も起こっていないように見えます。

 

> add(10, 20)
[1] 30

> add2(10, 20)
>

 

まあこの2つの違いはそこまで重要ではないのですが、パッケージのコードとか見るとreturnとかinvisibleとかが出てくるのでこの2つがどういう意味をもっているのかは知っておく必要があると思います。

 

 

【R言語】RでTwitterのデータを取得してみる

 

Rではウェブページのデータを引っ張ってくる(スクレイピング)するだけでなく、RからWEB APIを介してWEBサービスを利用することもできます。

 

 

今回は有名なAPI WEBサービスの1つであるTwitterのデータ取得します。これには「twitteR」というパッケージがとても便利です。

 

 

このパッケージは既に更新を停止していて、改良型の「retweet」というパッケージが推奨されているのですが、多分3.3じゃないと動かないっぽいし所々バグがあるので今回はとりあえずこっちを紹介します。

 

 

>install.packages("twittR")  ##パッケージのインストール 

>library(twittR)       ##パッケージの読み込み

 

 

Twitterのアカウントを取得していない方は、まずはアカウントを取得してください。
恐らく今時持ってない人はいないと思いますが一応→https://twitter.com/

 

 

そして、アカウントを取得したらTwitter Developersにアクセスし、サイトの下の部分にある「Manage my Apps」をクリックします。

https://dev.twitter.com/

 

 

Create an applicationが表示されるので、入力しろと書いてある部分に入力します。Websiteは自分のサイトのURLで構いません。もしないならこのサイトのURL(

http://www.tkstock.site/)でも問題ないです。

 

 

入力したら画面下のCreate your Twitter applicationをクリックしてアカウント確認のテストツイートをしたら設定完了です。

 

 

Rでツイッター分析をするのに必要なのは、Consumer Key (API Key)Consumer Secret (API Secret)Access TokenAccess Token Secretが解析に必要です。

 

 

ちなみに後半の、Access TokenとAccess Token Secretは、「Create my access token」をクリックすると作成してくれます。

 

 

これら4つの情報はいちいち確認するのがめんどくさいのでテキストかRのスクリプトなどにコピー保存しておくのが無難です。

 

 

 

conumerKey <- "自分のコンシューマーキー"
consumerSecret <- "自分のconsumerSecret "
accessToken <- "自分のアクセストークン"
accessSecret <- "自分のAccess Token Secret"

>setup_twitter_oauth(consumerKey, consumerSecret, accessToken, accessSecret)

 

これで基本設定は終了で  serchTwitter('検索ワードを入力',n=抽出するツイート数)でツイッターの分析が可能になります。