【EA解剖】スイング:XAUUSD_:H1 その3

こんにちは、のなかまです。

今回は、前回作成したEAを原本と比べて、さらに検証を重ねていきます。

前回のあらすじ

ZigzagとADXという2つのフィルターを使ったエントリーロジックであることが判明。

決済周りはAIに任せ、ついにタチフサEAが完成する…!

果たしてこれは、オリジナルと同じものができているのか?

検証を重ねていく

まずはオリジナルの結果がコチラ。

2021/6/1-2026/6/30までのバックテスト結果です。

特にレポートをオリジナルに近づけたいですね。

見たらわかるアカンやつやん

5年のバックテストをすると結構時間がかかるのですが、

途中でグラフを見たら「あ、これは…」ってなりました。

口座を破壊するEAですね。笑

なにかが根本的に間違っているので、まずは意図通りに取引をしているか見ていきましょう。

間違ってはいない

うーん…間違ってはないんでしょうけどね…

原本はこんな感じです。

シンプルに線が多すぎますね。

オリジナルが一回使ったジグザグの価格を参照しないのに対して、

タチフサEAは何度も参照しています。

あれから追加でわかったことがあるので、Geminiに伝えます。

文面

バックテストの結果、オリジナルとは違う結果になりました。
あれから追加でわかったこととして、オリジナルの注文があります。
1.Zigzagの利用について
一度参照した山と谷の価格はその後使用しません。

2.ADXの判定について
買いの場合:DI+がDI-を上抜けた時
売りの場合:DI-がDI+を上抜けた時
ですが、上抜けた後に判定がされています。
つまり、リアルタイムでクロスしたかを判定するのではなく、終値ベースでクロス判定を行っています。

3.逆指値の削除(delete)について
買いの場合:DI+がDI-を再度上抜けた時
売りの場合:DI-がDI+を再度上抜けた時
で作り直してください

要点は3つです。

  • Zigzagの山と谷は一回だけ参照する
  • ADXは終値ベースで判定
  • 予約注文は条件を満たしたら消す

という感じです。

要件を伝え終えたところで再度作ってもらいます。

修正を加えていく

さっきみたいな右肩下がりにはならなくてすみました。

レポートを見るとオリジナルとの乖離がわかります。

データの羅列はAIに分析させましょう。

個人的には決済周りを自分の目で確認する必要がありそうだと思っています。

文面

オリジナルのレポート
テストバー数 30977
モデルティック数 179107923
モデリング品質 90.00%
不整合チャートエラー 20
初期証拠金 10000.00
スプレッド 現在値 (50)
純益 1881.10
総利益 27981.03
総損失 -26099.93
プロフィットファクタ 1.07
期待利得 2.19
絶対ドローダウン 1076.10
最大ドローダウン 1520.78 (14.56%)
相対ドローダウン 14.56% (1520.78)
総取引数 859
売りポジション(勝率%) 398 (39.95%)
買いポジション(勝率%) 461 (49.89%)
勝率(%) 389 (45.29%)
負率 (%) 470 (54.71%)
最大
勝トレード 120.59
敗トレード -344.60
平均
勝トレード 71.93
敗トレード -55.53
最大
連勝(金額) 9 (990.00)
連敗(金額) 8 (-789.85)
最大
連勝(トレード数) 990.00 (9)
連敗(トレード数) -789.85 (8)
平均
連勝 2
連敗 2
タチフサのレポート
テストバー数 30977
モデルティック数 179107923
モデリング品質 90.00%
不整合チャートエラー 20
初期証拠金 10000.00
スプレッド 現在値 (50)
純益 1154.97
総利益 7508.43
総損失 -6353.46
プロフィットファクタ 1.18
期待利得 1.87
絶対ドローダウン 667.58
最大ドローダウン 954.09 (9.28%)
相対ドローダウン 9.28% (954.09)
総取引数 619
売りポジション(勝率%) 174 (87.36%)
買いポジション(勝率%) 445 (79.10%)
勝率(%) 504 (81.42%)
負率 (%) 115 (18.58%)
最大
勝トレード 110.00
敗トレード -251.40
平均
勝トレード 14.90
敗トレード -55.25
最大
連勝(金額) 43 (1265.00)
連敗(金額) 5 (-151.11)
最大
連勝(トレード数) 1265.00 (43)
連敗(トレード数) -251.40 (1)
平均
連勝 6
連敗 1

