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

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

逆指値発注ツールの精度向上

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

ほぼ常に10銘柄以上持っている持ち株ですが、
リスク管理のため常に逆指値でストップを入れています。

毎週の発注は面倒なため、逆指値発注ツールを自作して使っています。
このブログでも何度か書いていますが、
時々原因不明の発注ミスが発生していました。

金曜が祝日だと使えないなど、機能は相変わらず足りてないのですが、
原因不明の発注ミスについての調査を行い、
ようやく解決することが出来ました。

簡単に言えば、短時間の間に立て続けに注文を出して
サーバーからはじかれていたようです。
そういう趣旨のメッセージは表示されなかったので特定に時間はかかりましたが…

原因調査中は次の2パターンを散々試して、
まったく原因がわからず不毛な時間を過ごしました。

ツールを普通に使う⇒途中で発注ミス発生
調査のため、ツールを随時止めながら使う⇒ノーミスで発注可能

要するにゆっくり動かせば動くのです。
時間以外に原因は無いのです。

IEの処理を待つためのVBAの処理はしっかり組み込んであるのですが、
それに追加して、次のコードを差し込みました。

Call Application.Wait(Now + TimeValue("00:00:01"))

これをやると、VBAの動きを1秒とめることができます。
こうしてのろのろ動くプログラムにすることで、
連続発注による処理ミスはなくすことが出来ました。

この1行のコードは、シストレに限らず、
VBAの動きをゆっくり見たい場合などに利用できますので
なかなか便利です。

【人気ブログをチェック】
[ 2013/05/12 00:24 ] シストレツール | TB(0) | CM(0)

yahooファイナンスから時系列株価を取得できる正規表現

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

久しぶりのプログラミングの話です。

前回、Excel VBA で正規表現を利用する方法を記載しました。
Excel VBA で正規表現を利用する

さて、問題はどんなパターンを指定すれば時系列データは取得できるのかです。

例として、トヨタの時系列株価の例のページのソースコードを見てみましょう。

ほしいのはこういう形式の部分です。

<tr><td>2013年4月16日</td><td>5,400</td><td>5,530</td><td>5,380</td><td>5,450</td><td>16,290,800</td><td>5,450</td></tr>

"tdタグ"はhtmlの表の1マスを表します。
最初のマスが日付で、それ以降、
始値,高値,安値,終値,出来高,調整後終値*と続きます。

タグは毎日同じですが、数値部分は(当然ですが)日によって異なり、
プログラムで文字列を操作するときに面倒になるところです。
それを解決してくれるのが正規表現というわけです。

僕は出来高と調整後終値はツールで利用していないため、
日付,始値,高値,安値,終値,を次の正規表現で取得しています。
(出来高もとりたい場合も考え方は同じです。)

"(\d{4}年\d{1,2}月\d{1,2}日)</td><td>([0-9|,]+)</td><td>([0-9|,]+)</td><td>([0-9|,]+)</td><td>([0-9|,]+)"

それでは解説しましょう。

まずは、
\d{4}年\d{1,2}月\d{1,2}日
の部分です。

\d という記号は、半角の数値つまり0,1,2・・・9のいずれか一文字、という意味になります。
そしてさらに、{4}は4回繰り返し、{1,2}は1回から2回までの繰り返しを意味します。
これによって、
\d{4}年\d{1,2}月\d{1,2}日
は任意の日付にマッチします。
(日付ではありえない34月98日などにもマッチします。
 実害はありませんが気になる人はもう少し工夫してください。)

次の
</td><td>
はそのままです。htmlのタグにマッチします。

そして次のポイント。
[0-9|,]+
です。
[0-9|,] は 0から9までの数値または,(カンマ)にマッチします。
そして、 + (プラス) 記号は直前のものの1回以上の繰り返しを意味します。

これによって、株価が99円でも1,234円でもマッチさせることが出来ます。

ちなみに正規表現のパターンの中の"("")" 括弧は、
サブマッチのために入れています。
これを入れておくと、取得した文字列の中から
本当に必要な始値や終値などの数値をプログラムで利用するのが簡単になります。

これでパターンの設定は完了です。

あとは.GlobalオプションをTrueに設定しておけば、
1ページ中の時系列株価を一気に抜き出すことが出来ます。

【人気ブログをチェック】
[ 2013/04/30 23:21 ] シストレツール | TB(0) | CM(0)

Excel VBA で正規表現を利用する

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

HTMLソースから株価など必要な情報を抜き出すときに
抜群の効果を発揮する正規表現をExcel VBA で利用する方法について解説します。
サンプルにつきましては過去に紹介したHTAアプリケーションを見てください。


VBAで正規表現を利用するときは RegExp オブジェクトを使います。
これは VBScript のオブジェクトのため、
利用には参照設定が必要です。

【参照設定】
Microsoft VBScript Regular Expression 5.5

変数の宣言とインスタンスの作成はほかのオブジェクトと同じです。
【インスタンスの作成】
Dim re As New RegExp

