GAS에서 투자 신탁의 기준가액 시계열 CSV 데이터를 자동으로 취득하여 Google 스프레드시트에 표시해 보기

소개



새로운 NISA와 iDeCo에서 자산 운용을 시작한 적도 있어 과거의 가액 추이 데이터를 여러가지 검증하고 있습니다.

Google 스프레드시트에는 GOOGLEFINANCE 함수이 있으며, 다양한 주식 시세 정보를 얻을 수 있습니다.

일본 내 투자신탁정보에 관해서는 모닝스타이 가장 충실하고 있어 가액추이 CSV데이터를 취득할 수 있습니다만, 매번 다운로드하는 것이 번거롭기 때문에 자동적으로 취득하여 Google 스프레드에 표시한다 GAS를 만들어 보았습니다.

※주의
본 스크립트에 의해 취득한 데이터의 정확성, 안전성 등에 대해서는 보증할 수 없습니다. 이용은 자신의 판단과 책임하에 가 주세요. 이용자가 해당 정보 등에 근거하여 입었다고 하는 어떠한 손해에 대해서도, 당사에서는 일체 책임을 지지 않습니다.

투자 신탁 기준가액 시계열 CSV 데이터 취득



시계열 CSV 데이터를 얻으려면 모닝스타의 각 투자 신탁 정보 페이지의 다운로드 페이지를 사용하십시오. 이러한 각 신탁 정보 페이지에서 CSV 데이터를 다운로드할 수 있습니다.

예) [낙천·전미주식 지수·펀드] 기준가액 및 분배금 다운로드
예) [닛케이 225 연동형 상장투자신탁] 기준가액 및 분배금 다운로드

이 페이지의 다운로드 양식에서 POST 요청을 사용하여 시계열 CSV 데이터를 검색합니다.

POST 요청으로 CSV 데이터를 검색하는 스크립트



Google 스프레드시트의 스크립트 편집기에서 다음 기능을 추가합니다.
/**
 * getMorningstar_CSV
 * 
 * モーニングスター(www.morningstar.co.jp)から投資信託基準価額のCSVデータを取得する
 * 
 * @fundcode  {String} 投信コード(10ケタ) 
 * @fromDate  {date} 取得開始日[yyyy/MM/dd] 初期値:本日から1年以上前
 * @toDate    {date} 取得最終日[yyyy/MM/dd] 初期値:本日
 * @timeBase  {number} [0|1|2] - 0:日次ベース 1:週末ベース(初期値) 2:月末ベース
 * 
 * @return    {Array Object} CSVデータ
 * 
 * 【使い方】
 * スプレッドシートのセル内から任意の投信コードを指定して関数を呼び出す。
 * =getMorningstar_CSV("2017092908") 
 * 
 */
function getMorningstar_CSV(fundcode, fromDate, toDate, timeBase) {

  if (!fundcode) {
    return "no code"; // 投信コード未指定
  }

  //--- to 年月日 'yyyy/MM/dd'
  if (!toDate) {
    var vtoDate = new Date(); 
    toDate = vtoDate;
  }

  toDate = Utilities.formatDate( toDate, 'Asia/Tokyo', 'yyyy/MM/dd');
  // 日付を分解
  aDate = toDate.split("/");
  var YearTo = aDate[0];
  var MonthTo = aDate[1];
  var DayTo = aDate[2];

  //--- from 年月日 'yyyy/MM/dd'
  if (!fromDate) {
    var vfromDate = new Date(); 
    vfromDate.setFullYear(vfromDate.getFullYear()-1.01); // 1年以上前まで
    fromDate = vfromDate;
  }

  fromDate = Utilities.formatDate(fromDate, 'Asia/Tokyo', 'yyyy/MM/dd');
  // 日付を分解
  aDate = fromDate.split("/");
  var YearFrom = aDate[0];
  var MonthFrom = aDate[1];
  var DayFrom = aDate[2];

  if ( timeBase === 0 || timeBase === 1  || timeBase === 2 ) {
    timeBase = timeBase.toString(); // 数値を文字列に変換
  }else{
    timeBase = "1"; // 週末ベース - 初期値
  }

  //--- CSVファイルダウンロード(Shift_JIS)
  var CSV_DOWNLOAD_URL = "https://www.morningstar.co.jp/FundData/DownloadStdYmd.do?fnc=" + fundcode;

  // HTTPリクエストパラメータ POSTで渡すフォームデータはpayloadで指定
  var options = {
    method : "post",
    headers: {
        "content-type": 'application/x-www-form-urlencoded',
    },
    payload : {
        selectStdYearFrom: YearFrom,
        selectStdMonthFrom: MonthFrom,
        selectStdDayFrom: DayFrom,
        selectStdYearTo: YearTo,
        selectStdMonthTo: MonthTo,
        selectStdDayTo: DayTo,
        base: timeBase,
    }
  };

  // CSVファイル取得
  response = UrlFetchApp.fetch(CSV_DOWNLOAD_URL, options);
  Utilities.sleep(2000); // 2秒待つ

  var csv = response.getContentText("Shift_JIS"); 
  // CSVデータをパースする
  var csvdata = Utilities.parseCsv(csv);

  for(var i = 1; i < csvdata.length; i++){
      csvdata[i][1] = Number(csvdata[i][1]); // 「価額」の型変換(文字->数値)
  }

  return csvdata

}

스프레드시트에서 함수를 호출하고 가격 정보를 표시합니다.



추가한 getMorningstar_CSV 함수를 스프레드시트 셀에서 다음과 같이 호출합니다.

예) 투신 코드(2017092908)의 CSV 데이터 취득
=getMorningstar_CSV("2017092908")

예) 2018년 1월 1일~오늘까지의 CSV 데이터를 월말 기준으로 취득
=getMorningstar_CSV("2017092908",DATE(2018,1,1),TODAY(), 2)

예) 투신 코드, 취득 기간, 취득 단위 등을 다른 셀로 지정하여 취득한다



주의사항



모닝스타 의 홈페이지에서 매번 CSV 다운로드하여 스프레드시트에 표시하게 되므로 데이터 건수가 많은 경우 로드에 시간이 걸리거나 오류가 발생할 수 있습니다. 서버에 부하가 걸리지 않도록, 다수의 투신 정보를 정리해 취득하는 것은 피합시다.

모닝스타 에 의해, 자동 취득이 금지될 가능성이 있습니다.
모닝스타 의 홈페이지의 사양 변경에 의해, 본 스크립트가 동작하지 않게 될 가능성이 있습니다.

추가



한 번에 여러 개의 금액을 CSV 다운로드를 시도하면 처리가 시간이 지남에 따라 오류가 발생할 수 있기 때문에 2 초 동안 기다리십시오.

2021/01/14
CSV 파일 다운로드 URL을 "https://~"로 변경.
headers: {"content-type": 'application/x-www-form-urlencoded'} 추가.

좋은 웹페이지 즐겨찾기