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")))

にするなどの方法があります。

  VBAコードサンプル エクセルファイル

下のメニューの「自動売買用VBAチップ ファイル一覧」などのリンクページから各種研究用・分析用のエクセルファイルをダウンロードできます。

エクセルでVBA自動売買システムを作る際に参考にしていただく素材集です。
このコーナーへのアクセスが多いようなら更に素材を追加します。

もっともよく知られたテクニカル指標の計算ファイルです。
トレンド系とオシレータ系の代表的なものを集めています。

ワイルダーの開発したテクニカル指標の計算ファイルです。
現在広く使われているのテクニカル計算法の基本的な指標群です。

バンド系、チャネル系テクニカル指標の計算ファイルです。
逆張りエリアや過熱エリアなどの境界検出に用いられます。

代表的な各種の移動平均をそろえた計算ファイル集です。
各テクニカル指標の移動平均部分で差し替え検証などを行うことができます。

エクセルで自立型の売買システムを作る際に参考にしていただく素材です。
更に素材を追加する予定です。



 サイトからのお知らせ。
・10/21日 最新のお知らせや重要なサイトの更新は現在特にありません。

エクセル用無料ファイル(四本値&インジケーター)
 各種ファイルは利用者の共有資料です。(ダウンロードフリー)

・このサイトはグーグルクロム(PC)に最適化しています。

広告



TOP