買いと売りで成績が違うのはなぜ?相場環境の偏りを見抜く|EAのバックテストで確かめたいこと

スポンサーリンク

どうもこんにちは。戦術トレードラボのラボ長です。

EAを自作してバックテストをすると、まず合計の成績を見ますよね。
でも、その合計を「買い」と「売り」に分けて見たことはあるでしょうか。

私は非エンジニアの兼業トレーダーで、Claude CodeというAIエージェントと一緒に、自分の手法をMT4のEAにしています。
あるとき方向別に分けてもらったら、買いと売りで成績がまるで違っていました。

この記事では、これからEA作りやFX自動売買を始める方に向けて、買いと売りで成績が違うときに考えられる原因と、その確かめ方をまとめます。


スポンサーリンク

なぜ「買いと売りを分けて見る」ことが大事なのか

合計の成績がプラスでも、中身は次のどちらかかもしれません。

  • 買いでも売りでも、同じくらい取れている
  • 片方だけで稼いで、もう片方はほぼトントンかマイナス

後者だった場合、そのEAが持っているのは「手法の優位性」ではなく、たまたまその期間の相場に乗っていただけという可能性があります。
相場の流れが変わったとき、成績もいっしょに変わってしまうかもしれません。

合計だけ見ていると、この違いには気づけません。
PFや最大ドローダウンと同じように、方向別の成績も最初に確かめておきたい項目です。

買いと売りで成績が違う5つの原因

1. 相場環境の偏り(テスト期間が一方向に動いていた)

一番多い原因です。
テストした期間に、その通貨ペアが大きく上がり続けていたなら、買いのほうが有利になります。下がり続けていたなら、その逆です。

これはトレンドに乗るEAだけの話ではありません。
転換を狙うEAでも、流れに沿った方向の転換はよく伸び、流れに逆らう方向の転換は伸びにくい、ということが起きます。

2. スワップポイント

数日持つEAでは、スワップ(金利の差の受け払い)も効いてきます。
買いで受け取れる通貨ペアは、売りでは支払いになるのが普通です。

注意したいのは、MT4のストラテジーテスターは、基本的にテストした時点の口座のスワップ設定で計算することです。過去の金利がそのまま再現されるわけではありません。
長い期間のテストでは、スワップ込みの損益と、スワップ抜きの損益を分けて見ておくと安心です。

3. スプレッドのかかり方(BidとAsk)

MT4のチャートは、売値(Bid)で描かれています。

  • 買いは、買値(Ask)で入って、売値(Bid)で出る
  • 売りは、売値(Bid)で入って、買値(Ask)で出る

つまり売りの損切りは、チャートの高値が届いていなくても、スプレッドの分だけ手前で発動することがあります。
損切りの位置を買いと売りで「同じ計算」にしていると、実は売りだけ不利になっている、ということが起きます。

4. 値動きそのものの性質

「上げはゆっくり、下げは速い」と言われる市場もあります。
FXは2つの通貨の組み合わせなので、一概には言えません。ただ、通貨ペアによっては、上げと下げで動き方のくせが違うことがあります。
同じルールを鏡写しにしただけでは、同じ結果にならない場合がある、ということです。

5. テストの設定ミスや、コードのバグ

意外と多いのがこれです。
相場のせいだと思ったら、そもそも片方がまともに動いていなかった、というケースです。次の実例で、私の失敗を紹介します。

私の実例1:最初のEAは「売りしかしていなかった」

AIに作ってもらった一番最初のEAのバックテストは、取引65回でプラスでした(バックテスト・過去データ)。
ところが中身を見ると、65回すべてが売り。買いが1回もありません。

原因は相場でも手法でもなく、テストの設定でした。
MT4のストラテジーテスターには、テストする方向を「買いのみ・売りのみ・両方」から選ぶ設定があります。AIが自動でテストを回す仕組みを作ったとき、この設定に別の数字を入れてしまっていて、意図せず片方だけのテストになっていたんです。

