2017年1月4日水曜日

日経平均株価の過去の4本値データの取得

日経225平均株価の過去の4本値データが欲しかったので探した。Yahooファイナンス等の無料でダウンロードできるようなサイトもあるが、データの信頼性に疑問が残る。日経平均株価を算出している日本経済新聞社のサイトにヒストリカルデータが掲載されていたのでこれを利用することにする。

日本経済新聞社の日経平均株価ヒストリカルデータのURLは以下の通り。

http://indexes.nikkei.co.jp/nkave/archives/data

1949年5月16日から掲載されているので東京証券取引所が「東証修正平均株価」を算出開始した時からの全データが存在するようだ。途中までは終値のみの掲載ではあるが。

掲載されているのは良いのだが、CSV形式でダウンロードできるとかではなく、サイト上に月毎に掲載されているので利用し難い。そこでPHPでこのページを読み込み日経平均の4本値データを取り出すプログラムを作成してみた。

プログラムは以下の通り。Webスクレイピング部のみの抜粋。

    $dt = new DateTime();
    if ( $ym != NULL ) {
      $year = intval( substr( $ym, 0, 4 ) );
      $month = intval( substr( $ym, 4, 2 ) );
      $dt->setDate( $year, $month, 1 );
    }
    $year = $dt->format( 'Y' );
    $month = $dt->format( 'n' );

    // 日経平均算出開始(1949年5月16日)からのデータ
    $url = 'http://indexes.nikkei.co.jp/nkave/statistics/dataload?list=daily&year=' . $year . '&month=' . $month;
    echo "$url". PHP_EOL;

    //  Windows8.1 IE11
    $useragent = "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko";
    ini_set( 'user_agent', $useragent );
    $dom = new DOMDocument('1.0', 'UTF-8');
    libxml_use_internal_errors( true );
    $dom->loadHTMLfile( $url );
    $xpath = new DOMXPath( $dom );
    $tr = $xpath->query( '//tr' );
    for ( $idx = 1; $idx < $tr->length; $idx++ ) {
      $td = $xpath->query( './td', $tr->item($idx) );
      echo $td->item(0)->nodeValue . ", " . $td->item(1)->nodeValue . ", "
         . $td->item(2)->nodeValue . ", " . $td->item(3)->nodeValue . ", "
         . $td->item(4)->nodeValue . PHP_EOL;
    }

    echo "Complete." . PHP_EOL . PHP_EOL;

変数$ymに取り出したい年月を設定して呼び出すと、その年月の日経平均4本値データを「,」区切りで標準出力に出力。

DOMDocumentでページを読み込んで、DOMXPathを使ってHTMLをパースしてます。CentOSでの実行には「php-xml」パッケージのインストールが必要。

実際にはDBに登録するようにし、cronから起動して使ってます。