この記事では,会計研究とシミュレーション研究の可能性について,その背景と関連文献を述べます。
プログラミング
Warning: Trying to access array offset on value of type bool in /home/r1406503/public_html/keito.luxe/wp-content/themes/xeory_base/lib/functions/bzb-functions.php on line 589
EXCELマクロという資産
Excelマクロは資産です。
それはなにも「この経験はきっと人生を豊かにするんだ」的な意味ではありません。明確な意味があります。
この記事ではマクロがなぜ資産なのか、マクロ資産を作る際に気をつけるべきポイントについてお話します。
続きを読む
MacユーザーがAtomでLaTeX環境を整えるためにやったこととエラー
こんにちは、毛糸です。
本記事では、汎用テキストエディタAtomでLaTeXを使うためにやったことと、生じたエラー、その対応策についてまとめます。
quantmodの使い方とCAPMの計算|Rでプログラミング
こんにちは、毛糸です。
株式の期待リターンを推定するために広く用いられているのが、CAPM(Capital Asset Pricing Model)です。
CAPMは株式のリターンを市場ポートフォリオの1次関数として表す、とてもわかり易いモデルです。
本記事ではCAPMの計算(具体的には、ベータの推定)を、統計プログラミング言語Rで行う方法についてまとめます。
CAPMにおけるベータの推定には、個別株式と市場ポートフォリオのリターンのデータが必要になりますが、quantmodというパッケージを使えば、簡単に取得できるため、その方法も説明します。
また、推定に必要な無リスク金利(安全資産利子率)には、財務省が公表している国債利回りを用いることとします。
CAPM(Capital Asset Pricing Model、資本資産価格モデル)の概略
- 証券と市場ポートフォリオのデータを取得しリターンを計算する方法
- 無理リスク金利を取得する方法
- 回帰分析を行う方法
quantmodによる株価ヒストリカルデータの取得方法
r_{i,t}=\frac{P_{i,t} -P_{i,t-1}}{ P_{i,t-1}}\approx \log(P_{i,t})-\log(P_{i,t-1})
\end{split} \end{equation}
クロネコヤマトとP≠NP予想
こんにちは、毛糸です。
先日、こんなつぶやきが話題になりました。
『配達ルートの効率化』って典型的NP困難問題なのでこれが解決出来たらノーベル賞ものなんだけど賞金30万円で権利譲渡ってすげえな。
>ヤマト運輸プログラミングコンテスト2019 – AtCoder https://t.co/dD1sAvHaO1— TAKE-C (@TAKEC_MARUTA) 2019年7月2日
このツイートのなかで「NP困難」という言葉が使われています。
なお、直感やイメージを大事にするために、数学的な厳密さを欠く部分がありますので、詳しく勉強したい方はテキスト等を参照してください。
計算理論とはなにか
このように、計算複雑性理論では、データ数に関連してその複雑性を定量な尺度で評価します。
多項式時間アルゴリズムとクラスP、クラスNP
ある問題がNPである、といったときには、その問題の答えが与えられたときに、膨大な計算を要さずに答え合わせができる、と考えてよいでしょう。
NP困難な問題と巡回セールスマン問題
NP困難な問題は、その検証に膨大な計算を要する場合があります。
ヤマト運輸プログラミングコンテスト
その問題の概要は以下のとおりです。
本コンテストでは、私たちの取り組む課題の一つとして「宅配ドライバーの配達ルートの効率化」をテーマとして取り上げ、配達ルートの最適化問題を含む2問を出題いたします。
P≠NP予想
>>P≠NP予想-Wikipedia
まとめ
参考文献
積立投資をシミュレーションするプログラムを作った(投資シミュレーションプログラムVer2)
投資シミュレーションプログラムver2の改善点
参考記事>>ドルコスト平均法の検証が難しい理由
コード例
資金の出入りを反映させるに伴い、まず期間を原則として月数とするようにし、投資月数をhorizonという変数に格納します。
#投資年数(自由入力) Year<-1 #1年あたりの月数(通常は12) Month_par_year<-12 #投資月数 horizon<-Year*Month_par_year#monthes
また、投資期間中の資金の出入りを、inv_schedule変数に格納します。たとえば、毎月1万円の積立投資を行う場合には、指定した数字を繰り返す関数rep()を用いて、以下のように記述します。
#投資スケジュールを入力(自由入力) inv_schedule<-rep(1,horizon)
投資のリスク・リターンも、月次ベースに直します。
#年率期待リターン(期待収益率μ、自由入力) mu<-7/100 mu_par_month<-mu/Month_par_year #年率リスク(標準偏差σ、自由入力) sigma<-12.88/100 sigma_par_month<-sigma/(Month_par_year)^0.5
シミュレーションを行う繰り返し計算の部分に、前述のinv_scheduleの各要素を足すように変更します。
#シミュレーション開始 for (s in 1:sample){ for ( t in 1:horizon){ #撤退していれば計算を飛ばす if(W[s]==1) break #今年の資産額=前年の資産額*(1+レバ比率*収益率) A[s,t+1]<-A[s,t]*(1+Lev*z[s,t])+inv_schedule[t] #もし資産額が撤退額を下回ったら撤退目印を立てる if(A[s,t+1]<Withdraw)W[s]<-1 } }
#投資年数(自由入力) Year<-1 #1年あたりの月数(通常は12) Month_par_year<-12 #投資月数 horizon<-Year*Month_par_year#monthes #シミュレーション回数(自由入力、多いほど正確だが時間がかかる) sample<-1000 #シミュレーション数値を格納する行列 A<-matrix(0,sample,horizon+1) #初期投資額を入力(自由入力) initial<-1000 #投資スケジュールを入力(自由入力) inv_schedule<-rep(1,horizon) #シミュレーション数値に初期投資額を入力 A[,1]<-initial #年率期待リターン(期待収益率μ、自由入力) mu<-7/100 mu_par_month<-mu/Month_par_year #年率リスク(標準偏差σ、自由入力) sigma<-12.88/100 sigma_par_month<-sigma/(Month_par_year)^0.5 #レバレッジ比率 Lev<-1 #撤退をカウントする目印 W<-rep(0,sample) #撤退額を設定 Withdraw<-0 #乱数を生成(ランダムな投資収益率) set.seed(1234) x<-rnorm(sample*horizon,mu_par_month,sigma_par_month) #乱数(ランダムな収益率)を行列形式に変換 z<-matrix(x,sample,horizon) #シミュレーション開始 for (s in 1:sample){ for ( t in 1:horizon){ #撤退していれば計算を飛ばす if(W[s]==1) break #今年の資産額=前年の資産額*(1+レバ比率*収益率) A[s,t+1]<-A[s,t]*(1+Lev*z[s,t])+inv_schedule[t] #もし資産額が撤退額を下回ったら撤退目印を立てる if(A[s,t+1]<Withdraw)W[s]<-1 } } #シミュレーション結果の期待値を表示 paste(Year,"年後の資産額の期待値は",mean(A[,horizon+1])) #シミュレーション結果の中央値を表示 paste(Year,"年後の資産額の中央値は",median(A[,horizon+1])) #損する確率を表示 paste("損失を被る確率は",length(A[,horizon+1][A[,horizon+1]<initial])/sample) #億り人になれる確率を表示 paste("億り人になれる確率は",length(A[,horizon+1][A[,horizon+1]>10000])/sample) #破産する確率を表示 paste("破産する確率は",sum(W)/sample) #将来の資産額の確率分布(ヒストグラム)を表示 hist(A[,Year+1])
まとめ
仮想通貨の価格ヒストリカルデータを取得する方法|Rライブラリcryptoの使い方
こんにちは、毛糸です。
仮想通貨に再び注目が集まっています。
2017年に価格が高騰し、2018年に暴落した仮想通貨は、現代のバブルとして一躍有名になりました。
参考記事:ビットコインはバブルである
仮想通貨パッケージcryptoをインストールする方法
仮想通貨価格の時系列データ(ヒストリカルデータ)の入手方法
install.packages("crypto", dependencies = TRUE)
library(crypto)
#仮想通貨のリストを表示 crypto_list()
> #仮想通貨のリストを表示 > crypto_list() # A tibble: 2,212 x 6 symbol name slug rank exchange_url history_url <chr> <chr> <chr> <dbl> <chr> <chr> 1 BTC Bitcoin bitcoin 1 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 2 ETH Ethereum ethereum 2 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 3 XRP XRP ripple 3 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 4 BCH Bitcoin… bitcoin… 4 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 5 EOS EOS eos 5 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 6 LTC Litecoin litecoin 6 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 7 BNB Binance… binance… 7 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 8 BSV Bitcoin… bitcoin… 8 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 9 USDT Tether tether 9 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… 10 XLM Stellar stellar 10 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/… # … with 2,202 more rows
ビットコイン(BTC)の価格データからリターンとリスクを計算する
ヒストリカルデータの取得
#crypto_history(coin = NULL, limit = NULL, start_date = NULL #end_date = NULL, coin_list = NULL, sleep = NULL) #仮想通貨の価格等情報を取得 #dateはyyyymmdd形式で。NULLとすると最長期間 BTC<-crypto_history(coin = "BTC", start_date = NULL,end_date = NULL)
BTC_saikin<-crypto_history(coin = "BTC", start_date = "20190501",end_date = "20190530")
#データの先頭 head(BTC,1) #データの最後尾 tail(BTC,1)
BTC$close
のように$マークのあとに取り出したい列のラベルを指定します。終値を時系列データとして抽出
#BTCの終値情報を時系列として取り出す。 #時系列情報の開始日をBTC$date[1]と指定 BTC_price<-ts(BTC$close,start=BTC$date[1])
価格チャート
#type="l"は線グラフ plot(BTC_price,type="l")
BTCの日次収益率(リターン)
#日次収益率 BTC_return_daily<-diff(BTC_price,lag=1)/lag(BTC_price,k=-1) plot(BTC_return_daily,type="l")
BTCリターンの平均と標準偏差(リスク)
mean(BTC_return_daily)*100 #[1] 0.2808807 #表示は% #年率換算では mean(BTC_return_daily)*100*365 #[1] 102.5215
標準偏差はsd()関数で計算できます。
sd(BTC_return_daily)*100 #[1] 4.333606 #表示は% sd(BTC_return_daily)*100*365^0.5 #[1] 82.79343
まとめ
「投資シミュレーションプログラム」サマリー(随時追加)
こんにちは、毛糸です。
本記事は「投資シミュレーションプログラム」に関する記事のまとめページです。
「投資シミュレーションプログラム」とそれを使った各種の分析について、このページから各記事に飛ぶことが出来ます。
投資シミュレーションプログラム
投資シミュレーションプログラムVer.1.0
投資シミュレーションプログラムVer.1.0のコード例と、投資シミュレーションプログラムが用いている「モンテカルロ・シミュレーション」に関する説明は下記ページです。
>>投資シミュレーションプログラムを作ってみた【Rでプログラミング】
投資シミュレーションプログラムVer.1.1
投資シミュレーションプログラムは何千何万という膨大な数のシナリオをコンピュータの圧倒的計算力で処理するプログラムですが、Ver.1.0ではサンプルの計算をfor文を用いて行っていました。
統計プログラミング言語Rはfor文による繰り返し計算よりベクトル演算の方が高速に処理することができ、これを実装したのがVer.1.1です。
>>投資シミュレーションプログラムを高速化してみた
活用例
年金の分析
FX・外貨預金の分析
FXの期待リターンの理論値を計算したうえで、それをパラメタとして投資シミュレーションプログラムを使い、FXで億り人になれる確率や破産する確率を計算しました。
レバレッジが億り人になれるキーであることが明らかになりましたが、破産確率の上昇と隣合わせであることもわかりました。
>>FXの期待リターン、億り人になれる確率、破産する確率【モンテカルロ・シミュレーション】
インデックス投資の分析
資産運用の王道、インデックス投資について、投資シミュレーションプログラムを用いた将来予測を行う予定です。
投資シミュレーションプログラムを支える技術
- 確率論・統計学
- ファイナンス理論(金融工学)
- プログラミング言語
統計プログラミング言語Rによるファイナンス分析に関しては、下記書籍を読めば、Rの基本的な使いかたから、本格的な分析までを学ぶことが出来ます。
勉強会「意識高い……」「レベル高そう……」いやいや、誤解してませんか?
こんにちは、毛糸です。
このところ毎月のように勉強会を企画したりしているのですが、先日「意識が高い」「近寄りにくい雰囲気」という声を耳にしました。
私はそういう声にはあまり気持ちを乱されないタイプですが、しかしそういうイメージを持たれるのは本意でなく、誤解であると感じているため、今回はそういった声に対するメッセージをお届けします。
私はなぜ勉強会を開いたか
私は昨年のプログラミングブームの中で、自分と同じようにテクノロジーを学ぶ人達と交流したいという思いで、勉強会を企画しました。
当時の私はプログラミング言語Pythonに興味を持っていました。
日頃、会計士として仕事をしていますので、Pythonを会計の仕事に役立てられないかと考え、会計×テクノロジーの勉強会 PyCPAを立ち上げました。
PyCPAという勉強会は昨年の発足以来、10回以上の開催実績があり、参加者も述べ250人を超える規模となりましたが、最初はプログラミングに興味のある会計士ツイッタラーを集めた小規模な集団でした。
会計とテクノロジー(プログラミング)という、ある種「オタク」な趣味を共有するために、SNSで仲間を募り集まってみた、とうただそれだけの勉強会です。
PyCPAという勉強会は、これまで色々な形式で開催されてきました。
- ただ集まって各自黙々と作業を行うもくもく会
- 講師を招き実務の最先端を学ぶセミナー
- 実際にプログラミングをしながら学ぶハンズオン
- 専門書をみんなで読み進めていく輪読会
勉強会に対する誤解
やりたいからやる、楽しいから学ぶ
まとめ
PyCPAで登壇する人たちだって、最初はみんな手探りで学んでいたのです。
もし、今まで勉強会なんて行ったことも開いたこともないけれど、興味があるという方がいらっしゃったら、勉強会に足を運んでいただくか、こんな勉強会を開きたいとリクエストしてみてください。
参考記事:PyCPAで勉強会を開催する、もしくはリクエストする方法
一緒に楽しく学びませんか。
PyCPAリアル・オプション輪読会まとめと参加者アンケート結果
こんにちは、毛糸です。
先日、会計×テクノロジーをテーマとした勉強会コミュニティPyCPAの『モンテカルロ法によるリアル・オプション分析』輪読会第1回が開催されました。
今回は20名近い参加者にお集まりいただきました。
本記事では今回の輪読会の振り返りをしてみたいと思います。
参加者には事前にアンケートにお答えいただいてますので、その結果もあわせて公開します。
PyCPAとは
PyCPAは、テクノロジーの進化を武器に次世代の担い手となる探求者たちのコミュニティです。
もともとは、プログラミング言語Pythonに関心のある公認会計士(CPA)の勉強会として発足しましたが、現在ではより広く、テクノロジー全般に興味を持ち、探求する意欲のある、会計士、経理財務人材、エンジニアなどがメンバーとなって活動しています。
PyCPAは毎月勉強会を開催しており、もくもく会やセミナー、参加型ワークショップを行っています。
現在のコミュニティメンバーはSlack登録者ベースで170名ほど、2019年5月現在の勉強会の累計参加者は250名を超えます。
PyCPAコミュニティと勉強会への参加は無料となっており、運営事務、会場確保、講師の登壇等はすべて、コミュニティのビジョンに共感していただいている組織・個人のボランティアでなりたっています。
PyCPAにコミュニティメンバーとして参加したい方はPyCPAのSlackにご登録ください。
ツイッターでのPyCPAコミュニティメンバーのやり取りは、こちらからご覧いただけます。
リアル・オプション輪読会の概要
今回の勉強会は初の輪読会となりました。
輪読会とは、複数人で同じ本を読み進め、集まって内容を共有し、理解を深める方法です。
今回の輪読会で取り組んだのは『モンテカルロ法によるリアル・オプション分析』という専門書です。
この本は、ファイナンス(金融工学)とプログラミング(ExcelVBA)を用いて、経営意思決定の柔軟性が創出する価値=リアル・オプションを定量的に評価する手法が学べる本です。
参考記事:『モンテカルロ法によるリアル・オプション分析』内容の概説、こんな人におすすめ、いい点と注意点
本書はリアル・オプションを学ぶとても良い題材である一方で、なかなか難易度の高い本だったので、輪読会の題材にしました。
今回は初回ということで、輪読会の目的や進め方について説明しました。
参考記事:【開催前夜】リアル・オプション輪読会の目的、理由、進め方
輪読は第1章を扱いました。
第1章はプログラミング言語ExcelVBAの基礎で、テキストに書かれたコードを入力しながら参加者全員で読み進めました。
VBAの始め方や、変数や関数の定義、for文やDoWhile文などの基本構文、配列の使いかたなどについて学びました。
途中、ファシリテーターから「このコードはモンテカルロ法のこんなシーンで役に立ちます」「この構文は株価シミュレーションの計算で使います」というような解説をはさみながら進めました。
感想とフィードバック
予習について
全員でコードを入力しながら、さくさくと読み進めたので、ちょっと駆け足気味になりました。
この点に関して、参加者から「次回は予習して来ようと思った」という声が上がりました。
事前に準備をしてくれば、輪読会をより意義深いものにできそうです。
バグについて
事前に予習してきた方も、その場でコードを入力した人も、みなさんバグ=プログラムが動かない問題に悩まされていました。
しかし、参加者のひとり(エンジニア)の方から「バグは出るもの、人は完璧じゃない、能率的にバグがとれればOK」という前向きな意見が出て、参加者の気持ちも楽になったように思います。
プログラミングにはバグがつきものですので、輪読会のように他の人と助け合える環境で学習を進めるのがよいと思います。
練習と実践について
プログラミングは一度勉強しても、使わなければすぐ忘れてしまう、という感想が出ました。
たしかに、人は忘れる生き物ですから、どんなに勉強しても使わなければ忘れてしまいます。
もし勉強したことを忘れたくないのであれば、お仕事で使うなり、勉強会で披露するなりして、知識の維持に努める必要がありそうです。
参加者アンケート結果報告
- 参加者の所属
- 参加理由
- 意見・感想・提案など
参加者の所属
次いで一般事業会社(経理財務系)の方、金融機関勤務と続きます。
輪読会の内容がプログラミングであったため、エンジニアの方の存在感はとても大きかったです。
会の最後にMVPを決めたのですが、AI開発がご専門のプログラマの方が絶大な支持を得て見事MVPを獲得されました。
参加理由
みなさんお仕事で金融・ファイナンスに関わりがある方がほとんどで、その理解を深めたいという方が大多数でした。
リアル・オプションという経営意思決定のためのツールを学びたいという、このテキストの目的ど真ん中のかたもたくさんいらっしゃいました。
ファイナンスにせよ、VBAプログラミングにせよ、このテキストはとてもよい教材になりますので、是非チャレンジしてほしいと思います。
意見・感想・提案など
まったく門外漢ですが、なにか楽しそうだと思いました
モンテカルロ法という言葉ぐらいしか知らないので、その内容を理解したい
私も最初はそうでした。
モンテカルロ法という何やら凄い技術があるらしい、なんか楽しそう。
そういう興味が人生を豊かにしてくれると信じています。
一緒に楽しみましょう。
将来的に転換社債のプライシンクモデルを作りたいです!
業績連動型のストックオプション
モンテカルロ法は金融商品評価の強力なツールで、その応用範囲は膨大です。
輪読会での学びをきっかけに、よりアドバンストな内容に挑戦してみるのもいいでしょう。
意思決定にどう活かすのかに興味があります。
リアル・オプションは経営意思決定のツールとして有用です。
単に本を読み、ふーん、そういう手法があるのね、で終わらせることなく、是非輪読会で他の方とディスカッションすることで、ビジネスへの応用について探っていきましょう。
私もとても楽しみです。
まとめ
PyCPA リアル・オプション輪読会の振り返りについて述べました。
徐々にその裾野を広げつつ、コミュニティとしての輪郭を備え始めたPyCPAですが、まだまだ始まったばかりです。
みなさんの学ぶ意欲と発信で、一緒に楽しみましょう。
Warning: Trying to access array offset on value of type bool in /home/r1406503/public_html/keito.luxe/wp-content/themes/xeory_base/lib/functions/bzb-functions.php on line 301
class="col-md-4" role="complementary" itemscope="itemscope" itemtype="http://schema.org/WPSideBar">
最近のコメント