
本ページにはプロモーションが含まれています。
今回は、Pythonでドル円の売買条件を1,280通り比較し、その結果をもとにMT4のEAを作成しました。
使うのは、移動平均線のクロスと傾きを組み合わせたシンプルなルールです。
ロングだけでなく、長期的な上昇の途中にある下落を狙うショートの条件も検証しました。
この記事では、以下の内容を紹介します。
- 1,280通りの条件を比較し、採用した設定
- ロングの成績とドル円の相場環境との関係
- ショートの条件を検証した考え方
- MT4への実装と、不具合を修正した流れ
- ロング・ショートのバックテスト結果
今回のEA作成やバックテストには、私が利用しているゴールデンウェイ・ジャパン(FXTF)のMT4を使いました。
PC版MT4でEAによる自動売買ができ、デモ口座で動作を試すこともできます。
➡️ ゴールデンウェイ・ジャパン(FXTF)の口座開設はこちら(無料)
条件を選ぶところから、実際にEAが注文を出すまでの流れをまとめています。
Pythonでの検証や、自作EAに興味がある方は、ぜひ参考にしてみてください。
ドル円のEAを作るために1,280通りの条件を比較した

この章では、ドル円のEAを作るために行った検証と、採用したロングの条件について紹介します。
- ドル円の15分足で1,280通りを検証
- 利益だけでなく、取引数や下落幅も確認
- 採用したロングの条件
1つずつ詳しく見ていきましょう。
ドル円の15分足で1,280通りを検証
使用したのは、2020年〜2026年7月のドル円の15分足データです。
まず、2020年〜2024年のデータで条件を比較し、2025年のデータで候補の成績を確認しました。
さらに、条件選びに使っていない2026年1月〜7月でも追加テストを行っています。
比較した条件は、以下のとおりです。
| 比較項目 | 条件 |
|---|---|
| 移動平均線の種類 | SMA・EMA |
| 短期線の期間 | 10・20・30・40・50 |
| 長期線の期間 | 75・100・150・200 |
| エントリー条件 | ゴールデンクロス・押し目 |
| トレンド条件 | フィルターなし・EMA200より上・長期線が上向き・EMA200より上かつ長期線とEMA200が上向き |
| 利確/損切 | 40/20・60/30・80/40・100/50pips |
これらを組み合わせた、1,280通りのロング条件をPythonで比較しました。
一般的な設定をそのまま使うのではなく、移動平均線の期間やエントリー条件を変えながら、ドル円に合う組み合わせを探していきます。
利益だけでなく、取引数や下落幅も確認
候補を選ぶ際は、利益の大きさだけでなく、PF・取引数・最大ドローダウンも確認しました。
PFは総利益を総損失で割った値です。1を超えると、その検証期間では総利益が総損失を上回ったことになります。
ただし、PFが高くても、取引数が極端に少なければ、数回の勝ちによって成績が良く見えている可能性があります。
そのため、どのくらいの頻度で取引するのかも合わせて確認しました。
最大ドローダウンは、資金が直前のピークからどれだけ減ったかを示します。
最終的に利益が出ていても、途中の下落が大きければ、運用を続けにくくなるかもしれません。
今回は、これらの数値に加えて年別の成績も見ながら、利益・取引頻度・損失の大きさのバランスで候補を絞りました。
採用したロングの条件
比較と追加検証を踏まえ、今回のロングEAには次の条件を採用しました。
| 項目 | 採用条件 |
|---|---|
| 通貨ペア | USDJPY |
| 時間足 | 15分足 |
| 移動平均線 | 短期SMA30・長期SMA100 |
| エントリー | 確定足でゴールデンクロス |
| トレンド条件 | SMA100の値が4本前より高い |
| 利確 | 100pips |
| 損切 | 50pips |
短期のSMA30が長期のSMA100を上抜け、さらにSMA100も上向いている場面で買うルールです。
クロスは確定した足で判定し、条件がそろったあとの次の足でエントリーします。
「SMA100が上向き」という条件は、直近4本がすべて上昇しているという意味ではなく、最新の確定足の値が4本前より高いことを指します。
利確と損切の幅は100pipsと50pipsで、設定上のリスクリワードは1:2です。
ここまでの比較から、ロングEAに使う条件を選びました。
次の章では、年別の成績とドル円の値動きを見ながら、今回の条件が得意とする相場を考えていきます。
ロングEAの成績とドル円の相場環境を確認する

この章では、ロングの年別成績とドル円の値動きを照らし合わせ、今回の条件がどのような相場で機能したのかを確認します。
- 年別成績を見ると、2020年だけマイナスだった
- ドル円の上昇相場とロングの成績を照らし合わせる
- 上位足のトレンド条件を加えて追加検証した
1つずつ詳しく見ていきましょう。
年別成績を見ると、2020年だけマイナスだった
全期間で利益が出た条件でも、毎年同じように勝てているとは限りません。
そこで、選んだ条件の成績を年別に確認しました。
最初に比較した「SMA30・100のゴールデンクロス+SMA100が上向き」の結果は、以下のとおりです。
| 年 | 取引数 | PF | 損益 |
|---|---|---|---|
| 2020年 | 49回 | 0.48 | −661.2pips |
| 2021年 | 53回 | 1.99 | +716.9pips |
| 2022年 | 47回 | 2.05 | +1,045.0pips |
| 2023年 | 50回 | 1.53 | +645.4pips |
| 2024年 | 57回 | 1.60 | +748.2pips |
| 2025年 | 54回 | 1.72 | +890.6pips |
2020年だけがマイナスで、2021年〜2025年は毎年プラスになっています。
年間の取引数は47〜57回と大きく変わっていません。
同じような頻度で買っていても結果に差が出たことから、エントリー条件だけでなく、相場環境にも理由があるのではないかと考えました。
ドル円の上昇相場とロングの成績を照らし合わせる
ドル円の長期チャートを見ると、2020年は下落基調だったのに対し、2021年からは大きな上昇局面に転換しています。

今回のロングは、15分足のゴールデンクロスとSMA100の上向きを確認して買う条件です。
ただ、15分足で上向いていても、長期的には下降途中の一時的な反発ということがあります。
その場合、買ったあとに下落が再開し、損切りになる可能性があります。
一方、大きな流れが上向いている相場では、押し目から上昇が再開する場面をゴールデンクロスで捉えられる可能性があります。
私がチャートを上昇チャネルとして捉えたことも、この仮説につながりました。ただし、EAにはチャネルを判定する機能はなく、2021年以降も途中には下落や横ばいがあります。
長期的な上昇が、シンプルな買い条件の成績を支えていたのではないか。 これが、年別成績とチャートから考えた仮説です。
上位足のトレンド条件を加えて追加検証した
この仮説を確かめるため、4時間足や日足の移動平均線が上向きのときだけ買う条件も試しました。
2020年〜2025年では、上位足の条件を加えることでPFが改善する組み合わせがありました。
一方、取引数が減り、総利益も小さくなっています。
さらに、条件選びに使っていない2026年1月〜7月では、上位足の条件を加えても、元の条件よりPFが高くなるとは限りませんでした。
上昇方向を確認する条件は、負ける取引を避ける一方で、利益になる取引まで見送ることがあります。
条件を厳しくすれば、必ず成績が良くなるわけではないという結果です。
今回の検証では、上昇相場がロングの成績を支えた可能性は考えられます。
ただし、相場の方向だけが成績差の原因だと証明できたわけではありません。
全期間の利益だけを見るのではなく、どの時期に勝ち、どの時期に負けたのかまで確認することで、このEAと相場との相性が見えてきました。
上昇相場の中でショートの条件も検証する

