短期売買と分析力が向上しそうな株価予測をだらだらとやる part1

4 min
xainome

xainome

データサイエンティスト風味のSES
自身の話をするよりは人の話を聞く方が好き
普通の人

FOLLOW

前回RAGシステムを作ってみてある程度できました。次に、何を作ろうかということで表題になります。

前回と違って完成形は全く思い浮かんでません。とりあえずやってれば何かできるかということで作っていきます。

ティッカー取得

まずは株価の取得が必要なのですが今回はyahoo! financeのAPIを使って取得しようと思います。取得する際のコードは以下。

import pandas_datareader.data as web
df = web.get_data_yahoo('1304', '1980-01-01', '2024-06-10')

pandas_datareaderにyahoo用の株価取得ライブラリがあるのでそれを利用します。ティッカー(銘柄)と株価取得の時間を設定します。

株価の取得は簡単なのですが、ティッカーをいちいち手入力するのは面倒ですね。時間は変数で設定できますので問題ないです。

というわけでティッカーを取得するプログラムを作ります。

ティッカーを取得するには東京証券取引所、名古屋証券取引所、福岡証券取引所、札幌証券取引所、各国別SBI証券ティッカー一覧から取れると思いますが、今回はSBI証券から取得しようと思います。

昔やろうとしたことがあったのでそれを流用しようと思います。対象となるサイトはこちらです。

ティッカー取得プログラム

# SBI証券から海外のティッカーまたはコードと銘柄を取得
from bs4 import BeautifulSoup
import re, sys, time
import requests
import pandas as pd

sbi_foreign_stock_list = [
  {"america":   {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_usequity_list.html", "tag": "table", "c_cd":"", "class": "md-l-table-01 md-l-utl-mt10"}},
  {"china":     {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_hk_list.html",       "tag": "div",   "c_cd":"HK", "class": "accTbl01"}},
  {"korea":     {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_kr_list.html",       "tag": "div",   "c_cd":"KS", "class": "accTbl01"}},
  {"russia":    {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_ru_list.html",       "tag": "div",   "c_cd":"ME", "class": "accTbl01"}},
  {"vietnam":   {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_vn_list.html",       "tag": "div",   "c_cd":"VN", "class": "accTbl01"}},
  {"Indonesia": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_id_list.html",       "tag": "div",   "c_cd":"JK", "class": "accTbl01"}},
  {"Singapore": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_sg_list.html",       "tag": "div",   "c_cd":"SI", "class": "accTbl01"}}, # SBIとyahooのティカーが一致しない件
  {"thailand":  {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_th_list.html",       "tag": "div",   "c_cd":"BK", "class": "accTbl01"}},
  {"malaysia":  {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_my_list.html",       "tag": "div",   "c_cd":"KL", "class": "accTbl01"}} # SBIとyahooのティカーが一致しない件
]

for foreign_dict in sbi_foreign_stock_list:
  for country, values in foreign_dict.items():
    country_url = values["url"]
    country_tag = values["tag"]
    country_code = values["c_cd"]
    country_class = values["class"]
    html = requests.get(country_url)
    soup = BeautifulSoup(html.content, "html.parser")
    for table_soup in soup.find_all(country_tag, class_=country_class):
      stock_data = []
      rows = table_soup.find_all("tr")
      for row in rows[1:]:
        ticker = row.find_all("th")[0].text.strip()
        cols = row.find_all("td")
        name = cols[0].text.strip()
        stock_data.append((ticker, name))
      continue

    df_foreign_stock = pd.DataFrame(stock_data, columns=["コード", "銘柄名"])
    df_foreign_stock["コード"] = df_foreign_stock["コード"].astype(str) + country_code
    df_foreign_stock.to_csv(out_oth_fol + country + "_stock_list.csv")
    time.sleep(2)

これを流用すれば取得できますが、今のサイトではできません。少し前のサイトがこちらです。こちらであれば取得できますが、最新のティッカー情報が取れないので修正します。

それから件数の表示設定をする必要があるのでBeautifulSoup4ではなくpyppeteerを使って取得しようと思います。Seleniumという手段もありますが、一旦はpyppeteerを使っていきます。

終わりに

少し時間がなかったので今回はここまでにします。次回はSBIの海外ティッカーを取得できるようにします。国内は複数サイトを使わないといけないので、ある程度株価予測ができてから試します。ではでは。

xainome

xainome

データサイエンティスト風味のSES
自身の話をするよりは人の話を聞く方が好き
普通の人

FOLLOW

カテゴリー:
関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


Social Media Auto Publish Powered By : XYZScripts.com