Block EAでEAを作ろう:待機注文の繰り返し
皆さん、こんにちは。
たいていのプログラミング言語には、同じ処理を何度も実行させたいときに簡単に記述できるよう「繰り返し」という機能があります。for文という命令に対応している言語が多いですね。
MT4、MT5のカスタム指標のプログラムでは、指標データをチャート上で順番に表示させるので、繰り返しは必ず出てきます。
ただ、共通ライブラリを使ったEAだと、繰り返しの必要なところはライブラリ内部で処理しているので、プログラムで繰り返しの処理をさせる必要はあまりないかもしれません。
今回は、Block EAの機能紹介も兼ねて、注文の繰り返しを使ったシステムをBlock EAで組んでみます。
複数の指値注文を出すシステム
前回の記事で仕掛けシグナルが出たときに、成行注文ではなく、指値注文を出すEAを作ってみました。
今回は、その指値の値幅を変えて待機注文をいくつも出すシステムを考えてみます。
例えば、買いシグナルが出たときに、その価格から10pips安い価格、20pips安い価格、30pips安い価格などに指値注文を出すといった具合です。
ここで売買シグナルは何でもいいのですが、指値注文が約定しやすいように逆張りのシグナルにしてみます。
例えば、期間10のRSIが30以下で買いシグナル、70以上で売りシグナルといったルールにしてみます。
まずは、指値注文を一つだけ出す場合です。
指値の値幅は10pipsとし、待機時間は0、つまり、次のシグナルまで注文のキャンセルはしない設定としています。
次に、このシステムに20pipsの値幅の指値注文、30pipsの値幅の指値注文を追加してみます。
指値注文のブロックを複製してポジション番号を「1」「2」に変え、値幅を「20」「30」に変えるだけです。
このようにポジションの数が2,3個であれば、注文ブロックを複製しても問題ありません。
ただ、ポジションの数が多くなってくるとちょっと面倒です。そこで、「繰り返し」の機能を利用してみます。
Block EAの繰り返しブロック
Block EAで利用できる「繰り返し」に関するブロックは、以下のようにツールボックスの「繰り返し」というカテゴリーに用意されています。
Block EAはGoogleのBlocklyを基にしているので、基本的にはBlockly標準の機能です。それぞれのブロックの簡単な説明はこちらをご覧ください。
繰り返しの命令としては、for文とwhile文がありますが、繰り返す回数を指定して使うfor文に対応するブロックは二つあります。1番上と上から3番目です。
繰り返す内容が毎回同じ場合、一番上のブロックが使えます。ただし、今回は繰り返すブロックの内容が少しずつ違うので、3番目のブロックを利用します。
このブロックでは、「実行」のところに組み込んだブロックを繰り返すわけですが、その際にループ変数「i」を使います。
上の例では、「i」の値が「1」「2」「3」・・・「10」と変わる間、繰り返しが実行される形になっています。
いま「i」をポジション番号に対応させると、「i」は「0」から「2」まで変えればよいことになります。
繰り返すブロックは前述の指値注文です。「i」をポジション番号に対応させたので、ポジション番号が「i」となります。
もう一つ変化させるのが指値までの値幅です。これを「i」を使って表す必要があります。
iを順番に変えていくと、
iが0のとき、値幅が10pips
iが1のとき、値幅が20pips
iが2のとき、値幅が30pips
のように、値幅は10ずつ増えていることがわかります。そこで、「i*10」を考えてみます。すると、
iが0のとき、i*10が0
iが1のとき、i*10が10
iが2のとき、i*10が20
となります。これを見ると、「i*10」は、値幅より10だけ少ない値になっています。なので、「i*10+10」とすれば、値幅と同じになることがわかります。
そこで、「値幅」のところに「i*10+10」のブロックを挿入すると、以下のようになります。
ブロックの場合、簡単な数式でも演算子の分だけブロックを組み合わせなくてはいけないのでちょっと面倒です。しかし、繰り返す回数は簡単に変えられます。「2まで」の部分を変えるだけです。
なお、共通ライブラリでは、標準で10個のポジションを同時にオープンすることができるので、そのままでもポジション番号を0から9まで変えて繰り返すことができます。
ただ、ポジションを10個より多くしたい場合は、別の設定が必要となります。そのあたりのお話しはまた別の機会に。
ではまた。