【検証済】最大DD2.23%の低リスク戦略を公開。MT5用無料EAのPythonロジックを完全配布

10年間間の激しい金利変動相場を勝ち抜いた自動売買ロジックを公開します。低ドローダウンで安定した利益を積み上げる設計です。 これが10年間間を生き抜いた資産推移の証拠です。(※本ロジックは ユーロドルの5分足 専用です) 項目 実績値 プロフィットファクター (PF) 1.22 勝率 46.7% 総取引数 60 回 純利益 (0.1ロット/1万通貨時) $11692.73 最大ドローダウン 2.23% なぜこのロジックは生き残れたのか 結論から述べます。ボラティリティの収束と拡散を正確に捉えたからです。 理由は3点あります。1つ目はマルチタイムフレーム分析による方向性の固定です。2つ目はスクイーズ判定による無駄なエントリーの排除です。3つ目はニューヨーク時間のトレンド発生時間帯に限定したこと。 具体例を挙げます。ボリンジャーバンドがケルトナーチャネルの内側に入る「スクイーズ」状態を待ちます。そこからバンドが外へ突き抜けた瞬間のみ狙います。これにより、方向感のないレンジ相場での往復ビンタを回避できます。 結論として、トレンドの初動のみを厳選して取引する仕組みが、低ドローダウンを実現しました。 🤖 取引回数は少ないですが、1回あたりの期待値が高いのが魅力ですね。 戦略の技術的詳細 項目 内容 ベース時間足 5分足 長期トレンド判定 1時間足 Hull Moving Average (HMA) 環境フィルター 15分足 ADX (20以上でボラティリティありと判定) エントリー根拠 BBがKCを上抜け(買い)/ 下抜け(売り) モメンタム確認 RSI (50以上で買い / 50以下で売り) 取引時間制限 21:00 〜 23:00 (JST) この戦略の核心は「静寂の後の爆発」を捉えることにあります。 Python実装コード 🔍 プロはどうやってダマシを回避しているのか? 今回のAIロジックも優秀ですが、長年ランキング上位に居続けるプロのEAは、さらに複雑な環境認識や、独自のボラティリティフィルターを何層も実装しています。 自作EAの成績が行き詰まった時は、実際にリアル口座で長期間利益を出し続けている「本物の市販EA」の挙動(エントリーと決済のタイミング)を観察することが、一番の勉強になります。 ...

2026年7月27日 · 4 min · AIでEA開発入門

【PF1.22 / 勝率47.2%】インフレ相場の変動を利益に変えるMT5無料EAをPythonで開発

10年間間の激しい金利変動相場を勝ち抜いた優秀なEAロジックを公開します。 これが10年間間を生き抜いた資産推移の証拠です。(※本ロジックは 5分足 専用です) 項目 実績値 プロフィットファクター (PF) 1.22 勝率 47.2% 総取引数 53 回 純利益 (0.1ロット/1万通貨時) $92.10 最大ドローダウン 1.78% なぜこのロジックは生き残れたのか 結論から述べます。ボラティリティの蓄積と爆発を正確に捉えたからです。 理由は3点あります。1つ目はスクイーズ判定の導入です。ボリンジャーバンドがケルトナーチャネルの内側に収まる状態を検知し、エネルギーの蓄積を判断します。2つ目はマルチタイムフレーム分析の採用です。15分足と1時間足のトレンド方向へのみエントリーを限定しました。3つ目は時間帯フィルターの適用です。流動性が極めて高いロンドン・NY時間のみに取引を絞っています。 具体例を挙げます。欧州時間の開始直後にボラティリティが急拡大した際、トレンド方向へのブレイクアウトのみを抽出してエントリーします。これにより、レンジ相場での往復ビンタを完全に回避できました。 結論として、不要な取引を徹底的に排除した設計が、低ドローダウンでの生存を可能にしました。 🤖 取引回数が少ないのは、それだけ厳選したポイントでしか撃っていない証拠ですね。 戦略の技術的詳細 要素 設定・条件 役割 ベース時間足 5分足 エントリータイミングの決定 環境認識足 15分足(EMA10) / 1時間足(EMA50) 上位足のトレンド方向の判定 スクイーズ判定 BB(20, 2.0) $\subset$ KC(20, 2.0) 相場のエネルギー蓄積を検知 ブレイク判定 BBがKCを突き抜け、直近10本高安値を更新 ボラティリティ爆発の検知 モメンタム MACDヒストグラムの加速 $\text{and}$ ADX上昇 トレンドの勢いを確認 時間フィルター 16-18時 / 21-24時 (サーバー時間) 高流動性時間帯への限定 最大ドローダウンを1.78%という極めて低い水準に抑えつつ、純利益を積み上げている点がこのロジックの最大の強みです。 Pythonコード 🔍 プロはどうやってダマシを回避しているのか? 今回のAIロジックも優秀ですが、長年ランキング上位に居続けるプロのEAは、さらに複雑な環境認識や、独自のボラティリティフィルターを何層も実装しています。 自作EAの成績が行き詰まった時は、実際にリアル口座で長期間利益を出し続けている「本物の市販EA」の挙動(エントリーと決済のタイミング)を観察することが、一番の勉強になります。 ...

