コンピュータ投資基礎ノウハウ、エクセルVBA「リアルタイム処理」
エクセル上で短い間隔の同じ処理を繰り返し定時実行する方法。
売買シグナルを計算するために、株価などを自動監視するにはVBAの命令文単位(プロシージャ)を自動的に呼び出す必要があります。
これには、VBAのタイマー機能を使います。
私は2008年ころに最初の相場用のVBAプログラムを作ったのですが、その時はこの機能を使って日経先物とTPIX先物の値段を毎秒セルに書き込むと言うことをやっていました。
このデータからNT倍率の四本値を約三年間とっていましたが、その後日経・TOPIXそれぞれのデータを元に一分足のデータから合成したNT四本値と自家製NT四本値でテクニカル検証上大きな違いが認められなかったので、現在は合成四本値を用いています。
コードサンプルの記されたエクセルを一番下のリンクからダウンロードして開いてください。
上のVBAの図の「Timer()」命令文では現在時間+一秒…つまり一秒後に自分自身(「Timer()」命令文)を呼び出すという方法で毎秒VBAが動いています。
次に、命令文(プロシージャ)の中に「Call Process」とある部分が外部の命令文を呼び出す部分です。
「Process()」命令文では指定時間に実行している状況がわかりやすいようにセルC3に毎秒の現在時間を表示するという命令文を便宜上入れています。
この部分にリアルタイム価格表示セルから任意の記録用セルにデータを移すという処理などを行います。
また、計算セルなどにシグナル発生を認めたら発注用のルーチンを呼び出すなどの作業を行えます。
「if~then」までの文は条件がこうなればと言う意味です。
セルA1が「1秒更新」と言う文字ならこれが実行されます。
「else」はそうでない条件ならということですから、ここには一分ごとの処理を便宜上入れています。
原則として1秒捲りと同じですが、参考までに毎分0秒丁度に動作するように命令を作っています。
Second(Now)とは現在秒と言う意味です。
簡単ですから、頭の体操にどうして毎分0秒になるかと言う仕組みを読み解いてみてください。
次に「Timer2()」命令文では一定時間ごとではなく指定時間にプロシージャを起動する命令文を書いています。
寄り付き直前とか引けセッションとか所定時間に注文をだしたり、あるいは建玉が残らないようにするチェックプログラムの起動したりする場合に使えます。
ここでは「Process2()」命令文を呼び出しています。
「Process2()」では便宜上指定時間になったら「指定の時間です!!」というメッセージボックスが表示されるようにしてあります。なお「Process2()」などの末尾のカッコ「()」は呼び出し元のプログラムからデータを渡すための仕掛けです。
エクセルの場合ある命令文から別の命令文に何らかの数値などを渡すときに一旦セルに書き込んで、それを呼びだされた命令文側で拾うということもできますが、普通はこうした形(引数)で数字などを渡します。
一応知識としての説明に留めます。
シートのA列セルとF列セルはカーソルを合わせると選択メニューが出ます。
このメニューから任意の命令状態を選択して、ボタンを押すと実行されます。
「Timer」は一定間隔で処理、「スケジューラ」は指定時間に処理の命令をVBAから呼び出します。
それぞれ試してみてください。
ボタンは「開発タブ」の挿入アイコンから選ぶことができます。
フォームとアクティブXがありますが、フォームは選んだ図形に任意の命令文を指定するという方法です。
ここではアクティブXを使っています。
アクティブX項の左一番上の図形がボタンで、これをクリックして指定した状態でシート上で範囲選択を行うとボタンが挿入されます。
ボタンが挿入されたらこのボタンから実施される命令文を指定します。
VBE(VBAのエディタ)を開いて左窓のSheet1を選択すると「Sheet1」という名のエクセルワークシートに割り振る事のできる命令文の入力モジュールが表示されます。
表示されたモジュールの最上部のメニューは指定シート上のオブジェクト(要素)を表示します。
ここからボタンならCommandButton1あるいはCommandButton2を選ぶことでそのボタンに割り振られた命令文が表示されます。
ここではVBAのプロジェクトモジュールに書き込まれた「Timer()」や「Timer2()」の命令文をそれぞれのボタンで呼び出しています。
メニューも同様に挿入アイコンで表示されるボックスのフォームから指定することもできますが、ここでは入力規則というツールでの作成を説明します。
データタブで開いたリボンの「データの入力規則」という項目をクリックすると、専用の窓が開きます。
入力値の種類で「リスト」を選びます。
元の値に「リスト」で表示させる項目を「,」で区切りながら入力します。
フォームのセレクトボックスなどを使う場合にはこのリスト項目はワークシートのセル上のデータで指定します。
DL倶楽部の「自動売買用VBAチップ ファイル一覧」などのリンクページから各種研究用・分析用のエクセルファイルをダウンロードできます。
日経平均 | 33431.51(-55.38) |
TOPIX | 2382.52(+7.59) |
JASDAQ | 164.28(-0.47) |
ダウ平均 | 36245.50(+294.61) |
S&P500 | 4594.63(+26.83) |
NASDAQ | 14305.03(+78.81) |
ドル/円 | 144.642(+0.172) |
FTSE100 | 7529.35(+75.60) |
ハンセン | 16830.30(-212.58) |
ただいま、休日メンテナンス中です。
※一部に不具合が起こることがあります。