MATLABで株価データ自動取得 その1 データ取得


MATLABで株価データを取得してみた

Yahooファイナンスの時系列データを自動的に取得して解析したい!
ということで、MATLABのText Analytics Toolboxで試しにやってみた。今回はとりあえずデータ取得するところまで。

1. RESTful-API

Yahooファイナンスの時系列データのURLは以下のような構造になっている。

baseURLTimeseries = "https://info.finance.yahoo.co.jp/history/?code=";
getURL = baseURLTimeseries+num2str(stockCode)+"&sy="+string(year(sDateTmp))+...
        "&sm="+string(month(sDateTmp))+"&sd="+string(day(sDateTmp))+...
        "&ey="+string(year(eDateTmp))+"&em="+string(month(eDateTmp))+...
        "&ed="+string(day(eDateTmp))+"&tm=d";

2. HTMLの取得

MATLABではwebreadだけでHTMLデータを取得できる。上のURLをwebreadに放り込むとHTMLのテキストデータが取得できる。

str = webread(getURL);
tree = htmlTree(str);
stockName = eraseTags(string(findElement(tree,"h1")));  % H1タグ(会社名)を見つけてHTMLタグを削除

3. テキストデータの加工

HTMLファイルからタグや不要な文字列を削除して、時系列データだけを抽出する。

startTag = "調整後終値*";
stopTag = "VIP倶楽部限定";
str = eraseTags(str);   % HTML Tagを削除
str = extractBetween(str, startTag, stopTag);   % 不要部分文字列を削除
splitStr = split(str, "  ");    % 1つのセルをセル配列に分割
splitStr = splitStr(2:end-2);           % 最後の2つは不要のため削除
splitStr = reshape(splitStr, [verNum+1, length(splitStr)/(verNum+1)])';
splitStr = erase(splitStr, ",");   % 数値の, を削除

こんなセル配列になった。

4. Time Talbeデータの作成

ここはもうちょっと賢いやり方がありそうだけど、とりあえずこんな感じでセル配列をTime Tableに変換した。

temp = timetable(datetime(splitStr(:,1)));
for n = 2:numel(varNames)+1
    temp = addvars(temp, cellfun(funcStr2num, splitStr(:,n)));
end
stockData = [stockData; flipud(temp)];

5. MATLAB関数化

引数に株価コード、開始・終了日を設定できるようにして関数化した。

function stockData = dataAcqFromYahoo(stockCode, startDate, endDate)

6. 実行結果

実行すると株価データをtime tableにして返してくれる。(トヨタ自動車の2019/6/1~8/5までの株価)

変数エディタで見るとTime Tableはこのように。

次はプロットする予定。