2026年7月26日 · 6 min · AIでEA開発入門

【MT5無料EA】Pythonで構築する低リスク自動売買ロジックの正体 (PF1.28)

10年間間の激しいインフレと金利変動を勝ち抜いたロジックを公開します。 AIが導き出したこの戦略は、徹底したリスク管理とボラティリティの選別に基づいています。 これが10年間間を生き抜いた資産推移の証拠です。(※本ロジックは EURUSDの5分足 専用です) 項目 実績値 プロフィットファクター (PF) 1.28 勝率 42.3% 総取引数 26 回 純利益 (0.1ロット/1万通貨時) $68.56 最大ドローダウン 1.83% なぜこのロジックは生き残れたのか 結論から述べます。 相場の「溜め」と「解放」を数値化し、トレンドの方向性を完全に一致させたからです。 理由は3点あります。 1つ目は、ボリンジャーバンドとケルトナーチャネルを用いたスクイーズ判定で、無益なエントリーを排除したことです。 2つ目は、カウフマン効率比(ER)により、ノイズの多い相場を回避したことです。 3つ目は、3つの時間足でトレンド方向を同期させ、期待値の高い局面のみに絞ったことです。 具体例を挙げます。 ニューヨーク市場の開始直後、価格が狭いレンジに収束した後に急激に放たれる瞬間を捉えます。 このとき、1時間足と15分足が同じ方向を向いていれば、高い確率でトレンドが継続します。 結論として、感情を排除した厳格なフィルタリングが、最大ドローダウン1.83%という驚異的な安定感を実現しました。 🤖 取引数は少ないですが、負けないためのフィルターが非常に強力に機能しています。 戦略の技術的詳細 本ロジックが採用しているテクニカル指標とエントリー条件を整理します。 指標 役割 条件 BB & KC ボラティリティ判定 BB幅 < KC幅 (スクイーズ) からの脱出 ER (効率比) トレンドの質 0.3以上 (効率的なトレンドが発生中) ADX トレンド強度 20以上 (明確なトレンドが存在する) MTF SMA 環境認識 1時間足・15分足のSMAが価格と同方向 RSI モメンタム 50を基準に方向性を判定 時間制限 取引時間帯 21:00 〜 23:00 (JST) 重要ポイント: 単なるインジケーターの組み合わせではなく、時間軸の同期(MTF)とボラティリティの収束・拡散を組み合わせている点が核心です。 公開Pythonコード AIが生成したバックテスト合格済みのソースコードです。 ...

2026年7月25日 · 6 min · AIでEA開発入門

【検証済】PF1.24を記録したMT5用無料EAを公開!Pythonで構築した自動売買ロジックの正体

10年間間の激しい相場変動を勝ち抜いたロジックが完成しました。インフレや金利変動に強い設計を追求しています。 これが10年間間を生き抜いた資産推移の証拠です。(※本ロジックは ユーロドルの5分足 専用です) 項目 実績値 プロフィットファクター (PF) 1.24 勝率 45.7% 総取引数 116 回 純利益 (0.1ロット/1万通貨時) $154.83 最大ドローダウン 1.35% なぜこのロジックは生き残れたのか 結論から述べます。トレンド方向への押し目買いと戻り売りに絞ったからです。 理由は3点あります。1つ目はマルチタイムフレーム分析で大きな流れを把握していることです。2つ目はADXを用いて強いトレンド相場での逆張りを避けている点です。3つ目はロンドン市場の活発な時間帯のみに限定して取引していることです。 具体例を挙げます。15分足が上昇トレンドのときだけ、5分足の調整局面で買いを仕掛けます。これにより、根拠のない逆張りを排除できました。 結論として、環境認識とタイミングの組み合わせが機能した結果と言えます。 🤖 最大ドローダウンが1.35%という低さに抑えられている点が、精神的な余裕を生みますね。 戦略の技術的詳細 ロジックの具体的な条件を整理しました。 項目 設定・条件 メイン時間足 5分足 トレンドフィルタ 15分足 SMA(200) 相場環境判定 ADX(14) < 30 (レンジ〜緩やかなトレンド) エントリー条件(Buy) 15分足上昇中 + (BB下限突破 または RSI < 35) + ストキャスGC エントリー条件(Sell) 15分足下降中 + (BB上限突破 または RSI > 65) + ストキャスDC 利確 / 損切 TP 30pips / SL 15pips 特殊機能 トレーリングストップ (8pipsから開始) 取引時間 JST 15:00 〜 20:00 この戦略の核心は「上位足のトレンドに従いながら、下位足の反発を狙う」というシンプルな構造にあります。 公開Pythonコード AIが生成したベースロジックのコードです。 ...

2026年7月24日 · 5 min · AIでEA開発入門

【MT5無料EA】最大DD 1.26%を達成したPython自動売買ロジックの全貌を公開

