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. Times Table 데이터 작성
여기는 좀 더 현명한 방법이 있을 것 같지만, 우선 이런 느낌으로 셀 배열을 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은 이렇게.
다음은 플롯할 예정.
Reference
이 문제에 관하여(MATLAB에서 주가 데이터 자동 취득 그 1 데이터 취득), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SacredTubes/items/4938157794e840cbc6e5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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. Times Table 데이터 작성
여기는 좀 더 현명한 방법이 있을 것 같지만, 우선 이런 느낌으로 셀 배열을 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은 이렇게.
다음은 플롯할 예정.
Reference
이 문제에 관하여(MATLAB에서 주가 데이터 자동 취득 그 1 데이터 취득), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SacredTubes/items/4938157794e840cbc6e5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
str = webread(getURL);
tree = htmlTree(str);
stockName = eraseTags(string(findElement(tree,"h1"))); % H1タグ(会社名)を見つけてHTMLタグを削除
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. Times Table 데이터 작성
여기는 좀 더 현명한 방법이 있을 것 같지만, 우선 이런 느낌으로 셀 배열을 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은 이렇게.
다음은 플롯할 예정.
Reference
이 문제에 관하여(MATLAB에서 주가 데이터 자동 취득 그 1 데이터 취득), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SacredTubes/items/4938157794e840cbc6e5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
temp = timetable(datetime(splitStr(:,1)));
for n = 2:numel(varNames)+1
temp = addvars(temp, cellfun(funcStr2num, splitStr(:,n)));
end
stockData = [stockData; flipud(temp)];
인수에 주가 코드, 개시·종료일을 설정할 수 있도록 하여 함수화했다.
function stockData = dataAcqFromYahoo(stockCode, startDate, endDate)
6. 실행 결과
실행하면 주가 데이터를 time table로 해 돌려준다. (토요타 자동차의 2019/6/1~8/5까지의 주가)
변수 편집기에서 보면 Time Table은 이렇게.
다음은 플롯할 예정.
Reference
이 문제에 관하여(MATLAB에서 주가 데이터 자동 취득 그 1 데이터 취득), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SacredTubes/items/4938157794e840cbc6e5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(MATLAB에서 주가 데이터 자동 취득 그 1 데이터 취득), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SacredTubes/items/4938157794e840cbc6e5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)