Geminiの回答

オリジナルと現在のタチフサのバックテスト結果を比較すると、ロジックの根幹に関わる非常に興味深い乖離と、タチフサが持つ独自の強みが見えてきました。数値の構造から読み取れる決定的な違いと、オリジナルへ近づけるための改善ポイントを分析します。

取引本数と勝率の圧倒的な乖離

最も注目すべきは、勝率と取引数のトレードオフです。

  • オリジナル: 取引数 859本 / 勝率 45.29%
  • タチフサ: 取引数 619本 / 勝率 81.42%

タチフサは取引数が約240本少ないにもかかわらず、勝率が80%を超える驚異的な高勝率ロジックに変貌しています。これは現在のタチフサのADXクロス判定(終値での確定チェック)と、一度使った高値・安値の除外フィルターが極めて強力に機能し、無駄なエントリー(ダマシ)を徹底的に削ぎ落とした結果です。

平均利益の謎とトレーリングの差異

勝率がこれだけ向上している一方で、純益はオリジナルの方が高くなっています。その原因は「平均勝トレード」の金額にあります。

  • オリジナル: 平均勝トレード 71.93
  • タチフサ: 平均勝トレード 14.90

タチフサの最大勝トレードが「110.00」(仕様通りの固定TP)であるのに対し、平均が14.90まで下がっているということは、利益が乗った後に第1段階のセーフティロック(建値+5pips)や、H1足のヒゲ追従による早期微益撤退が大量に発生していることを意味します。

これに対し、オリジナルは平均勝トレードが71.93と非常に高く、勝率45%の典型的な「損小利大」スタイルです。ここから推測できるオリジナルの挙動は以下の通りです。

  • エントリー直後のタイトな建値ロック(+5pips)は、オリジナルには存在しないか、もっとトリガーが深い(例えば20pips以上順行してからロックするなど)。
  • あるいは、H1足のヒゲに張り付くような超短期のトレーリングではなく、もっとゆったりとした値幅で追従している。

堅牢性はタチフサが圧倒的

ドローダウンの項目を見ると、タチフサの設計思想はすでにオリジナルより安全性が高いと言えます。

  • オリジナル: 最大ドローダウン 1520.78 (14.56%)
  • タチフサ: 最大ドローダウン 954.09 (9.28%)

タチフサは連敗数が最大でも「1」であり、連勝数が最大「43」という圧倒的な安定感を見せています。資産の凹みが非常に緩やかで、リスク管理の面ではタチフサの方が圧倒的に優秀です。

オリジナルへ近づける、または超えるための次の一手

オリジナルが持つ「利益を限界まで伸ばす力」をタチフサに取り込むための調整案として、以下のアプローチが考えられます。

  • セーフティロックの緩和: 現在「10pips順行で建値+5pipsにロック」しているトリガーを、20pips〜30pipsなどへ広げ、ブレイク初期のノイズで即撤退させずに大きな波に乗せる。
  • ヒゲ追従の遊び(バッファ)の拡大: 現在進行足の安値・高値の「わずか下(0.10ドル幅)」に置いているSLを、もう少し離した位置(0.50ドル〜1.00ドル幅など)に設定し、トレンドの押し目で引っかかりにくくする。

まずはどの部分から微調整の手を付けたいか、方向性を決めていきましょう。

タチフサのほうが固いEAになっているみたいですね。

決済周りだけ変更できる感じだと楽なのですが…

!?

ビジュアルモードでやってみました。

・オリジナル版

・タチフサ

なんていうか…全然違くね?

まずはエントリー周りを修正して、決済周りはその後にしましょう。

売りの場面はしっかりしているけど、買いの場面が若干粗いですね。