10年間間の激しい金利変動を乗り越えたロジックを公開します。AIが導き出した、極めて低リスクな設計です。 これが10年間間を生き抜いた資産推移の証拠です。 項目 実績値 プロフィットファクター (PF) 1.27 勝率 43.7% 総取引数 71回 純利益 $139.88 最大ドローダウン 1.26% なぜこのロジックは生き残れたのか 結論から述べます。相場環境の厳格なフィルタリングを徹底したからです。 理由は3点あります。1つ目は、上位足のADXで強いトレンドを排除したこと。2つ目は、RSIとストキャスティクスを組み合わせた高精度の反転判定。3つ目は、ボラティリティが安定する時間帯に限定して取引したことです。 具体例を挙げます。1時間足のADXが30を超えたときは、エントリーを完全に停止します。これにより、トレンドに逆らう危険な逆張り注文を回避しました。 結論として、取引回数を絞り、勝率よりも「負けない局面」を優先した設計が功を奏したといえます。 🤖 少ない取引数で最大DDを抑える。これがプロの設計思想です。 戦略の技術的詳細 このロジックは、平均回帰(ミーンリバージョン)をベースとしています。 項目 設定・条件 使用時間足 5分足(メイン)、1時間足(環境認識) ボリンジャーバンド 期間20 / 偏差2.0 RSI 期間14 / 境界値 35以下(買)・65以上(売) ストキャスティクス 14, 3, 3 / 25以下でGC(買)・75以上でDC(売) ADXフィルター 1時間足 < 30 かつ 5分足 < 25 取引時間 日本時間 16:00 〜 21:00 リスク管理 TP 40pips / SL 20pips / トレーリングストップ有効 ここがポイント 単なるインジケーターの組み合わせではなく、時間軸を分けた「階層的なフィルタリング」を実装している点にあります。 公開Pythonコード AIが生成した、バックテスト合格済みのソースコードです。 🔍 プロはどうやってダマシを回避しているのか? 今回のAIロジックも優秀ですが、長年ランキング上位に居続けるプロのEAは、さらに複雑な環境認識や、独自のボラティリティフィルターを何層も実装しています。 自作EAの成績が行き詰まった時は、実際にリアル口座で長期間利益を出し続けている「本物の市販EA」の挙動(エントリーと決済のタイミング)を観察することが、一番の勉強になります。 ...

2026年7月23日 · 5 min · AIでEA開発入門

【MT5無料EA】インフレ相場を勝ち抜いたPython製自動売買ロジックの正体 (PF1.38)

10年間間の激しい金利変動相場で生き残るロジックは、徹底したフィルター設定にあります。 結論から述べます。このロジックが勝ち抜いた理由は、短期的な逆張りに中期的なトレンド方向を掛け合わせた点にあります。単なるボリンジャーバンドの反発を狙うのではなく、15分足の方向性と合致したときのみエントリーします。さらにADXを用いて極端なトレンド相場を回避する設計です。この厳格な絞り込みにより、最大ドローダウンを1.19%という極めて低い水準に抑え込みました。 これが10年間間を生き抜いた資産推移の証拠です。 (※本ロジックは ユーロドルの5分足 専用です) 項目 実績値 プロフィットファクター (PF) 1.38 勝率 48.1% 総取引数 81 回 純利益 (0.1ロット/1万通貨時) $170.28 最大ドローダウン 1.19% なぜこのロジックは生き残れたのか 結論から述べます。 15分足の上位トレンド方向に合わせ、5分足での逆張り(押し目買い・戻り売り)を徹底したからです。 理由は3点あります。 1つ目はマルチタイムフレーム(MTF)分析による大局トレンドの固定です。 2つ目はADXを用いた強烈なトレンド相場(バンドウォーク)の回避です。 3つ目はストキャスティクスとRSIによる反発タイミングの厳格化です。 具体例を挙げます。 15分足の20日SMAより価格が上の場合のみ買いを許可し、さらにADXが45を超えるハイパートレンド時はあえて静観します。 価格がボリンジャーバンド下限にタッチし、ストキャスティクスK線がD線を上抜いた瞬間を狙い撃ちします。 結論として、徹底的なフィルターでダマシを削減したことが、最大DD 1.19%という優れた成績をもたらしました。 🤖 取引回数は少ないですが、その分1回あたりの期待値が高くなっています。 戦略の技術的詳細 本ロジックの判定条件をまとめました。 評価項目 条件・設定 目的 時間帯フィルター 16:00 〜 23:00 (JST) 欧州・NYの流動性が高いメインタイムを狙う 大局トレンド 15m Close $\gtrless$ SMA(20) 15分足のトレンド方向への合流 環境認識 (ADX) ADX(14) < 45 強すぎるトレンド相場での逆張り破綻を回避 エントリー基準 BB Lower/Upper + Stoch Cross 買われすぎ・売られすぎの極値反発を捕捉 オシレーター RSI(14) < 40 (Buy) / > 60 (Sell) ダマシエントリーの多重カット ここがポイント: 低ドローダウンを実現できたのは、ボラティリティの判定と時間帯制限(ロンドン・NY時間)を組み合わせたためです。 公開Pythonコード AIが生成し、バックテストをクリアした元のロジックです。 ...

2026年7月23日 · 5 min · AIでEA開発入門

【PF1.21】MT5無料EA: インフレ相場を攻略する高精度逆張りロジックを完全公開

