EAがエントリーと決済を繰り返す原因と直し方

EAがエントリーと決済を繰り返す原因と直し方

記事
マネー・副業
取引履歴を開くと、同じ日の同じ時間帯に、建ててはすぐ閉じ、また建てては閉じた記録が並んでいる。一回あたりの損益は小さい。それでも、出し入れのたびにスプレッドと手数料はそのぶんだけ出ていく。

条件そのものは間違っていないと思う。狙っていた場面ではきちんと入っている。ただ、入るべきかどうかが微妙な場面で、判定が決まりきらずに前後している。フィルタを一つ足してみたが、回数が減っただけで、落ち着きはしなかった。

今回扱うのは、この往復だけです。同じ向きにポジションが増え続けるものは原因が別のところにあるので、ここでは触れません。それから、先に外しておきたい前提が一つあります。確定していない足で判定していると、その足が閉じるまで値は動き続けるので、判定が反転するのは当たり前です。確定した足だけを見る作りになっているかを確かめてから、先へ進んでください。

「往復」と「増え続ける」を先に分ける

まず取引履歴で、建てた時刻と決済した時刻を並べてみてほしい。前の決済のあとに次の建玉が来ているなら往復だ。決済がないまま同じ向きに積み上がっているなら、それは別の症状で、直す場所も違う。分けないまま手を入れると、原因ではないところを触ることになる。

往復しているとき、行き来しているのはポジションではなく判定の方である。ポジションはその写しにすぎない。だから直す先は、入る条件の中身ではなく、条件が切り替わる時の作法になる。条件を厳しくして回数を減らしても、切り替わり方が同じなら、残った場面でやはり往復する。

反転しているのは相場ではなく、境界のまたぎ方

反転した前後の値を見ると、ほとんど動いていないことがある。指標の値が、しきい値のすぐ上とすぐ下を行き来しているだけだ。差は小さくても、上か下かで答えを出す仕組みなら、出てくる結論は毎回正反対になる。

移動平均どうしの上下、指標がしきい値を超えたかどうか、傾きが正か負か。形はどれも同じだ。境界から離れているあいだ判定は安定していて、境界のすぐ近くでいちばん揺れる。もっとも曖昧な場所で、ごくわずかな差が結論を決めている。

フィルタを足しても効かなかった理由もここにある。足したフィルタも、自分の境界を持っている。境界が二つに増えれば、揺れる場所も二つになる。条件の数を増やすより、一つずつの切り替わり方を直す方が早い。

往復するEAに共通する形

境界の近くでは、いちばん小さな差が、いちばん大きな違いになる。

入る時の値と、出る時の値は同じでいいか

一つめの手当ては、ONにする条件とOFFにする条件で違う値を使うことだ。ONは境界より少し上、OFFは境界より少し下に置き、その間に幅を空けておく。幅の中にいるあいだは前の状態をそのまま保って、何もしない。境界のすぐ近くを行き来しているうちは、判定が動かなくなる。

エアコンの温度調整と同じ考え方です。設定温度ちょうどで入切する作りにすれば、その温度の周りで入切を繰り返します。幅をどれだけ取るかは扱う指標によって変わるので、これという値はありません。狭すぎれば往復が残り、広すぎれば本当の反転に乗り遅れる。往復の回数を見ながら決めることになります。

切り替えに、時間の条件を付ける

二つめは、時間で縛る手だ。条件を満たした足がN本続いたときだけ状態を切り替える。そして一度切り替えたら、最低でもM本のあいだは戻さない。前者は入口を鈍らせ、後者は出口を鈍らせる。往復とは「切り替えて、すぐ戻す」ことなので、戻す側を止めるだけでも回数はかなり落ちる。

NとMは、最初から正しい値を当てにいかない方がいい。小さいところから少しずつ増やして、往復の回数がどこで落ち着くかを見る。同じ期間・同じデータで比べないと効果が分からないので、変えるのは一度に一つにしておく。

状態を持ち、変わった瞬間だけを扱う

三つめは、前回どちらだったかを覚えておくことだ。今が上か下かだけを毎足で見て結論を出し直していると、同じ結論を何度も出すことになるし、そのたびに揺れも拾う。前回の状態を持っておけば、扱いたいのは変わった瞬間の一回だけになる。同じ向きが続いているあいだは何もしない。

ただし、これだけでは境界をまたぐ往復そのものは止まらない。またぐたびに状態は本当に変わっているからだ。止めるのは前の二つで、こちらは重複した処理を消す役割になる。三つは競合しないので、一緒に使う前提で組む。

これは売買に限った話ではない。伝票の状態を「未入金」から「入金済」へ動かすとき、条件を満たしているかを毎回見て書き直す作りにすると、状態は行ったり来たりする。あとから集計する側は、どの時点が正しいのか分からなくなる。変わった瞬間に一度だけ書き、あとは動かさない。動かす必要が出たら、取り消しの記録を足す。往復させないことが、後ろの工程を守る。

三つの手当てと、遅れる場所

直ったかどうかは、損益ではなく回数で見る

手を入れたあと、直ったかを損益で判断しない方がいい。数回の勝ち負けで動く数字なので、往復が減ったのか、たまたま相場が違ったのかを分けられない。見るのは一日に何回状態が切り替わったかだ。損益ほど相場の当たり外れに振り回されないので、同じ期間・同じデータで前後を並べれば、差はほぼ作りの変化になる。

数え方は、切り替えた足の時刻をログに一行ずつ書き出しておくだけでいい。回数が落ちていて、狙っていた場面での切り替わりが残っていれば直っている。回数は落ちたのに欲しい場面まで消えていれば、鈍らせすぎだ。三つとも反応が遅れる手当てなので、ここには一度戻ってきてください。

当方は元金融系のシステムエンジニアで、MT5のEAの開発と改修をココナラでお受けしています(MT4は移植・改修のご相談から承ります)。ソースコードがお手元にあれば、往復している箇所を読んだうえで、どの手当てが向くかからご相談に乗れます。いつから・どの場面で出し入れが増えたかを添えて、ココナラのメッセージからご相談ください。なお、お渡しするのはソフトウェアであって、投資助言や運用の代行ではありません。
サービス数100万件のスキルマーケット、あなたにぴったりのサービスを探す