2.為替データの読み込み、書込み、4本値。
自動売買システムに書き込む時間足の条件分岐を設定する
まずは新しい標準モジュールを追加します。
追加したら、今回は「Sub Ashi()」と記入して、下図の状態にしてください。
記入が完了したら、時間の制御を行うために時間をシートに書き込むコードを記入します。
書き込みの前に、変数に時間を代入します。
時間は変数time_nに文字列で代入し、あとから判断を行いやすくします。
文字列で代入する場合は、常に一定の形式で代入できるように書式を指定します。
コードは、「Format(Now, “yyyy/mm/dd hh:mm:ss”)」になります。これは、現在値を「年/月/日 時:分:秒」という形式で代入するコードです。
これを記入します。
読み込んだFXデータの時間足集計
次に、5分足の描画ですので、00分、05分、10分、15分、20分、25分、30分、35分、40分、45分、50分、55分に行の更新が行われますので、それらを条件分岐にて指定します。
シートには現在の行数を表示するようになっていますので、上記の時間になったら、その行数をひとつ増やせば良いわけです。
条件分岐は先述のIfを使用しますが、今回は条件が複数あり、条件のうちいずれかを満たせば条件クリアとなるOR条件となります。OR条件は各条件をORで接続すればOKです。
上記の分単位の時間の判断については、すでに変数time_nに文字列として時間が入力されていますので、その“分”の部分を抽出し、それを元に判断が可能です。抽出は、変数time_n(文字列)のx文字目からy文字を抽出する「Mid」という関数を使用します。
現在の時間time_nの”分”の内容は、time_nの15文字目から2文字分にありますので、それを抽出します。それを変数min_nに代入します。
コードは min_n = Mid(time_n, 15, 2) となります。
ここまでのコードは下記の通りです。
次に、先述の”分”を判断する条件分岐式を記入します。
OR条件は各条件をORで結べば良いので、変数min_nが”00″や”05″・・・であったらという条件を順に記入します。
If min_n = “00” OR min_n = “05” OR ・・・と記入していくのですが、コードが横に長くなるので、改行を適宜挿入します。
コードの途中で改行を入れる場合は半角スペースに「_」を記入して改行します。
If min_n = “00” Or min_n = “05” _
Or min_n = “10” Or min_n = “15” _
Or min_n = “20” Or min_n = “25” _
Or min_n = “30” Or min_n = “35” _
Or min_n = “40” Or min_n = “45” _
Or min_n = “50” Or min_n = “55” Then
上記の条件を満たしたときに現在の行数が一つ増えるので、条件を満たしたときのコードは下記の様になります。
num_1 = Cells(2, 5)
Cells(2, 5) = num_1 + 1
上記のコードはCells(2, 5)の値を変数num_1に代入し、それに1加えた値をCells(2, 5)に書き込みす。
併せて、Ifを使用したら、それに対応するEnd Ifが必要ですので、それも記入します。
これで、更新時の“分”が5分足の始まりの時間であった場合は行数を増加させることができます。
しかし、上記のコードでは正常に動きません。
というのも、最初に全体像を説明した際に掲載したとおり、更新は15秒毎、またはレートが変化する毎に行う予定です。
15秒毎に行うと、たとえば00分での更新は4回ありますので、その都度行を更新してしまうことになります。その処理を書き込まないといけません。
そこで、シートに作成してもらった移行タイミングを使用します。
足の移行のタイミングを設定する
現在、移行タイミングが記入してあるセルF2には「0」が記入してあると思いますが、そこが1の場合にのみ、上記のコードを稼働させるようにします。
移行タイミングが0か1かは、「行を更新したら→0」、「現在の“分”が00分、05分、…、50分、55分でなかったら→1」という制御を行えば、行を1度更新すると、”分”の値が00分、05分、…、50分、55分ではない時間帯になるまで0の状態にできます。
0の状態では行の移行は行いませんし、”分”の値が00分、05分、…、50分、55分でない場合も移行を行いませんので、通常の5分足の様に、5分に1度だけ行を更新することになります。
コードしては、まずここまでに書いている条件分岐式(“分”の判断部分)すべてを、「移行タイミングが1ならば」実行するように条件分岐で囲みます。
つまり、セルF2の値が1ならば実行しますので、コードは
If Cells(2, 6) = 1 then
となります。
次に、1度更新したら、移行タイミングは0にしなくてはなりませんので、それを行の更新直後に記入するようにします。
そして、”分”の値が00分、05分、…50分、55分でなかった場合に移行タイミングを1に戻しますので、そのコードを書きます。
条件式「○○が××でなかったら」は、○○ <> ××という式になりますので、それを最後に書き加えます。
このとき、この条件式は毎回判断を行いますので、「移行タイミングが1ならば」という条件分岐の外に書きます。
また、今回は00分、05分、…50分、55分のいずれでもなかった場合に条件クリアとなりますので、条件はAND式となります。
コードは下記の通り。
If min_n <> “00” And min_n <> “05” _
And min_n <> “10” And min_n <> “15” _
And min_n <> “20” And min_n <> “25” _
And min_n <> “30” And min_n <> “35” _
And min_n <> “40” And min_n <> “45” _
And min_n <> “50” And min_n <> “55” Then
条件をクリアした際の処理は、移行タイミングを1にしますので、
Cells(2, 6) = 1
となります。
Ifに対応するEnd Ifをお忘れなく。
次のページ:自動売買システムへの相場のデータの自動取り込み(タスクを使用)
ピンバック: 高値・安値の条件分岐 | 株・為替・FX・N225などの自動売買、自動取引システムの作り方
ピンバック: 自動売買システムへの4本値の書込。高値・安値の条件分岐 | 自動売買システムを作ってみよう