Contents
はじめに
以前の投稿で MATLAB を使用して好きな銘柄の株価情報を取得する方法を紹介しました。
ここで取得できたデータは,株価の始値,終値,調整後の終値,高値,安値でした。今回はこれらのデータを使用してローソク足チャートを作成する方法を紹介します。紹介した記事で取得したデータを使用しますので,株価データを取得していない人は先の記事を参考にまずは株価データを取得してみてください。MATLAB ではローソク足チャートは,Financial Toolboxを使用すればcandle関数で一発で作成できるのですが,今回はFinancial Toolboxを持っていない人でも作成できるようにしていきます。
この記事を読むことで
MATLABのFinancial Toolboxなしで株価のローソク足チャートを作成することができるようになります!
ローソク足チャートとは
ローソク足チャートとは,株価の推移を表現した箱ひげ図のような形をしたものです。このローソク足チャートの形状で株価がどのように推移したのかを知ることができます。詳細は別記事に譲るとしてここでは概要だけ簡単に解説します。
陽線と陰線
ローソク足チャートをみると,日によってチャートの色が違うのがわかると思います。私がよく利用しているSBI証券では,赤と青でチャートが表現されています。これは日足の場合,株価が始値と比較して高値でその日の取引を終えたか,安値でその日の取引を終えたのかで決まります。その日の始値よりも高い価格でその日の取引を終えた場合を陽線と呼び,SBI証券の場合は赤色のチャート表現されます。一方,始値よりも安い価格でその日の取引を終えた場合を陰線と呼び,SBI証券の場合は青色のチャートで表現されます。
始値・終値と高値・安値
ローソク足チャートの箱の部分を実体と呼びます。この実体の両端の価格が始値と終値を示します。陽線の場合と陰線の場合に分けて説明します。陽線は,始値 < 終値
なので実体の下端の価格が始値で上端の価格が終値となります。一方,陰線の場合はその逆で,始値 > 終値
なので上端の価格が始値,下端の価格が終値となります。ローソク足チャートにはもう一つ「ヒゲ」というパーツがあります。この真ん中のラインのことです。これは株価の高値と安値を表します。日足の場合,このラインの下端の価格がその日の安値,上端の価格がその日の高値ということになります。
MATLAB でどのように作成するか
では,MATLABを使用してこのローソク足チャートをどのように表現しましょうか? 実際のローソク足は「実体」と「ヒゲ」の2パーツに分かれています。なのでMATLABで描画する際にもそれぞれを分けて描画することを考えます。この「実体」と「ヒゲ」は,図形としてみると,「塗りつぶしの長方形」と「単純なライン」です。なので長方形とラインを図形として描画することを試みます。
patch関数とline関数
塗りつぶしの図形を描画するといえばpatch関数です。なので実体部分はこのpatch関数で表現します。patch関数は四角形の4角のx,y座標を与えてあげれば四角形を描画してくれます。なので,ローソク足を描画させたいdate ± w
をx座標に指定,始値と終値をy座標に指定すれば実体を描けそうです。一方,ラインを描画するといえば文字通り line関数です。なのでヒゲ部分はこのline関数を使用します。line関数では,複数のx,y座標を与えてあげればその座標間をラインでつないでくれます。なので,[date,安値]
,[date,高値]
の2点をつなぐラインを作成します。
実装
それでは実装していきます。先に断っておきますが,今回作成するのは日足チャートのみです。後々は週足か月足かなど表示させる幅を引数で与えて切り替えられるようにしたいと思いますが。
使用する株価データ
2023年1月1日から2023年10月13日までのトヨタ自動車の株価を取得してローソク足を描画することとします。データの取得方法は,以前の記事で書きましたのでそちらを参照してください。
% 株価Data取得:2023/1/1-2023/10/13 トヨタ自動車
stock = hist_stock_data('01012023','13102023','7203.T');
MATLABローソク足の描画
先ほどの解説の通り,patch関数とline関数を使用して,ローソク足を描画します。色はSBI証券と同様に陽線を赤,陰線を青として描画します。ローソク足の幅は,とりあえず適当に±10時間としています。
% ローソク足描画
High = stock.High;
Low = stock.Low;
Open = stock.Open;
Close = stock.AdjClose;
Date = stock.Date;
freq = duration(24,0,0);
w = freq/2.4;
figure()
hold on
for i = 1:length(Date)
x = [Date(i)-w Date(i)-w Date(i)+w Date(i)+w];
y = [Open(i) Close(i) Close(i) Open(i)];
if Close(i) > Open(i) % 陽線
patch(x,y,'r','LineStyle','none')
line([Date(i) Date(i)],[Low(i) High(i)],'color','r');
else % 陰線
patch(x,y,'b','LineStyle','none');
line([Date(i) Date(i)],[Low(i) High(i)],'color','b');
end
end
title('Stock Price history: TOYOTA(7203.T)')
ylabel('Stock Price[JPY]')
MATLAB実行結果
ちょっと小さいので拡大したものが右の図です。しっかりとローソク足チャートが描画できているのがわかります。
移動平均線の描画
せっかくなのでここまで来たら移動平均線も描画したくなってきました。今回は,一般的に使用される5日平均線(MA5),25日平均線(MA25),75日平均線(MA75)を描画します。
% 移動平均線の描画
for_ma = flip(Close);
% MA5
ma5 = zeros([length(for_ma) 1]);
for i=1:length(for_ma)-4
ma5(i,:) = mean(for_ma(i:i+4,:));
end
ma5(end-4:end,:) = nan;
% MA25
ma25 = zeros([length(for_ma) 1]);
for i=1:length(for_ma)-24
ma25(i,:) = mean(for_ma(i:i+24,:));
end
ma25(end-24:end,:) = nan;
% MA75
ma75 = zeros([length(for_ma) 1]);
for i=1:length(for_ma)-74
ma75(i,:) = mean(for_ma(i:i+74,:));
end
ma75(end-74:end,:) = nan;
% plot
plot(Date,flip(ma5),'Color','g')
plot(Date,flip(ma25),'Color','m')
plot(Date,flip(ma75),'Color','r')
MATLAB実行結果
3本の移動平均線を描画することができました。
コードサマリ
全てのコードをまとめたものです。これで,株価を取得して,日足のローソク足チャートと移動平均線を描画して可視化することができました。Financial Toolboxがなくてもこのくらいであれば作成できますね。
clear
close all
%% 株価Data取得:2023/1/1-2023/10/13 トヨタ自動車
stock = hist_stock_data('01012023','13102023','7203.T');
%% ローソク足描画
High = stock.High;
Low = stock.Low;
Open = stock.Open;
Close = stock.AdjClose;
Date = stock.Date;
freq = duration(24,0,0) ;
w = freq/2.4;
figure()
hold on
for i = 1:length(Date)
x = [Date(i)-w Date(i)-w Date(i)+w Date(i)+w];
y = [Open(i) Close(i) Close(i) Open(i)];
if Close(i) > Open(i) % 陽線
line([Date(i) Date(i)],[Low(i) High(i)],'color','r');
patch(x,y,'r','LineStyle','none')
else % 陰線
line([Date(i) Date(i)],[Low(i) High(i)],'color','b');
fill(x,y,'b','LineStyle','none');
end
end
title('Stock Price history: TOYOTA(7203.T)')
ylabel('Stock Price[JPY]')
grid on
%% 移動平均線の描画
for_ma = flip(Close);
% MA5
ma5 = zeros([length(for_ma) 1]);
for i=1:length(for_ma)-4
ma5(i,:) = mean(for_ma(i:i+4,:));
end
ma5(end-4:end,:) = nan;
% MA25
ma25 = zeros([length(for_ma) 1]);
for i=1:length(for_ma)-24
ma25(i,:) = mean(for_ma(i:i+24,:));
end
ma25(end-24:end,:) = nan;
% MA75
ma75 = zeros([length(for_ma) 1]);
for i=1:length(for_ma)-74
ma75(i,:) = mean(for_ma(i:i+74,:));
end
ma75(end-74:end,:) = nan;
% plot
plot(Date,flip(ma5),'Color','g')
plot(Date,flip(ma25),'Color','m')
plot(Date,flip(ma75),'Color','r')
hold off
MATLABまとめ
Yahoo Financeから取得した時系列株価データを使用して,MATLABでのローソク足チャートと移動平均線の作成方法を紹介しました。
ローソク足チャート作成のポイントは,patch関数とline関数を使用して,実体とヒゲを別々に作成します。
そうすることで,シンプルに描画することができます。参考になればうれしいです。
以上,MATLAB で株価のローソク足チャートを作成する方法でした。