Block EAでEAを作ろう:時間による仕掛け・手仕舞い

皆さん、こんにちは。

自動売買システムで、決まった時間に決済したいとか、決まった時間帯のシグナルだけ採用したいとか時間を使ったルールがあるかと思います。

今回は、そのような時間による仕掛けや手仕舞いBlock EAで組んでいく方法をご紹介します。

毎日決まった時刻に決済

時間により仕掛けや手仕舞いを行うということは、基本的には条件分岐です。なので、Block EAでは、if文に対応している「もし~実行~」ブロックを使います。

このif文ブロックの「もし」のところに条件を入れるわけですが、時間に関する条件のブロックは、ツールボックスの「条件分岐」→「日時の条件」のカテゴリーに用意されています。

まずは、毎日決まった時刻に決済する例です。何時何分を指定したい場合、一番上のブロックを利用します。例えば、こんな感じです。

これは、毎日20時30分にポジションを決済するというブロックになります。

なお、ここで秒の指定はありませんが、現在が何時何分かの判別は、実際には何時何分0秒から何時何分59秒の間かどうかの判別となっています。なので、ティックが0秒ちょうどに出なくても1分間の間にティックが出ればポジション決済を実行できるわけです。

これをティック時実行関数のブロックにセットすればOKです。ここでは、売買注文のブロックは省略していますが、ポジションがなければ何も実行しないので、ポジションの有無の判別は必要ありません。

週末の決まった時刻に決済

決まった時刻に加えて、週末などの曜日も指定したい場合、以下のように曜日・時・分の時刻データを返すブロックと、現在が指定した時刻かどうかを判別するブロックを組み合わせて条件を作ります。

このブロックも指定した時刻ちょうどを判別するのではなく、0秒から59秒までの範囲かどうかを判別します。

例えば、週末の23時30分に決済するブロックは以下のようになります。

仕掛けシグナルを採用する時間帯を制限する

こんどは仕掛けに対して時間による条件を付けてみます。仕掛けの場合も手仕舞いと同じく決まった時刻で売買注文を出すことはできますが、あまり実用的ではないので、ここでは、既存の仕掛けシグナルを採用する時間帯を制限する例をみていきます。

ベースとなるシステムは、最初の回に紹介したモメンタムを使ったものにしてみます。ブロックデータはこちらになります。

これは、「sig_entry」というシグナルで途転売買をするシステムです。sig_entry仕掛けシグナル手仕舞いシグナルの両方に使っています。

ここで両方のシグナルを時間制限してもよいのですが、そうすると、手仕舞いのタイミングが限られてしまい、ポジションの保持時間が長くなってしまいます。なので、手仕舞いシグナルsig_entryをそのまま使い、仕掛けシグナルの方だけを時間制限することにします。

そのため、sig_entryのシグナルに時間制限をかけたシグナルとして別の変数を用意します。例えば、それを「sig_filter」という変数名にし、sig_entryと同様に宣言します。そして、そのsig_filterという変数を成行注文ブロックの仕掛けシグナルのところに入力します。

次にsig_filterの初期値ですが、これは時間の条件が成り立つときにsig_entryと同じシグナル成り立たないときはシグナルなし、つまり、「0」となればよいので、ツールボックスの「条件分岐」のカテゴリーから「もし~trueの場合~falseの場合~」というブロックをもってきます。

ここで「true」というのは条件が成り立つことを意味するので、ここに「sig_entry」を入れます。また「false」というのは条件が成り立たないことを意味するので、ここに「0」を入れます。

最後に「もし」の条件ですが、ツールボックスの「条件分岐」→「日時の条件」から「0時0分から0時0分の間」を判別するブロックをもってきます。

例えば、1時0分から10時0分の間のシグナルだけを採用したい場合、以下のようなブロックになります。

なお、上の例は毎日同じ時間帯で制限する例ですが、1週間のなかで曜日と時間で制限したい場合、「現在が□から□の間」を判別するブロックと、「□曜日□時□分」の時刻データを返すブロックを組み合わせて以下のように指定することができます。

例えば、月曜日の12時0分から金曜日の12時0分までのシグナルを採用したい場合、sig_filterの宣言ブロックを以下のようなブロックに変えればOKです。

時間を指定して仕掛けや手仕舞いをする方法にはさまざまなバリエーションがあります。Block EAでは色々なパターンのブロックを用意しているので、うまく組み合わせて組んでみてください。

ではまた。

前へ

Block EAでEAを作ろう:シグナルによる手仕舞い

次へ

Block EAでEAを作ろう:待機注文を利用したEA