financial toolbox - mathworks · はじめに 本内容は ... 11.2...
Post on 30-Apr-2018
232 Views
Preview:
TRANSCRIPT
Financial Toolbox™
機能概説書
はじめに
本内容は、Windows®環境にインストールされたMATLAB® R2010b を用いて記述され
ています。Linux/Mac環境にインストールされたMATLABとは操作環境のインタフェ
ースが若干異なりますがご了承願います。
本概説書はMATLABの関数群のひとつであるFinancial Toolbox機能の紹介を目的とし
ております。本概説書の中に投資分析手法を扱っている部分がございますが、特定の
投資手法等を推奨するものではありません。したがって本概説書を利用した結果、惹
起されるいかなる事態に対しても、著者および著者の属する組織は一切責任を負いま
せんのでご了承願います。
目次
1 Financial Toolbox の機能について .................................................................................. 1
2 金融データのチャート作成 ............................................................................................ 2
2.1 ローソク足チャート作成 ......................................................................................... 2
2.2 高値−安値−終値チャート(High-Low-Close Chart)作成 ............................................ 3
2.3 ボリンジャーバンドチャート作成 ........................................................................... 5
3 キャッシュフローの分析と計算 ..................................................................................... 7
3.1 プロジェクト評価 .................................................................................................... 7
3.2 減価償却 ................................................................................................................ 10
3.3 年金(アニュイティ) .............................................................................................. 14
4 確定利付証券のプライシングと利回りの計算 .............................................................. 19
4.1 債券価格と利回りの計算 ....................................................................................... 19
4.2 感応度分析 ............................................................................................................. 21
4.3 ALM(資産と負債の総合管理)の考え方 .................................................................. 26
4.4 イミュニゼーション .............................................................................................. 28
5 株式デリバティブのプライシングと分析 ..................................................................... 30
5.1 オプションの損益図の作成 .................................................................................... 30
5.2 ブラック-ショールズ・モデル .............................................................................. 31
5.3 オプションの感応度分析(グリークス) .................................................................. 34
5.4 二項モデル ............................................................................................................. 45
6 GARCH 過程 ................................................................................................................ 46
7 ポートフォリオ分析 ..................................................................................................... 56
7.1 有効フロンティア .................................................................................................. 56
7.2 最適資産配分 ......................................................................................................... 60
7.3 制約条件付き資産配分 ........................................................................................... 62
7.4 VaR(バリュー・アット・リスク) ........................................................................... 65
8 金融統計 ...................................................................................................................... 71
9 Financial Time Series Object について .......................................................................... 75
9.1 Financial Time Series Object ................................................................................... 75
9.2 Financial Time Series Object の操作 ....................................................................... 78
10 テクニカル分析 .......................................................................................................... 82
10.1 MACD (移動平均収束発散法) .............................................................................. 82
10.2 ウィリアムスのパーセント・アール(W%R) ......................................................... 84
10.3 RSI ........................................................................................................................ 88
10.4 OBV(オン・バランス・ボリューム) ..................................................................... 91
11 データ操作 ................................................................................................................. 95
11.1 階差 ...................................................................................................................... 95
11.2 ボックス-コックス(Box-Cox)変換 ......................................................................... 97
11.3 移動平均 ............................................................................................................. 100
12 GUI 機能の活用 ........................................................................................................ 103
付録 A. 祝日データのインポート .................................................................................. 109
付録 B. 日付計算基準(デイカウント方式)の一覧 .......................................................... 110
付録 C. 関数一覧 ............................................................................................................ 111
[参考文献] .................................................................................................................... 122
1
1 Financial Toolboxの機能について
Financial Toolbox は、ファイナンス・金融工学で用いられる数理・統計分析のための計
算環境、および計算結果をグラフ化する環境を提供します。
Financial Toolboxでは、以下の分析ツールを用意しており利用可能です。
・ 債券、デリバティブ、その他の有価証券、ならびにポートフォリオに対する価
格、利回り、感応度の計算と分析
・ Securities Industry Association(SIA)準拠の確定利付証券の価格付け、利回り、感
応度分析
・ ポートフォリオ分析とマネジメント
・ ヘッジ戦略の立案と評価
・ リスクの認識、測定、管理
・ 収益率および減価償却を含むキャッシュフローの分析と計算
・ 経済活動の分析と予測
・ 外国為替商品を含む仕組み金融商品(structured financial instruments)の開発
・ 教育および学術研究
本概説書では例題をいくつかとりあげ、Financial Toolboxの機能の一部をご紹介いたしま
す。
2
2 金融データのチャート作成
株価の動きをグラフ化したものをチャートと呼びますが、Financial Toolbox を利用する
ことにより、より早く簡単にチャートを作成することができます。以下にチャートの作成
例を示します。
2.1 ローソク足チャート作成
チャートの中でも代表的なものがローソク足です。ローソク足という名称は、ある期間
の株価の動きをローソクのようなもので表すことからきています。ローソク足チャートを
見ることによりある特定期間の「始値」「高値」「安値」「終値」が分かります。
「始値」「高値」「安値」「終値」をそれぞれ縦ベクトルで用意し、ローソク足チャートを
作成する関数、candle を実行し、チャート作成を行います。
>> Open = [ 3960; 3910; 3860; 3900; 3920; 3930; 3940; 3910; 3960; 3920];
>> High = [ 3980; 3940; 3900; 3910; 3940; 3940; 3970; 3920; 3960; 3950];
>> Low = [ 3950; 3910; 3860; 3870; 3910; 3920; 3930; 3900; 3920; 3920];
>> Close = [ 3970; 3920; 3890; 3880; 3940; 3940; 3960; 3920; 3930; 3950];
>>
>> candle(High, Low, Close, Open, 'black'); % キャンドルチャート作成
>> xlim([0, 11]); % 横軸の調整
>> ylim([3850, 3990]); % 縦軸の調整
>> ylabel('株価(¥)'); % 縦軸にラベルの書き込み
>> title('ローソク足(日足)'); % タイトルの書き込み
3
図 2.1
2.2 高値−安値−終値チャート(High-Low-Close Chart)作成
「高値」「安値」「終値」のチャートを描きます。高値−安値−終値チャートを描く関数、
highlow を使用してグラフを描きます。
4
>> figure; % 新規Figureウィンドウの表示
>> highlow(High, Low, Close); % 高値-安値-終値チャートの作成
>> xlim([0, 11]);
>> ylim([3850, 3990]);
>> ylabel('株価(¥)');
>> title('A社の株価変動');
>> dateaxis('x', 6, '12/01');
図 2.2
座標軸の目盛りを
日付に変更する関
数 dateaxis
5
2.3 ボリンジャーバンドチャート作成
ボリンジャーバンドを描く関数 bolling を使用してグラフを描きます。ボリンジャー
バンドとは真中に中心線(下の例では 15 日移動平均線)を描き、上下に第 2 標準偏差線を描
きます。第 2 標準偏差線の中に 95%の確率で日々の終値が入る、というものです。バンド(帯)
が広いところと、狭いところで、前者はボラティリティが高く、後者はボラティリティが
低いということを意味します。
>> ibm = importdata('ibm.dat'); % サンプル用の株価データの読み込み
>>
>> figure;
>> bolling(ibm(:,4), 15); % ボリンジャーバンドチャートを作成
>> xlim([0, length(ibm(:,4))]);
>> ylim([min(ibm(:,4)), max(ibm(:,4))]);
>> ylabel('株価($)');
>> title('IBMのボリンジャーバンドチャート');
>> dateaxis('x', 6, '12/31');
>> legend('原系列', '15日移動平均線', '第2標準偏差線', 'Location', ...
'NorthWest'); % 凡例の挿入
ピリオドを3つ置くと
Enter キーを押しても
実行されません。
6
図 2.3
7
3 キャッシュフローの分析と計算
キャッシュフローの評価と金融会計に関する関数は、金利、収益率、および年金(annuity)
に関連する支払い、将来価値および現在価値、減価償却の計算等、キャッシュフローに関
する標準的計算を行います。
ここでは例題として、樹木を育成し後に板材として売るビジネスのプロジェクト評価、
固定資産会計の減価償却、住宅ローンの返済問題について取り上げ、キャッシュフローの
分析と計算に関する関数をご紹介します。
3.1 プロジェクト評価
プロジェクトや企業の価値評価の基本は、将来発生するキャッシュフローを評価するこ
とです。そして多様なキャッシュフローの流列を評価した上で投資対象を選択することに
なります。実際にいくつか異なるキャッシュフローの評価方法が使われていますが、ここ
では下の例題をとりあげ、もっともよく使われている NPV(現在価値)と IRR(内部収益率)
による方法の2つを扱います。
【例題 3.1】
樹木を育成し後に板材として販売するプロジェクトを考えます。初年度(第0年度)
に初期費用がかかり、後は樹木が伐採されるまでキャッシュフローは発生しません。
樹木の伐採は 1 年後もしくは 2 年後かを決めることができます。1 年後にすぐ伐採す
るならば、すぐに収益を得ることができます。しかしもう 1 年待てば、樹木はさら
に成長して得られる収益はより大きくなります。この 2 つの案に関するキャッシュ
フロー流列は以下のようになると仮定します。
(A) (-1000, 2000):1 年後に伐採する。
(B) (-1000, 0, 3000):2 年後に伐採する。
この 2 つのプロジェクトのうちどちらを採択するべきでしょうか?
8
1) NPV(現在価値)
NPV は、以下の式で計算されます。
n
n
r
cf
r
cf
r
cfInvestmentNPV
)1()1()1( 2
21
ここで、Investment は初期投資額(キャッシュアウトフロー)、 ncf は第 n 期の収益(キャッ
シュインフロー)、r は金利です。NPV 基準とは検討するプロジェクトの NPV を計算し、
NPV が最大になるプロジェクトに投資を行うべきという考え方です。
では例題のプロジェクト評価を行いましょう。金利を 10%として計算します。Financial
Toolbox の関数 pvvar を使用し、NPV を計算します。
以下のコマンドを実行します。
>> CashFlowA = [-1000, 2000];
>> CashFlowB = [-1000, 0, 3000];
>> r = 0.1; % 利率
>>
>> NPVA = pvvar(CashFlowA, r) % キャッシュフローから現在価値を計算
NPVA =
818.1818
>>
>> NPVB = pvvar(CashFlowB, r)
NPVB =
1.4793e+003
プロジェクト(A)に投資した場合の NPV は「818.2」、プロジェクト(B)に投資した場
合は「1479.3」と出力されました。よって NPV 基準ではプロジェクト(B)の採択が推奨
されます。
9
2) IRR(内部収益率)
IRR とは、キャッシュフローの現在価値と初期投資額を一致させる割引率のことです。
数式で表すと以下の方程式を満足する r のことです。
0)1()1()1( 2
21
n
n
r
cf
r
cf
r
cfInvestment
ここで、Investment は初期投資額(キャッシュアウトフロー)、 ncf は第 n 期の収益(キャッシ
ュインフロー)です。IRR 基準とは検討するプロジェクトの内部収益率を計算し、内部収益
率が最大となるプロジェクトに投資を行うべきという考え方です。
内部収益率の計算は、Financial Toolbox の関数 irr を使用すれば以下のように簡単に計算
できます。
以下のコマンドを実行します。
>> IRRA=irr(CashFlowA) % キャッシュフローから内部収益率を算出
IRRA =
1
>> IRRB=irr(CashFlowB)
IRRB =
0.7321
プロジェクト(A)に投資した場合の内部収益率は「1」、プロジェクト(B)に投資した場合は
「0.7321」と出力されました。よって IRR 基準ではプロジェクト(A)の採択を推奨するこ
とになります。
10
3.2 減価償却
固定資産の減価償却について企業が有する主な選択肢は、有形固定資産の償却について
は定額法または定率法のいずれかで行うというものです。これら以外にも級数法や生産高
比例法といった方法もありますが適用例は尐ないのが現状です。無形固定資産については
定額法が広く採用されています。よって、ここでは次の例題に基づき定額法と定率法によ
る減価償却について扱いたいと思います。
定額法による毎年の減価償却費は、[(取得原価-残存価格)÷耐用年数]となります。上
記例題に当てはめると取得原価 100 万円から残存価格 10 万円を除いた要償却費 90 万円を
耐用年数 5 年間で均等に償却していくことになるので、毎年の減価償却費は 18 万円となり
ます。
定率法は[期首の未償却残高×一定率]として算定した額を各期の減価償却費とするもの
です。耐用年数を n とすれば一定率は
n
1
1
取得価格
残存価格
となります。上記例題において一定率は 0.369 となります。
減価償却額の計算には、定額法には depstln、定率法には depfixdb を使用します。以
下のように入力します。
【例題 3.2】
第 1 年度の期首に 100 万円で取得した機械について、残存価格が取得原価の 10%、
耐用年数が 5 年として減価償却を行う。減価償却スケジュールを示しなさい。
11
1) 定額法
>> Cost = 1e6;
>> Salvage = Cost * 0.1;
>> Depreciation = depstln(Cost, Salvage, 5) % 定額法で減価償却費を計算
Depreciation =
180000
>> DepreciationStream = Depreciation * ones(5,1);
>> bar(1:5, DepreciationStream); % 棒グラフのを作図
>> hold on %グラフの上書きモードを宣言
>> plot(0:5, Depreciation*[0:5], '--k');
>> grid on % グリッドの表示
>> plot(0:5, Cost - Depreciation*[0:5], ':r');
>> xlabel('年度');
>> ylabel('金額');
>> title('定額法');
>> legend('減価償却費', '減価償却累計額', '未償却残高', 'Location', 'East');
>> hold off %グラフの上書きモード解除
12
図 3.1
2) 定率法
>> clear all % ワークスペース上の全ての変数をクリア
>>
>> Cost = 1e6;
>> Salvage = Cost * 0.1;
>> Depreciation = depfixdb(Cost, Salvage, 5, 5) % 定率法で減価償却費を計算
Depreciation =
1.0e+005 *
3.6904 2.3285 1.4692 0.9270 0.5849
>>
>> bar(1:5, Depreciation);
>> hold on
>> plot(0:5, [0, cumsum(Depreciation)], '--k');
13
>> grid on
>> plot(0:5, [Cost, Cost - cumsum(Depreciation)], ':r');
>> xlabel('年度');
>> ylabel('金額');
>> title('定率法');
>> legend('減価償却費', '減価償却累計額', '未償却残高', 'Location', 'East');
>> hold off
図 3.2
表にまとめると、およそ以下のようになります。
14
表 3.1
【単位:千円】
年度
定額法 定率法
減価
償却費
減価償却
累計額
未償却
残高
減価
償却費
減価償却
累計額
未償却
残高
1 180 180 820 369 369 631
2 180 360 640 233 602 398
3 180 540 460 147 749 252
4 180 720 280 93 841 159
5 180 900 100 58 900 100
(注)千円未満は四捨五入して表示
3.3 年金(アニュイティ)
ファイナンスでは積立預金やローンの返済等にみられるような、毎年一定額のキャッシ
ュフローが発生するものをアニュイティ(annuity、年金)と呼びます。ここでは、ローンを
返済する問題を考え、アニュイティに関する関数を紹介いたします。
元本(借入金残高)を y、毎月の返済額を p、毎回の金利を r、支払い回数を n とし、y[i]
を i 回支払いを終えた時の借入金残高とすると、毎月の返済額は以下のように計算されま
す。
1回支払いを終えた時点の借入金残高は、y[0]から支払額 p を引いたものに、利息 y[0]×r
【例題 3.3】
住宅を購入するのに 20,000,000 円を借りる必要がある。A 銀行からは 30 年、毎月
返済のローンが借りられるとする。もし金利が年率 12%(月利 1%)であるならば毎月の
返済額はいくらになるか。ただし、返済方法は元利均等返済方式とする。
また、B 銀行が 15 年の毎月 220,000 円返済のローンを貸してくれるとすれば、どちら
が得か?
15
を足したものになります。式に表わすと以下のようになります。
rypyy 001
pyr 01
2 回目の支払を終えた時点の借入金残高は同じように計算すると以下のようになります。
pyry 112
右辺の y[1]に先ほど求めた y[1]を代入すると以下のようになります。
pyry 112
rpyr
ppryr
ppyrr
1101
*101
011
2
2
同じような計算を繰り返すと、以下の式を得ます。
nrSpyrnyn
,1*01 ・・・ (3,1)
ここで、 121111,1
nrrrnrS
nrS ,1 は等比級数の和なので、以下のように計算されます。
r
rnrS
n11
,1
これを式(3,1)に代入すると以下を得ます。
r
rpyrny
nn 11
*01
16
ここで y[n]は、n 回支払った後の借入金残高となります。n 回支払っているので y[n]は 0
でなければなりません。
011
*01
r
rpyr
nn
p について解けば毎月の支払額が求まります。
0*11
1y
r
rrp
n
n
それでは例題 3.3 のローンの返済額を求めましょう。毎期の支払額を出力する関数
amortize を使用します。支払額を計算するためには以下のように入力します。
>> RateA = 0.12/12;
>> NumPeriods = 30*12;
>> PV = 2e7;
>> [Principal, Interest, Balance, Payment] = amortize(RateA, ...
NumPeriods, PV);
>> Payment
Payment =
2.0572e+005
よって、月々の返済額は 205,720 円となります。
また、返済スケジュールをグラフ化するためには、次のように入力します。
>> plot([1, NumPeriods], [Payment, Payment],'k', 'LineWidth', 2);
>> hold on
>> fill([1:NumPeriods, NumPeriods, 1], [Principal, 0, 0], 'b');
>> fill([1:NumPeriods, NumPeriods, 1], ...
[Principal, Payment, Payment], 'r');
>> plot(Principal, '--k', 'LineWidth', 2);
指定された領域内を
塗りつぶす fill
17
>> xlim([0, NumPeriods]);
>> text(250, 30000, '元金', 'FontSize', 12, 'Color', 'white');
>> text(100, 100000, '利子', 'FontSize', 12, 'Color', 'white');
>> xlabel('Payment Month');
>> ylabel('円')
>> hold off
図 3.3
次に A 銀行と B 銀行どちらを選択すべきか調べます。
A 銀行から借入れを行うと、月支払いが 205,720 円、B 銀行だと 220,000 円なので一見 A
銀行の方が得に見えます。しかし、B 銀行の利子率を調べると B 銀行の方が得だというこ
とが分かります。実際に、B 銀行の貸出条件の利子率を調べます。関数 annurate を使用
します。次のように入力します。
グラフ内に文字を
挿入する text
18
>> Rate = annurate(15*12, 220000, PV)
Rate =
0.0087
>> Rate*12
ans =
0.1041
月当たりの利子率が 0.87%、年利 10.41%となります。よって支払能力に余力があるならば、
B 銀行からの借入れも検討の対象となるでしょう。
A 銀行から借入れを行った場合の返済総額は 74,059,200 円、B 銀行の場合は 39,600,000
円となり、A 銀行から借入れを行った場合の支払い総額は B 銀行の場合の支払い総額の二
倍弱になります。
19
4 確定利付証券のプライシングと利回りの計算
The Securities Industry Association(SIA)は、証券の価格付け、利回り計算、相場、時間係
数や経過利子、クーポンとみなしクーポン日付、デュレーション、コンベクシティ感応度
に関する慣例を設定しています。 Financial Toolbox は、確定利付証券の経過利子を計算し、
価格と利回りを決定し、コンベクシティとデュレーションを計算する SIA 準拠の関数を
用意しています。また、金利の期間構造を生成し、分析する関数群を含みます。
4.1 債券価格と利回りの計算
以下の条件の債券価格を計算します。Financial Toolbox の利付債の価格を計算する関数
bndprice を使用します。関数 bndprice は初回利払日を考慮するなど複雑な条件の場合
の債券価格を計算することが可能です。以下で例題を実行してみます。
[債券価格の計算]
>> Settle = '11-Nov-1992'; % 受渡日
>> Maturity = '01-Mar-2005'; % 償還日
>> IssueDate = '15-Oct-1992'; % 発行日
>> FirstCouponDate = '01-Mar-1993'; % 最初のクーポン支払日
>> CouponRate = 0.0785; % クーポン・レート
>> Yield = 0.0625; % 利回り(半年複利)
>> Period = 2; % 利払回数
>> Basis = 1; % 30/360 (SIA) 日付計算基準指定
>> [Price, AccruedInt] = bndprice(Yield, CouponRate, Settle, ...
Maturity, Period, Basis, [], IssueDate, FirstCouponDate)
Price =
113.6111
AccruedInt =
0.5669
20
債券価格は、113.61、経過利子 0.57 を出力します。
次に、債券価格は分かっているが利回りが分からないという場合を考えます。利回りを求
める関数 bndyield を使用します。
[利回りの計算]
>> Yield = bndyield(Price, CouponRate, Settle, Maturity, ...
Period, Basis, [], IssueDate, FirstCouponDate)
Yield =
0.0625
最終複利利回りが 6.25%と出力されます。これは債券価格を求めるときに指定した利回り
6.25%と同一となります。
この他にも Financial Toolbox には、財務省証券の価格やゼロクーポン債のような割引有
価証券の価格を計算する関数が用意されています。
21
4.2 感応度分析
債券価格 P はクーポン・レートを C、額面価格を F とすると、利付債の価格利回り y の
関数として以下の式で表わされます。
n
y
FC
y
C
y
CyP
111 2
この式を y で微分すると、
n
knk
y
nF
y
kC
ydy
dP
1 111
1
と、なります。これで利回りが動いたときに債券価格がどの程度動くかが分かります。符
合がマイナスとなっているのは金利と債券価格は逆方向に動くことを示しています。
(マコーレー・)デュレーションは、以下の式で定義されます。
)(
111
yP
y
nF
y
kC
D
n
knk
デュレーション D は、キャッシュフローの時間の加重平均となっています。デュレーショ
ンは時間の単位で、たとえば「年」となります。
デュレーションによる近似を用いて利回りの変化と債券価格の変化の関係を導出すると、
y
yD
P
y
y
P
P
P
1
となります。また、修正デュレーションは、以下の式で定義されます。
22
y
DD
1mod
修正デュレーションによる近似を用いて利回りの変化と債券価格の変化の関係を導出する
と、
yDP
y
y
P
P
P
mod
となります。
デュレーションを求める関数 bnddury を使用することにより簡単に計算できます。以下
のように入力します。
>> Settle = '12-Jan-2000';
>> Maturity = '01-Oct-2001';
>> CouponRate = 0.05;
>> Yield = 0.045;
>> Basis = 0; % actual/actual
>> Period = 2;
>>
>> Price = bndprice(Yield, CouponRate, Settle, Maturity, Period, Basis);
Price =
100.8112
>>
>>
>>
【例題 4.1】
受渡日 2000 年 1 月 12 日、償還日 2001 年 10 月 1 日、クーポン・レート 5%(年 2 回
利払い)、利回り 4.5%の債券のデュレーションを計算せよ。また、計算したデュレーシ
ョンを使用し、利回りが 3.5%に低下した場合の債券価格を求めよ。
23
>> [ModDuration, YearDuration, PerDuration] = bnddury(Yield, ...
CouponRate, Settle, Maturity, Period, Basis)
ModDuration =
1.6107
YearDuration =
1.6470
PerDuration =
3.2940
出力結果は上から、修正デュレーション、デュレーション、半年ベースで報告される期間
単位のデュレーションとなります。半年ベースデュレーション(PerDuration)は、年率換算
されたデュレーション(YearDuration)の倍であることに注意してください。
よって、利回り1%低下時の価格変化率と債券価格は、
>> change1 = -YearDuration * (-0.01) / (1+Yield) % 価格変化率
change1 =
0.0158
>>
>> newPrice1 = Price * (1 + change1) % 債券価格
newPrice1 =
102.4001
102.4001 となります。一方、実際の債券価格は、
>> newPrice = bndprice(Yield-0.01, CouponRate, Settle, Maturity, ...
Period, Basis) % 利回りを1%下げて債券価格を算出
24
newPrice =
102.4755
102.4755 となります。
デュレーションは微分を用いて利回りの変化による債券価格の変化を直線で近似してい
るため、利回りの変化が大きくなると誤差が発生します。誤差を小さくするためにデュレ
ーションと共に用いられるのがコンベクシティです。
コンベクシティ(Convexity)とはデュレーションを利回り y で微分(債券価格 P(y)を利回
り y で 2 階微分)し、P(y)で割ることによって求めることができます。
yP の2階微分は、
n
knk
y
Fnn
y
Ckk
ydy
Pd
122
2
1
1
1
1
1
1
よってコンベクシティ Cv は以下の式で定義されます。
21
1
11
1
1
1
yP
y
Fnn
y
Ckk
Cv
n
knk
では、2階微分のコンベクシティまで考慮した利回りの変化と価格変動の関係を導出しま
す。
2'''
!2!1y
yPy
yPyPyyP (テーラー展開)
2m o d
2''
'
2
1
!2
yCvyDP
P
yyP
yyPyPyyP
25
コンベクシティは、関数 bndconvy で求めることができます。以下のように入力します。
>> [YearConvexity, PerConvexity] = bndconvy(Yield, CouponRate, ...
Settle, Maturity, Period, Basis)
YearConvexity =
3.4575
PerConvexity =
13.8301
価格変化率は上記公式より、
>> change2 = -ModDuration*(-0.01) + 0.5*YearConvexity*(-0.01)^2
change2 =
0.0163
よって利回り変化による新しい価格は、
>> newPrice2 = Price * (1 + change2)
newPrice =
102.4525
となり、デュレーションのみ考慮した価格よりも精度が高くなっていることが分かります。
【例題 4.2】
例題 4.1 を条件とした債券のコンベクシティを計算せよ。また、デュレーションと
コンベクシティを使って利回りが 3.5%に下落した場合の債券価格および価格変化率
を計算せよ。
26
4.3 ALM(資産と負債の総合管理)の考え方
銀行は預金などで調達した資金を、貸付や有価証券を購入し運用することにより利益を
得ています。保険会社や事業会社でも同様です。確定給付型の年金制度でも将来の年金給
付を賄うように年金資産を運用する必要があります。資産面と負債面の両方の観点から総
合的に考慮・管理することにより損失を最小化し、利益を最大化しようとすることを
ALM(資産と負債の総合管理)といいます。
狭義の ALM は、金利リスクの管理のことを指し、企業や金融機関において必要不可欠
な手法として定着しています。ALM を考慮しないで資産運用をおこなったとき、金利が低
下するとどのようなことが起こるのかを例題を通して見ましょう。
資産の価値変化率と資産は、
>> changeAsset = -5 * (-0.03) / (1 + 0.06)
changeAsset =
0.1415
>> newPriceAsset = 5000 * (1 + changeAsset)
newPriceAsset =
5.7075e+003
【例題 4.3】
利回り 6%、デュレーション 5 年の確定利付証券を 5000、利回り(金利)4%、デュレー
ション 25 年の保険債務 4000 のバランスシートを持つ A 生保を考える(自己資本は
1000)。不況のため利回りがそれぞれ 3%低下しました。A 生保のバランスシートはど
のようになるか?
27
およそ 5,708 となります。一方、負債の価値変化率と負債は、
>> changeLiability = -25 * (-0.03) / (1 + 0.04)
changeLiability =
0.7212
>> newPriceLiability = 4000 * (1 + changeLiability)
newPriceLiability =
6.8846e+003
およそ 6,885 となります。
利回りの低下によって資産、負債とも増加しましたがデュレーションの違いから負債の
ほうが大きく膨らむ、という結果になります。
28
4.4 イミュニゼーション
ここで利回り変化のリスクから防御をする債券ポートフォリオを構築する問題を考えま
す。この手続きは、イミュニゼーションと呼ばれます。
Step1 債券の条件を入力します。
>> Settle = '19-Aug-1999';
>> Maturity = ['15-Jun-2005'; '02-Oct-2010'; '14-Mar-2025'];
>> Face = [500; 1000; 250];
>> CouponRate = [0.07; 0.066; 0.08];
>> Yield = [0.06; 0.07; 0.075];
Step2 3 証券の債券価格、デュレーション、コンベクシティを求めます。
>> [CleanPrice, AccruedInterest] = bndprice(Yield, CouponRate, ...
Settle, Maturity, 'Face', Face);
>> DirtyPrice = CleanPrice + AccruedInterest;
>> Duration = bnddury(Yield, CouponRate, Settle, Maturity, ...
'Face', Face);
>> Convexity = bndconvy(Yield, CouponRate, Settle, Maturity, ...
'Face', Face);
【例題 4.4】
B 生保はデュレーション 10.3181、コンベクシティ 157.6346 の構造をもつ保険債務
を 100,000 抱えているとする。B 生保はこの債務の支払いに備えて投資したいと考え
ている。現在投資可能な債券は以下の3種類であるとし、保険債務をイミュナイズ
するような投資方法を求めよ。債券の取得日を 1999 年 8 月 19 日とする。
クーポン・レート 額面価格 償還日
債券 1 7.00% 500 2005 年 6 月 15 日
債券 2 6.60% 1000 2010 年 10 月 2 日
債券 3 8.00% 250 2025 年 3 月 14 日
29
Step3 保険債務のデュレーション・コンベクシティと一致するような 3 証券への投資割
合を求める。
>> A = [Duration.'; Convexity.'; ones(1,3)];
>> b = [10.3181, 157.6364, 1].';
>> Weight = A¥b;
Step4 ポートフォリオのデュレーション・コンベクシティを求める。
>> PortfolioDuration = Weight.' * Duration
PortfolioDuration =
10.3181
>>
>> PortfolioConvexity = Weight.' * Convexity
PortfolioConvexity =
157.6364
Step5 求めるポートフォリオの債券数を算出する。
>> PortfolioValue = 1e5;
HedgeAmount = Weight ./ DirtyPrice * PortfolioValue
HedgeAmount =
-56.4014
71.3582
216.2038
以上より、債券 1 を 56.40 枚ショート、債券 2 を 71.36 枚ロング、債券 3 を 216.20 枚ロン
グすることにより、保険債務をイミュナイズすることが可能になることが分かります。
30
5 株式デリバティブのプライシングと分析
Financial Toolbox はオプションの損益の計算、ブラック-ショールズ・モデルにもとづく
オプション価格の計算、感応度分析(グリークス)のための関数、および二項モデルに基づ
くオプション評価のための関数を備えています。
5.1 オプションの損益図の作成
Financial Toolbox の関数 opprofit を利用して、以下のように入力します。
>> S = 0:5000;
>> subplot(2,2,1); % 座標軸は2×2に配置し、左上に作図
>> Profit = opprofit(S, 3000, 100, 0, 0);
>> plot(S, Profit); grid on;
>> xlim([0, 5000]); xlabel('原資産価格(¥)');
>> ylabel('payoff'); title('コールオプションの買い');
>> subplot(2,2,2); % 右上の座標軸に作図
>> Profit = opprofit(S, 3000, 100, 1, 0);
>> plot(S, Profit); grid on;
>> xlim([0, 5000]); xlabel('原資産価格(¥)');
>> ylabel('payoff'); title('コールオプションの売り');
>> subplot(2,2,3); % 左下の座標軸に作図
>> Profit = opprofit(S, 3000, 100, 0, 1);
>> plot(S, Profit); grid on;
【例題 5.1】
株式を原資産とする行使価格 3000、プレミアム 100 のオプションについて考えま
す。原資産価格によって以下のオプションポジションをとっている場合、どのように
損益が変化するか損益図を作成しなさい。
1 コールオプションの買い
2 コールオプションの売り
3 プットオプションの買い
4 プットオプションの売り
31
>> xlim([0, 5000]); xlabel('原資産価格(¥)');
>> ylabel('payoff'); title('プットオプションの買い');
>> subplot(2,2,4); % 右下の座標軸に作図
>> Profit = opprofit(S, 3000, 100, 1, 1);
>> plot(S, Profit); grid on;
>> xlim([0, 5000]); xlabel('原資産価格(¥)');
>> ylabel('payoff'); title('プットオプションの売り');
図 5.1
5.2 ブラック-ショールズ・モデル
オプション評価理論の中でもっとも有名なモデルはブラック-ショールズ・モデルです。
Financial Toolbox の関数 blsprice はブラック-ショールズ・モデルに基づくオプションの
32
価格を出力します。
ブラック-ショールズ・モデルの公式は次のとおりです。
Tdd
T
TrKSd
SdKedP
KedSdC
rT
rT
12
2
1
012
201
2ln
ここで、各パラメータの意味は以下のとおり。
C :コールの価格
P :プットの価格
S0 :原資産価格
K :行使価格
r :無リスク金利
T :オプションの満期までの期間(年換算)
σ :原資産のボラティリティ
Φ(d):標準正規分布の分布関数
1)オプション価格の計算
>> [Call, Put] = blsprice(17000, 17500, 0.004, 1/12, 0.253)
Call =
293.4860
【例題 5.2】
現在の株価 17000、残存期間 1 ヶ月、行使価格 17500、無リスク利子率 0.4%、ボラ
ティリティを 25.3%(年率)とした場合の、コールオプションとプットオプションの価
格はいくらになるか?また、株価によってオプション価格がどのように変化するのか
を図示しなさい。
33
Put =
787.6536
2)グラフの作成
>> S0 = 12000:22000;
>> [Call, Put] = blsprice(S0, 17500, 0.004, 1/12, 0.253);
>> subplot(2,1,1);
>> plot(S0, Call);grid on;
>> xlabel('原資産価格(¥)');ylabel('call option');
>> title('コールオプションの価格');
>> subplot(2,1,2);
>> plot(S0, Put);grid on;
>> xlabel('原資産価格(¥)');ylabel('put option');
>> title('プットオプションの価格');
図 5.2
34
次に、オプション価格からインプライド・ボラティリティを求めます。この時は、blsimpv
関数を使用します。
>> Volatility = blsimpv(17000, 17500, 0.004, 1/12, 293.49, ...
[], [], [], {'Call'})
Volatility =
0.2530
このように、例題 5.2 にて算出されたコール・オプションの値を指定すれば、問題に登場
したボラティリティの値と一致することが分かります。
5.3 オプションの感応度分析(グリークス)
オプション価格の各種感応度は、通常ギリシャ文字を用いて表わされます。ここでは、
Financial Toolbox に用意されている、オプション価格の、原資産価格 S0 の変化に対する
感応度デルタ(Δ)、さらにその 2 階の感応度ガンマ(Γ)、時間 T の変化に対する感応度
セータ(Θ)、ボラティリティの σ の変化に対する感応度ベガ(κ)、金利 r の変化に対する
感応度ロー(ρ)を分析する関数を紹介します。
1) デルタ(Δ)
デルタとは原資産価格の変化に対するそのオプションのプレミアムの感応度を表わしま
す。たとえばあるオプションのデルタが 0.7 とは、原資産価格が 1%動いた場合コールオプ
【例題 5.4】
例題 5.2 の条件の株式オプションの感応度分析を行いなさい。
【例題 5.3】
現在の株価 17000、残存期間 1 ヶ月、行使価格 17500、無リスク利子率 0.4%、コール
オプションの価格が 293.49 の時のインプライド・ボラティリティはいくつか?
35
ションが 0.7%動くことを意味しています。
デルタは上記ブラック-ショールズ公式を原資産価格 S0 で微分することによって求めるこ
とができ、以下のように定義されます。
コール:Δcall=Φ(1d )
プット:Δput=Φ( 1d )-1
では実際に分析してみましょう。デルタを出力するには、関数 blsdelta を使用します。
>> [CallDelta, PutDelta] = blsdelta(17000, 17500, 0.004, 1/12, 0.253)
CallDelta =
0.3610
PutDelta =
-0.6390
株価水準によってデルタはどのように変化するのかを見てみましょう。以下のようにコマ
ンドを入力します。
>> S0 = 12000:22000;
>> [CallDelta, PutDelta] = blsdelta(S0, 17500, 0.004, 1/12, 0.253, 0);
>> plot(S0, CallDelta);grid on;hold on;
>> plot(S0, PutDelta,'r'); grid on;
>> legend('CallDelta', 'PutDelta', 'Location', 'NorthWest');
>> xlabel('原資産価格(¥)');ylabel('delta');
>> title('原資産価格とデルタの関係')
>> hold off
36
図 5.3
デルタは原資産価格の変化に対するオプション価格の感応度を表わしています。このた
め、オプションを 1 単位のロングポジションに対して、原資産を Δ 単位ショートすること
で価格変動リスクをなくすことができます。この考え方をデルタ・ヘッジと呼びます。
たとえばある投資家が 100 円で、デルタが 0.5 の株式コールオプションを 30 単位ロング
しているとします。オプション 30 単位で 3000 株が買えるものとすると、この投資家は 1500
株の株式をショートすることで株式の価格変化に対するオプションの価格変動リスクをヘ
ッジできることになります。
2) ガンマ(Γ)
ガンマとは原資産価格の価格変化に対するそのオプションのデルタの感応度を表わしま
す。ガンマは以下のようになります。
37
TS
d
0
1'
ガンマを出力するには、関数 blsgamma を使用します。
>> Gamma = blsgamma(17000, 17500, 0.004, 1/12, 0.253)
Gamma =
3.0161e-004
株価水準によるガンマを見るには以下のように入力します。
>> S0 = 12000:22000;
>> Gamma = blsgamma(S0, 17500, 0.004, 1/12, 0.253);
>> plot(S0, Gamma); grid on;
>> xlabel('原資産価格(¥)');ylabel('gamma');
>> title('原資産価格とガンマの関係');
38
図 5.4
3) セータ(Θ)
セータとは時間の変化に対するそのオプション価格の感応度を表わします。セータは以
下のように表わされます。
2
10
210
2
'
2
'
drKeT
dS
drKeT
dS
rT
put
rT
call
プット:
コール:
セータを出力するには、関数 blstheta を使用します。
39
>> [CallTheta, PutTheta] = blstheta(17000, 17500, 0.004, 1/12, 0.253)
CallTheta =
-2.8130e+003
PutTheta =
-2.7430e+003
株価水準とセータの関係を見るには、以下のコマンドを入力します。
>> S0 = 12000:22000;
>> [CallTheta, PutTheta] = blstheta(S0, 17500, 0.004, 1/12, 0.253, 0);
>> plot(S0,CallTheta); grid on; hold on;
>> plot(S0,PutTheta,'r');
>> legend('CallTheta','PutTheta');
>> xlabel('原資産価格(¥)');ylabel('theta');
>> title('原資産価格とセータの関係');
>> hold off;
40
図 5.5
4)ロー(ρ)
ローとは無リスク利子率の変化に対するそのオプション価格の感応度を表わします。ロ
ーは以下の式で表わされます。
2
2
dKTerho
dKTerho
rT
put
rT
call
プット:
コール:
ローを出力する関数 blsrho を使用します。
>> [CallRho, PutRho] = blsrho(17000, 17500, 1/12, 1/12, 0.253)
CallRho =
532.3095
41
PutRho =
-915.9316
株価水準とローの関係を見るには、以下のコマンドを入力します。
>> S0 = 12000:22000;
>> [CallRho, PutRho]= blsrho(S0, 17500, 0.004, 1/12, 0.253, 0);
>> plot(S0,CallRho); grid on; hold on;
>> plot(S0,PutRho,'r');
>> legend('CallRho', 'PutRho', 'Location', 'NorthWest');
>> xlabel('原資産価格(¥)');ylabel('rho');title('原資産価格とローの関係');
>> hold off;
図 5.6
42
5) ベガ(κ)
ベガとはボラティリティの変化に対するそのオプション価格の感応度を表わします。ベ
ガは以下の式で表わされます。
10 ' dTS
ベガを出力する関数 blsvega を使用します。
>> Vega = blsvega(17000, 17500, 0.004, 1/12, 0.253)
Vega =
1.8377e+003
株価水準とベガの関係を見るには、以下のように入力します。
>> S0 = 12000:22000;
>> Vega = blsvega(S0, 17500, 0.004, 1/12, 0.253, 0);
>> plot(S0,Vega); grid on;
>> xlabel('原資産価格(¥)');ylabel('vega');
>> title('原資産価格とベガの関係');
43
図 5.7
最後にガンマが原資産価格、満期までの時間の関係でどのように変化するのか 3 次元プ
ロットを作成します。以下のように入力します。
>> s0 = 12000:100:22000; % 原資産価格を100円刻み
>> t = 1:21; %1ヵ月を21日とする
>> t = t / (21*12); % 年換算
>> [S0, T] = meshgrid(s0, t); % 3次元プロットのための配列の作成
>> Pad = ones(size(S0));
>> Gamma = blsgamma(S0, 17500*Pad, 0.004*Pad, T, 0.253*Pad);
>> CallDelta = blsdelta(S0, 17500*Pad, 0.004*Pad, T, 0.253*Pad);
>> mesh(S0, T*(21*12), Gamma, CallDelta);
>> axis([12000 22000 1 21 0 0.0015]);
>> xlabel('株価(¥)'); ylabel('満期日(日)');
>> title('Call Option Sensitivity Measures');
44
図 5.8
y 軸の満期日(日)の「21」の部分を切り出せば、「2) ガンマ」で扱った原資産価格とガン
マの関係図と同じ図が得られることが分かります。
45
5.4 二項モデル
二項モデルとは、オプションの原資産価格が一定期間経過したときに上昇するか下落す
るかの 2 つの状態しかない場合を想定して、オプションの価値を導出するオプション評価
モデルです。Financial Toolbox には二項モデルによってオプションの価値を計算する関数
binprice が用意されています。
>> [Price, Option] = binprice(50, 50, 0.10, 5/12, 1/12, 0.40, 0)
Price =
50.0000 56.1200 62.9892 70.6991 79.3528 89.0656
0 44.5474 50.0000 56.1200 62.9892 70.6991
0 0 39.6894 44.5474 50.0000 56.1200
0 0 0 35.3611 39.6894 44.5474
0 0 0 0 31.5049 35.3611
0 0 0 0 0 28.0692
Option =
4.4885 2.1625 0.6360 0 0 0
0 6.9597 3.7711 1.3017 0 0
0 0 10.3613 6.3780 2.6641 0
0 0 0 14.6389 10.3106 5.4526
0 0 0 0 18.4951 14.6389
0 0 0 0 0 21.9308
オプション価格は 4.49 と出力されます。
【例題 5.5】
配当のない株式の 5 ヶ月プットオプションを考える。現時点の株価 50、行使価格 50、
無リスク金利 10%(年率)、ボラティリティを 40%(年率)とします。このオプションの
価値を二項モデルにより評価せよ。オプション期間の長さを 1 ヶ月とせよ。
46
6 GARCH過程
ここではIBMの株価収益率を題材にGARCH過程に関する話題を扱います。まずはデータ
をプロットします。期間は1993年8月30日から1995年9月21日(データ数は452)です。
>> data = importdata('ibm.dat');
>> Price = data(:,4);
>> Return = tick2ret(Price, [], 'Continuous');
>> plot(Return);
>> xlim([0 length(Return)]);
>> title(['収益率 19', num2str(data(1,1)),'~19', num2str(data(end,1))]);
図 6.1
ボラティリティ(標準偏差)の推移をプロットします。データ・ウィンドウの長さを 21 日間
としてボラティリティの推移を見ます。
価格から収益率へ変換す
る Financial Toolbox の関
数 tick2ret を使用し、
株価を対数収益率へ変換
しています。
47
>> Volatility=zeros(452-21+1, 1); % 初期化
>> for n = 1:452-21+1
Volatility(n)=sqrt(252)*std(Return(n:n+20));% 年率化
end
>> plot(Volatility);
>> xlim([0 length(Volatility)]);
>> title('ボラティリティ(年率%)の推移');
図 6.2
上の図を見ると、ある程度の長期をとれば収益率のボラティリティは一定ではなく
(heteroskedastic)、時間を通じて変化していることが分かります。ただしボラティリティが
大きい後は大きい状態が続き、小さい後は小さい状態が続くという特徴からボラティリテ
ィの時間的変化はある程度予測可能です。ボラティリティを予測する代表的なモデルとし
て、ARCH(Auto Regressive Conditional Heteroskedasticity)モデル、そして ARCH モデルを一
般化した GARCH(generalized ARCH)モデルがあります。
48
ARCH(p) / GARCH(p, q)モデル
(6.1)
ただし、 に従うとします。
ここで t 期首に利用可能な情報を与えたときの条件付分散を
(6.2)
とモデル化したものを ARCH モデルといい、ARCH(p)と記します。また、
(6.3)
とモデル化しものを GARCH モデルといい、GARCH(p, q)と記します。
(6.1)式は収益率 tr の条件付分布が確定項tXb' と確率項 t の和に従うことを意味していま
す。そして(6.2)式および(6.3)式で t 期の条件付分散2
t の変化が定式化されます。(6.2)式
では、t 期の条件付分散は t-1 期から t–p 期までの過去の収益率の残差変動の二乗の線形
結合で説明されると考えるものです。これによって過去の残差変動が大きいときは今期の
条件付分散も大きく、小さいときには小さい時期が持続することを説明できます。
また、(6.3)式は過去の収益率の残差変動だけでなく過去の条件付分散にも依存すると考
えるものです。
[IBM 株価収益率への応用]
では実際に IBM株価収益率を用いて ARCH(1)モデルをあてはめパラメータの推定を行
います。ARCH 推定は Financial Toolbox の関数 ugarch を使用します。
IBM 株価収益率は以下のモデルで表わされるとします。
tt br
以下のコマンドを実行します。
49
>> X = ones(length(Return),1);
>> [b, bint, ep] = regress(Return, X);
>> b
b =
0.0017
>>
>> [kappa, alpha, beta] = ugarch(ep, 0, 1)
____________________________________________________________
診断情報
変数の数: 2
関数
Objective: ugarchllf
Gradient: finite-differencing
Hessian: finite-differencing (or Quasi-Newton)
Constraints
Nonlinear constraints: do not exist
Number of linear inequality constraints: 1
Number of linear equality constraints: 0
Number of lower bound constraints: 2
Number of upper bound constraints: 0
選択したアルゴリズム
medium-scale: SQP, Quasi-Newton, line-search
____________________________________________________________
診断情報の終了
Max Line search Directional First-order
Iter F-count f(x) constraint steplength derivative optimality Procedure
0 3 -843.236 -2.981e-005
1 39 -997.188 -0.001352 1.16e-010 -1.14e+007 1.17e+005
Statistics Toolbox™の回帰
分 析 を 実 行 す る 関 数
regress を使用。
50
2 42 -1023.85 -1.11e-016 1 -24.5 1.28e+005
3 45 -1024.18 0 1 -1.28e+005 1.28e+005 Hessian modified
4 49 -1127.56 0 0.5 -1.28e+005 5.51e+004 Hessian modified twice
5 53 -1178.15 0 0.5 -1.77e+005 1.34e+005 Hessian modified twice
6 59 -1178.62 -0.0002958 0.125 -19.7 3.48e+004
7 65 -1178.64 -0.0002801 0.125 -30.4 2.81e+004
8 68 -1178.64 0 1 -13.6 2.15e+003
9 71 -1179 -0.0002979 1 -18.9 2.98e+003
10 74 -1179.01 -0.0003009 1 -3.02 279
11 77 -1179.01 -0.0003023 1 -0.994 514
12 80 -1179.01 -0.0003021 1 -5.49 261
13 83 -1179.01 -0.0003021 1 -0.372 0.392 Hessian modified
Local minimum possible. Constraints satisfied.
fmincon stopped because the size of the current search direction is less than
twice the default value of the step size tolerance and constraints were
satisfied to within the selected value of the constraint tolerance.
<stopping criteria details>
アクティブな不等式制約がありません。
kappa =
3.0405e-004
alpha =
Empty matrix: 0-by-1
beta =
0.0471
>>
>> LogLikelihood = ugarchllf([kappa; beta], ep, 0, 1)
対数尤度を出力する関数
ugarchllf を使用。
51
LogLikelihood =
-1.1790e+003
以上より、以下の結果を得ました。
2
1
2 0471.0000304.0
0017.0
tt
ttr
対数尤度 = 1179
つぎに GARCH(1,1)モデルを適用して推定します。
>> [kappa, alpha, beta] = ugarch(ep, 1, 1)
____________________________________________________________
診断情報
変数の数: 3
関数
Objective: ugarchllf
Gradient: finite-differencing
Hessian: finite-differencing (or Quasi-Newton)
Constraints
Nonlinear constraints: do not exist
Number of linear inequality constraints: 1
Number of linear equality constraints: 0
Number of lower bound constraints: 3
Number of upper bound constraints: 0
選択したアルゴリズム
medium-scale: SQP, Quasi-Newton, line-search
____________________________________________________________
診断情報の終了
52
Max Line search Directional First-order
Iter F-count f(x) constraint steplength derivative optimality Procedure
0 4 -1176.48 -2.981e-005
1 45 -1176.75 -3.165e-005 7.28e-012 -2.53e+005 4.57e+004
2 49 -1177.93 2.082e-017 1 -31.8 9.39e+006
3 55 -1180.23 -1.271e-021 0.25 -2.57e+003 7.73e+006
4 65 -1182.66 -2.327e-006 0.0156 -1.17e+003 1.98e+006
5 74 -1182.68 -4.355e-006 0.0313 -53.6 1.28e+006
6 80 -1182.8 -4.232e-006 0.25 -34.3 1.46e+006
7 84 -1183.3 -4.235e-022 1 -101 2.24e+006
8 88 -1183.97 -1.028e-006 1 -231 9.34e+005
9 92 -1184 0 1 -122 8.93e+005
10 96 -1184.11 -5.878e-007 1 -97.8 2.09e+005
11 100 -1184.12 -5.239e-007 1 -20.4 5.07e+004
Local minimum possible. Constraints satisfied.
fmincon stopped because the predicted change in the objective function
is less than the selected value of the function tolerance and constraints
were satisfied to within the selected value of the constraint tolerance.
<stopping criteria details>
アクティブな不等式制約 (options.TolCon = 1e-006 内):
lower upper ineqlin ineqnonlin
1
kappa =
2.5239e-006
alpha =
0.9744
beta =
0.0174
53
>> LogLikelihood = ugarchllf([kappa; alpha; beta], ep, 1, 1)
LogLikelihood =
-1.1841e+003
2
1
2
1
2 9744.00174.00000025.0
0017.0
ttt
ttr
対数尤度 = 1184
GARCH(1,1)モデルをあてはめた2ˆt を出力します。GARCH モデルにあてはめた
2ˆt とそ
の予測値を出力する関数 ugarchpred を使用します。
>> N = length(ep);
>> VarianceForecast = zeros(N, 1);
>> for n = 1:N
[VarianceForecast(n), H] = ugarchpred(ep(1:n), kappa, alpha, beta, 1);
end
>> plot(H);
>> xlim([0, N]); xlabel('time');
>> title('GARCH(1,1)モデル')
54
図 6.3
最後に、2
t の 1 期先予測をプロットします。
>> figure; plot(VarianceForecast);
>> xlim([0, N]); xlabel('time');
>> title('条件付分散の1期先予測')
55
図 6.4
56
7 ポートフォリオ分析
7.1 有効フロンティア
ここではポートフォリオ分析に関する問題をいくつか考えます。扱うデータは次のよう
な期待収益率、標準偏差、相関行列をもつ新興企業 A 社、B 社、C 社の株価の日次リター
ンとします。
表 7-1
日次リターンの統計量
期待収益率 ボラティリティ
A社 0.48% 6.63%
B 社 0.34% 4.32%
C社 0.16% 3.96%
日次リターンの相関係数
A社 B 社 C社
A社 1.00
B 社 0.25 1.00
C社 0.28 0.47 1.00
ここでは、上記の 3 社の株式で構成されるポートフォリオの有効フロンティアを計算す
ることを考えます。有効フロンティアに関する関数 frontcon を使用します。リスク回避
的な投資家は有効フロンティアだけを考えることになります。
以下のように入力します。
>> ExpReturn = 252.*[0.0048 0.0034 0.0016 ]; % 年率変換
>> Volatility = sqrt(252).*[0.0663 0.0432 0.0396]; % 年率変換
>> Correlation = [1.00, 0.25, 0.28; 0.25, 1.00, 0.47; 0.28, 0.47, 1.00];
>> ExpCovariance = corr2cov(Volatility, Correlation);
>> NumPorts = 20; % 構成ウェイトを計算する点の数
>> portopt(ExpReturn, ExpCovariance, NumPorts); %有効フロンティアのプロット
57
図 7.1
各点のボラティリティ、期待収益率、3 社株式の構成比率を計算するには以下のように入
力します。
>> [PortRisk, PortReturn, PortWts] = frontcon(ExpReturn,...
ExpCovariance, NumPorts)
PortRisk =
0.5461
0.5470
0.5498
0.5542
0.5605
0.5684
0.5779
58
0.5889
0.6014
0.6153
0.6304
0.6467
0.6703
0.7043
0.7474
0.7981
0.8550
0.9170
0.9830
1.0525
PortReturn =
0.6703
0.6987
0.7271
0.7555
0.7838
0.8122
0.8406
0.8690
0.8974
0.9258
0.9541
0.9825
1.0109
1.0393
1.0677
1.0961
1.1244
1.1528
1.1812
1.2096
PortWts =
0.1244 0.3676 0.5079
59
0.1450 0.3937 0.4613
0.1655 0.4197 0.4148
0.1861 0.4457 0.3682
0.2066 0.4718 0.3216
0.2272 0.4978 0.2750
0.2477 0.5239 0.2284
0.2683 0.5499 0.1818
0.2889 0.5759 0.1352
0.3094 0.6020 0.0886
0.3300 0.6280 0.0420
0.3564 0.6436 0
0.4368 0.5632 0
0.5173 0.4827 0
0.5977 0.4023 0
0.6782 0.3218 0
0.7586 0.2414 0
0.8391 0.1609 0
0.9195 0.0805 0
1.0000 0 0
この 3 社の株式をランダムに組み合わせたポートフォリオの期待収益率・ボラティリテ
ィのセットの点と有効フロンティアを同時プロットします。以下のように入力します。
>> Weights = rand(1000,3); % 一様乱数による1000×3の重み行列を生成
>> Weights = Weights./repmat(sum(Weights,2),[1,3]);% 各行の和を1に標準化
>> [PortRisk, PortReturn] = portstats(ExpReturn, ExpCovariance, Weights);
>>
>>
>>
>> hold on
>> plot (PortRisk, PortReturn, '.r')
>> title('Mean-Variance Efficient Frontier and Random Portfolios')
>> hold off
ポートフォリオの収益率と
リスク(標準偏差)を計算する
関数 portstats を使用。
60
図 7.2
7.2 最適資産配分
無リスク資産を考慮した資産配分問題を考えます。無リスク資産を考慮すると、最適ポ
ートフォリオは無リスク資産へと接点ポートフォリオと呼ばれる資産への配分の組み合わ
せた点への資産配分が最適となります。
接点ポートフォリオ、最適ポートフォリオを求めるには以下のように入力します。
>> ExpReturn = 252.*[0.0048 0.0034 0.0016 ]; % 年率変換
>> Volatility = sqrt(252).*[0.0663 0.0432 0.0396]; % 年率変換
>> Correlation = [1.00, 0.25, 0.28; 0.25, 1.00, 0.47; 0.28, 0.47, 1.00];
>> ExpCovariance = corr2cov(Volatility, Correlation);
>> NumPorts = 20;
>> NumPorts = 20;
>> [PortRisk, PortReturn, PortWts] = portopt(ExpReturn, ...
ExpCovariance, NumPorts);
>> RisklessRate = 0.08; %無リスク利子率
61
>> BorrowRate = 0.12; %借入れ利子率
>> RiskAversion = 3; %投資家の危険回避係数
>> portalloc (PortRisk, PortReturn, PortWts, RisklessRate, ...
BorrowRate, RiskAversion);
図 7.3
>> [RiskyRisk, RiskyReturn, RiskyWts, RiskyFraction,...
OverallRisk, OverallReturn] = portalloc(PortRisk, ...
PortReturn, PortWts, RisklessRate, BorrowRate, RiskAversion)
RiskyRisk =
0.6500
RiskyReturn =
0.9872
0 0.2 0.4 0.6 0.8 1 1.2 1.40
0.2
0.4
0.6
0.8
1
1.2
1.4Optimal Capital Allocation
Risk (Standard Deviation)
Exp
ecte
d R
etur
n
Optimal Overall PortfolioOptimal Risky Portfolio
62
RiskyWts =
0.3697 0.6303 0
RiskyFraction =
0.7158
OverallRisk =
0.4652
OverallReturn =
0.7294
7.3 制約条件付き資産配分
ここでは制約がある場合の資産配分問題を考えます。ここで扱うデータは以下のような
期待収益率、分散・共分散行列をもつものとします。
表 7.2
X社 Y社 Z社
期待収益率 10% 20% 15%
業種 情報・通信 電気・ガス 電気・ガス
分散・共分散行列 X社 Y社 Z社
X社 0.005
Y社 -0.010 0.040
Z社 0.004 -0.002 0.023
63
制約 1:任意の資産への配分比率の制約は、ポートフォリオの価値の 10%までの空売りが可
能で、最大 110%の配分が可能とします。
制約 2:電気・ガスへの最大配分比率はポートフォリオの 80%まで、情報・通信への最大
配分比率は 70%までとします。
関数 frontcon を使用し、制約条件を引数に指定し有効フロンティアを計算します。ここ
では有効フロンティア上の 8 つの点を考えます。
>> ExpReturn = [0.1 0.2 0.15];
>> ExpCovariance = [0.005, -0.010, 0.004;
-0.010, 0.040, -0.002;
0.004, -0.002,0.023];
>> NumPorts = 8;
制約 1 を満たすようにするためには以下のように入力します。行列の 1 行目が配分比率の
下限、2 行目が上限となります。列は対応する資産を表わします。
>> AssetBounds = [-0.10, -0.10, -0.10;
1.10, 1.10, 1.10];
制約 2 を満たすようにするためには以下のように入力します。
まずはグループ分けを行います。グループ分けするためには以下のように入力します。列
は対応する資産、行で 0,1 を指定することによりグループ分けを行います。下記の例だと
1 行目で Y 社、Z 社を同じグループ、電気・ガスへ分類し、2 行目で X 社を別のグループ、
情報・通信に分類したことになります。
>> Groups = [0, 1, 1;
1, 0, 0];
次に各グループへの配分比率の制約条件を指定します。各行は上で指定したグループに
対応します。以下の例だと電気・ガスへの配分比率を 80%、情報・通信への配分比率を 70%
に制限したことになります。
>> GroupBounds = [0, 0.80; 0, 0.70];
制約条件つき有効フロンティアは以下のように入力することにより得ることができます。
64
>> frontcon(ExpReturn,ExpCovariance, NumPorts, [], AssetBounds, Groups,
GroupBounds);
最後に以下のように入力することにより有効フロンティア上の点を出力します。
>> [PortRisk, PortReturn, PortWts] = frontcon(ExpReturn, ...
ExpCovariance, NumPorts, [], AssetBounds, Groups, GroupBounds)
PortRisk =
0.0416
0.0499
0.0624
0.0767
0.0920
0.1100
0.1378
0.1716
PortReturn =
0.1279
0.1361
0.1442
0.1524
0.1605
0.1687
0.1768
0.1850
PortWts =
0.7000 0.2582 0.0418
0.6031 0.3244 0.0725
0.4864 0.3708 0.1428
0.3696 0.4172 0.2132
0.2529 0.4636 0.2835
65
0.2000 0.5738 0.2262
0.2000 0.7369 0.0631
0.2000 0.9000 -0.1000
7.4 VaR(バリュー・アット・リスク)
過去の相場変動をベースに収益率が正規分布にしたがっていると仮定して統計的手法を
用い、現在保有しているポジションがどの程度リスクを抱えているのかを金額ベースで推
定することを VaR(バリュー・アット・リスク)といいます。
有価証券の特定期間の収益率(R)が、平均 μ、分散2 の正規分布に従っているとしま
す。ここで、確率 α で有価証券の価値が一日で下落する最大幅を求める問題を考えます。
この最大の下落幅のことを水準 100α%のバリュー・アット・リスク(VaR)といいます。
有価証券の現在価値を 0Q 、T 日後の価値を TQ とすれば、水準 100α%の VaR とは、
zQQP T 0 0z
を満たす z のことです。T 日後の価値 TQ が確率変数であり、下落幅 0QQT が z 以内と
なる確率 α が与えられています。収益率の定義より
RQQQT 00
となるので水準 100α%の VaR は、
10 zRQP 0z
を満たす z と書き直すことができます。 z を求めるためには正規分布表を利用します。
上記の式を正規分布表が利用可能なように変形していきましょう。正規分布の標準化を
行います。 oQzr とおけば、
1rRP
rRP
となります。生存関数と密度関数の対称性により、
1rLrRP
66
となります。生存関数、
x
y dyexL 22
2
1)( 0x
で定義される標準正規分布のパーセント点を x とすれば、
xQz 0
が求める VaR となります。
代表的なパーセント点を以下に表示しておきます。分布関数のパーセント点をもとめる
関数 norminv を利用して 1%、5%、10%のパーセント点を求めましょう。たとえば 90%パー
セント点は以下のように入力することにより求めることができます。
>> norminv(0.90, 0, 1)
ans =
1.2816
標準正規分布の分布関数の 90%分位点、1.2816 を戻り値として返します。
表 7-3
標準正規分布のパーセント点
100(1-α ) 10 5.0 1
xα 1.2816 1.6449 2.3263
多くの金融機関では水準 99%で評価するようです。
【例題 7.1】
7.1 節でとりあげた A 社、B 社、C 社の株式のウェイトをそれぞれ 3 分の 1 としたポ
ートフォリオを考えます。このポートフォリオを 5 日間保有する場合の VaR を求めな
さい。ただし現在のポートフォリオの市場価値を 10 億円とし、評価する水準は 90%、
95%、99%とします。
67
VaR を計算する関数 portvrisk を使用します。ポートフォリオの VaR を求めるためには
以下のように入力します。
>> ExpReturn = 5.*[0.0048 0.0034 0.0016 ]; % 5日間の収益率へ変換
>> Volatility = sqrt(5).*[0.0663 0.0432 0.0396]; % 5日間のボラティリティへ変換
>> Correlation = [1.00, 0.25, 0.28; 0.25, 1.00, 0.47; 0.28, 0.47, 1.00];
>> ExpCovariance = corr2cov(Volatility, Correlation);
>> PortWts = 1/3 .* ones(1,3);
>>
>> [PortRisk, PortReturn] = portstats(ExpReturn, ExpCovariance, ...
PortWts);
>> RiskThreshold = [0.01;0.05;0.10];
>> PortValue = 1e9;
>> ValueAtRisk = portvrisk(PortReturn, PortRisk, RiskThreshold, ...
PortValue)
ValueAtRisk =
1.0e+008 *
1.7629
1.1986
0.8978
上から水準 99%、95%、90%VaR となります。たとえばポートフォリオの水準 99%VaR は
約 1 億 7629 万円となります。
これは 99%VaR が最小となるようなポートフォリオを求める問題です。Optimization
Toolbox™の制約条件付き問題と解くための最適化ソルバー関数 fmincon を使用すると簡
単に最適なウェイトが見つかります。まずは、このソルバー関数を使用するために以下の
ような関数 MATLAB ファイル「portweight2var.m」を用意します。
【例題 7.2】
7.1 節でとりあげた A 社、B 社、C 社の株式のウェイトを 99%VaR が最小となるよう
に配分しなさい。
68
function VaR = portweight2var(PortWts, ExpReturn, ExpCovariance, ...
RiskThreshold, PortValue)
[PortRisk, PortReturn] = portstats(ExpReturn, ExpCovariance, PortWts);
VaR = portvrisk(PortReturn, PortRisk, RiskThreshold, PortValue);
次に、コマンド・ウィンドウ上で以下を入力します。ここで、最適化の際の制約条件とし
て、「(ウェイトの総和) = 1」および「0≦(各ウェイト)≦1」という条件を fmincon の引
数として与えております。
>> ExpReturn = 5.*[0.0048 0.0034 0.0016 ];
>> Volatility = sqrt(5).*[0.0663 0.0432 0.0396];
>> Correlation = [1.00, 0.25, 0.28; 0.25, 1.00, 0.47; 0.28, 0.47, 1.00];
>> ExpCovariance = corr2cov(Volatility, Correlation);
>> RiskThreshold = 0.01; % 99%VaR
>> PortValue = 1e9;
>>
>> objfun = @(x)portweight2var(x, ExpReturn, ExpCovariance, ...
RiskThreshold, PortValue);
>> x0 = 1/3.*ones(1,3); % 最適化のための初期値
>> optimopt = optimset('Algorithm', 'sqp', ...
'Display', 'off'); % ソルバーの設定
>>
>>
>> [optW, minVaR] = fmincon(objfun, x0, [], [], ones(1,3), 1, ...
zeros(1,3), ones(1,3), [], optimopt);
>>
>>
>> optW
optW =
0.1439 0.3923 0.4638
>>
>> minVaR
minVaR =
1.6540e+008
Optimization Toolbox™の制
約条件付き最適化用ソル
バー関数 fimncon。
(ウェイトの総和) = 1 0≦(各ウェイト)≦1
最適化のための
目的関数を設定。
69
よって、A 社のウェイト 14.39%、B 社のウェイト 39.23%、C 社のウェイト 46.38%のとき最
小 VaR「1 億 6540 万円」を達成します。それでは、このウェートが最適であることを視覚
的に確認してみましょう。
>> s = 1e-2; % 100ベーシスポイントずつデータ点作成
>> VaR = nan(1/s+1); % Not a Numberによる初期化
>> for k = 0:1/s
wA = k*s.*ones(1/s+1-k, 1); % A社のウェイト
wB = linspace(0,1-k*s,length(wA)).'; % B社のウェイト
wC = ones(1/s+1-k,1)-(wA+wB); % C社のウェイト
PortWts=[wA wB wC];
[PortRisk, PortReturn] = portstats(ExpReturn, ExpCovariance, PortWts);
VaR(1:end-k,k+1) = portvrisk(PortReturn, PortRisk, ...
RiskThreshold, PortValue);
end
>>
>> figure; mesh(0:s:1, 0:s:1, VaR);
>> hold on
>> plot3(optW(1), optW(2), minVaR, 'ro', ...
'MarkerFaceColor', [1 0 0], 'MarkerSize', 8);
>> title('各社のウェートによるVaR');
>> xlabel('A社のウェート');
>> ylabel('B社のウェート')
>> view(-45, 28);
>> legend('VaR曲面', '最適解');
>> hold off
この結果、最適解として算出されたウェート optW は 99%VaR を最小としていることが分
かります(図 7.4)
70
図 7.4
71
8 金融統計
Financial Toolboxは多変数の回帰モデルを扱うことができます。ここでは、多変数正規回
帰モデルのパラメータを推定する関数mvnrmleと、標準誤差を算出する関数mvnrstdの使
用例を示します。その他にも、欠損値がある場合の多変数回帰モデル等を扱うことができ
ますが、詳細はヘルプ機能をご参照ください。
A 社、B 社、C 社の過去の 50 日分の収益率をから、各銘柄のベータ値とアルファ値を推
定する問題を考えます。市場ポートフォリオとして、ある指数となるデータ(Xidx)を用い
ます。あらかじめ必要となるデータを MAT-ファイル(capmdata.mat)として保存しておきま
す。多変量タイプの回帰モデルで推定すると、推定するモデルは以下のものとなります。
t
t
t
t
t
t
t
t
t
x
x
x
y
y
y
3
2
1
3
3
2
2
1
1
3
2
1
10000
00100
00001
以下のように入力します。
>> load capmdata
>> % A: A社の株価収益率
>> % B: B社の株価収益率
>> % C: C社の株価収益率
>> % Xidx: サンプル用説明変数
>>
>> Data = [A, B, C]; % 被説明変数の定義
>> N = length(A);
>> Design = cell(N, 1);
>>
>>
72
>> % 関数mvnrmleの入力に合致するように、説明変数用セル配列作成
>> for k = 1:N
Design{k,1} = [1, Xidx(k), 0, 0, 0, 0;
0, 0, 1, Xidx(k), 0, 0;
0, 0, 0, 0, 1, Xidx(k)];
end
>> [Params, Covar] = mvnrmle(Data, Design); % パラメータ推定
>> [StdParams, StdCovar] = mvnrstd(Data, Design, Covar); % 標準誤差算出
>> tV = Params./StdParams; % t値の算出
>> [Params tV]
ans =
-0.0033 -1.1543
0.9180 5.8039
0.0082 1.2860
1.8201 5.2115
0.0024 0.4770
1.7160 6.1417
以上より、結果は表 8.1 のようになりました。カッコ内の数値は t 値です。
表 8.1
α値 β値
A 社 -0.0033 (-1.1543) 0.9180 (5.8039)
B 社 0.0082 (1.2860) 1.8201 (5.2115)
C 社 0.0024 (0.4770) 1.7160 (6.1417)
A 社のベータ値より、B 社や C 社のベータ値の方が大きいという結果が出ました。
73
複数の時系列間の影響を分析できるモデルに VAR(ベクトル自己回帰)モデルがあります。
ここでは 1995 年 1 月から 2006 年 3 月までの景気動向指数(遅行指数)と、GDP の成長率の
時系列間の関係を VAR モデルで分析したいと思います。GDP は 4 半期データで、景気動
向指数は月次データのため、分析には景気動向指数の 3 ヶ月ごとに平均をとったものを使
用します。あらかじめ必要となるデータを MAT-ファイル(vardata.mat)として保存しておき
ます。推定する VAR モデルは以下のものとします。
yttytytytxtxtxt
xttytytytxtxtxt
ycycycxcxcxccy
ybybybxbxbxbbx
3322113322110
3322113322110
以下のように入力します。
>> load vardata
>> % X: 景気動向指数を3ヶ月ごとに平均をとったデータ
>> % Y: GDPの成長率
>>
>> N = length(X);
>> Data = [X(4:end), Y(4:end)]; % 被説明変数
>> Design = cell(N-3,1);
>>
>> for k = 1:N-3
Design{k,1} = [1, X(k+2:-1:k).', Y(k+2:-1:k).', zeros(1,7);
zeros(1,7), 1, X(k+2:-1:k).', Y(k+2:-1:k).'];
end
>>
>> [Params, Covar] = mvnrmle(Data, Design); % パラメータ推定
>> [StdParams, StdCovar] = mvnrstd(Data, Design, Covar); % 標準誤差
>> tV = Params./StdParams; % t-値
>> [Params, tV]
ans =
23.5485 1.8264
0.2818 1.5345
0.0470 0.2446
0.1848 0.9820
4.6673 1.6084
74
-1.4192 -0.4244
-0.5223 -0.1990
-1.2054 -1.5224
0.0275 2.4346
0.0070 0.5899
0.0032 0.2793
0.7037 3.9488
-0.1483 -0.7223
-0.2421 -1.5022
表 8.2 :景気動向指数 X と GDP 成長率 Y
定数 Xt-1の係数 Xt-2の係数 Xt-3の係数 Yt-1の係数 Yt-2の係数 Yt-3の係数
Xt 23.5485 0.2818 0.0470 0.1848 4.6673 -1.4192 -0.5223
t-値 1.8264 1.5345 0.2446 0.9820 1.6084 -0.4244 -0.1990
Yt -1.2054 0.0275 0.0070 0.0032 0.7037 -0.1483 -0.2421
t-値 -1.5224 2.4346 0.5899 0.2793 3.9488 -0.7223 -1.5022
推定値と t 値から、一期前の GDP 成長率は景気動向指数(遅行指数)に影響を与えている
ことが分かります。一方、景気動向指数(遅行指数)は GDP 成長率にあまり影響を与えてい
ないことが分かります。
75
9 Financial Time Series Objectについて
Financial Toolbox は、金融時系列データを分析するための計算環境を提供します。当機
能を使用することにより時間情報をもつ時系列データの加工と多様な分析が可能となりま
す。当機能を使用することによりベクトルや行列を利用した分析よりも、より直感的なデ
ータの取り扱いが可能となります。
ここからはいくつか例を用いて、金融時系列データ分析の機能のご紹介をいたします。
特に fints 関数の使い方がポイントになります。
9.1 Financial Time Series Object
金融時系列データの分析のためには、「Financial Time Series Object」とよばれる時間情報
とデータを関連させたオブジェクトを基本としてデータを扱います。このオブジェクトは、
関数 fints によって作成されます。
>> ibm = importdata('ibm.dat'); % サンプルデータをインポート
>>
>> sd = num2str(ibm(:,1)); % 日付データを文字列に変更
>> sp = repmat('/', length(ibm(:,1)), 1);
>> C = repmat('19', length(ibm(:,1)), 1);
>> strdates = [C, sd(:,1:2), sp , sd(:,3:4), ...
sp, sd(:,5:6)]; % yymmdd を yyyy/mm/dd へ変更
>> dates = datenum(strdates); % 日付データをシリアル値に変更
>> myfts = fints(dates, ibm(:,2:4), {'High','Low','Close'}, ...
'Daily', 'IBM Stock Price');
>> myfts
myfts =
desc: IBM Stock Price
freq: Daily (1)
'dates: (452)' 'High: (452)' 'Low: (452)' 'Close: (452)'
'30-Aug-1993' [ 44.7500] [ 44.1250] [ 44.6250]
76
'31-Aug-1993' [ 45.8750] [ 44.7500] [ 45.7500]
'02-Sep-1993' [ 46.3750] [ 45.7500] [ 46]
'03-Sep-1993' [ 46.3750] [ 45.6250] [ 45.8750]
'07-Sep-1993' [ 46.2500] [ 45.2500] [ 45.5000]
:
:
Financial Time Series Object のデータをプロットすると、以下のような時間情報と対応する
データをグラフ化したものを出力します。
>> plot(myfts);
図 9.1 : Financial Time Series Object データのプロット 1
さらに出来高データを追加したオブジェクトを作成し、プロットすると以下のような出
来高情報も一覧できる図を作成することが可能となります。
77
>> myfts = fints(dates, ibm(:,2:5), {'High','Low','Close','Volume'}, ...
'Daily', 'IBM Stock Price');
>> figure; plot(myfts,[] ,'Volume', 1);
図 9.2 : Financial Time Series Object データのプロット 2
78
9.2 Financial Time Series Object の操作
Financial Time Series Object は、通常の MATLAB の操作と同じような操作で四則演算等
の計算が可能です。計算が可能なオブジェクトは、時間部分が同じオブジェクト同士とな
っています。
>> dates = (datenum('01/01/2005'):datenum('01/01/2005')+3)';
>> dataSeries1 = exp(randn(4,1)); % 仮想データ生成
>> dataSeries2 = exp(randn(4,1));
>> Data=[dataSeries1, dataSeries2];
>> myfts1 = fints(dates, Data);
>> myfts1
myfts1 =
desc: (none)
freq: Unknown (0)
'dates: (4)' 'series1: (4)' 'series2: (4)'
'01-Jan-2005' [ 1.7120] [ 1.3754]
'02-Jan-2005' [ 6.2582] [ 0.2704]
'03-Jan-2005' [ 0.1045] [ 0.6482]
'04-Jan-2005' [ 2.3683] [ 1.4086]
>> % 演算用にもう一つオブジェクトを作成
>> Data2 =[exp(randn(4,1)), exp(randn(4,1))];
>> myfts2 = fints(dates, Data2);
>> >> myfts2
myfts2 =
desc: (none)
freq: Unknown (0)
'dates: (4)' 'series1: (4)' 'series2: (4)'
'01-Jan-2005' [ 35.8161] [ 2.0656]
'02-Jan-2005' [ 15.9497] [ 0.9389]
'03-Jan-2005' [ 0.2593] [ 2.0437]
'04-Jan-2005' [ 20.7994] [ 0.8147]
79
>> myfts3 = myfts1 + myfts2
myfts3 =
desc: (none)
freq: Unknown (0)
'dates: (4)' 'series1: (4)' 'series2: (4)'
'01-Jan-2005' [ 37.5281] [ 3.4410]
'02-Jan-2005' [ 22.2078] [ 1.2093]
'03-Jan-2005' [ 0.3637] [ 2.6918]
'04-Jan-2005' [ 23.1677] [ 2.2233]
以下のように入力することにより、オブジェクトの一部分を切り出して、新規オブジェ
クトを作成することができます。
>> myfts4 = myfts1.series2
myfts4 =
desc: (none)
freq: Unknown (0)
'dates: (4)' 'series2: (4)'
'01-Jan-2005' [ 1.3754]
'02-Jan-2005' [ 0.2704]
'03-Jan-2005' [ 0.6482]
'04-Jan-2005' [ 1.4086]
複数のデータ部分を切り出し、それらを結合して新規オブジェクトを作成するには、以
下のように入力します。
80
>> myfts5 = [myfts1.series2, myfts2.series1]
myfts5 =
desc: //
freq: Unknown (0)
'dates: (4)' 'series2: (4)' 'series1: (4)'
'01-Jan-2005' [ 1.3754] [ 35.8161]
'02-Jan-2005' [ 0.2704] [ 15.9497]
'03-Jan-2005' [ 0.6482] [ 0.2593]
'04-Jan-2005' [ 1.4086] [ 20.7994]
また、関数 fts2mat を利用することによりオブジェクトを、通常の MATLAB で扱う形
式でデータを取り出すことができます。
>> fts2mat(myfts1)
ans =
1.7120 1.3754
6.2582 0.2704
0.1045 0.6482
2.3683 1.4086
>>
>> M = fts2mat(myfts1,1) % 引数追加によりシリアル日付番号を取得
ans =
1.0e+005 *
7.3231 0.0000 0.0000
7.3231 0.0001 0.0000
7.3232 0.0000 0.0000
7.3232 0.0000 0.0000
81
>> datestr(M(:,1))
ans =
01-Jan-2005
02-Jan-2005
03-Jan-2005
04-Jan-2005
82
10 テクニカル分析
テクニカル分析とは過去の相場の値動きを表わしたチャートを分析し、将来の価格を予
想しようとするものです。Financial Toolbox には多数のテクニカル分析を実行する関数が
用意されています。ここでは代表的な 4 つのテクニカル分析の実行例を示します。その他
の手法につきましては「MATLAB ヘルプ」等をご確認ください。
10.1 MACD (移動平均収束発散法)
このテクニカル分析手法では 2 本の指数平滑平均線を用います。MACD は 2 本の指数平
滑平均の差(短期指数平滑平均-中期指数平滑平均)として算出され、MACD の指数平滑平
均をシグナルとして算出します。
指数平滑平均の計算方法は以下のようになります。
11 tYCtYtY
tY : 当日の指数平滑平均
1tY : 前日の指数平滑平均(初日だけ単純移動平均を用いる)
C : 当日の終値
: 平滑化定数、 10
12 n [n は単純移動平均の平均期間] として計算される.
MACD は、2 本の線が交差するときに「売り」や「買い」のサインと判断します。MACD
ラインがシグナルを下から上へ突き抜けた地点を「買いサイン」、上から下へ突き抜けた地
点を「売りサイン」と判断します。また、両方の線がゼロの基準線から上下どちらかに大
幅に移動したときには、それぞれ買われ過ぎや売られ過ぎのサインと判断します。
83
Financial Toolbox には MACD を算出する関数、macd が用意されています。関数 macd
は短期指数平滑平均を n =12 、中期指数平滑平均を n =26 として MACD を算出します。ま
た、シグナルは MACD を n =9 とする指数平滑したものを算出します。以下のように入力
することにより、MACD チャートを作成することができます。
>> ibm = importdata('ibm.dat'); % サンプルデータのインポート
>>
>> sd = num2str(ibm(:,1)); % 日付データを文字列に変更
>> sp = repmat('/', length(ibm(:,1)), 1);
>> C = repmat('19', length(ibm(:,1)), 1);
>> strdates = [C, sd(:,1:2), sp , sd(:,3:4), ...
sp, sd(:,5:6)]; % yymmdd を yyyy/mm/dd へ変更
>> dates = datenum(strdates); % 日付データをシリアル値に変更
>> myfts = fints(dates, ibm(:,2:4), {'High','Low','Close'}, ...
'Daily', 'IBM Stock Price');
>>
>> ibm_CloseMACD = macd(myfts, 'Close'); % 終値のMACDを算出
>>
>> figure; subplot(2,1,1);
>> plot(ibm_CloseMACD);
>>
>> title(['MACD for IBM, ', datestr(dates(1), 26), ...
'-', datestr(dates(end), 26)]);
>> AxesIds = get(gcf, 'Children'); % 凡例オブジェクトのIDを取得
>> set(AxesIds(1), 'Location', 'SouthWest'); % 凡例を左下に移動
>> XTick = get(AxesIds(2), 'XTick'); %上段のX軸のラベルの位置情報を取得
>> XTickLabel = get(AxesIds(2), 'XTickLabel'); %上段のX軸のラベルの値を取得
>>
>> subplot(2,1,2);
>> highlow(ibm(:,2), ibm(:,3), ibm(:,4));
>> title(['IBMの株価変動, ', datestr(dates(1), 26), ...
'-', datestr(dates(end),26)]);
>> MGN = [XTick(1)-dates(1), XTick(end)-dates(end)];
>> XRange2 = [1+MGN(1), length(dates)+MGN(2)];
>> xlim(XRange2);
>> XTick2 = linspace(XRange2(1), XRange2(2), length(XTick));
>> set(gca, 'XTick', XTick2); % 下段のX軸のラベルの位置を変更
>> XTickLabel2 = [XTickLabel(1,:); datestr(dates(XTick2(2:end-1))); ...
XTickLabel(end,:)];
84
>> set(gca, 'XTickLabel', XTickLabel2); % 下段X軸のラベルの値を変更
図 10.1 : MACD
10.2 ウィリアムスのパーセント・アール(W%R)
この手法は、直近の終値を一定の数日間の価格の変動幅と比較するテクニカル分析のこ
とです。
ウィリアムスのパーセント・アールは以下のような式で算出されます。
85
100%
日間の最安値日間の最高値
当日の終値日間の最高値
nn
nRW
表 10.1 を例に W%R の算出方法を説明します。ここでは、n = 3 とします。
初日の 8 月 1 日の W%R の算出には、8 月 1 日、2 日そして 5 日のデータを使用します。
該当の 3 日間の最高値は 2 日の「728」、最安値は 1 日の「700」ですので、初日の W%R は、
2857.64700728
710728%
RW
となります。(n = 3 なので)8 月 5 日までの W%R は 8 月 1 日、2 日と 5 日までのデータを使
用し算出されます。
8 月 6 日の W%R は、8 月 2 日、5 日と 6 日のデータを使用します。該当の 3 日間の最高
値は 2 日の「728」、最安値は 6 日の「710」であるので、6 日の W%R は、
4444.94710728
711728%
RW
となり、6 日以降の W%R は過去 3 日間のデータを使用し算出されます。
表 10.1
日付 高値 安値 終値 W%R
8 月 1 日 715 700 710 -64.2857
8 月 2 日 728 716 720 -28.5714
8 月 5 日 726 715 723 -17.8571
8 月 6 日 719 710 711 -94.4444
8 月 7 日 714 702 703 -95.8333
86
8 月 8 日 719 707 716 -17.6471
8 月 9 日 716 710 715 -23.5294
一般的に記述すると、n 日目までの W%R の算出までは、初日から n 日目までのデータを
使用し、(n+1)日目以降は過去(n-1)日間と当日のデータを使用することになります。
W%R は、0%近辺を高値警戒水準、100%近辺を下値警戒水準と見ます。水準が 0%、100%
近辺に張りついた動きを「ガーベージ・トップ(ボトム)」と呼び、売買ポイントの参考と
されます。
Financial Toolbox には、W%R を算出する関数 willpctr が用意されています。以下のよ
うに入力することにより、W%R チャートを作成することができます。
>> ibm = importdata('ibm.dat'); % サンプルデータのインポート
>>
>> sd = num2str(ibm(:,1)); % 日付データを文字列に変更
>> sp = repmat('/', length(ibm(:,1)), 1);
>> C = repmat('19', length(ibm(:,1)), 1);
>> strdates = [C, sd(:,1:2), sp , sd(:,3:4), ...
sp, sd(:,5:6)]; % yymmdd を yyyy/mm/dd へ変更
>> dates = datenum(strdates); % 日付データをシリアル値に変更
>> myfts = fints(dates, ibm(:,2:4), {'High','Low','Close'}, ...
'Daily', 'IBM Stock Price');
>>
>> wpctribm = willpctr(myfts); %W%Rの算出
>> figure; subplot(2,1,1);
>> plot(wpctribm);
>> title(['Williams %R of IBM ', datestr(dates(1), 26), ...
'-', datestr(dates(end), 26)]);
>> hold on;
>> plot(myfts.dates, -80*ones(1, length(myfts)), ...
'color', [0.5 0 0], 'linewidth', 2);
>> plot(myfts.dates, -20*ones(1, length(myfts)), ...
'color', [0 0.5 0], 'linewidth', 2);
>> AxesIds = get(gcf, 'Children');
>> XTick = get(AxesIds(2), 'XTick'); % 上段のX軸のラベルの位置情報を取得
87
>> XTickLabel = get(AxesIds(2), 'XTickLabel'); %上段のX軸のラベルの値を取得
>> hold off
>>
>> subplot(2,1,2);
>> highlow(ibm(:,2), ibm(:,3), ibm(:,4));
>> title(['IBMの株価変動, ', datestr(dates(1), 26), ...
'-', datestr(dates(end),26)]);
>> MGN = [XTick(1)-dates(1), XTick(end)-dates(end)];
>> XRange2 = [1+MGN(1), length(dates)+MGN(2)];
>> xlim(XRange2);
>> XTick2 = linspace(XRange2(1), XRange2(2), length(XTick));
>> set(gca, 'XTick', XTick2); % 下段のX軸のラベルの位置を変更
>> XTickLabel2 = [XTickLabel(1,:); datestr(dates(XTick2(2:end-1))); ...
XTickLabel(end,:)];
>> set(gca, 'XTickLabel', XTickLabel2); % 下段X軸のラベルの値を変更
図 10.2 : Williams %R
88
10.3 RSI
Relative Strength Index(相対強度指数)の略。現在の価格と過去の一定期間の価格とを比較
することで証券や相場のモメンタムを計測します。他のモメンタム指標と違って誤差が排
除されるので、広く使われる指標となっています。買われ過ぎや売られ過ぎのサインの確
認に使われると同時に、指数と価格との間に乖離が生じた場合には警告の役目も果たすも
のとなっています。
RSI は以下の式で算出されます。
第 m 日目の RSI(%) = 100 BA
A
A : 過去 n 日間の値上がりケースの終値の合計
B : 過去 n 日間の値下がりケースの終値の合計
表 10.2 を例に RSI の算出方法を説明します。
n=6 とすると、第1日目の RSI の計算は、A を 2 日の終値 720、5 日の 723 と 8 日の 716、
B を 6 日の終値 711、7 日の 703 と 9 日の 715 とし、計算することになります。よって 9 日
の RSI を計算すると、
第 1 日目の RSI = 3498.50100715716703711723720
716723720
2 日目の RSI の計算は、1 日目の RSI の算出時に使用したデータで最も古い 2 日のデー
タを除き、12 日のデータを追加した、5 日から 12 日までのデータを A と B に分け RSI を
算出します。
第 2 日目の RSI = 4423.50100728715716703711723
728716723
同じように、最終日まで RSI を計算していきます。
表 10.2 の 4 列目に算出結果を表示しておきます。
89
表 10.2
日付 終値 前日比 RSI
8 月 1 日 710
8 月 2 日 720 +
8 月 5 日 723 +
8 月 6 日 711 -
8 月 7 日 703 -
8 月 8 日 716 +
8 月 9 日 715 - 50.3498
8 月 12 日 728 + 50.4423
8 月 13 日 736 + 50.5918
8 月 14 日 740 + 67.3121
8 月 15 日 737 - 66.7887
RSI は、50%以上の水準であれば、計算期間内の「値上がり幅」が「値下がり幅」より
も大きかったことを示し、50%以下の水準であれば「値上がり幅」が「値下がり幅」より
も小さかったことを示します。上昇トレンド形成中は RSI が 50%以上の水準が多く、下降
トレンド形成中は 50%以下の水準をつけていることが多い、ということになります。
RSI30%以下の水準は売られすぎの状態、70%以上の水準は買われすぎの状態であり、こ
れらの水準が相場の反転の目安であり、売買のサインとされます。
Financial Toolbox には、RSI を算出する関数 rsindex が用意されています。以下のよう
に入力することにより、RSI チャートを作成することができます。
>> ibm = importdata('ibm.dat'); % サンプルデータのインポート
>>
>> sd = num2str(ibm(:,1)); % 日付データを文字列に変更
>> sp = repmat('/', length(ibm(:,1)), 1);
>> C = repmat('19', length(ibm(:,1)), 1);
>> strdates = [C, sd(:,1:2), sp , sd(:,3:4), ...
sp, sd(:,5:6)]; % yymmdd を yyyy/mm/dd へ変更
>> dates = datenum(strdates); % 日付データをシリアル値に変更
>> myfts = fints(dates, ibm(:,2:4), {'High','Low','Close'}, ...
'Daily', 'IBM Stock Price');
>>
>> rsiibm = rsindex(myfts); %RSIを算出.
90
>> figure; subplot(2,1,1);
>> plot(rsiibm);
>> title(['RSI of IBM, ', datestr(dates(1), 26), ...
'-', datestr(dates(end), 26)]);
>> hold on;
>> plot(myfts.dates, 30*ones(1, length(myfts)), ... %30にラインを引く
'color', [0.5 0 0], 'linewidth', 2);
>> plot(myfts.dates, 70*ones(1, length(myfts)),... %70にラインを引く
'color', [0 0.5 0], 'linewidth', 2);
>> AxesIds = get(gcf, 'Children');
>> XTick = get(AxesIds(2), 'XTick'); % 上段のX軸のラベルの位置情報を取得
>> XTickLabel = get(AxesIds(2), 'XTickLabel'); %上段のX軸のラベルの値を取得
>> hold off
>>
>> subplot(2,1,2);
>> highlow(ibm(:,2), ibm(:,3), ibm(:,4));
>> title(['IBMの株価変動, ', datestr(dates(1), 26), ...
'-', datestr(dates(end),26)]);
>> MGN = [XTick(1)-dates(1), XTick(end)-dates(end)];
>> XRange2 = [1+MGN(1), length(dates)+MGN(2)];
>> xlim(XRange2);
>> XTick2 = linspace(XRange2(1), XRange2(2), length(XTick));
>> set(gca, 'XTick', XTick2); % 下段のX軸のラベルの位置を変更
>> XTickLabel2 = [XTickLabel(1,:); datestr(dates(XTick2(2:end-1))); ...
XTickLabel(end,:)];
>> set(gca, 'XTickLabel', XTickLabel2); % 下段X軸のラベルの値を変更
91
図 10.3 : RSI
10.4 OBV(オン・バランス・ボリューム)
OBV とは、 取引日ごとの出来高に値を付与したものです。OBV と価格との間に生じた
乖離がトレンドを逸脱するような OBV の変化を伴う場合には、買いや売りのサインとさ
れます。
OBV は終値の前日比がプラスの出来高を加算し、前日比のマイナスの出来高を減算して
算出します。終値が前日と変化無しなら前日の OBV を、そのまま算出します。
表 10.3 を例に OBV の計算方法を説明します。 8 月 1 日の計算初日は、1 日の出来高が
そのまま OBV となります。 2 日は、1 日との終値比がプラスなので 1 日の OBV「4,477,000」
と 2 日の出来高「2,470,000」を加算し、OBV を「6,947,000」と算出します。
92
6 日は 5 日との終値比がマイナスなので、5 日の OBV「8,992,000」と 6 日の出来高
「2,010,000」を減算し、OBV を「6,982,000」と算出します。
表 10.3
日付 終値 出来高 前日比 OBV
8 月 1 日 710 4,477,000 4,477,000
8 月 2 日 720 2,470,000 + 6,947,000
8 月 5 日 723 2,045,000 + 8,992,000
8 月 6 日 711 2,010,000 - 6,982,000
8 月 7 日 703 2,860,000 - 4,122,000
8 月 8 日 716 2,887,000 + 7,009,000
8 月 9 日 715 2,673,000 - 4,336,000
OBV が以前の安値となった数値を下回らずに上昇を継続している状態である場合、株価
は上昇トレンド形成過程に入っているとされ、上昇トレンドはしばらく継続すると判断し
ます(図 10.4 左図)。
OBV が以前の高値となった数値を上回らずに下降を継続している状態である場合、株価
は囲うトレンド形成過程に入っているとされ、下降トレンドはしばらく継続すると判断し
ます(図 10.4 右図)。
図 10.4 : OBV の見方
上昇トレンド 下降トレンド
93
Financial Toolbox には、OBV を算出する関数 onbalvol が用意されています。以下の
ように入力することにより、OBV チャートを作成できます。
>> ibm = importdata('ibm.dat'); % サンプルデータのインポート
>>
>> sd = num2str(ibm(:,1)); % 日付データを文字列に変更
>> sp = repmat('/', length(ibm(:,1)), 1);
>> C = repmat('19', length(ibm(:,1)), 1);
>> strdates = [C, sd(:,1:2), sp , sd(:,3:4), ...
sp, sd(:,5:6)]; % yymmdd を yyyy/mm/dd へ変更
>> dates = datenum(strdates); % 日付データをシリアル値に変更
>> myfts = fints(dates, ibm(:,2:5), {'High','Low','Close','Volume'}, ...
'Daily', 'IBM Stock Price');
>>
>> obvibm = onbalvol(myfts); %OBVの算出
>>
>> subplot(2,1,1);
>> plot(obvibm);
>> hold on;
>> title(['On-Balance Volume, ', datestr(dates(1), 26), ...
'-', datestr(dates(end),26)]);
>> AxesIds = get(gcf, 'Children');
>> set(AxesIds(1), 'Location', 'SouthEast'); % 凡例を右下に移動
>> XTick = get(AxesIds(2), 'XTick'); % 上段のX軸のラベルの位置情報を取得
>> XTickLabel = get(AxesIds(2), 'XTickLabel'); %上段のX軸のラベルの値を取得
>> hold off
>>
>> subplot(2,1,2);
>> highlow(ibm(:,2), ibm(:,3), ibm(:,4));
>> title(['IBMの株価変動, ', datestr(dates(1), 26), ...
'-', datestr(dates(end),26)]);
>> MGN = [XTick(1)-dates(1), XTick(end)-dates(end)];
>> XRange2 = [1+MGN(1), length(dates)+MGN(2)];
>> xlim(XRange2);
>> XTick2 = linspace(XRange2(1), XRange2(2), length(XTick));
>> set(gca, 'XTick', XTick2); % 下段のX軸のラベルの位置を変更
>> XTickLabel2 = [XTickLabel(1,:); datestr(dates(XTick2(2:end-1))); ...
XTickLabel(end,:)];
>> set(gca, 'XTickLabel', XTickLabel2); % 下段X軸のラベルの値を変更
94
図 10.5 : OBV
95
11 データ操作
データの持つ特徴を調べる、あるいは際立たせるためにデータを変換することがありま
す。Financial Toolbox には多数のデータ変換を行う関数が用意されています。ここでは、
階差、ボックス-コックス(Box-Cox)変換、移動平均を実行する関数を紹介いたします。そ
の他の計算手法はヘルプ機能等をご参照ください。
11.1 階差
株価やマネーサプライのように、多くの経済時系列データはトレンドや季節変動を持っ
ています。このような特徴をもつ経済データに対しては、しばしは階差と呼ばれる処理を
施します。
ty をデータの列とすると、階差の処理は以下のようになります。
ttt yyy 1
Δ : 階差オペレータ
ここでは、対数データから階差をとる操作を考えます。対数階差は以下のように変形で
きます。
1
1 logloglogt
t
tty
yyy
1
1
1
1l o g
t
tt
t
t
y
yy
y
y
対数階差は ty の変化率にほぼ等しいため、 ty が株価の場合、その対数階差は収益率を表
96
わすことになります。Financial Toolbox に用意されている、階差を計算する関数、diff を
使用し、ある企業の株価の収益率を求めてみましょう。
>> ibm = importdata('ibm.dat'); % サンプルデータのインポート
>> sd = num2str(ibm(:,1)); % 日付データを文字列に変更
>> sp = repmat('/', length(ibm(:,1)), 1);
>> C = repmat('19', length(ibm(:,1)), 1);
>> strdates = [C, sd(:,1:2), sp , sd(:,3:4), ...
sp, sd(:,5:6)]; % yymmdd を yyyy/mm/dd へ変更
>> dates = datenum(strdates); % 日付データをシリアル値に変更
>>
>> myfts = fints(dates, ibm(:,2), {'Close'}, 'Daily', 'IBM Stock Price');
>> logmyfts = log(myfts); %オブジェクトの終値を対数変換
>> logdiffmyfts = diff(logmyfts); %階差関数によって対数終値の階差(収益率)取得
>>
>> subplot(2,1,1);
>> plot(myfts);
>> ylabel('株価'); title('株価の推移');
>> AxesIds = get(gcf, 'Children');
>> set(AxesIds(1), 'Location', 'SouthEast'); % 凡例を右下に移動
>>
>> subplot(2,1,2);
>> plot(logdiffmyfts); % (日次)収益率のプロット
>> ylabel('対数収益率');title('対数収益率の推移');legend('対数収益率');
97
図 11.1 : 株価と収益率
11.2 ボックス-コックス(Box-Cox)変換
使用したい統計的手法により、データに正規分布の仮定が必要な場合があります。ボッ
クス-コックス変換はデータの分布を正規分布に近づけたい場合に使用します。また、デー
タが分散不均一性を持つ場合に、分散均一化になるようデータを変換したい場合にもボッ
クス-コックス変換を使用します。
ty をデータ列とすると、ボックス-コックス変換は以下のようにデータの変換を行います。
98
0l o g
01
t
t
t
y
yyf
ここで、λ は対数尤度を最大化するように決定されます。
ボックス-コックス変換を行う関数、boxcox を使用し変換されたデータをプロットしてみ
ましょう。データは Financial Toolbox デモ用にあらかじめ用意されているものを使用しま
す。以下のように入力します。
>> whrl = ascii2fts('whirlpool.dat', 1, 2, []);
>> f_whrl = fillts(whrl);
>> bc_whrl = boxcox(f_whrl); %Box-Cox変換
>> figure; subplot(2,1,1);
>> hist(f_whrl.Close,15);
>> title('変換前のデータの分布');
>> subplot(2,1,2);
>> hist(bc_whrl.Close,15);
>> title('ボックス-コックス変換後のデータの分布');
99
図 11.2 : ボックス-コックス変換 1
変換前後のデータをプロットします。
>> figure; subplot(2,1,1);
>> plot(f_whrl.Close);
>> title('変換前のデータのプロット');
>> subplot(2,1,2);
>> plot(bc_whrl.Close);
>> title('ボックス-コックス変換後のデータのプロット');
100
図 11.3 : ボックス-コックス変換 2
11.3 移動平均
移動平均を使うと、データを平準化するとともにトレンドを確認することが出来ます。
移動平均を求めるには、指定した期間の連続するデータを加算し指定した期間数で割って
平均値を求めます。時間の経過に従いデータの中でもっとも古いものを順次取り除き、最
新のデータを加え平均を求める、ということを順次繰り返しデータを得ます。Financial
Toolbox の関数 tsmovavg を使用し、チャートを作成します。ここでは、単純移動平均を
計算しますが、その他にも加重移動平均等を計算することができます。詳細は「MATLAB
ヘルプ」をご参照ください。
>> ibm = importdata('ibm.dat'); % サンプルデータのインポート
101
>>
>> sd = num2str(ibm(:,1)); % 日付データを文字列に変更
>> sp = repmat('/', length(ibm(:,1)), 1);
>> C = repmat('19', length(ibm(:,1)), 1);
>> strdates = [C, sd(:,1:2), sp , sd(:,3:4), ...
sp, sd(:,5:6)]; % yymmdd を yyyy/mm/dd へ変更
>> dates = datenum(strdates); % 日付データをシリアル値に変更
>>
>> myfts = fints(dates, ibm(:,2), {'Close'}, 'Daily', 'IBM Stock Price');
>>
>> mov25myfts = tsmovavg(myfts, 's',25); %25日移動平均取得
>> mov75myfts = tsmovavg(myfts, 's',75); %75日移動平均取得
>> plot(myfts);
>> hold on;
>> plot(mov25myfts,'g');
>> plot(mov75myfts,'r');
>> ylabel('株価');title('移動平均線のプロット');
>> legend('原系列','25日移動平均線','75日移動平均線','Location', ...
'NorthWest');
>> hold off;
102
図 11.4 : 移動平均
103
12 GUI機能の活用
前章までに説明した機能は GUI 環境においても利用することができます。ここでは GUI
環境による Financial Toolbox の機能のご紹介をいたします。
まずは、サンプル用 Financial Time Series Object をカレント・ディレクトリに保存し
ます。
>> load disney.mat
>> save guiSmp.mat dis
>> clear all; clc
次に、 GUI ツールを起動する関数 ftsgui を入力します。
>> ftsgui %GUI ツールの起動
図 12.1 のメイン・ウィンドウが表示されます。
図 12.1 : GUI 環境の利用
そして、先ほど保存したを mat ファイル(guiSmp.mat)を読み込むために、メニューバー
の「ファイル」⇒「Load」からこの mat ファイルを指定します。保存されているオブジェ
クトデータが読み込まれ、図 12.2 のような画面が現れます。
104
図 12.2 : Financial Time Series Object の読込
「Financial Time Series GUI」ウィンドウのメニューバーの項目、「データ」「Analysis」
「Graphs」の中の特定の項目を選択することにより GUI でのデータの操作が可能となりま
す。
105
図 12.3 : 「データ」項目の一覧
週次データへ変換する場合は、メニューバーの「データ」から「Convert Data Frequency To」
⇒「To Weekly」を選択します。新しいフィギュアが立ち上がり、週次データへ変換された
グラフが出力されます。
図 12.4 : 週次データへの変換
106
つぎに、「Analysis」についてみましょう。
メニューバーの「Analysis」を選択すると、図 12.5 が現れます。
図 12.5 : 「Analysis」項目の一覧
たとえば、基本統計量を計算するには「Analysis」⇒「Basic Statistics」を選択します。
すると、図 12.6 のように計算結果が出力されます。
図 12.6 : 基本統計量の算出
つぎに、「Graphs」について見ておきましょう。
107
メニューバーの「Graphs」を選択すると、図 12.7 が現れます。
図 12.7 : 「Graphs」項目の一覧
ローソク足チャートを作成するには「Graphs」⇒「Candle Plot」を選択します。
図 12.8 : ローソク足の作成
GUI 環境で加工されたデータ、たとえば先ほど「Convert Data Frequency To」⇒「To Weekly」
によって週次データに変換されたデータは mat ファイルとして保存することにより、再び
108
コマンドラインにて操作することが出来ます。保存するには、Financial Time Series GUI
ウィンドウ上のメニューバーの「ファイル」から「Save As」を選択します。
図 12.9 : mat ファイルの保存 1
ここでは「guiSmp_Weekly.mat」という名前で保存します。保存に成功すると図 12.10 の
ポップアップメッセージが出現します。
図 12.10 : mat ファイルの保存 2
保存された mat ファイルをコマンドライン上で読み込むことによって、コマンドライン
にてデータを扱うことが可能となります。
109
付録A. 祝日データのインポート
Financial Toolbox には、holidays という祝日を管理する関数がありますがデフォルトの
状態ではアメリカの祝日を参照しております。たとえば、2011 年 01 月 01 日から 2011 年
12 月 31 日までの祝日を調べると
>> Syukujitsu = holidays('01-Jan-2011', '31-Dec-2011');
>> datestr(Syukujitsu)
ans =
17-Jan-2011
21-Feb-2011
22-Apr-2011
30-May-2011
04-Jul-2011
05-Sep-2011
24-Nov-2011
26-Dec-2011
という結果が帰ってきます。この holidays 関数はキャッシュフローの計算をする関数や
Financial Time Series Object のメソッドなどの関数に呼び出されておりますので様々な
影響を及ぼします。そこで、ここでは祝日データをインポートし、新たな holidays 関数
を作成する方法を紹介します。
Step 1 FinancialCalendar.com より Data, Code および Info ファイルをダウンロード
カレンダー情報提供サイト<http://www.FinancialCalendar.com>から上記3つのファイ
ルをダウンロードしてください。
Step 2 Trading Calendars Graphical User Interface を使って各国のマーケットに則し
た holidays.m を生成
>> createholidays
を実行すると Trading Calendars Graphical User Interface が起動し、ダウンロードした
3 つのファイル、holidays.m を出力するフォルダ、チェック項目などを入力します。こ
の GUI の使い方については以下のヘルプをご覧ください。
マーティン・ルーサー・
キング・ジュニア・デー
等のアメリカの祝日が
出力
110
>> web([matlabroot, '/help/toolbox/finance/f11-67944.html']);
付録B. 日付計算基準(デイカウント方式)の一覧
Financial Toolbox は 14 種類の日付計算基準をサポートし、各関数の入力引数(Basis)とし
て渡すことができます。
Day-count basis Basis の値
Actual/Actual 0 (デフォルト値)
30/360 (SIA) 1
Actual/360 2
Actual/365 3
30/360 (PSA) 4
30/360 (ISDA) 5
30/360 (European) 6
Actual/365 (Japanese) 7
Actual/Actual (ISMA) 8
Actual/360 (ISMA) 9
Actual/365 (ISMA) 10
30/360E (ISMA) 11
Actual/365 (ISDA) 12
BUS/252 13
具体的な使用例が 4.1 債券価格と利回りの計算にありますのでご参照ください。
111
付録C. 関数一覧
日付の処理と変換
now 当日の年月日時間のシリアル日付番号
today 当日の年月日のシリアル日付番号
datefind 行列形式の日付番号のインデックス
datevec 日付の構成要素
day 年月日の日を出力
eomdate 指定された月の末日のシリアル日付を出力
eomday 指定された月の末日を出力
hour 日付の時間または時間
lweekdate 月の最後に発生する週日
minute 日付または時間の分
month 年月日の月を出力
months 日付間の全体の月数
nweekdate 月内に発生する特定の週日の日付
second 日付または時間の秒
weekday 週の曜日
weeknum ある年の第何週目かを出力
year 年月日の年を出力
yeardays 年の日数
date2time 日付から時間と回数への変換
datedisp 日付項目の表示
datenum 日付番号の作成
datestr 日付文字列の作成
dec2thirtytwo 10 進数から 32 分数への変換
m2xdate MATLAB シリアルデート番号から Excel シリアル値へ変換
thirtytwo2dec 32 分数を 10 進数に変換
time2date 時間と回数から日付に変換
uicalendar カレンダーを表示
x2mdate Excel シリアル値から MATLABシリアルデート番号への変換
busdate 前後の営業日
busdays シリアル日付形式の営業日
createholidays 取引用カレンダーを作成
datemnth 将来または過去の日付
datewrkdy 将来または過去の営業日
112
days360 360 日の年を基準とする日付間の日数
days360e 360 日の年を基準とする日付間の日数(ヨーロピアン)
days360isda 360 日の年を基準とする日付間の日数(ISDA)
days360psa 360 日の年を基準とする日付間の日数(PSA)
days365 365 日の年を基準とする日付間の日数
daysact 日付間の実際の日数
daysadd 任意の日付カウントにおける開始日からの日数
daysdif 日付カウント基準における日付間の日数
fbusdate 月の最初の営業日
holidays 休日と休業日
isbusday 営業日の日付に対して真
lbusdate 月の最後の営業日
nyseclosures ニュウヨーク証券取引所の閉鎖日を出力
thirdwednesday 月の第3水曜日
wrkdydif 日付間の営業日数
yearfrac 日付間の年の端数
accrfrac 決済日までのクーポン期間(SIA 準拠)
cfamounts 債券ポートフォリオのキャッシュフローと
タイムマッピング(SIA 準拠)
cfdates 確定利付証券のキャッシュフロー日付
cfport キャッシュフロー額のポートフォリオ形式
cftimes 債券のキャッシュフロー日付に対応した時間係数(SIA 準拠)
cpncount 満期までのクーポン支払い残(SIA 準拠)
cpndaten 確定利付証券の次回クーポン日付(SIA 準拠)
cpndatenq 確定利付証券の次回クーポン日付(SIA 準拠)
cpndatep 確定利付証券の次回クーポン日付(SIA 準拠)
cpndatepq 確定利付証券の前回みなしクーポン日付(SIA 準拠)
cpndaysn 次回クーポン日付までの日数(SIA 準拠)
cpndaysp 前回のクーポン日付からの日数(SIA 準拠)
cpnpersz クーポン期間内の日数(SIA 準拠)
通貨の書式変換
cur2frac 10 進数の通貨の値を分数の値に変換
cur2str 通貨書式(「$」付き)に変換
dec2thirtytwo 10 進法から 32 進法へ
frac2cur 分数の通貨価値を 10 進数の通貨価値に変換
113
thirtytwo2dec 32 進法から 10 進法へ
金融データのチャート作成
bar 棒グラフ
bar3 3次元棒グラフ
bar3h 水平方向の棒グラフ
barh 水平方向の3次元棒グラフ
bolling ボリンジャーバンド
candle 株価データのローソク足チャート
candle FINTS オブジェクトのローソク足チャート
chartfts 双方向チャート
dateaxis シリアル日付形式軸からカレンダー日付形式軸
highlow 株価データの4本値のプロット
highlow FINTS オブジェクトの4本値のプロット
kagi カギ足チャート
linebreak ラインブレーク・チャート
movavg リード/ラグ移動平均チャートの作成
plot データ系列のプロット
pointfig 点図形チャート
priceandvol 価格/出来高グラフ (2 座標軸)
renko 練行足チャート
volarea 価格/出来高グラフ (1 座標軸)
キャッシュフローの分析と計算
annurate 期間あたりの利子率の算出
annuterm 資金の支払い、または積立の目標達成までの時間の計算
amortize 償却スケジュールの計算
depfixdb 定率法による償却額の計算
depgendb 特別減価償却法の償却額の計算をする(ex.二倍定率法)
deprdv 未償却残高の計算
depsoyd 級数法による償却額の計算
depstln 定額法による償却額の計算
pvfix 定期かつ定額支払いの割引現在価値の算出
pvvar 不定期または不定額支払いによる割引現在価値の算出
fvdisc 割引債の満期受取額の計算
114
fvfix 定額かつ定期支払いの将来価値の算出
fvvar 不定期または不定額支払いによる将来価値の算出
payadv 金利払いを考慮した一回あたりの定期支払額の計算
payodd 最初の支払いが端数の場合の一回あたりの定期支払い額の計算
payper 将来の目標積立額を設定した上で、一回あたりの定期積立額の計算
payuni 変動キャッシュフローに等価な均一支払い額の算出
effrr 実質利子率を計算
elpm 期待下方部分モーメントの計算
irr 内部収益率を計算
mirr 修正内部収益率を計算
nomrr 実質利子率から名目利子率への変換
taxedrr 名目収益率から税引き後収益率の計算
xirr 非定期または不定額のキャッシュフローの内部収益率の計算
cfconv キャッシュフローのコンベクシティを計算
cfdur キャッシュフローのデュレーションを計算
確定利付証券
acrubond 利付債の経過利子
acrudisc 割引債の経過利子
bndprice 満期利回りからの確定利付証券の価格決定
prdisc 割引有価証券の価格
prmat 満期時利払いの有価証券の価格
prtbill 財務省証券の価格
disc2zero 与えられた割引曲線に対するゼロ曲線
fwd2zero 与えられた先渡し曲線に対するゼロ曲線
prbyzero ゼロ曲線によるポートフォリオ債権の価格決定
pyld2zero 与えられた額面利回り曲線に対するゼロ曲線
tbl2bond 与えられた財務省短期証券パラメータに対する
財務省長期証券パラメータ
tr2bonds 与えられた財務省長期証券パラメータに対する期間構造パラメータ
zbtprice 価格の与えられたクーポン債データからのゼロ曲線ブートストラップ
zbtyield 利回りの与えられたクーポン債データからのゼロ曲線
zero2disc 与えられたゼロ曲線に対する割引曲線
zero2fwd 与えられたゼロ曲線に対する先物曲線
zero2pyld 与えられたゼロ曲線に対する額面利回り曲線
beytbill 財務省短期証券を長期債換算した利回り
bndyield 確定利付証券の満期利回り
115
discrate 金融市場証券の割引率
ylddisc 割引有価証券の利回り
yldmat 満期時利払いの有価証券の利回り
yldtbill 財務省短期証券の利回り
bndspread スポット曲線上の静的なスプレッド
bndconvp 価格から債権のコンベクシティを算出
bndconvy 利回りから債権のコンベクシティを算出
bnddurp 価格から債券のデュレーションを算出
bnddury 利回りから債券のデュレーションを算出
bndkrdur ゼロ曲線から債権のキーレート・デュレーションを算出
ポートフォリオ分析
abs2active 制約を絶対フォーマットからアクティブフォーマットに変換
active2abs 制約をアクティブフォーマットから絶対フォーマットに変換
arith2geom 資産収益率の算術モーメントから幾何モーメントへ変換
corr2cov 標準偏差と相関行列から分散・共分散行列を計算
cov2corr 分散・共分散行列を標準偏差と相関行列に変換
ewstats 収益時系列からの期待収益と共分散を計算
frontcon 平均分散有効フロンティア
frontier 有効フロンティア
geom2arith 資産収益率の幾何モーメントから算術モーメントへ変換
holdings2weights ポートフォリオ持分からウェイト
pcalims 資産分配の一次不等式
pcgcomp 資産グループ比較制約の一次不等式
pcglims 資産グループの最小最大資産配分の一次不等式
pcpval 合計ポートフォリオ値を結滞する不等式
periodicreturns 日次収益率から特定期間の収益率
portalloc 有効フロンティアポートフォリオへの最適資産分配
portcons ポートフォリオ制約
portopt 制約条件付き有効フロンティア上のポートフォリオ
portrand ランダムなポートフォリオのリスク、リターン、ウェイト
portror ポートフォリオの期待収益率を算出
portsim ポートフォリオ価値のデータ生成
portstats ポートフォリオの期待収益とリスク
portvar ポートフォリオの分散値を算出
portvrisk ポートフォリオの Value at Risk
116
ret2tick 収益率から価格への変換
ret2tick (fts) 収益率から価格への変換 (Time Series Object 対応)
selectreturn 3次元有効フロンティアからポートフォリオの形状
targetreturn ポートフォリオウェイトの正確性
totalreturnprice 価格から総収益率系列
tick2ret 価格から収益率への変換
tick2ret (fts) 価格から収益率への変換 (Time Series Object 対応)
weights2holdings ウェイトからポートフォリオの持分
emaxdrawdown 期待最大ドローダウンを算出
inforatio インフォメーションレシオの計算
lpm 下方部分モーメントを算出
maxdrawdown 最大ドローダウンを算出
portalpha アルファと収益率を算出
sharpe シャープレシオを算出
金融統計
mvnrfish 多変量正規、または最小二乗回帰のフィッシャー情報行列
mvnrmle 多変量正規回帰(欠損値は無視)
mvnrobj 欠損値が無い場合の多変量正規回帰の尤度関数
mvnrstd 多変量正規回帰モデルの標準誤差
ecmnfish フィッシャー情報行列
ecmnhess 負の対数尤度関数のヘシアン
ecmninit 初期の期待値と分散共分散
ecmnmle 不完全の多変量正規データの平均と分散共分散
ecmnobj 多変量正規の負の尤度関数
ecmnstd 不完全のデータの平均と分散共分散の標準誤差
ecmmvnrfish 多変量正規回帰モデルのフィッシャー情報行列
ecmmvnrmle 欠損値があるデータの多変量正規回帰
ecmmvnrobj 欠損値があるデータの多変量正規回帰の対数尤度関数
ecmmvnrstd 多変量正規回帰モデルの標準誤差の評価
ecmlsrmle 欠損値があるデータの最小二乗回帰
ecmlsrobj 欠損値があるデータの最小二乗回帰の対数尤度関数
convert2sur 多変量正規回帰モデルから SUR モデル
117
デリバティブのプライシングと分析
binprice 二項モデルによるオプションのプライシング
blkimpv ブラックモデルによる先物オプションのインプライドボラティリティの算出
blkprice ブラックモデルによる先物オプションのプライシング
blsdelta BS モデルによる「デルタ」の算出
blsgamma BS モデルによる「ガンマ」の算出
blsimpv BS モデルによるオプションのインプライドボラティリティの算出
blslambda BS モデルの「ラムダ」の算出
blsprice BS モデルによるオプションのプライシング
blsrho BS モデルによる「ロー」の算出
blstheta BS モデルによる「シータ」の算出
blsvega BS モデルによる「ベガ」の算出
opprofit オプションのペイオフの計算
信用リスク向けユーティリティ
transprob 信用格付けデータから遷移確率行列の推定
transprobbytotals 前処理済み信用格付けデータから遷移確率行列の推定
GARCH 過程
ugarch GARCH モデルのパラメータ推定
ugarchllf 対数尤度の計算
ugarchpred GARCH 過程に条件付分散の予測値
ugarchsim GARCH 過程に従うデータ生成
Financial Time Series Object と ファイル構築
ascii2fts ASCII データファイルから Financial Time Series object 作成
fints Financial Time Series object 作成
fts2ascii Financial Time Series object を ASCII データ形式に変換
fts2mat Financial Time Series object を行列変換
merge 複数の Financial Time Series object を結合
118
Financial Time Series Object 向けの計算関数
end Financial Time Series object の最新データを指定
horzcat Financial Time Series object のデータ部分の結合
length Financial Time Series object のデータの長さ
minus Financial Time Series object のデータ部分の差
mrdivide Financial Time Series object のデータ部分の行列の除算
mtimes Financial Time Series object のデータ部分の行列の積算
plus Financial Time Series object のデータ部分の和
power Financial Time Series object のデータ部分のべき乗
rdivide Financial Time Series object のデータ部分の行列の要素毎の除算
size Financial Time Series object のデータ部分のサイズ
subsasgn Financial Time Series object のサブスクリプトによるデータの代入
subsref Financial Time Series object のサブスクリプトによる参照
times Financial Time Series object のデータ部分の行列の要素毎の積算
uminus 単項マイナス演算
uplus 単項プラス演算
vertcat Financial Time Series object のデータ部分を垂直方向に結合
Financial Time Series Object 向けの数学関数
cumsum 累積和
exp 指数関数
hist ヒストグラム
log 自然対数へ変換
log2 底 2 の対数へ変換
log10 常用対数へ変換
max 最大値
mean 平均
min 最小値
std 標準偏差
Financial Time Series Object 向けの記述統計
corrcoef 相関係数の算出
cov 共分散行列の計算
isempty Fianacial Time Series Objetc に空データがあるか判別
119
nancov 欠損値(NaN)を除いた共分散
nanmax 欠損値(NaN)を除いた最大値
nanmean 欠損値(NaN)を除いた平均
nanmedian 欠損値(NaN)を除いた中央値
nanmin 欠損値(NaN)を除いた最小値
nanstd 欠損値(NaN)を除いた標準偏差
nansum 欠損値(NaN)を除いた和
nanvar 欠損値(NaN)を除いた分散
var 分散値を計算
Financial Time Series Object 向けのユーティリティ関数
chfield Financial Time Series object のデータのフィールド名の変更
eq (fts) Financial Time Series object の等価性を判定
extfield Financial Time Series object の部分列取得
fetch Financial Time Series object の部分行取得
fieldnames Financial Time Series object のフィールド名取得
freqnum Financial Time Series object の周期インデックス取得
freqstr Financial Time Series object の周期インデックスから周期に変換
ftsbound Financial Time Series object の初日と終日のシリアルデート番号取得
ftsinfo Financial Time Series object の情報
ftsuniq Financial Time Series object の一意性
getfield Financial Time Series object のデータ部の部分列取得
getnameidx リストから指定文字列を探索し、格納場所のインデックスを取得
iscompatible Financial Time Series object の比較
isequal 2 以上の Financial Time Series object の比較
isfield Financial Time Series object の部分列の比較
issorted Financial Time Series object の時間に関する単調増加性
rmfield Financial Time Series object の指定するデータ列を除去
setfield Financial Time Series object のデータ列へデータをセット
sortfts Financial Time Series object の整列
120
データ変換
boxcox ボックス-コックス変換
convert2sur 多変量正規回帰モデルから SUR モデル
convertto 指定する頻度データへ変換
diff 階差
fillts 欠損値補完
filter 線形フィルター
lagts 指定した遅行データをとる
leadts 指定した先行データをとる
peravg 指定した平均の列をとる
resamplets Financial Time Series object からサンプリング
smoothts Financial Time Series object のデータ部のスムージング
toannual 年次データ変換
todaily 日次データ変換
todecimal 10 進法数値へ変換
tomonthly 月次データ
toquarterly 四半期データ
toquoted 10 進数の数を指定進数の数へ変換
tosemi 半期データ
toweekly 週次データ
tsmovavg 移動平均
テクニカル分析
adline アキュミュレーション/ディストリビュレーションライン
adosc アキュミュレーション/ディストリビュレーションオシレータ
bollinger ボリンジャーバンド
chaikosc チャイキンズオシレータ
chaikvolat チャイキンズボラティリティ
fpctkd ストキャスティック(ファスト)
hhigh 指定した範囲内の高値取得
llow 指定した範囲内の安値取得
macd MACD (移動平均収束発散法)
medprice メディアン価格
negvolidx ネガティブ・ボリューム・インデックス
onbalvol オン・バランス・ボリューム
posvolidx ポジティブ・ボリューム・インデックス
121
prcroc プライス・レート・オブ・チェンジ(ROC)
pvtrend プライスアンドボリュームトレンド
rsindex 相対力指数(RSI)
spctkd ストキャスティック(スロー)
stochosc ストキャスティックオシレータ
tsaccel アクセラレーション
tsmom 特定期間のモメンタム
typprice ティピカルプライス
volroc ボリューム・レート・オブ・チェンジ
wclose 加重平均した価格
willad ウィリアムのアキュミュレーション/ディストリビュレーション
willpctr ウィリアム・パーセント・アール
Financial Time Series GUI
ftsgui Financial Time Series 用 GUI 環境の呼び出し
Financial Time Series Tool
ftstool Financial Time Series Tool の起動
122
[参考文献]
[1].新井清光 編(2000)『英和・和英会計経理ハンディ辞典(第2版)』中央経済社
[2].伊藤智洋(1998)『チャート救急箱』投資レーダー
[3].小暮厚之(1996)『ファイナンス講座① ファイナンスへの計量分析』朝倉書店
[4].桜井久勝(2003)『財務諸表分析(第2版)』中央経済社
[5].ジョン・C・ハル(2001)『先物・オプション取引入門』ピアソン・エデュケーション
[6].ツヴィ・ボティ,ロバート・C・マートン(2001)『現代ファイナンス論(改訂版)~意思決
定のための理論と実践~』ピアソン・エデュケーション
[7].デービッド・G・ルーエンバーガー(2002)『金融工学入門』日本経済新聞社
[8].野村金融研究所 編(2001)『金融工学辞典』東洋経済新報社
[9].藤林宏,矢野学,岡村孝(2001)『EXCELで学ぶファイナンス〈2〉証券投資分析(改訂版)
金融財政事情研究会
[10].森棟公夫(1999)『計量経済学 プログレッシブ経済学シリーズ』東洋経済新報社
[11].ロイター 編(2002)『ロイター最新金融用語辞典』ピアソン・エデュケーション
[12].渡部敏明(2000)『シリーズ<現代金融工学>④ ボラティリティ変動モデル』朝倉書店
[13].Jack Johnston. John DiNardo.(1997) Econometric Methods, 4th ed., The McGraw-Hill
Companies,Inc
[14].James D. Hamilton(1994) Time Series Analysis , Princeton Univ Pr
Financial Toolbox 概説書 2011 年 1 月作成
http://www.mathworks.co.jp
営業部: http://www.mathworks.co.jp/contact_us/
テクニカル・サポート: http://www.mathworks.co.jp/support/contact_us/
ユーザ・コミュニティ: http://www.mathworks.com/matlabcentral/
デモ: http://www.mathworks.com/products/demos/
トレーニング・サービス: http://www.mathworks.com/services/training/
サードパーティ製品/サービス: http://www.mathworks.co.jp/products/connections/
お問い合わせ: http://www.mathworks.co.jp/company/aboutus/contact_us/index.html
E-Mail: info@mathworks.co.jp
top related