amazon

[Python] 米国株情報を日次で取得する~その1 米国株ティッカーを取得する~

はじめに

株価情報を取得してきて手元でごちゃごちゃしたいという要望がありました。
そこで、外部システムから日毎の株価情報を取得してみたため公開します。

全2回を予定しています。

課題

  1. 株のティッカー情報をどのようにして取得するか
  2. 大量の日次データをどのようにして取得するか

今回は 株のティッカー情報をどのようにして取得するか について記載します。

株のティッカー情報をどのようにして取得するか

米国株は NASDAQ[1] で公開されていたのでこちらから取得しましょう。ETF[2] も同様に取得できるので CSV ファイルから取り出せば OK です。2022/5/31 時点で取得できなくなったようです。

CSV を読み込んで code を取り出します。

対応

django[3] で作成したコード[4]を公開していますので興味があればご覧ください。

コード[4]の内容を簡易にして説明を記載します。

import csv
import os

# NASDAQ のティッカーを出力する
def run():
  nasdaq_file_path = './scripts/seeds/nasdaq.csv'
  nasdaq = 'NASDAQ'
  market_names = [nasdaq]

  if os.path.exists(nasdaq_file_path): # NASDAQ の CSV ファイルが存在するか確認
    csv_file = read_csv(nasdaq_file_path) # CSV ファイルを読み込む
    next(csv_file) # ヘッダー行を SKIP する
    for row in csv_file: # 1行ずつ処理する
      print('code: %s' %(row[0])) # 1列目の文字列を 出力する

def read_csv(path):
  return csv.reader(
    open(path, "r"),
    delimiter=",",
    doublequote=True,
    lineterminator="\r\n",
    quotechar='"',
    skipinitialspace=True
  )

上記でティッカーを出力している部分をDBに登録するようにすれば永続的にデータを保存することができます。

終わりに

株式情報の一覧を知りたいなぁと思った際に意外とティッカーの一覧をどうやって取得しようというものがありましたが、公式に CSV で取得できることはありがたいですね。
定期的に最新データを取り直さないと新規上場が追えないですが、月1で流せばよいだけです。

ETF は現在取得できなくなっているので新しい取得先を探さないといけませんね。

ちまちま進めていましたが、単純移動平均等株価だけで計算できるものは問題ないですが、その他の値(売上等の IR 情報)が必要な指標のためにどこからその情報を取得するかが課題です。

参考

[1] Stock Screener, https://www.nasdaq.com/market-activity/stocks/screener
[2] Symbol Screener, https://www.nasdaq.com/market-activity/etf/screener
[3] Django ドキュメント, https://docs.djangoproject.com/ja/4.0/
[4] 株式情報を投入するスクリプト追加, https://github.com/turkey136/stocks-api/pull/9/files

コメント

タイトルとURLをコピーしました

Fatal error: Uncaught JSMin_UnterminatedRegExpException: JSMin: Unterminated RegExp at byte 329: /^https?:\/\ in /bitnami/wordpress/wp-content/plugins/autoptimize/classes/external/php/jsmin.php:266 Stack trace: #0 /bitnami/wordpress/wp-content/plugins/autoptimize/classes/external/php/jsmin.php(152): JSMin->action() #1 /bitnami/wordpress/wp-content/plugins/autoptimize/classes/external/php/jsmin.php(86): JSMin->min() #2 /bitnami/wordpress/wp-content/plugins/autoptimize/classes/external/php/ao-minify-html.php(257): JSMin::minify() #3 [internal function]: AO_Minify_HTML->_removeScriptCB() #4 /bitnami/wordpress/wp-content/plugins/autoptimize/classes/external/php/ao-minify-html.php(108): preg_replace_callback() #5 /bitnami/wordpress/wp-content/plugins/autoptimize/classes/external/php/ao-minify-html.php(47): AO_Minify_HTML->process() #6 /bitnami/wordpress/wp-content/plugins/autoptimize/classes/autoptimizeHTML.php(105): AO_Minify_HTML::minify() #7 /bitnami/wordpress/wp-content/plugins/autoptimize/classes/autoptimizeMain.php(592): in /bitnami/wordpress/wp-content/plugins/autoptimize/classes/external/php/jsmin.php on line 266