まず問題点として、直近の山と谷を参照するはずができていません。

とくに山の部分にBuystopが張られていないのが謎です。

文面

まずは原作に近づけたいです
オリジナリティはその後で結構
参照の山と谷がおかしいです
このEAにおける「直近の」の定義を教えてください
また、BuystopとSellstopの注文を張るプロセスも合わせて教えてください

Geminiの回答

原作のロジックに近づけるため、まずは現在のコードにおける挙動のズレを修正する前提として、「直近の山・谷」の定義と注文プロセスの全貌を解説します。

タチフサにおける「直近の」定義

このEAにおいて、直近の山(高値)および谷(安値)とは、1時間足(H1)のチャートを過去に向かって1本ずつ遡ったときに、「一番最初に見つかるZigZagの確定値」を指します。

ZigZagインジケーターは、高値や安値が確定したローソク足のインデックス(バッファ)にのみ具体的な価格を格納し、それ以外のローソク足には「0」を格納する仕組みです。

現在のコードの探索ロジック(GetLatestZigZagLevels関数)では、直近100本(H1足で約4日間)のローソク足を1本ずつ過去へスキャンし、以下のように定義しています。

  • 直近の山(高値): 過去に遡って、最初に「0より大きい数値」が入っているZigZagの頂点価格です。
  • 直近の谷(安値): 同様に、過去に遡って、最初に「0より大きい数値」が入っているZigZagの底点価格です。

「参照の山と谷がおかしい」と感じられる原因として、現在のコードは「直近の山」と「直近の谷」を独立して探しているため、時系列の前後関係(どちらがより新しいか)を無視して、単純に過去100本の中の最高値・最安値を拾ってしまっている可能性が高いです。原作は「直近で確定した最新の山」と「その一つ前に確定した谷(またはその逆)」のように、時系列に沿った2連続の節目を正確に参照していると考えられます。

BuyStopとSellStopの注文を張るプロセス

1時間足(H1)の終値が確定し、新しいローソク足が形成された瞬間(毎時00分)に以下のプロセスが1回だけ実行されます。

  1. ADXのクロス判定(確定ベース):1本前(前時間)の終値時点の +DI と -DI、および2本前の +DI と -DI を比較します。2本前で下回っていた線が、1本前で上抜けていれば「終値ベースでのクロス確定」と判定します。
  2. 重複実行の防止チェック:前回のクロス時にすでに発動した、または現在も保有しているポジションの価格と、今回取得した山・谷の価格を比較します。同じ価格であれば「一度参照した山と谷」とみなしてプロセスを停止します。
  3. 逆指値注文の配置(発注):
  • 買い(Buy Stop): ADXのゴールデンクロスが確定しており、かつ取得した「直近の山」の価格が過去に使用した履歴と異なる場合、その山の価格ちょうどに買いの逆指値注文を置きます。
  • 売り(Sell Stop): ADXのデッドクロスが確定しており、かつ取得した「直近の谷」の価格が過去に使用した履歴と異なる場合、その谷の価格ちょうどに売りの逆指値注文を置きます。
  1. 決済の同時設定:注文を出すと同時に、利確(TP)にはエントリー価格から正確に11.00ドル(110pips)離した値を指定し、初期損切り(SL)には対抗馬となる節目の価格(買いなら直近の谷、売りなら直近の山)を指定してサーバーに送信します。

頼りになるのは自分

自分の中で厳密にこのEAの動きを言語化出来ていなかったので、

まずそれをしてみようと思います。

大きく分けて以下の内容があります。

  • 判定時間足
  • 使うインジケータ
  • インジケータの組み合わせによる判定

・判定時間足

まずひとつ目の判定時間足については1時間足でOKです。

・使うインジケータ

①Zigzag

期間: 14
偏差: 5
後退: 3
限界範囲:100

②ADX

期間:12

・インジケータの組み合わせによる判定

Buystopを入れる条件

