前回、前々回の記事
【株投資手法】平均利回り約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は下記の図の赤字箇所に示されています。
html文書全体から 例えばPBRを探そうとすると該当部分は下記のような文書になっています。
[PBR周辺のhtml文書]------------------------------>
<div class="lineFi yjMS clearfix">古典的ではありますが、取得したhtml文書からこの部分を抜き出して、正規表現で該当箇所だけ抜き出していきます。
<dl class="tseDtl">
<dd class="ymuiEditLink mar0">
<strong>(単) 0.47</strong>倍<span class="date yjSt"> (08/24)</span>
<span class="icoRealTime" title="リアルタイム"> </span>
</dd>
-------------------------------------------------->
抜き出し方は簡単で
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に格納したデータは下記のようになりました。
このリストは最初に提示した、BPS>=1,500 自己資本比率>=75% PBR<=0.5の条件の企業一覧リストです。
もちろんマクロボタン1つで今は自動でこの表ができちゃいます。あとは、これを『その2』で紹介した、Google Readerとヤフーファイナンスアプリで登録してウォッチしていくだけです!
ちなみに本プログラムについては、
ヤフーのサーバーに直接リクエストを送ります。
頻繁にリクエストを送付してしまうとヤフーサーバーの負担になりますので、
Sleep関数を使って、休み休みリクエストを送るようにしましょう(3秒毎とか)。
以上です。
3部作となった株価編、終了しまーす。
ganochaso