#はじめに
楽天RSSを用いると(楽天証券の口座を持っている人は)、リアルタイムで株価や取引板情報等が取得できます。この時に必要なものは表示したい銘柄等の証券コードです。
株の証券コードは一般的に一度決まれば、ほとんど変更がありません。しかし、オプションはほぼ毎週、限月の違う新規銘柄が追加で新規設定されます。また、相場状況や市場関係者のリクエストに応えてオンデマンドで追加設定される場合もあります。
残念ながら、オプションのコード体系は利用者が皆不幸せになるような、極めてわかりにくいものになっています。
こちらのページでは、最新のオプションのコード一覧表、およびそのデータを作成したスクリプトをメモ代わり+自分用に載せておきます。
#最新版データ(2019 feb 22)
最新版のデータのみが欲しい方はこちら:
※形式(CSV)
lb | CODE |
---|---|
03/C8000 | 144158018 |
03/C9000 | 194039018 |
#最新版をサーバから抽出するスクリプト
実行できるcolab上のノートブック
取引所サーバから最新の「清算値」ファイルを読込
コード関連データを抽出 ⇒ 使いやすい形に加工 ⇒ CSV保存 という流れです。
import pandas as pd
import requests
from bs4 import BeautifulSoup
sv = 'https://www.jpx.co.jp'
def latest_csv_path():
"""
:return: str
JPXサーバ内にある最新の清算値CSVファイルへのPATH
"""
req = requests.get(sv + "/markets/derivatives/jnet-derivative/index.html")
soup = BeautifulSoup(req.content, 'html.parser')
return soup.find(class_="component-file").a.get('href')
def csv_to_df(csv_path, max_maturity_day=90):
"""
清算値CSVファイルをDataFrameに変換
Parameters
----------
csv_path : str
max_maturity_day : int , default 90
最大、SQ期日が何日後までのデータを取得するか(規定値90日後)
Returns
-------
DataFrame
"""
colName = ("CODE", "NAME", "TYPE", "MATURITY", "STRIKE",
"PRICE", "TPRICE", "NK", "IV", "R", "TIME", "BASE")
df = pd.read_csv(sv + csv_path, skiprows=3, encoding="SHIFT-JIS", names=colName)
df = df.query(
'BASE=="日経225"').query(
f'TIME<={max_maturity_day} ').dropna()
df = df.assign(
PRICE=df.PRICE.astype(int),
STRIKE=df.STRIKE.astype(int),
lb=df['MATURITY'].astype(str).str[4:] + '/' + df.TYPE.str[0] + \
df['STRIKE'].astype(int).astype(str)).set_index(
'lb')[["CODE", "PRICE", "TYPE", "STRIKE", "MATURITY", "IV"]]
return df
csv_path = latest_csv_path()
df = csv_to_df(csv_path)
df[['CODE']].to_csv('op_code_list.csv')