この章では、ドル円の相場環境を踏まえて、ショートで狙う場面と売買条件を検討した内容を紹介します。
- 上昇相場の途中にある下落を狙えるか
- ショートはロングと別の条件で検証
- 利確幅と保有時間を絞った条件を採用
1つずつ詳しく見ていきましょう。
上昇相場の途中にある下落を狙えるか
ロングの検証では、2021年以降の上昇相場が成績を支えた可能性が見えてきました。
ただ、長期的に上昇しているドル円でも、一直線に上がり続けるわけではありません。
途中には押し目を作る下落や、短期的に売りが続く場面もあります。
そこで、大きな上昇の途中にある下落を、ショートで狙えるのではないかと考えました。
ロングと同じように大きな値幅を狙うのではなく、下落している間に入り、上昇に戻る前に決済するイメージです。
この考え方をもとに、EAを作る前にPythonでショートの条件も検証しました。
ショートはロングと別の条件で検証
ショートは、ロングのゴールデンクロスをデッドクロスに置き換えるだけではなく、移動平均線の期間や利確・損切、保有時間も含めて検討しました。
長期的な上昇の中では、一時的に下落しても、そのあと買いが入り、上昇に戻る可能性があります。
ロングで良かった設定が、そのままショートにも合うとは限らないためです。
検証を踏まえ、採用した条件は以下のとおりです。
| 項目 | 採用したショートの条件 |
|---|---|
| 時間足 | 15分足 |
| 移動平均線 | 短期SMA40・長期SMA150 |
| エントリー | 確定足でデッドクロス |
| トレンド条件 | SMA150が比較対象の過去の値より低い |
| 利確/損切 | 60/30pips |
| 時間決済 | 最大96本を目安に決済 |
短期線が長期線を下抜け、長期線も下向いている場面で売る条件です。
なお、上昇相場の途中の下落を狙うというのは設計の考え方であり、売買条件に上昇チャネルの判定を組み込んでいるわけではありません。
利確幅と保有時間を絞った条件を採用
ロングの利確100pips・損切50pipsに対し、ショートは利確60pips・損切30pipsを採用しました。
設定上のリスクリワードは、どちらも1:2です。
ショートでは狙う値幅を小さくし、さらに最大96本を目安とする時間決済を設けています。
96本は15分足で24時間分に相当します。
ただし、週末など足がない時間を挟む場合、実際の経過時間とは一致しません。
長期的な上昇を前提に考えるなら、ショートを長く持ち続けるより、短期的な下落を狙い、一定の本数で保有を終える条件のほうが、今回の狙いに合っています。
こうして、ロングとショートで異なる条件を選びました。次の章では、Pythonで検証した売買ルールをMT4のEAに実装していきます。
Pythonで選んだ条件をMT4のEAに実装した

この章では、Pythonで検証した条件をMT4のEAに実装した内容と、動作確認で起きた不具合を紹介します。
- 確定した15分足でエントリーを判定
- 決済ルールとポジション制限を実装
- 操作履歴から取引0件の原因を特定
1つずつ詳しく見ていきましょう。
確定した15分足でエントリーを判定
Pythonで選んだロング・ショートの条件を、MT4で動くMQL4のコードにしました。今回は、それぞれ別のEAとして作成しています。
エントリーは、確定した15分足で条件を判定し、次の足の最初のティックで注文する仕組みです。
形成途中の足では、価格の変化によって移動平均線の位置も動きます。一時的にクロスしても、足が確定するまでに元に戻ることがあるため、確定足を使いました。
また、新しい15分足が始まったときだけ判定し、同じ足で繰り返し注文しないようにしています。
決済ルールとポジション制限を実装
エントリー条件に加えて、利確・損切や週末のポジション管理も実装しました。
| 管理項目 | 実装内容 |
|---|---|
| 利確・損切 | 注文時にTP・SLを設定 |
| 金曜決済 | 日本時間23時以降の最初のティックで決済 |
| 新規注文の禁止 | 金曜23時以降と土日は新規注文を見送る |
| 保有数の制限 | 各EAで同時に持つポジションは1つ |
| 売買方向の重複 | 初期設定では、相手EAの保有中は新規注文を見送る |
| 時間決済 | ショートに最大96本を目安とする決済を設定 |
金曜決済では、MT4のサーバー時刻を日本時間に変換しています。
利用する業者の時差や夏時間に合わせて、設定を調整できるようにしました。
操作履歴から取引0件の原因を特定
実装後にロングのバックテストを動かしたところ、最初は取引が1件も発生しませんでした。
操作履歴を見ると、取引が許可されていないというメッセージが繰り返し出ていました。そこで、取引許可に関する判定値を詳しくログに表示しました。

