![見出し画像](https://assets.st-note.com/production/uploads/images/142000194/rectangle_large_type_2_f4dd8bfa5554909a9c158c5e50c351c7.jpeg?width=800)
リピートトレードプログラム(EA)を作ろう(1)全体構想を考えよう
メタトレーダーを使ってリピートトレードをするには、それようのプログラム(エキスパートアドバイザー(EA))が必要ですね。
これから数回シリーズで、多段リピートトレードプログラム(EA)を作っていきます。
リピートするところの動作を考える
リピートの基本部分
まず、リピートするところの動作を考えましょう。
動作は以下のような感じですね。
買値と売値を決める。
その注文のポジション(建玉)があれば、放置
ポジションがなければ、注文が発注されいるか確認して、発注されてなければ、注文を発注。発注されていれば放置
1.から初めて、あとは2.と3.のプロセスを延々と繰り返す。基本はただこれだけです。
![](https://assets.st-note.com/img/1716603331581-opM1yJYmLj.jpg)
今の値の近くに発注しよう
ただ、上のままだと、買値の設定が今の値より高いと指値注文がエラーになりますね。今の値を求めてその近くに発注するように考えてみましょう。
トレードする全体の範囲を考える。例えば100円から150円とか。
リピートの間隔を考える。例えば1円(100pips)とか。
これを考えると、多段のステップができますね。
例えば
100から101
101から102
・
・
・
149から150
というふうに。
今の値から、このステップの1つ下に買値、その上の売値を発注するようにしましょう。
今の値を取得
今の値のすぐ下の「買値」の設定値を求める
「買値」に対応する「売値」を求める。(「買値」+「リピート間隔」ですね)
その注文のポジション(建玉)があれば、放置
ポジションがなければ、注文が発注されいるか確認して、発注されてなければ、注文を発注。発注されていれば放置
という感じ。「今の値」が毎回変わる可能性があるので、1.から5.を延々と繰り返せばオッケーです。
フローチャートはこんな感じですかね。
![](https://assets.st-note.com/img/1716603698077-M11OQbP8Gy.jpg)
でも、これではうまくいきません。フローチャートに「注意」と書いているところ。
指値買い注文というのは今の値より安い金額の注文を発注するもの。なので、例えば、今の値が120.00ジャストだったとしましょう。120.00円で買いの注文は発注できません。スプレッドがあるので、たぶん今の値が120.01円でもできないでしょう。
なので、例えば、マージンを2pipsおいたら、120.02円以上~121.02円未満なら買値にするすぐ下の値は120.00円などとする必要があります。
ここまで作れば、今の値に対してすぐ下に買い注文とその決済の売り注文を出して(下図の左)、値が下がればその下の段について買い注文と売り注文を出して(下図の真ん中)、値が上がれば、中段の売り決済注文を執行して、上の段の買い注文と売り注文を出して(少しでもさがれば、中段のところに注文も出してしまいます)・・・・
![](https://assets.st-note.com/img/1716651169588-XaEUcdrQUN.jpg?width=800)
これで、一応、リピートトレードのプログラムができます。
ただ、これだと下の段の未約定の注文を放置していくことになりますので、少し実用性に欠けますね。
実用的に改良
改良点は以下のようなこと
注文の間隔、ポジションサイズを変化させたい。
相場の急変動のときにも取り逃しがないように、買いの指値注文は2段発注しておきたい。
それより下の注文は、残しておくと余分に発注証拠金が掛かるので、削除したい。
1.は全体幅と間隔から計算するのではなくて、設定用の表を読み込むようにします。
2.はもう一段下まで確認するようにすればよいですね。
3.がちょっと面倒。
すぐ下とその下の段に買いを発注して、さらのその下の段(3段目と呼びます)より下の段の発注を確認して消したとします。
今の値が、下図の一番上の買い注文(第1買い注文と呼びます)より下がれば、破線で囲った3段目の注文は残したい注文なので発注します。今の値が第一買い注文より上がれば、3段目の注文は取り消さなくてはいけません。
なので、今の値が第1買い注文前後(下図の上下太矢印)辺りでウロウロされると、すごく頻繁に発注取消の繰り返しになります。いくらなんでも取引サーバーの負担にもなるし、メタトレーダーのログもとんでもないことになます。
これを避けるために、1段目、2段目は発注します。3段目は無視します。注文があってもなくてもそのまま。4段目より下は確認して注文を取り消します。
こうすれば、下図の左の状態で買い注文を2つ発注して、今の値が下がって下図の右の状態になったときには、3段目の買い注文が発注されます。また、今の値が上がって左の状態になっても、3段目の注文はあってもなくても無視されるのでそのままになります。これで発注取消ループはさけられます。
![](https://assets.st-note.com/img/1716652534466-Hp1D1uEPvN.jpg?width=800)
全体の流れ
これまでに考えたことを、全体のフローチャートは下のような感じです。最終行の確認は注文取り消しループにだけ書いていますが、本当は全コマで必要だったりします。とりあえず処理の概略の流れはこんな感じと。
![](https://assets.st-note.com/img/1716654346165-P80bXpu0FM.jpg?width=800)
次の記事 ファイルを配列変数に読み込もう
この記事が気に入ったらサポートをしてみませんか?