【株番外編】ヤフーファイナンスから株価等を自動取得するプログラムを作成する | 日給1000万円の大富豪に投資とビジネスを学ぶために、日本の大企業を辞め、マレーシアに渡り、10年で1億を目指すブログ

日給1000万円の大富豪に投資とビジネスを学ぶために、日本の大企業を辞め、マレーシアに渡り、10年で1億を目指すブログ

将来自由を得たい。自由の定義。それは例えば、飲み会の場で盛り上がった面白いビジネス案を、次の日から立ち上げちゃうそんな時間的+資金的な自由。その自由を得るための戦いを綴るブログ。日本の大企業を辞職し、海外進出。マレーシアからお届けいたします

前回、前々回の記事

【株投資手法】平均利回り約7%/月で運用した私の株式投資手法について その1

【株投資手法】平均利回り約7%/月で運用した私の株式投資手法について その2

で、タイトルどおり、平均利回り約7%で運用した株式投資手法について説明しました。


その投資手法はその1で説明した通り、
①東証1部 
②BPS(1株当たり純資産) >= 1,500
③自己資本比率 >= 75%
④PBR(株価純資産倍率) <= 0.5
を条件に、投資対象を絞り込みます。


しかし、この条件の企業というのをどうやって絞り込もうか??という問題が残ります。例えば、ヤフーファイナンス等を使って1つ1つ逐一これらの指標を見ていくのか?そんな面倒なことをしていれば、時間がかかりすぎて脳みそ木っ端微塵になってしまう(;´Д`)。。。


また、私が使用していた証券会社のツールでは、この条件で銘柄を絞ることができませんでした。


ということから。。。悩んだ末に、
プログラムを書いてヤフーファイナンスから財務情報を自動で取得してリスト化してやろうではないか!』と当時は考えたわけです。。。まぁよく久しくプログラムを書いてないのにこんなこと思いつきましたね。。。と今では関心してしまいます。


プログラム言語は私が得意なVBAを使います。Microsoft Accessと連動させて東証1部の各銘柄のデータ分析もしてしまおうという魂胆もありました。


プログラムの説明に入りますが、
(1) ヤフーファイナンスのページのHTMLを取得する。
(2) 取得したHtml文書を正規表現にかけて、BPS/PBR/自己資本比率を取得する。
の順に説明したいと思います。


(1)ヤフーファイナンスのページからページのHTMLを取得する

こちらあまりに久しぶりですので、かなり苦戦するかと思いましたがすぐにできました。

コードを下記に書いてしまいます。

----------------------------------------------------------------

※参考コード(以下のコードを書けば、HTML取得は解決するはずです。)

Function getFinancialData()
Dim oHTTP As Object
DIm uri As String

uri = "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=●●●●"
    (※●●●●は取得したい企業の銘柄コードを投入。)

 set oHttp = CreateObject("MSXML2.XMLHTTP")
oHttp.Open("GET"), uri,Flase
oHttp.Send

End Function

----------------------------------------------------------------

これだけですね。

上記参照コードに例外処理を付け加えれば、HTML文書の取得ができます。
ただし、MSXML2.XMLHTTPオブジェクトを使用するためには参照設定が必要なので、そこは注意してください。(⇒詳細 )。


取得したいHTML文書を文字列として取得したい場合は、
MSXML2.XMLHTTPのプロパティであるresponseBodyを参照すれば取得できます。


例えば、上記の例で言うと、MSXML2.XMLHTTPオブジェクトをoHttpという名前で作成してますので、
『String html = oHttp.responseBody』とすれば、htmlにhtml文章が代入されます。


あと●●●●の部分には、あらかじめ東証一部の銘柄コード一覧を取得しておいて、DoWhile文で全銘柄ごとに繰り返し処理することで対応します。


(2)取得したHtml文書を正規表現にかけて、BPS/PBR/自己資本比率を取得する。

続いて正規表現です。
(1)のコードで言うと、下記のホームページのhtml文書を銘柄ごとに取得しています。PBR・BPSは下記の図の赤字箇所に示されています。

自由を得るための戦い!! 日本の大企業を辞め、海外逃亡。海外投資の会社へ転職し、10年間で資産1億を目指すブログ


html文書全体から 例えばPBRを探そうとすると該当部分は下記のような文書になっています。

[PBR周辺のhtml文書]------------------------------>
<div class="lineFi yjMS clearfix">




<dl class="tseDtl">
<dd class="ymuiEditLink mar0">
<strong>(単) 0.47</strong><span class="date yjSt"> (08/24)</span>
<span class="icoRealTime" title="リアルタイム"> &nbsp;</span>
</dd>
-------------------------------------------------->
古典的ではありますが、取得したhtml文書からこの部分を抜き出して、正規表現で該当箇所だけ抜き出していきます。

抜き出し方は簡単で
1度 『<strong>.*\n.*PBR』 で正規表現をかけ、抜き出した文字列を
次に『[0-9]+\.?[0-9]』で抜き出して結果がPBRの値になります。


補足として、VBAでの正規表現の使い方について説明します。

まず、RegExpオブジェクトを生成します。RegExpオブジェクトの詳細はこちら
次に、RegExpオブジェクトのPatternプロパティに指定したい正規表現を入れる。最後に executeメソッドを実行するだけとなります。


具体例をあげましょう。
文字列『aaaa1233bbb』から数値だけ取り出す場合は、

--------------------------------------------
Dim re As RegExp
Dim test As String
Dim mc As MatchCollection
//execute関数の返り値は MatchCollection

test = "aaaa1233bbb"
re.Pattern = "[0-9]+"

Set mc = re.execute(test)

--------------------------------------------

となります。


少し、やっかいだったのが、executeの返り値の型であるMatchCollectionオブジェクト。MatchCollectionオブジェクトとMatchオブジェクトの使い方の詳細についてはこちらこちら を参照してください。結論からいいますと、MatchCollection.Item(0).Valueで取得した値を文字列として返してくれます。


そして最後に大事なのが、参照設定です。最初にMatchオブジェクトを使ってプログラムを動かしたときは『ユーザ型は定義されていません』的なエラーがでてしましました。よって、VBAで正規表現を使用する時にはしっかり、このサイト にあるように、参照設定の設定変更を行います(追加するのは『Microsoft VBScript Regular Expressions 5.5』になります。)



ちなみに、上記の画像には自己資本比率は掲載されていません。
自己資本比率については、http://profile.yahoo.co.jp/consolidate/●●●●(※●●●●は銘柄コードになります。)にありますので、これまでの説明を応用して、実施してみてください。


以上です。
最後にAccessに格納したデータは下記のようになりました。


自由を得るための戦い!! 日本の大企業を辞め、海外逃亡。海外投資の会社へ転職し、10年間で資産1億を目指すブログ-YahooFinanceData2

このリストは最初に提示した、BPS>=1,500 自己資本比率>=75% PBR<=0.5の条件の企業一覧リストです。
もちろんマクロボタン1つで今は自動でこの表ができちゃいます。あとは、これを『その2』で紹介した、Google Readerとヤフーファイナンスアプリで登録してウォッチしていくだけです!


ちなみに本プログラムについては、
ヤフーのサーバーに直接リクエストを送ります。
頻繁にリクエストを送付してしまうとヤフーサーバーの負担になりますので、
Sleep関数を使って、休み休みリクエストを送るようにしましょう(3秒毎とか)。


以上です。
3部作となった株価編、終了しまーす。

ganochaso