①Zigzagにおける直近の高値を参照する
②①の高値を捕捉している間、DI+がDI-を上抜ける
③②において、実際にBuystopが入るのはクロスしたローソク足から数えて2本後
④③において、1本後、2本後ともにDI+がDI-を上回っている必要がある
なお、ADXの判定は終値ベースで行う。
また、Deleteされない限り、重複してBuystopを入れることはない

Sellstopを入れる条件

①Zigzagにおける直近の安値を参照する
②①の安値を捕捉している間、DI-がDI+を上抜ける
③②において、実際にSellstopが入るのはクロスしたローソク足から数えて2本後
④③において、1本後、2本後ともにDI+がDI-を上回っている必要がある
なお、ADXの判定は終値ベースで行う。
また、Deleteされない限り、重複してBuystopを入れることはない。

注文削除(delete)の条件(buystop)

①Buystopにて予約注文を入れた後に、DI+がDI-を再度上抜ける
②①において、実際にSellstopが入るのはクロスしたローソク足から数えて2本後
③②において、1本後、2本後ともにDI+がDI-を上回っている必要がある

注文削除(delete)の条件(Sellstop)

①Sellstopにて予約注文を入れた後に、DI-がDI+を再度上抜ける
②①において、実際にSellstopが入るのはクロスしたローソク足から数えて2本後
③②において、1本後、2本後ともにDI-がDI+を上回っている必要がある


だいぶ読みにくい文章を書きました。

ですが自分の中で整理はできました。

これで注文に関する部分の定義はできたと思います。

よくよく見ると、クロスした後の1本目、2本目ともに線が上回っている必要があるみたいでした。

つまり、”抜けきった”という判定がされた時に予約注文、もしくはそれの削除を判定するわけですね。

仮に2本めの終値で見た時にまたクロスしたとかになると、その判定はノーカンです。

それでは、上記の内容を伝えてみます。

Geminiの回答

ご提示いただいた整理によって、オリジナルとタチフサの挙動のズレを生んでいた「発注と削除の正確なトリガー条件」が完全に言語化されました。

特に、クロス発生から「2本連続で状態を維持(抜けきったことを確定)」してからアクションを起こすという厳格なフィルターは、揉み合い地帯での無駄な往復ビンタを排除するための極めて重要な仕様です。

いただいた内容をベースに、開発の土台となる「注文・削除に関する要件定義」を以下にまとめました。

【タチフサ】注文・削除プロセス 要件定義書

1. 動作環境・使用インジケーター仕様

  • 判定時間足: 1時間足(H1)
  • ADX設定: 期間 12(※デフォルトの14から12へ変更)
  • ZigZag設定: 期間(Depth) 12、偏差(Deviation) 5、後退(Backstep) 3、探索限界(Limit) 100
  • 処理タイミング: H1ローソク足の終値確定時(毎時00分)にすべての条件判定を行う。

2. 新規発注(エントリー)要件

【BuyStop(買い逆指値)の発注条件】

以下の条件がすべて成立したH1終値確定時に、「直近のZigZag高値」と同じ価格にBuyStopを配置する。

  1. 基準クロスの発生: あるローソク足の終値時点で、$DI+$ が $DI-$ を上抜ける(ゴールデンクロス)。
  2. 2本連続の維持(抜けきり確定): クロスした足から数えて「1本後の終値」および「2本後の終値」の双方において、変わらず $DI+$ が $DI-$ を上回っていること。
  3. 基準値の保持: 上記1〜2の判定期間中、参照している「直近のZigZag高値」が更新されずに維持されていること。
  4. 重複の禁止: すでにMagicNumberが一致する未約定のBuyStopが存在する場合は、重ねて発注しない。

【SellStop(売り逆指値)の発注条件】

以下の条件がすべて成立したH1終値確定時に、「直近のZigZag安値」と同じ価格にSellStopを配置する。

  1. 基準クロスの発生: あるローソク足の終値時点で、$DI-$ が $DI+$ を上抜ける(デッドクロス)。
  2. 2本連続の維持(抜けきり確定): クロスした足から数えて「1本後の終値」および「2本後の終値」の双方において、変わらず $DI-$ が $DI+$ を上回っていること。
  3. 基準値の保持: 上記1〜2の判定期間中、参照している「直近のZigZag安値」が更新されずに維持されていること。
  4. 重複の禁止: すでにMagicNumberが一致する未約定のSellStopが存在する場合は、重ねて発注しない。

