不労・所得

オプション取引のスクレイピング

株式取引は、株式をその時に売買が成立した価格でのみ売買可能です。

一方、オプション取引では、売買可能なオプション価格が複数存在します。

オプション取引は、株式取引と比べて、広範囲の価格で売買することが可能です。

そのため、オプションを売買する際に、広範囲の価格データをすぐに閲覧できれば便利です。

  • 株 式 取 引:現在価格のみ見ていればよい
  • オプション取引:複数の価格を見る必要がある

 

スクレイピングは、Webサイトから必要な数値などを抽出する技術です。

スクレイピングにより、オプションの広範囲に渡る価格データから、必要なデータだけを抽出し加工することが可能になります。

 

 

 

スクレイピングの準備

スクレイピングには、Python3 と、BeautifulSoup を用います。

Python3 とBeautifulSoup のインストールは、【参考文献.1】が詳しいです。
(2017.5.15 現在)

 

Python3

先ず、Python 公式サイトから、Python 3 をインストールします。

 

BeautifulSoup

次に、コマンドプロンプトで、BeautifulSoup4 をインストールします。

>pip3  install  beautifulsoup4

 

BeautifulSoup で、HTML を解析し、数値情報などを取り出します。

CSS selectors

BeautifulSoup は、CSSセレクタをサポートしています。

 

 

スクレイピング

今回は、銀(SLV)のオプション売買を考えます。

そのため、YAHOO!FINANCE から、スクレイピングします。

(注1)SLV は、ティッカーシンボルです

YAHOO!FINANCE からスクレイピングする方法は、【参考文献.1】が詳しいです。

 

 

YAHOO!FINANCE

ティッカーシンボル(SLV)

Fig.1 YAHOO!FINANCE

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 参照)。

Fig.2 YAHOO!FINANCE : Options

この画面から、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 YAHOO!FINANCE : Options : Source code

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!ファイナンスから、日経平均株価を抽出するプログラムを解説しています。

 

 

コメントを残す

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