システムトレーダーの冒険の書

自作のプログラムでシステムトレードを行っています。ポジション完全公開で、シストレやプログラミングについて書いていきます。相互リンク募集中です。

CSVで四本値取得

ブログランキング参加中!!

以前紹介したスクリプトに対して、
CSVがほしいとコメントいただきましたので、
CSVでデータを保存できるバージョンを作りました。

まず、区切り文字は カンマに設定。 vbComma みたいな常数は無いのでそのままです。
Sepalater = ","

ファイル名は.txtではなく、.csvに。

正規表現はtxtかcsvかには関係ないのですが、
最近の呼び値変更の対応として小数点以下も取れるようにしました。

そして、CSVの値を区切るカンマと、
値段の3桁ごとの区切りのカンマが混在すると変なデータになるので、
桁区切りのカンマは消すようにしています。
ダブルクオーテーションで囲むとか、
別のやり方もありますがシンプルなほうがいいので。

たぶんこれで動くはず。
ご利用は自己責任でお願いしますが、
不具合等あったら教えていただければがんばって直してみます。

ソースコードは"続きを読む"を押すと出てきます。
使い方は以前の記事で紹介したのとほぼ同じです。

【人気ブログをチェック】

'#ここより下からコピー

'時系列株価を取得し、CSVファイルに保存するツールです。
'拡張子は.vbsで保存してください。
'12行目までが設定変数になっています。

'株価コード
StckCode = "8411"
'結果ファイル作成フォルダ
SaveFolder = "C:\Temp"
'何日分取得するか(指定した値*50日分取得します)
PageNum = 4
'区切り文字
Sepalater = ","

'以上が設定。ここより下の行はメインプログラム。

Set FSO = CreateObject("Scripting.FileSystemObject")

If Not FSO.FolderExists(SaveFolder) then
MsgBox "保存先フォルダが存在しません"
WScript.Quit
end if

OutFilePath = FSO.buildPath(SaveFolder , StckCode & ".csv")
Set TS = FSO.CreateTextFile(OutFilePath)

Set re = New RegExp
re.Pattern = "(\d{4}年\d{1,2}月\d{1,2}日)</td><td>([0-9,.]+)</td><td>([0-9,.]+)</td><td>([0-9,.]+)</td><td>([0-9,.]+)</td><td>([0-9,.]+)</td><td>([0-9,.]+)"
re.Global = True

For PageCnt = 1 to PageNum
html = getHTMLbyURL( getHistoryURL(StckCode , Date - 80 * PageCnt , Date , PageCnt) )
Set Mcol = re.Execute(html)
for i = 0 to Mcol.count -1
LineString = ""
LineString = Mcol.item(i).submatches(0)
LineString = LineString & Sepalater & Replace (Mcol.item(i).submatches(1) , "," , "")
LineString = LineString & Sepalater & Replace (Mcol.item(i).submatches(2) , "," , "")
LineString = LineString & Sepalater & Replace (Mcol.item(i).submatches(3) , "," , "")
LineString = LineString & Sepalater & Replace (Mcol.item(i).submatches(4) , "," , "")
LineString = LineString & Sepalater & Replace (Mcol.item(i).submatches(5) , "," , "")
LineString = LineString & Sepalater & Replace (Mcol.item(i).submatches(6) , "," , "")
TS.writeLine(LineString)
Next
Next
TS.Close
MsgBox "完了"

Function getHistoryURL(code , s_date , e_date , p_cnt)
'時系列データ取得元サイトのURL作成関数です
getHistoryURL = "http://info.finance.yahoo.co.jp/history/"
getHistoryURL = getHistoryURL & "?code=" & code & ".T"
getHistoryURL = getHistoryURL & "&sy=" & Year(s_date)
getHistoryURL = getHistoryURL & "&sm=" & Month(s_date)
getHistoryURL = getHistoryURL & "&sd=" & Day(s_date)
getHistoryURL = getHistoryURL & "&ey=" & Year(e_date)
getHistoryURL = getHistoryURL & "&em=" & Month(e_date)
getHistoryURL = getHistoryURL & "&ed=" & Day(e_date)
getHistoryURL = getHistoryURL & "&tm=d"
getHistoryURL = getHistoryURL & "&p=" & p_cnt
End Function

Function getHTMLbyURL(url)
'URLからHTMLを取得する関数です
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
On Error Resume Next
Call objXMLHTTP.Open("GET", url, False)
Call objXMLHTTP.send
getHTMLbyURL = objXMLHTTP.responseText
On Error GoTo 0
End Function

'#ここより上までコピー
[ 2014/10/26 22:55 ] シストレツール | TB(0) | CM(4)
素早い対応感謝です。v-411

Sepalater = ","
桁区切りのカンマを削る
 以上の2点まではたどり着いていたのですが、小数点がマッチしないので取得できない(らしい)事の解決方法でつまずいていました。v-403正規表現もボンヤリした理解で使っております。
 この後VBAで.vbsに設定変数を渡す方法をトライして砕ける予定です。v-394
[ 2014/10/27 20:05 ] [ 編集 ]
Re: タイトルなし
正規表現は僕もそこまで詳しくないのですが、
パズルみたいで面白いですよ。

VBA ⇔ VBS を連携させる方法は
引数を渡すほか中間ファイルを使うなど、
いろいろありますが、
全部VBAに組み込んでしまうのが簡単かもしれません。
[ 2014/10/27 22:12 ] [ 編集 ]
やはりそうですよね
IEでWebクエリ
v-159
タグを調べデータ抽出
v-159
Vbs(このブログで知る)IEの代用できそう・・
v-159
「RegExp」何処かで見たことあるかも・・
v-159
VBAで出来そうv-161今ここです。v-405

木を見て森を見ず?・・(使い方あっている?)そもそも森を認知出来ないほど知識不足という現実・・v-406
[ 2014/10/29 20:16 ] [ 編集 ]
>>武蔵大杉さん

Excel VBA は、
他のソフトウェアの機能を呼び出して使うことが出来ます。
参照設定かCreateObjectで実装します。

RegExp はVBScript側のオブジェクトなので、
本来VBScriptで使うのですが、
ExcelVBAでも使えますね。

IEとの連携やXMLHTTPを使用したHTMLの取得も
VBAで出来ますよ。
[ 2014/10/29 20:45 ] [ 編集 ]
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL

プロフィール

yutaro

Author:yutaro
年齢:30代
職業:IT系(ベンダーからWeb系に転職)
住所:関東

Excelで自作したツールのシグナルにしたがってシステムトレードをやっています。

相場暦:
2005年10月からFX開始
就職前後に一旦取引を中断し、
2012年6月から株をやってます

トレードの目標は2020年1月1日を億万長者としてむかえること。

Twitterアカウントはこちら。



ご連絡を取りたいかたはブログのコメント欄、メールフォーム、Twitter、などどちらからでもOKです。システムトレード、プログラミング、数学、などのほか、飲み会のお誘いなど何でもどうぞ。

書籍・グッズの購入はこちら
メールフォーム

名前:
メール:
件名:
本文:

ブログランキング

株式投資ブログランキング
アクセスカウンタ