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までの株価)
次はプロットする予定。
Author And Source
この問題について(MATLABで株価データ自動取得 その1 データ取得), 我々は、より多くの情報をここで見つけました https://qiita.com/SacredTubes/items/4938157794e840cbc6e5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .