オプション取引のスクレイピング
株式取引は、株式をその時に売買が成立した価格でのみ売買可能です。
一方、オプション取引では、売買可能なオプション価格が複数存在します。
オプション取引は、株式取引と比べて、広範囲の価格で売買することが可能です。
そのため、オプションを売買する際に、広範囲の価格データをすぐに閲覧できれば便利です。
- 株 式 取 引:現在価格のみ見ていればよい
- オプション取引:複数の価格を見る必要がある
スクレイピングは、Webサイトから必要な数値などを抽出する技術です。
スクレイピングにより、オプションの広範囲に渡る価格データから、必要なデータだけを抽出し加工することが可能になります。
スクレイピングの準備
スクレイピングには、Python3 と、BeautifulSoup を用います。
Python3 とBeautifulSoup のインストールは、【参考文献.1】が詳しいです。
(2017.5.15 現在)
Python3
先ず、Python 公式サイトから、Python 3 をインストールします。
- Python 公式サイト:https://www.python.org/
BeautifulSoup
次に、コマンドプロンプトで、BeautifulSoup4 をインストールします。
>pip3 install beautifulsoup4
BeautifulSoup で、HTML を解析し、数値情報などを取り出します。
- BeautifulSoup 公式サイト:https://www.crummy.com/software/BeautifulSoup/bs4/
CSS selectors
BeautifulSoup は、CSSセレクタをサポートしています。
スクレイピング
今回は、銀(SLV)のオプション売買を考えます。
そのため、YAHOO!FINANCE から、スクレイピングします。
(注1)SLV は、ティッカーシンボルです
YAHOO!FINANCE からスクレイピングする方法は、【参考文献.1】が詳しいです。
YAHOO!FINANCE
ティッカーシンボル(SLV)
Fig.1 は、Yahoo.com から、Finance を選択した画面です。
画面上部の入力欄に、ティッカーシンボルの「SLV」を入力しました。
- 現在価格: 15.57$
SLV の現物取引は、現在価格でのみ可能です(注2)。
(注2)売買は、100株単位。100株=1,557$。
Options
期日:June 16, 2017
Strike PriceやContract Name、Last Price、などが表示されます(Fig.2 参照)。
この画面から、Last Price などをスクレイピングします。
この画面は、以下のURL です。
- https://finance.yahoo.com/quote/SLV/options?p=SLV&date=1497571200
- 上記URL を、スクレイピングに使用します
SLV のオプション取引は、広範囲(複数期日、複数Strike、Call/Put)の価格で可能です(注2)。
(注2)売買は、100株単位です
ソースコード
Fig.3 は、上記URL のWebページのソースコードです。
Fig.3 画面中央、数値を選択しています(緑色のマーカー表示)
Fig.3 画面下部、選択した数値に対応したタグを見つけています。
その行を以下に書き写します。
<td class="data-col2 Ta(end) Pstart(10px)">0.40</td>
ここでは、数値「0.40」を抽出するため、「class=”data-col2″」を目印にします。
- class=”data-col2″ をスクレイピングに使用します
プログラム
以下の条件で、Last Price を抽出する
- 期 日:June 16, 2017
- Strike:ATM(At The Money)のCall とPut
プログラム(options.py)
import urllib.request from bs4 import BeautifulSoup url = "https://finance.yahoo.com/quote/SLV/options?p=SLV&date=1497571200&straddle=false" html_doc = urllib.request.urlopen(url) soup = BeautifulSoup(html_doc, 'html.parser') # strike = soup.select('.data-col0') contractName = soup.select('.data-col1') optionsPrice = soup.select('.data-col2') # print("---------+---------------------+-----------------") print(" Strike | Contract Name | Last Price") print("---------+---------------------+-----------------") print(" " + strike[12].text + " | " + contractName[12].text + " | " + optionsPrice[12].text) print(" " + strike[47].text + " | " + contractName[47].text + " | " + optionsPrice[47].text) print("---------+---------------------+-----------------")
options.py の起動
コマンドプロンプトから、以下のコマンドを入力します。
>python options.py
options.py の説明
10 行目、CSSクラス(.data_col0)のタグを、html文章から見つけ、リストにします。
11 行目、CSSクラス(.data_col1)のタグを、html文章から見つけ、リストにします。
12 行目、CSSクラス(.data_col2)のタグを、html文章から見つけ、リストにします。
現在、SLV の株価は15.57 です。
そのため、Strike 15.5 がATM(At The Money)です。
17 行目、ATM のCall は、リストの「12 番目」でした。
18 行目、ATM のPut は、リストの「47 番目」でした。
14 – 19 行、結果を整形して出力しています。
【参考文献.1】
日経ソフトウエア、2017年6月号 特別付録②
特別付録②「日経平均株価をスクレイピングしよう」
副題が付いています。
- 5日間で学ぶプログラミング Python 編
- 本当の初心者でも「スクレイピング」のプログラムが作れる!
Python のインストール方法から使い方までを丁寧に説明しています。
BeautifulSoup4 を用いて、Yahoo!ファイナンスから、日経平均株価を抽出するプログラムを解説しています。