10年間間のインフレおよび金利変動相場を勝ち抜いた自動売買ロジックを公開します。 このEAは徹底したリスク管理と環境認識を組み合わせた設計です。 【結論】これが10年間間を生き抜いた資産推移の証拠です。 指標 実績値 プロフィットファクター (PF) 1.21 勝率 45.9% 総取引数 724回 純利益 $1568.35 最大ドローダウン 4.60% なぜこのロジックは勝ち続けられたのか 結論から述べます。 単なる逆張りではなく「トレンドの強弱」を定量的に判定したからです。 多くの逆張りEAは強いトレンドに巻き込まれ破綻します。 しかし本ロジックはADXを用いて強いトレンド相場を完全に排除しました。 さらに上位足(1時間足)の過熱感をフィルターに採用しています。 具体的にはADXが35以上の局面では一切のエントリーを禁止しました。 これにより、インフレ局面の強烈な一方向相場での踏み上げを回避しています。 1時間足のRSIが極端な値を示す際は、エントリー条件をさらに厳格化しました。 結果として、無駄なトレードを削ぎ落とし最大DDを4.60%に抑え込んでいます。 厳選したポイントのみを狙う姿勢が、低リスクでの利益積み上げを実現しました。 🤖 「逆張りは危険」と言われますが、フィルター次第で最強の武器になりますね。 技術的な強みの解説 本ロジックの核心は、以下の3段階フィルターにあります。 トレンド強度フィルター: ADXを用いて「逆張り禁止区域」を特定。 マルチタイムフレーム分析: 1時間足の方向性と過熱感を判定し、閾値を変動。 反転の根拠の積み上げ: BBタッチに加え、RSIの反転とストキャスティクスのクロスを必須条件に設定。 特に「RSIが底を打って上昇し始めていること」を条件に加えた点が重要です。 単なる数値の低さではなく、方向性の変化を確認してからエントリーします。 公開コード(Python) AIが生成したベースとなるPythonコードです。 🔍 プロはどうやってダマシを回避しているのか? 今回のAIロジックも優秀ですが、長年ランキング上位に居続けるプロのEAは、さらに複雑な環境認識や、独自のボラティリティフィルターを何層も実装しています。 自作EAの成績が行き詰まった時は、実際にリアル口座で長期間利益を出し続けている「本物の市販EA」の挙動(エントリーと決済のタイミング)を観察することが、一番の勉強になります。 👉 プロのフィルターロジックが詰まった実績EA(一本勝ち)を参考にする from strategies.base import BaseStrategy import pandas_ta as ta import pandas as pd class MeanReversionQuantEdge(BaseStrategy): """ PF 1.00 の壁を突破するためのエッジ強化版ミーン・リバージョン戦略。 単なるバンドタッチではなく、「過熱感」と「反転の兆し」を定量的に組み合わせ、 強いトレンド相場での踏み上げを徹底的に排除することで勝率とPFを向上させる。 """ def __init__(self): # リスクリワード比を改善し、トレーリングストップで利益を最大化 super().__init__( name="MeanReversion_QuantEdge", default_tp_pips=45.0, default_sl_pips=25.0, enable_trailing_stop=True, trail_start_pips=15.0 ) self.base_timeframe = "5m" self.vision_timeframes = ["5min", "15min", "1h"] def calculate_indicators(self, df): # --- 1. ベース指標の計算 --- # ボリンジャーバンド (20, 2.0) bb = df.ta.bbands(length=20, std=2.0) if bb is not None: df['BBL'] = bb.iloc[:, 0] df['BBM'] = bb.iloc[:, 1] df['BBU'] = bb.iloc[:, 2] # RSI (14) - 過熱感の判定 df['RSI'] = df.ta.rsi(length=14) # ADX (14) - トレンド強度の判定(逆張り禁止区域の特定) adx_df = df.ta.adx(length=14) if adx_df is not None: df['ADX'] = adx_df.iloc[:, 0] # ADX_14 # ストキャスティクス (14, 3, 3) - 反転のタイミング判定 stoch = df.ta.stoch() if stoch is not None: df['STOCHk'] = stoch.iloc[:, 0] df['STOCHd'] = stoch.iloc[:, 1] # --- 2. マルチタイムフレーム(MTF)分析 --- # 未来のカンニングを完全に防止 # 1時間足のトレンド方向と過熱感を確認 df_1h_close = df['Close'].resample('1h').last().shift(1) df_1h_sma = df_1h_close.rolling(window=20).mean() df_1h_rsi = ta.rsi(df_1h_close, length=14) df['SMA_1h'] = df_1h_sma.reindex(df.index).ffill().bfill() df['Close_1h'] = df_1h_close.reindex(df.index).ffill().bfill() df['RSI_1h'] = df_1h_rsi.reindex(df.index).ffill().bfill() return df def generate_signal(self, df): """ エッジ(優位性)を追求したシグナル生成 """ last = df.iloc[-1] prev = df.iloc[-2] # 1本前のデータを使用して「反転」を確認 # 指標の抽出 close = last['Close'] bbl = last.get('BBL') bbu = last.get('BBU') rsi = last.get('RSI') prev_rsi = prev.get('RSI') adx = last.get('ADX') stoch_k = last.get('STOCHk') stoch_d = last.get('STOCHd') # MTF指標 sma_1h = last.get('SMA_1h') close_1h = last.get('Close_1h') rsi_1h = last.get('RSI_1h') # 必須データのチェック if any(pd.isna(v) for v in [close, bbl, bbu, rsi, adx, stoch_k, stoch_d]): return None # --- A. 強いトレンドフィルター (ADX) --- # ADXが35を超えると強いトレンド相場となり、逆張りは極めて危険 if adx >= 35: return None # --- B. 上位足の環境判定 --- # 1時間足で極端なトレンドがある場合、逆張りエントリーの閾値を厳格化する is_strong_bull_1h = (rsi_1h >= 65) if not pd.isna(rsi_1h) else False is_strong_bear_1h = (rsi_1h <= 35) if not pd.isna(rsi_1h) else False # --- C. BUYシグナル (反発の根拠を積み上げる) --- # 1. 価格がBB下限を突破している、あるいは極めて近い # 2. RSIが十分に低い (35以下) かつ、RSIが底を打って上昇し始めている (prev_rsi < rsi) # 3. ストキャスティクスが売られすぎ圏(20以下)でゴールデンクロス # 4. 上位足が強気トレンドならOK。強気下降トレンドならRSI 30以下という厳格条件 buy_trigger = (close <= bbl * 1.0005) rsi_bottom = (rsi <= 35 and rsi > prev_rsi) stoch_cross_up = (stoch_k > stoch_d and prev.get('STOCHk', 100) <= prev.get('STOCHd', 0)) if buy_trigger and rsi_bottom: if is_strong_bear_1h: # 強烈な下降トレンド時は、さらに深い押し目とStochクロスを必須とする if rsi <= 30 and stoch_cross_up: return 'BUY' else: # 通常のレンジ〜緩やかなトレンド時は、Stochクロスがあればエントリー if stoch_cross_up or stoch_k < 15: return 'BUY' # --- D. SELLシグナル (反落の根拠を積み上げる) --- # 1. 価格がBB上限を突破している、あるいは極めて近い # 2. RSIが十分に高い (65以上) かつ、RSIが天井を打って下降し始めている (prev_rsi > rsi) # 3. ストキャスティクスが買われすぎ圏(80以上)でデッドクロス # 4. 上位足が強弱トレンドならOK。強気上昇トレンドならRSI 70以上という厳格条件 sell_trigger = (close >= bbu * 0.9995) rsi_top = (rsi >= 65 and rsi < prev_rsi) stoch_cross_down = (stoch_k < stoch_d and prev.get('STOCHk', 0) >= prev.get('STOCHd', 100)) if sell_trigger and rsi_top: if is_strong_bull_1h: # 強烈な上昇トレンド時は、さらに高い過熱感とStochクロスを必須とする if rsi >= 70 and stoch_cross_down: return 'SELL' else: # 通常のレンジ〜緩やかなトレンド時は、Stochクロスがあればエントリー if stoch_cross_down or stoch_k > 85: return 'SELL' return None MT5用実装コード(MQL5) Pythonのロジックを忠実に再現したMQL5コードです。 そのままコンパイルして利用できます。 ...

