口座を開いたら、含み損が想定していた幅の倍になっていた。チャートを遡ると、損切りに設定したはずの価格を昨夜のうちに通り過ぎている。EAは動いていたし、パラメータの損切り幅もゼロではない。それなのに、決済の記録だけが無い。
損切りが効かなかった、という相談はよく届く。ただ話を聞いていくと、原因はだいたい二つのどちらかに落ち着く。そしてこの二つは、直す場所も、パソコンを閉じている間にどうなるかも正反対になる。片方の直し方をもう片方に当てても、症状は変わらない。
損切りは注文に付けるものだと思われがちだが、EAの中には、自分で価格を見張って条件を満たしたら決済を送る作りのものがある。動いている間は見た目が同じなので、どちらの作りなのかは画面から分かりにくい。差が出るのは、止まった時だ。
注文に付いているのか、EAが見張っているのか
前者は、ポジションそのものに損切りの価格が設定される。値を持っているのはサーバー側なので、端末を閉じてもパソコンの電源を落としても、価格が届けば決済される。自分がその場にいる必要はない。
後者は、EAが値動きを受け取るたびに現在値と自分の中の損切り価格を比べ、超えていたら決済の注文を送る。ポジションには何も付いていない。端末の取引タブを見ると、そのポジションの損切りの欄は空のままになっている。
相場が動いていて、EAが動いていて、回線もつながっている。この条件が揃っている間は、どちらも同じような値段で決済される。違いが出るのは条件が欠けた時で、前者は自分がいなくても効き、後者はEAが動いていない間、誰も決済しない。
パソコンを閉じたら決済されていなかった
この症状は、ほぼ後者の作りだと思っていい。端末を閉じればEAは動かない。判定する側がいないので、価格がどれだけ通り過ぎても何も起きない。次に立ち上げた時、初めて条件を見て決済を送る。その時の価格が狙っていた価格から離れているのは当然で、EAが誤動作したわけではない。
では開きっぱなしにしていれば安全かというと、そうでもない。EAが判定するのは値動きが届いた時だけだ。回線が切れている間、銘柄が気配値表示から外れている間、そもそも値が動かない時間帯。どれも判定は走らない。週末をまたいで窓を開けて始まれば、間の価格帯は誰も通っていないので、その価格で決済することもできない。
だから常時動かせる環境が要る、という話になりやすい。ただ順番としては逆で、止まっても効く形にできるなら、そちらを先に考える。損切りを注文に付けておけば、こちらが止まっている間もサーバー側が見てくれる。環境で解く前に、作りで解けないかを見る。
損切りが効いているかどうかは、入れた時ではなく、止まった時に決まる。
近すぎる損切りは、受け付けてもらえない
注文に付ける形にしても、そのまま通るとは限らない。多くの業者は「現在値からこれ以上離すこと」という下限を持っていて、それより近い損切りは受け付けられない。注文ごと蹴られるか、損切りだけが付かないまま約定するかのどちらかになる。
この下限は固定ではない。銘柄ごとに違うし、指標の前後や早朝に広がることもある。値動きの幅から損切りを自動で計算する作りだと、静かな時間帯にだけ幅が足りなくなって蹴られる。毎回同じ結果にならないので、あとから再現しようとしても再現しない種類の不具合になる。
もう一つ多いのが桁の取り違えだ。小数点以下が5桁の口座と3桁の口座では、同じ「20」の意味する幅が10倍違う。幅はポイントで持ち、pipsとの換算は一箇所にまとめる。掛けたり割ったりを何箇所にも書いていると、銘柄が増えた時に必ずどこかが合わなくなる。
建値移動とトレールで決めるのは、条件と刻み
利が乗ったら損切りを建値へ動かす、そこから先は追いかける。よくある作りだが、条件を「利益が出たら」とだけ決めていると、価格が少し動くたびに変更の注文を出し続けることになる。数秒おきに同じような注文が並ぶ状態は、通信の面でも歓迎されない。
決めるのは三つ。動かし始める条件、一度に動かす刻み、そして不利な方向へは戻さないこと。刻みは「今の値より何ポイント以上よくなる時だけ動かす」という形で持つ。これがないと、1ポイントの改善でも注文を出しにいく。
動かした値は自分で覚えておいて、次の判定はその値と比べる。毎回サーバー側の値を読み直して上書きするだけの作りだと、変更が通らなかった時に、どこまで動かしたつもりだったのかが手元に残らない。
変更の注文も、新規と同じように蹴られる。近すぎる、価格が動いている最中で受け付けない、といった理由だ。通ったつもりで通っていないのがいちばん厄介なので、変更を送った後の結果は必ず見て、失敗していればログに残す。
部分決済は、ロットの刻みに合わない値になりやすい
半分だけ決済して残りを伸ばす、という手を入れることがある。ここで詰まるのが数量だ。0.03の半分は0.015だが、ロットの刻みが0.01の銘柄では、この数量は存在しない。そのまま送れば、数量が不正だという理由で蹴られる。
決めておくことは三つある。切り上げか切り捨てか。丸めた結果が最小ロットを下回った時にどうするか。そして、残りが最小ロットを下回る場合にどうするか。0.01のポジションを半分にすることはできないので、全部決済するか、部分決済そのものを見送るかを先に決めておく。
丸め方はEAの中の一箇所にまとめて、ロットを扱う全部の場所で同じものを使う。新規のロット計算と部分決済で別々に丸めていると、口座や銘柄を変えた時に片方だけがずれる。この種のずれは、そこそこ動かした後になって気づくことになる。
まず「注文が出ているか」を分ける
いちばん速い確認は、端末の取引タブでポジションの行を見ることだ。損切りの欄に値が入っていれば注文に付いている。空なら、注文には何も付いていない。ここが分かるだけで、次に見る場所が変わる。
値が入っているのに決済されていないなら、価格がその値に届いていない可能性を先に疑う。表示されている価格は買値と売値のどちらか一方で、決済の判定に使われるのはもう一方だ。「あと少しで届いたのに」という状況は、この差で説明が付くことが多い。
欄が空なら、EAが決済を送ったかどうかをログで見る。送った記録があるのにポジションが残っているなら、エラーの文言まで読む。記録そのものが無ければ、判定が走っていない。ここまで分けてから手を入れれば、直す場所は一箇所に絞れる。分けないまま設定をあちこち触ると、何が効いたのか分からなくなる。
当方は元金融系のシステムエンジニアで、MT4・MT5のEAの改修をココナラでお受けしています。損切りを注文側に持たせる形への作り替え、建値移動やトレールの条件と刻みの整理、部分決済のロット計算の見直しは、いずれも改修の範囲です。今どちらの作りになっているのか分からない、という段階でも構いません。ココナラのメッセージからご相談ください。なお、お渡しするのはソフトウェアであって、投資助言や運用の代行ではありません。