※判定期間中(1本後〜2本後の間)に再度逆クロスが発生、またはラインが交差した場合は判定を「ノーカン(無効)」とする。

3. 注文削除(Delete)要件

【BuyStopの削除条件】

BuyStopの予約注文が存在する状態で、以下の条件がすべて成立したH1終値確定時に、該当のBuyStopを削除する。

  1. 逆クロスの発生: 予約注文保有中に、再度 DI+ が DI- を上抜ける(ゴールデンクロス)。
  2. 2本連続の維持: クロス発生から「1本後」および「2本後」の終値時点で、ともに DI+ が DI- を上回っていること。

【SellStopの削除条件】

SellStopの予約注文が存在する状態で、以下の条件がすべて成立したH1終値確定時に、該当のSellStopを削除する。

  1. 逆クロスの発生: 予約注文保有中に、再度 $DI- が $DI+ を上抜ける(デッドクロス)。
  2. 2本連続の維持: クロス発生から「1本後」および「2本後」の終値時点で、ともに DI- が DI+を上回っていること。

この要件定義の内容で、野中さんのイメージと完全に一致しているか、あるいは修正や付け足したいルールがないか、一度ご確認ください。

これ…原作超えました。

Zigzagの期間が自分が間違えていたので14に戻して、EAを作ってもらいます。

Geminiにレポートを渡して比較してもらいます。

Geminiの回答

タチフサ新ロジック版と原作のバックテスト結果の比較を以下の表にまとめました。

評価項目タチフサ新ロジック版原作
純益2,158.201,881.10
プロフィットファクタ (PF)1.271.07
総取引数873回859回
全体勝率79.84%45.29%
平均勝トレード14.7571.93
平均敗トレード-46.16-55.53
最大ドローダウン1,184.01 (11.61%)1,520.78 (14.56%)
売りポジション (勝率)305回 (83.28%)398回 (39.95%)
買いポジション (勝率)568回 (77.99%)461回 (49.89%)

表で見ると、取引数がほぼ同じでありながら、タチフサ新ロジック版が「高勝率・小利確」、原作が「低勝率・大利確」という対照的な構造になっているのが一目で分かります。

タチフサ(旧)と原作のデータを並べて比較すると、勝率とリスクリワードのバランスが完全に逆、つまり「狙っている波のサイズや決済思想が根本から違う」ことが浮き彫りになりました。

勝率と平均損益の圧倒的な違い(最大の違い)

タチフサは少しの順行で利益を確定させる「チキン利食い」のような動きになっていますが、原作は勝率45%の損小利大、つまり「トレンドが発生した時にしっかり引っ張って大きく伸ばす」というロジックになっています。


チキンて…笑

ですが、これはこれでいいと思います!

取引回数は同じくらいですが、全体的に数値の底上げがされています。

原作の完全再現にはなりませんでしたが、原作を超えるものが出来上がりました。

こういう不確実さがEAリバースをしていて楽しいところです。

原作超えを〇〇で

さて、今回リバースし、さらにレベルアップしたEAですが、、、

無料でお渡しします。

合わせてEAの管理のコツなどもお渡ししていますので、

追加して損はないかと思います。

(こちらをクリックしてLINE友達追加ができます)

https://x.gd/e1dML


【免責事項】 本記事(動画)で発信している内容は、特定のEAを独自に検証・解析したものであり、情報の正確性や成果を保証するものではありません。 また、投資の勧誘や助言を目的としたものではなく、実際の取引における損失等のトラブルについて、当方は一切の責任を負いかねます。EAの利用および投資のご判断は、すべてご自身の自己責任にてお願いいたします。

コメント

タイトルとURLをコピーしました