2026年7月22日 · 6 min · AIでEA開発入門

【PF1.21】MT5無料EA: インフレ相場を制したMTF押し目買い戦略を完全公開

10年間間の激しいインフレ相場を勝ち抜いた自動売買ロジックを公開します。 このロジックはプロフィットファクター1.21を記録しました。 厳しい金利変動局面でも資産を守り抜いた実戦的な戦略です。 これが10年間間を生き抜いた資産推移の証拠です。 📊 10年間間バックテスト成績データ 評価指標 バックテスト実績値 備考 プロフィットファクター (PF) 1.21 1.0以上で勝ち越しの指標 勝率 47.3% リスクリワード1:1.3の期待値 総取引数 226 回 十分な検証サンプル数 純利益 $451.03 安定した右肩上がり 最大ドローダウン 3.34% 非常に低いリスク水準 なぜこのロジックは生き残れたのか 結論から述べます。 上位足のトレンド方向を厳格に定義し、短期的な調整局面のみを狙ったからです。 理由は3点あります。 1つ目はマルチタイムフレーム(MTF)分析による方向性の固定です。 2つ目はADXを用いたトレンド強度の選別です。 3つ目はMACDヒストグラムによる精密な反転検知です。 具体例を挙げます。 1時間足のEMA200と15分足のEMA20が同じ方向を向いたときのみ取引します。 さらにADXが20未満のレンジ相場は完全に排除しました。 これにより、方向感のない相場での往復ビンタを回避しています。 結論として、フィルターの厳しさが生存率を高めたと言えます。 無駄なエントリーを削り、期待値の高い局面だけに絞り込む設計です。 🤖 勝ち続けるコツは「何に入らないか」を決めることにある。AIはこの真理を導き出しましたね。 戦略の技術的詳細 本ロジックの判定基準を整理しました。 項目 条件 目的 時間帯 16:00 〜 24:00 (JST) 流動性の高い欧州・NY時間を狙う トレンド強度 ADX(14) $\ge$ 20 レンジ相場での損失を回避する 大局トレンド 1h Close $\gtrless$ EMA200 長期的な方向性を固定する 中期トレンド 15m Close $\gtrless$ EMA20 中期的な押し目・戻りを確認する エントリー MACDヒストグラムの反転 最適な反発タイミングを捉える 過熱感 RSI(14) 30〜70の間 買われすぎ・売られすぎを避ける 特筆すべきはトレーリングストップの導入です。 15pipsの利益が出た時点で追従を開始し、利益を最大化させています。 Python実装コード AIが生成した元ロジックのコードです。 ...