確認すると、EA側の取引許可はtrueなのに、銘柄側の取引許可を示す「MODE_TRADEALLOWED」が0になっていました。
買いシグナルは発生していましたが、注文前のチェックで処理を止めていたということです。
そこで、バックテスト中だけ銘柄側のチェックを省き、通常稼働時には残すよう修正しました。EA側の取引許可や、ロット・証拠金・SL/TPの確認は維持しています。
再コンパイルしてテストすると、注文が発生するようになりました。結果だけでは分からなかった原因も、操作履歴に判定値を残すことで特定できました。
次の章では、修正したEAのバックテスト結果を確認していきます。
MT4のバックテストでロング・ショートの結果を確認する

この章では、作成したEAのバックテスト結果と、残高グラフの確認、今後の検証について紹介します。
- ロング・ショートのバックテスト結果を比較
- 残高グラフから利益の増え方と下落を確認
1つずつ詳しく見ていきましょう。
ロング・ショートのバックテスト結果を比較
取引許可チェックを修正したあと、ロング・ショートそれぞれのEAをMT4でテストしました。
今回は、2021年1月1日〜2025年12月31日に期間をそろえています。通貨ペアはドル円、時間足は15分足、モデルは始値のみ、スプレッドは10ポイントです。
| 項目 | ロング | ショート |
|---|---|---|
| 初期証拠金 | 10,000 | 10,000 |
| PF | 1.83 | 1.37 |
| 取引数 | 258回 | 190回 |
| 勝率 | 49.61% | 43.68% |
| 純利益 | +3,407.83 | +803.70 |
| 最大ドローダウン | 304.95(2.40%) | 326.56(3.14%) |
※金額はテスターの口座通貨単位です。売買条件や利確・損切幅は、ロングとショートで異なります。
どちらも検証期間全体ではプラスになりました。今回の条件では、ロングのほうがPF・純利益ともに高く、最大ドローダウンも小さい結果です。
また、ロングの勝率も50%を下回っています。
平均利益58.54に対して平均損失は31.42で、勝ったときの利益が負けたときの損失を上回り、全体ではプラスになっています。
ただし、この比較だけでロングが常に優れているとは言えません。
今回の期間と、それぞれに採用した条件での結果として捉えています。
残高グラフから利益の増え方と下落を確認
レポートの数値に加えて、同じ期間の残高グラフも確認します。
ロング

ショート

最終的な利益だけでは、途中でどのくらい資金が減ったのか、利益が伸びない状態がどれだけ続いたのかは分かりません。
そこで、グラフでは利益が増えた区間だけでなく、下落の大きさや、そこから回復するまでの流れにも注目します。
なお、横軸は取引回数です。
どの年に好調・不調だったかは、グラフだけで判断せず、取引履歴や年別集計と照らし合わせて確認します。
まとめ

今回は、Pythonでドル円の売買条件を1,280通り比較し、選んだ条件をもとにMT4のロング・ショートEAを作成しました。
今回の検証で分かったことは、以下のとおりです。
- ロングの成績は年によって異なり、相場環境との相性も確認する必要がある
- ショートは短期的な下落を狙い、ロングとは別の条件を採用した
- 取引0件の不具合は、操作履歴から原因を特定して修正できた
- 2021年〜2025年のMT4バックテストでは、ロング・ショートともにプラスになった
シンプルな移動平均線の条件でも、期間や売買方向によって結果は変わりました。
全期間の利益だけでなく、どのような相場で機能していたのかまで確認する大切さを感じています。
今回のEA作成やバックテストには、私が利用しているFXTFのMT4を使いました。
自作EAの検証や自動売買を試してみたい方には、ゴールデンウェイ・ジャパン(FXTF)のMT4がおすすめです。
主なメリットは、以下のとおりです。
- PC版MT4でEAを使ったFX自動売買ができる
- 口座開設前でもデモ口座を利用できる
- 37種類のFXTFオリジナルインディケータを無料で使える
- 外部のインディケータを追加し、チャートをカスタマイズできる
まずはデモ口座で、注文や決済が想定どおりに動くかを確認しながら進めてみてください。
実際に運用する際は、スプレッドに加えて、対象通貨ペアのEA・スクリプト取引手数料も確認しておきましょう。
➡️ ゴールデンウェイ・ジャパン(FXTF)の口座開設はこちら(無料)