直して回し直すと、取引は197回(買い132回・売り65回)になりました(バックテスト・過去データ)。
合計の成績だけを見ていたら、気づかないまま先へ進んでいたと思います。

ポイント:合計がプラスでも、買いと売りの回数を必ず見る。片方がゼロ、または極端に少ないなら、相場より先に設定とコードを疑う。

私の実例2:売りの損切りだけ、狙いより内側にあった

別のEAでは、コードを見直してもらったときに、こんなバグが見つかりました。

買いの損切りは狙いどおりの位置なのに、売りの損切りだけ、スプレッドの分だけ内側に入っていたんです。

さきほどの「BidとAsk」の話そのものです。
買いと売りを同じ書き方にしたつもりでも、値段の基準が違うので、売りだけ損切りにかかりやすくなっていました。
AIにコードを書いてもらうときは、「買いと売りが本当に鏡写しになっているか」を、言葉にして確認してもらうのがおすすめです。

私の実例3:今のEAも、買いのほうがずっと良かった

いま動かしているEAは、天井・底の形を見て入るタイプです。底の形なら買い、天井の形なら売りになります。
過去6年・5通貨のバックテストを方向別に分けてもらった結果が、こちらです。

方向取引回数PF
買い(底の形)240回1.95
売り(天井の形)303回1.22

(バックテスト・過去データ。ある時点の設定での結果です)

回数は売りのほうが多いのに、成績は買いのほうがずっと上でした。
通貨ペア別に見ると、円がらみのある通貨ペアでは、買いのPFが2.93、売りが0.83と、はっきり分かれていました。

理由は単純で、この6年が円安・ドル高の時代だったからです。
円がらみの通貨ペアの買いが、その流れに乗っていました。

これを見て、私はこう言いました。

「利益はおいておいて、後は、安全性を高めたい。特に円からむ通貨が多く円は一方的な円安だったから」

そこで、月ごとの成績と、その月の円の動きを並べて調べてもらいました。
結果は、円安の月も円高の月も、1か月あたりの成績はほぼ同じ。円の方向と月ごとの成績の関係は、ほぼゼロでした(バックテスト・過去データ)。円高の月は、円がらみの通貨ペアの売りが稼いでいたんです。

ただし、これで安心とは言えません。
調べられたのは「円安の時代の中の、円高の月」だけです。何年も円高が続く時代は、まだ確かめられていない。AIも、そこは「未検証」とはっきり書いていました。

その後、もっと古い5年分でも同じEAを試してもらったところ、同じ通貨ペアでも成績はほぼ横ばいでした(バックテスト・過去データ)。
買いと売りの差は、「このEAは、相場の時代に左右されるかもしれない」という最初のサインだったのだと思います。

買いと売りの偏りを確かめる手順

  1. レポートのロング・ショート欄を見る
    MT4のバックテストのレポートには、売り(ショート)と買い(ロング)それぞれの回数と勝率が載っている欄があります。まずはここを見てください。
  2. 方向別のPFと平均損益を出してもらう
    勝率だけでは分かりません。取引の一覧をAIに渡して、「買いと売りに分けて、回数・勝率・PF・1回あたりの平均を出して」と頼みます。
  3. 年ごと × 方向で分ける
    その通貨ペアが上がった年・下がった年と見比べます。上がった年だけ買いが良く、下がった年だけ売りが良いなら、相場の流れに乗っているだけかもしれません。
  4. テストの設定を確かめる
    テスターの方向の設定が「両方」になっているか。片方の回数がゼロなら、まずここです。
  5. 買いと売りのコードが鏡写しか、AIに確認してもらう
    あわせて、エントリーと損切りの位置をチャートに描いてもらい、自分の目でも見ます。
  6. 流れの違う期間でもテストする
    上昇が続いた期間だけでなく、下落や横ばいが多かった期間でも回します。期間を変えると、買いと売りの成績が入れ替わるかもしれません。