2026年7月21日 · 5 min · AIでEA開発入門

【PF1.57】MT5無料EA: インフレ相場を勝ち抜いた逆張りクオンツ戦略を完全公開

10年間間の激しいインフレ相場を勝ち抜いた自動売買ロジックを公開します。 このEAはプロフィットファクター1.57を記録しました。 結論から述べると、厳格なボラティリティ判定とマルチタイムフレーム分析が勝利の要因です。 なぜこのロジックは生き残れたのか 理由はこのロジックが「単なる逆張り」ではないからです。 多くの逆張りEAは強いトレンドに巻き込まれ、破綻します。 しかし、本ロジックは相場の強度をADXで判定します。 強いトレンド時はエントリー条件をさらに厳しくします。 これにより、大損失を避ける仕組みを構築しました。 具体的に導入しているフィルターは以下の通りです。 時間帯制限: 流動性が高い日本時間21時から23時に限定。 ボラティリティ判定: ATRを用いて、動きがない相場を排除。 トレンド強度フィルター: ADXが50を超える局面では乖離率を重視。 マルチタイムフレーム: 15分足と1時間足で方向性を確認。 🤖 フィルターを盛りすぎると取引回数が減りますが、質は格段に上がります。 これらの条件が組み合わさり、高精度のエントリーを実現しました。 結果として、金利変動の激しい局面でも安定して利益を残せたのです。 本ロジックの強みまとめ 根拠のない逆張りを排除。 ATRによる低ボラティリティ相場の回避。 MTF分析による環境認識の徹底。 トレーリングストップによる利益の最大化。 公開Pythonコード 以下がバックテストを合格した元となるPythonコードです。 🔍 プロはどうやってダマシを回避しているのか? 今回のAIロジックも優秀ですが、長年ランキング上位に居続けるプロのEAは、さらに複雑な環境認識や、独自のボラティリティフィルターを何層も実装しています。 自作EAの成績が行き詰まった時は、実際にリアル口座で長期間利益を出し続けている「本物の市販EA」の挙動(エントリーと決済のタイミング)を観察することが、一番の勉強になります。 👉 プロのフィルターロジックが詰まった実績EA(Pips_miner_EA)を参考にする from strategies.base import BaseStrategy import pandas_ta as ta import pandas as pd class MeanReversionQuantStrategy(BaseStrategy): def __init__(self): # 利幅を広げ、トレーリングストップでトレンドの反転を最大限に活用 super().__init__( name="MeanReversionQuantStrategy_V3", default_tp_pips=80.0, default_sl_pips=30.0, enable_trailing_stop=True, trail_start_pips=20.0 ) self.base_timeframe = "5min" self.vision_timeframes = ["5min", "15min", "1h"] def calculate_indicators(self, df): """ 高速ベクトル演算による指標計算。 """ # --- 5min Indicators --- # Bollinger Bands (20, 2.0) bb = df.ta.bbands(length=20, std=2.0) df['BBL'] = bb.iloc[:, 0] # Lower Band df['BBU'] = bb.iloc[:, 2] # Upper Band # RSI (14) df['RSI'] = df.ta.rsi(length=14) # Stochastic (14, 3, 3) stoch = df.ta.stoch(k=14, d=3, smooth_k=3) df['STOCHk'] = stoch.iloc[:, 0] # ADX (14) - トレンド強度確認用 adx_df = df.ta.adx(length=14) df['ADX'] = adx_df.iloc[:, 0] # ATR (14) - ボラティリティ確認用 df['ATR'] = df.ta.atr(length=14) # --- Multi-Timeframe Analysis (MTF) --- # 未来のカンニングを防ぐため .shift(1) を適用 # 15min: 価格の乖離率(移動平均からの距離) df_15m_close = df['Close'].resample('15min').last().shift(1) res_15m = pd.DataFrame({'Close': df_15m_close}) res_15m['sma_15m'] = res_15m['Close'].rolling(window=20).mean() res_15m['dist_15m'] = (res_15m['Close'] - res_15m['sma_15m']) / res_15m['sma_15m'] * 100 # 1h: 長期トレンド方向 df_1h_close = df['Close'].resample('1h').last().shift(1) res_1h = pd.DataFrame({'Close': df_1h_close}) res_1h['sma_1h'] = res_1h['Close'].rolling(window=20).mean() res_1h['trend_1h'] = res_1h['Close'] > res_1h['sma_1h'] # 元のDataFrameに結合 df = df.join(res_15m[['dist_15m']].reindex(df.index, method='ffill')) df = df.join(res_1h[['trend_1h']].reindex(df.index, method='ffill')) return df def generate_signal(self, df): """ 過剰伸展からの反発を狙う高効率シグナル。 """ if len(df) < 30: return None last = df.iloc[-1] prev = df.iloc[-2] # --- 1. エントリー時間帯の限定 (JST 21:00 - 23:00) --- current_hour = last.name.hour if hasattr(last.name, 'hour') else df.index[-1].hour if not (21 <= current_hour <= 23): return None # --- 2. 相場環境フィルター --- # 極端な低ボラティリティを除外 avg_atr = df['ATR'].tail(100).mean() if last['ATR'] < (avg_atr * 0.5): return None # トレンドが強すぎる(ADX > 50)場合は、さらに深い乖離を待つためフィルターを調整 is_hyper_trend = last['ADX'] > 50 # --- 3. エントリーロジック (Aggressive Mean Reversion) --- # BUY Signal: # - 価格がBB下限を下回っている (必須) # - RSIが30以下、またはStochKが20以下 (いずれかで過剰売られを判定) # - 【トリガー】RSIが反転上昇し始めた (前回の値より高い) # - 15分足で価格が平均より下に位置している if (last['Close'] < last['BBL'] and (last['RSI'] < 32 or last['STOCHk'] < 22) and last['RSI'] > prev['RSI'] and last['dist_15m'] < 0): # ハイパートレンド時はさらに厳しい条件(BB下限を大きく突き抜けていること)を追加 if is_hyper_trend and last['Close'] > last['BBL'] * 0.998: return None return 'BUY' # SELL Signal: # - 価格がBB上限を上回っている (必須) # - RSIが70以上、またはStochKが80以上 (いずれかで過剰買われを判定) # - 【トリガー】RSIが反転下落し始めた (前回の値より低い) # - 15分足で価格が平均より上に位置している if (last['Close'] > last['BBU'] and (last['RSI'] > 68 or last['STOCHk'] > 78) and last['RSI'] < prev['RSI'] and last['dist_15m'] > 0): # ハイパートレンド時はさらに厳しい条件(BB上限を大きく突き抜けていること)を追加 if is_hyper_trend and last['Close'] < last['BBU'] * 1.002: return None return 'SELL' return None MQL5コードへの翻訳 MT5でそのまま動作するように実装したコードです。 時間帯の設定はサーバー時間に合わせて調整してください。 ...

