コンピュータ投資基礎ノウハウ、エクセルVBA「シグナル表示」
VBAで作成したロジックから発生する売買シグナルをエクセルのセルに表示する方法。
売買ロジック、シグナル発生ロジックをVBAで組んでしまえば、連想配列などを使って、セルを一切介さずにシグナルを配列上で発生させて、それを直接発注に結びつけることもできますし、一旦セルを介する場合でも、固定した任意のセルにシグナルを置いて、それを監視ルーチンがチェックするということができます。
ただ、エクセルを使う利点として、過去に作成したシート関数によって発生したシグナルを使うと言うことがあります。
こうしたセル関数で発生するシグナルを監視ルーチンが拾うためには、多少の工夫が必要です。
時系列データが昇順で並んでいる場合、つまり古いものから新しいものへと並んでいる場合にはシグナルを発生させるデータは最下行となり、今最下行が何行目かと言うことを検出した上で所定の列セルを求めるという事になります。
これとは逆に時系列データが降順、つまり新しいものから古いものへと並んでいる場合には常に最上部の固定された行にシグナル発生セルがあると言う事になります。
固定されたセルに発注情報がある場合にはそのセルの内容を参照すれば良いので問題はないのですが、多くの場合価格四本値データは昇順であるため、これを元にロジックが組まれている場合には最終行の検出と言う作業が必要ということになります。
最終行を割り出すにはいくつかの方法がありますが、もっとも簡単なのはカウント関数を使う方法です。
これはセル関数ですが、このセル関数をVBAで使うことができます。
この関数で日付列や終値列などのデータ数を数えて、これにデータ最初の行を加えれば最終行が割り出せます。
Signal = WorksheetFunction.Count(Range(Cells(1, A), Cells(65536, A)))
これはA列1行目から最終行のあたり?までを数える命令文です。
WorksheetFunction. ←の部分がワークシート関数を使うと言う意味です。
VBAではこの方法で多くのワークシート関数を利用できるため、シート関数版のロジックブックをVBA版に置き換えることもできます。
こうして、抽出したデータ数にデータの最初の行を加えれば良いわけです。
なおデータの最初の行以前の同じ列にカウントされそうなデータがある場合には、例えば最初の行が五行目なら
Signal = WorksheetFunction.Count(Range(Cells(5, A), Cells(65536, A)))
とするか…、
数えられそうなデータが数値以外ならCountA関数を使って、
Signal = WorksheetFunction.CountA(Range(Cells(1, A), Cells(65536, A)))
にするなどの方法があります。
DL倶楽部の「自動売買用VBAチップ ファイル一覧」などのリンクページから各種研究用・分析用のエクセルファイルをダウンロードできます。
日経平均 | 32307.86(-550.45) |
TOPIX | 2324.47(-35.44) |
JASDAQ | 164.28(-0.47) |
ダウ平均 | 36247.87(+130.49) |
S&P500 | 4604.37(+18.78) |
NASDAQ | 14403.97(+63.97) |
ドル/円 | 144.642(+0.172) |
FTSE100 | 7554.47(+40.75) |
ハンセン | 16334.37(-11.52) |
ただいま、休日メンテナンス中です。
※一部に不具合が起こることがあります。