原因ごとの見分け方

原因見分けるヒントどうするか
相場環境の偏り年ごとに分けると、通貨ペアの上げ下げと成績がそろっている流れの違う期間でも確かめる。ロットや資金は控えめに考える
スワップ持っている期間が長い取引ほど、買いと売りの差が大きいスワップ抜きの損益でも比べる。最新の数字は証券会社の公式サイトで確認
スプレッドのかかり方売りだけ、損切りがチャートの高値に届く前に発動している売りの損切りにスプレッド分のゆとりを入れるかを検討する
値動きの性質通貨ペアを変えると、差の出方が変わる通貨ペアごとに方向別の成績を見る
設定ミス・バグ片方の回数がゼロ、または極端に少ない設定とコードを先に直す

チェックリスト

  • [ ] 合計だけでなく、買いと売りの回数を見た
  • [ ] 方向別に、勝率・PF・1回あたりの平均を出した
  • [ ] 年ごと × 方向で分けて、通貨ペアの上げ下げと見比べた
  • [ ] テスターの方向の設定が「両方」になっている
  • [ ] 買いと売りのコードが鏡写しか、AIに確認してもらった
  • [ ] 売りの損切りが、スプレッドの分だけ不利になっていないか確かめた
  • [ ] 流れの違う期間でもテストした
  • [ ] 成績の悪い方向を、結果を見たあとで切っていない

よくある質問

Q. 売りの成績が悪いなら、買いだけのEAにしてもいいですか?
A. 結果を見てから片方を切るのは、過剰最適化(カーブフィッティング)の入口です。その期間の相場に合わせただけになり、流れが変わると一気に崩れるおそれがあります。片方だけにするなら、「なぜその方向だけ有効なのか」という理由を先に決めて、作るときに見ていない期間でも確かめてください。

Q. 移動平均線より上なら買いだけ、下なら売りだけ、のようなフィルターは有効ですか?
A. 手法によります。私は短い時間足のエントリーで、「上の時間足の移動平均線より上なら買いだけ、下なら売りだけ」を試したことがあります。結果は、1回あたりの成績がほんの少し変わっただけで、マイナスのままでした(バックテスト・過去データ)。方向を絞るだけでは、優位性は生まれませんでした。

Q. 買いと売りで、別々のルールにしてもいいですか?
A. できますが、調整できる場所が2倍になります。そのぶん、過去のデータに合わせすぎる危険も大きくなります。分けるなら、片方ずつの取引回数が十分にあるかを、まず確かめてください。

Q. 取引回数が少なくて、方向別に分けると数十回しかありません。
A. 回数が少ないと、たまたまの差と本当の差の区別がつきません。差が大きく見えても、すぐに結論を出さず、期間や通貨ペアを増やして同じ傾向が出るかを見るのがおすすめです。

まとめ

  • 合計がプラスでも、買いと売りに分けると中身がまるで違うことがある
  • 一番多い原因は相場環境の偏り。ほかにスワップ、スプレッドのかかり方、設定ミスやバグ
  • 片方の回数がゼロや極端に少ないときは、相場より先に設定とコードを疑う
  • 結果を見てから悪い方向を切るのは、過剰最適化の入口
  • 買いと売りの差は、「このEAは相場の時代に左右されるかも」というサインとして受け取る

EAが相場の向きを取り違えていた話は第4話「バックテストは、簡単に私を騙してくる」に、数字を信じる前の確認項目はバックテストで騙されないためのチェックリストにまとめています。
PFや最大ドローダウンの見方はEAの成績の見方もどうぞ。


関連: バックテストと検証 / はじめてのEA開発
連載: 第4話 / 第6話

※本ブログの内容は私個人の経験にもとづくもので、将来の利益を保証するものではありません。バックテストの結果は過去のデータによるものです。投資は自己責任でお願いします。

コメント