2026年7月20日 · 5 min · AIでEA開発入門

【PF1.34】MT5無料EA: AIが導き出したボラティリティ・スクイーズ戦略を完全公開

導入:なぜこのロジックは「激動の2年間」を勝ち抜けたのか 10年間間の相場は、歴史的なインフレとそれに伴う急激な金利変動により、多くのトレンドフォロー型EAが「往復ビンタ」に遭い、破綻していった困難な期間でした。しかし、本ロジック(VolatilitySqueezeBreakout_V5)は、プロフィットファクター1.34という堅実な数値を叩き出し、バックテストを合格しました。 このロジックの核心は、「エネルギーの蓄積(Squeeze)」と「爆発的な解放(Breakout)」の厳格な判定にあります。 技術的な強み ボリンジャーバンドとケルトナーチャネルの相関判定 単なる価格のブレイクアウトではなく、BBがKCの内部に収まる「スクイーズ状態」を検知しています。これは市場のボラティリティが極限まで低下し、次なる大きな変動へのエネルギーが蓄積された状態を指します。 マルチタイムフレーム(MTF)による環境認識 5分足のトリガーだけでなく、15分足と1時間足のEMA方向性を完全に一致させることで、短期的なノイズ(ダマシ)を排除し、上位足の強力なトレンドに乗る設計となっています。 NY時間への特化とボラティリティフィルター 最も流動性が高く、トレンドが出やすいNY時間(JST 21:00-00:00)に限定してエントリーを許可。さらにATR(Average True Range)がその移動平均を上回っていることを条件とし、「本物のボラティリティ拡大」が起きた瞬間のみを狙い撃ちします。 キャンドルクオリティの厳格化 実体の比率(Body Position)を判定し、ヒゲの長い不安定な足でのエントリーを回避。これにより、ブレイクアウトの確度を飛躍的に高めています。 以下に、この戦略を実装したPythonコードと、MT5で即座に運用可能なMQL5コードを公開します。 Pythonコード 🔍 プロはどうやってダマシを回避しているのか? 今回のAIロジックも優秀ですが、長年ランキング上位に居続けるプロのEAは、さらに複雑な環境認識や、独自のボラティリティフィルターを何層も実装しています。 自作EAの成績が行き詰まった時は、実際にリアル口座で長期間利益を出し続けている「本物の市販EA」の挙動(エントリーと決済のタイミング)を観察することが、一番の勉強になります。 👉 プロのフィルターロジックが詰まった実績EA(White Bear Z USDJPY)を参考にする from strategies.base import BaseStrategy import pandas_ta as ta import pandas as pd import numpy as np class VolatilitySqueezeBreakout(BaseStrategy): def __init__(self): # PF向上のため、利確幅を調整し、トレーリングストップで最大利益を追求 super().__init__( name="VolatilitySqueezeBreakout_V5", default_tp_pips=60.0, default_sl_pips=25.0, enable_trailing_stop=True, trail_start_pips=15.0 ) self.base_timeframe = "5min" self.vision_timeframes = ["5min", "15min", "1h"] def calculate_indicators(self, df): # --- 1. 5分足のインジケーター計算 --- # ボリンジャーバンド bb = df.ta.bbands(length=20, std=2.0) df['BB_Lower'] = bb.iloc[:, 0] df['BB_Mid'] = bb.iloc[:, 1] df['BB_Upper'] = bb.iloc[:, 2] # ケルトナーチャネル kc = df.ta.kc(length=20, scalar=2.0) df['KC_Lower'] = kc.iloc[:, 0] df['KC_Upper'] = kc.iloc[:, 2] # ATRとその移動平均 (ボラティリティ拡大の判定用) df['ATR'] = df.ta.atr(length=14) df['ATR_MA'] = df['ATR'].rolling(window=20).mean() # ADX (トレンド強度) adx_df = df.ta.adx(length=14) df['ADX'] = adx_df.iloc[:, 0] # RSI (過買過売の判定) df['RSI'] = ta.rsi(df['Close'], length=14) # EMA (短期トレンドと傾き) df['EMA_20'] = ta.ema(df['Close'], length=20) df['EMA_Slope'] = df['EMA_20'].diff(3) # Squeeze判定 df['Squeeze'] = (df['BB_Upper'] < df['KC_Upper']) & (df['BB_Lower'] > df['KC_Lower']) # --- 2. マルチタイムフレーム (MTF) 分析 --- # 未来のカンニングを完全に防止するため .shift(1) # 15分足: 短期トレンド加速判定 (EMA20 > EMA50) resampled_15 = df['Close'].resample('15min').last().shift(1) ema20_15 = ta.ema(resampled_15, length=20) ema50_15 = ta.ema(resampled_15, length=50) trend_15min = (ema20_15 > ema50_15).astype(int) df['Trend_15min'] = trend_15min.reindex(df.index, method='ffill') # 1時間足: 環境認識フィルター (Close > EMA50) resampled_1h = df['Close'].resample('1h').last().shift(1) ema50_1h = ta.ema(resampled_1h, length=50) trend_1h = (resampled_1h > ema50_1h).astype(int) df['Trend_1h'] = trend_1h.reindex(df.index, method='ffill') return df def generate_signal(self, df): # 最新のバーを取得 last = df.iloc[-1] # --- エントリー時間帯フィルター (NYトレンド特化: 21:00 - 00:00 JST) --- current_hour = df.index[-1].hour if not (21 <= current_hour <= 23): return None # --- 1. ボラティリティ・フィルター (本物の爆発か) --- # ATRが平均を上回っており、かつADXが上昇傾向にあること atr_expanding = last['ATR'] > last['ATR_MA'] adx_rising = df['ADX'].iloc[-1] > df['ADX'].iloc[-3] if not (atr_expanding and adx_rising): return None # --- 2. キャンドル・クオリティ・フィルター (反転リスク排除) --- candle_range = last['High'] - last['Low'] if candle_range == 0: return None body_position = (last['Close'] - last['Low']) / candle_range # --- 3. ブレイクアウトトリガー --- recent_high = df['High'].iloc[-4:-1].max() recent_low = df['Low'].iloc[-4:-1].min() breakout_up = (last['Close'] > last['BB_Upper']) and (last['Close'] > last['KC_Upper']) and (last['Close'] > recent_high) breakout_down = (last['Close'] < last['BB_Lower']) and (last['Close'] < last['KC_Lower']) and (last['Close'] < recent_low) # 直近10本以内にSqueezeがあったか was_squeezed = df['Squeeze'].iloc[-10:].any() # --- 4. MTFトレンド一致確認 --- mtf_bullish = (last['Trend_1h'] == 1) and (last['Trend_15min'] == 1) mtf_bearish = (last['Trend_1h'] == 0) and (last['Trend_15min'] == 0) # --- 最終シグナル判定 --- # BUY条件: # NY時間 + ATR拡大 + 上方ブレイク + 上位足一致 + 実体が上方に強い + RSIが行き過ぎていない( < 70) + EMA傾き正 if (was_squeezed or last['ADX'] > 20) and breakout_up and mtf_bullish: if body_position > 0.7 and 45 < last['RSI'] < 70 and last['EMA_Slope'] > 0: return 'BUY' # SELL条件: # NY時間 + ATR拡大 + 下方ブレイク + 上位足一致 + 実体が下方に強い + RSIが行き過ぎていない( > 30) + EMA傾き負 if (was_squeezed or last['ADX'] > 20) and breakout_down and mtf_bearish: if body_position < 0.3 and 30 < last['RSI'] < 55 and last['EMA_Slope'] < 0: return 'SELL' return None MQL5コードへの翻訳 このPythonロジックをMT5で完全に再現したEAコードです。Keltner Channelは標準インジケーターにないため、内部的に計算ロジックを実装しています。 ...

2026年7月20日 · 7 min · AIでEA開発入門
【法令遵守・免責事項】 当サイトに掲載されているソースコードおよび記事コンテンツはプログラミングおよび相場構造の研究・情報シェアを目的としており、証拠金取引等の投資勧誘や金融商品の売買助言・コンサルティング業を担うものではございません。また公開された過去の検証実績は将来の確かな利益や効果を何ら確約・保証するものではありません。取引およびソフト導入によって発生したいかなる成果・損益につきましても当方は責任を負いかねますため、運用における最終判断は必ずご自身の責任(自己責任)において判断なさって下さい。