RegExp オブジェクトには次のプロパティがありますので、
それを設定していきます。

re.Pattern
…マッチさせたいパターンです。必ず設定してください。

re.Global
…gオプションに相当します。
True を設定すると複数の結果にマッチします。

re.IgnoreCase
…iオプションに相当します。
Trueを設定すると英文字の大文字小文字の違いを無視します。

re.MultiLine
…mオプションに相当します。
Trueを設定すると対象を複数行のテキストとして解釈します。

以前紹介したHTAでは、
re.Pattern は "<td class=""stoksPrice"">(.*?)</td>"
と設定し、残りの3オプションは省略したため初期設定(false) としました。

これで、正規表現を使う準備は完了です。
いよいよ文字列からパターンを探します。
そのときは目的にお応じて次の3種類のメソッドを利用します。

re.Test(文字列)
…文字列中にパターンが存在するか判定します。

re.Execute(文字列)
…文字列の中でパターンに一致した部分を返します。

re.Replace(文字列1,文字列2)
…文字列1中からパターンに一致する部分を探し出し、
 文字列2に置換します。

RegExpオブジェクトのプロパティ、メソッドの簡単な紹介は以上です。
パターンはどうやって設定するのか、
Execute関数で返ってきた値はどうやって利用するのか、
と言う点についてはまた改めて解説したいと思います。
(以前のHTAをそのまままねしていただければ動きますが、
かなりあっさりしていて応用が利きませんので…)

【人気ブログをチェック】
[ 2013/03/20 11:49 ] シストレツール | TB(0) | CM(0)

HTAの株価取得ツールにおけるhtmlの加工方法

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

過去に紹介したHTAで作成された株価取得ツール
ソースコードを読んでくださった方がどのくらいいるのか
わかりませんが、その中で使っている正規表現についての説明です。

VBSにはExcel VBAの参照設定に相当するものはないため、
CreateObject("MSXML2.XMLHTTP")
で作成したXMLHTTPオブジェクトを利用していますが、
HTMLの取得は過去の記事で紹介した仕組みと同じです。

注目していただきたいのは取得したHTMLソースの加工の部分です。
これまでに本ブログで紹介した、タグの切り出しなどを利用していません。

その代わりに利用しているのが正規表現です。
コードで言うと、下記の部分に相当します。

with New RegExp
.Pattern = "<td class=""stoksPrice"">(.*?)</td>"
getNowPrice = .Execute(html).Item(0).SubMatches(0)
End With


正規表現を簡単に言うと、文字列の中から特定のパターンを探し出し、
存在判定を行ったり、抜き出したり、置換したりする仕組みです。

この例ではは .Pattern という変数で指定した、
"<td class=""stoksPrice"">(.*?)</td>"
というパターンの文字列を検索し抜き出しています。
(.*?) の部分は任意の文字の繰り返しと言う意味になり、
<td class="stoksPrice"> と </td> で挟まれた部分を探し出すことが出来ます。

正規表現そのものについては各所に解説があるのですが、
本プログラムでは非常にシンプルな使い方をしています。

.Execute(html) でパターンにマッチする部分(価格と前後のタグ)を探し出し、
.Item(0) でそのうちの1つ目を取り出し、
さらに、
.SubMatches(0)
で()で囲まれた部分を取得すると言うプログラムです。
これでほしい株価なり為替レートなりを抜き出せます。

正規表現のメリットはInstrなどに比べてさまざまなパターンの文字列に対応できることと、
何より実行が早いことです。

僕のシステムトレードツールでは正規表現を時系列のデータ取得の
中心にしています。

とりあえず、以前紹介したHTAの株価取得ツールについての解説は終了かなと思います。
正規表現についてや、それをエクセルで使う方法、
そして、実際に時系列価格を取得する方法については
それぞれ別記事で解説したいと思います。

【人気ブログをチェック】
[ 2013/03/09 14:34 ] シストレツール | TB(0) | CM(0)

HTAについて

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

こちらの記事で紹介した
株価取得ツールはHTAと言う仕組みで作っています。

HTAは HTML Application の略で、
簡単に言うとWebサイトなどを作るのに使うHTMLで
アプリケーションをつくっちゃおうと言う仕組みです。

作り方は簡単で、htmlを書いて拡張子を .hta で保存するだけです。

htmlのスクリプトにあるローカルファイルにアクセスできない等の
制限があっさり無くなり、JScriptやVBScriptのGUIツールが簡単に作れます。
(そのため、この技術を使ったウイルス等もあるそうです)

Windowsで、最近のIEさえインストールされていればほかに何も入れなくても
アプリケーションがつくれると言う優れものです。

メモ帳に貼り付けて保存したらプログラム完成なのですが、
これ、誰か作ってくださったでしょうか。

ほかの人の環境できちんと動いているのか少し気になります。


【人気ブログをチェック】
[ 2013/03/03 21:56 ] シストレツール | TB(0) | CM(0)
プロフィール

yutaro

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

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

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

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

Twitterアカウントはこちら。



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

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

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

ブログランキング

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