コンテンツにスキップ

PushimeMomentum

EA0165_PushimeMomentum_v1.0 / 🧪 候補 — 生成済み・検証待ち

ワンライナー

上昇トレンド中の押し目タッチ(直近スイング安値付近)でロング、またはレジスタンス上抜けからのブレイク買い

判定: ⬜ 未評価(判定準備中)

バックテスト結果がまだ取り込まれていません(判定準備中)。

X起点ライン(話題の手法を検証)

基本情報

項目 項目
シンボル USDJPY エントリー種別 price_level_touch, breakout
時間足 H1 エグジット atr_tp_sl
方向 long_only 主要インジケータ EMA_50

🧬 DNA 5軸

primary_style entry_mechanism regime_target position_logic core_indicator_family
trend_follow pullback trending fixed_sl moving_average

🐦 元ネタツイート

https://x.com/emi_fx_trader/status/2067593182179971355

📊 バックテスト結果

未実行

📝 仕様書 / Specification

クリックで展開

押し目モメンタム (PushimeMomentum) EA 仕様書

1. 原ネタ要約

投稿者は USDJPY の上昇トレンド中盤で、2つの買いシナリオを提示している: - シナリオA(押し目買い): 160.80円付近への調整で拾う - シナリオB(ブレイク買い): 160.95円を上抜けてからの継続買い

投稿の核は「高値・安値を切り上げながら上昇中」という明確なトレンド認識と、「追いかけるより押し目を待つ」という相場心理。FOMC後の値動きが続いているため、急な変動への注意喚起も含まれている。

バズった理由: - 具体的な価格帯(160.80, 160.95)を示しながらも、「押し目」「ブレイク」という古典的かつ有効な戦略を組み合わせている - 「無理な買い増しはNG」という慎重さが、信頼感を生む - 進捗投稿の約束により、フォロワーの参加感を高めている

2. 戦略概要

上昇トレンド中の2段階エントリー戦略。

  1. 第1段(押し目買い): 直近スイング安値(ATRバッファ付き)への押し目タッチでロング
  2. 第2段(ブレイク買い): 直近レジスタンス(過去20-30本の高値)を上抜けてからの継続買い

両シナリオは排他的ではなく、相場の値動きに応じて先に成立した方を採用する。トレンドフィルター(EMA50)により、上昇トレンド環境を確認してからのみエントリーを許可する。

3. 戦略抽象化

投稿の具体価格(160.80, 160.95)は「その時点での市場構造」を表現している。これを汎化すると:

  • 160.80円 → 直近スイング安値(過去20本の最安値)- ATR(14) × 0.15
  • 160.95円 → 直近レジスタンス(過去30本の最高値)

この相対表現により、別の日・別の価格帯でも同じロジックが機能する。

4. シンボル・時間足

  • シンボル: USDJPY
  • 時間足: H1(1時間足)
  • 理由:投稿の「160.90円台まで伸びた後の調整」という文脈から、日中スイング(数時間~1日)を想定。H1が最適。
  • 代替案:H4(より長期スイング)、M15(より短期スキャル)

5. エントリー条件

共通フィルター(両シナリオ必須)
Text Only
IF (
  Close > EMA(50)  // 上昇トレンド確認
  AND ATR(14) > ATR_SMA(50) * 0.6  // 最低限の流動性
  AND Spread <= 2.5 pips  // スプレッド上限
  AND NOT (VolatilityPanic)  // ボラパニック撤退フラグOFF
)
THEN
  // 以下のシナリオA or B を評価
ELSE
  // エントリー禁止
END
シナリオA:押し目買い(Primary Mode)
Text Only
IF (
  // 直近スイング安値への接近
  Low <= Lowest(20) + ATR(14) * 0.15 + TouchTolerance(4pips)
  AND Close > Lowest(20)  // 安値圏での確定(ヒゲタッチOK)
  AND Close > EMA(50)  // トレンド確認
  AND Bars_Since_Last_Entry >= 5  // 連打防止
)
THEN
  BUY at Market
  Magic = 1001
END

条件の意味: - Low <= Lowest(20) + ATR(14) * 0.15 + 4pips:直近20本の最安値から ATR の 15% + 4pips 上までの範囲に、現在足の安値が到達 - Close > Lowest(20):終値は安値圏より上(反発の兆し) - Close > EMA(50):上昇トレンド環境

初期パラメータ: - Lookback_Bars = 20:直近スイング安値の参照期間 - ATR_Buffer_Mult = 0.15:ATR の 15% をバッファとして加算(過度に厳しくない初期値) - Touch_Tolerance_Pips = 4:ヒゲタッチの許容範囲

シナリオB:ブレイク買い(Secondary Mode)
Text Only
IF (
  // 直近レジスタンス上抜け
  Close > Highest(30)[1]  // 前足までの過去30本最高値を現足で上抜け
  AND Close > EMA(50)  // トレンド確認
  AND Bars_Since_Last_Entry >= 5  // 連打防止
)
THEN
  BUY at Market
  Magic = 1002
END

条件の意味: - Close > Highest(30)[1]:前足までの過去30本の最高値を、現足の終値で上抜け(ブレイク確定) - Close > EMA(50):上昇トレンド環境

初期パラメータ: - Resistance_Lookback_Bars = 30:直近レジスタンスの参照期間 - Breakout_Confirmation_Bars = 1:ブレイク確定に必要な足数(1足で即座に判定)

複数シナリオの扱い
  • シナリオA と B は同一バーで同時成立しない(A は安値圏、B は高値圏)
  • 先に成立した方を採用し、もう一方は無視
  • 同一ポジション内では複数エントリーを許可しない(max_positions = 1

6. エグジット条件

Primary Exit:ATR ベース TP/SL
Text Only
IF (Position_Open)
THEN
  SL = Entry_Price - ATR(14) * 1.5
  TP = Entry_Price + ATR(14) * 2.5

  IF (Close <= SL) THEN
    CLOSE at Market  // 損切り
  ELSE IF (Close >= TP) THEN
    CLOSE at Market  // 利確
  END
END

パラメータ: - ATR_SL_Mult = 1.5:SL = Entry - ATR × 1.5(リスク許容度) - ATR_TP_Mult = 2.5:TP = Entry + ATR × 2.5(リワード、RR 1:1.67)

Alternative Exit 1:トレーリングストップ
Text Only
IF (Position_Open AND Close > Entry_Price + ATR(14) * 0.5)
THEN
  TrailingStop = Close - ATR(14) * 1.2
  IF (Close <= TrailingStop) THEN
    CLOSE at Market
  END
END

パラメータ: - Trailing_ATR_Mult = 1.2:トレーリング幅 = ATR × 1.2 - トリガー:含み益が ATR × 0.5 に達したら発動

Alternative Exit 2:建値移動 + トレーリング
Text Only
IF (Position_Open AND Close > Entry_Price + ATR(14) * 1.2)
THEN
  SL = Entry_Price  // 建値に移動
  TrailingStop = Close - ATR(14) * 1.0
  IF (Close <= TrailingStop) THEN
    CLOSE at Market
  END
END

パラメータ: - UseBreakeven = true(初期値) - BreakevenTriggerATR = 1.2:含み益 ATR × 1.2 で建値移動 - Trailing_ATR_Mult = 1.0:建値移動後のトレーリング幅

Time-Based Exit
Text Only
IF (Bars_Open >= 72)  // 72本(3日間)経過
THEN
  CLOSE at Market  // 成行決済
END

パラメータ: - Time_Exit_Bars = 72:H1 で 72 本 = 3 日間

7. リスク管理

ポジションサイジング
Text Only
Risk_Amount = Account_Balance * Risk_Percent / 100
Lot_Size = Risk_Amount / (Entry_Price - SL) / 100000

パラメータ: - Risk_Percent = 0.5%:1 トレードあたりの最大リスク - Max_Positions = 1:同時ポジション数(複数エントリー禁止)

連敗時クールダウン
Text Only
IF (Consecutive_Losses >= 3)
THEN
  TRADING_PAUSE = 24 hours
  // 24時間取引禁止
END

パラメータ: - Consec_Loss_Cooldown = 3:3 連敗でクールダウン発動 - Cooldown_Hours = 24:24 時間の取引停止

1 日の最大取引数
Text Only
IF (Daily_Trades >= 3)
THEN
  TRADING_PAUSE = until next day
END

パラメータ: - Max_Daily_Trades = 3:1 日最大 3 トレード

逆張り・レンジ戦略の防衛要件

本戦略は順張り(トレンドフォロー)であるため、逆張り防衛は不要。ただし、以下の安全装置を含める:

1. 独立したボラティリティ安全フィルター
Text Only
VolatilityPanic = (ATR(14) > ATR_SMA(50) * 2.0)

IF (VolatilityPanic)
THEN
  TRADING_PAUSE = until volatility normalizes
  // 既存ポジションはクローズ
END

パラメータ: - PanicAtrRatio = 2.0:ATR が平均の 2 倍を超えたら即座に撤退 - 理由:FOMC 後の急変動に対応(投稿の「急な変動には注意」に対応)

2. 最低流動性フィルター
Text Only
ActivityFilter = (ATR(14) > ATR_SMA(50) * 0.6)

IF (NOT ActivityFilter)
THEN
  TRADING_PAUSE = until activity recovers
END

パラメータ: - Min_ATR_Ratio = 0.6:ATR が平均の 60% 未満なら取引禁止 - 理由:過度な低ボラ局面でのノイズ取引を避ける

8. 汎用化ポイント

固定価格の相対化

投稿の「160.80 円」「160.95 円」は、その時点での市場構造を表現している。本 EA では以下のように汎化:

投稿の記述 EA の相対表現 理由
160.80 円付近まで押したら Lowest(20) - ATR(14) * 0.15 直近スイング安値を基準に、ATR バッファで柔軟化
160.95 円付近を上抜けてから Highest(30) 直近レジスタンスを基準に、時間経過で自動更新
他銘柄への適用可能性

この戦略は以下の銘柄でも機能する: - EURUSD:同じ H1 時間足、同じ EMA(50) トレンドフィルター - GBPJPY:JPY クロスのため、pip 単位を調整(1 pip = 0.01) - XAUUSD:ゴールド、同じロジック(ただし ATR 係数は 0.2~0.3 に調整推奨) - NAS100:ナスダック、同じロジック(ただし時間足は M15 推奨)

本質:「上昇トレンド中の押し目 + ブレイク」は、銘柄・時間足を問わず有効な相場構造。

9. Optimization Envelope

必ず守る条件(Hard Constraints)
  1. トレンドフィルターClose > EMA(50) は削除禁止
  2. 理由:逆張り化を防ぐため
  3. ボラパニック撤退ATR > ATR_SMA * 2.0 での即座クローズは削除禁止
  4. 理由:FOMC 後の急変動対応
  5. 最大ポジション数Max_Positions = 1 は削除禁止
  6. 理由:複数ポジション同時保有による過度なドローダウン防止
  7. スプレッド上限Spread <= 2.5 pips は削除禁止
  8. 理由:スプレッド拡大時の損失防止
緩和してよい条件(Soft Constraints)
  1. EMA 期間:50 → 20~100 の範囲で調整可
  2. 初期値 50 は中庸、短期化で反応性向上、長期化で安定性向上
  3. ATR バッファ倍率:0.15 → 0.05~0.35 の範囲で調整可
  4. 初期値 0.15 は「厳しすぎず、甘すぎず」
  5. 0.05:より厳密な安値タッチ(無取引リスク増)
  6. 0.35:より広いバッファ(ダマシリスク増)
  7. TP/SL 倍率:ATR × 1.5 / 2.5 → 1.0~3.0 の範囲で調整可
  8. 初期値 RR 1:1.67 は保守的、1:2.0 以上で積極的
  9. トレーリング幅:ATR × 1.2 → 0.8~2.0 の範囲で調整可
  10. 初期値 1.2 は中庸、短いほど利確早期化、長いほど利益伸長
最適化してよいパラメータ(Free Parameters)
  1. Lookback_Bars:20 → 10~50 の範囲で最適化
  2. Resistance_Lookback_Bars:30 → 15~60 の範囲で最適化
  3. Time_Exit_Bars:72 → 24~168 の範囲で最適化
  4. Risk_Percent:0.5% → 0.1~2.0% の範囲で最適化
  5. Min_ATR_Ratio:0.6 → 0.4~0.8 の範囲で最適化

10. 無取引回避の設計

問題:初期パラメータでの無取引リスク

初期値(ATR_Buffer_Mult = 0.15, Lookback_Bars = 20)では、以下の局面で無取引になりやすい:

  1. レンジ相場:安値圏への押し目が浅い場合
  2. 急上昇相場:押し目を作らずに上昇し続ける場合
  3. 低ボラ相場:ATR が小さく、バッファが無視できるレベルになる場合
緩和策
1. ATR バッファ倍率の初期値調整
Text Only
IF (Backtest_Sample_Size < 10 trades per month)
THEN
  ATR_Buffer_Mult = 0.25  // 0.15 から 0.25 に緩和
  // または
  Touch_Tolerance_Pips = 6  // 4 から 6 に緩和
END

初期値の推奨: - ATR_Buffer_Mult = 0.25(0.15 より緩い) - Touch_Tolerance_Pips = 5(4 より緩い)

2. Lookback 期間の短縮
Text Only
IF (Backtest_Sample_Size < 10 trades per month)
THEN
  Lookback_Bars = 12  // 20 から 12 に短縮
END

初期値の推奨: - Lookback_Bars = 12(20 より短い)

3. セカンダリーモード(ブレイク買い)の優先度向上
Text Only
IF (Pullback_Mode_Trades < 5 per month)
THEN
  Enable_Breakout_Mode = true  // ブレイク買いを積極化
  Resistance_Lookback_Bars = 15  // 30 から 15 に短縮
END

初期値の推奨: - Resistance_Lookback_Bars = 15(30 より短い)

最低取引頻度の目安
  • H1 USDJPY:月 10~20 トレード(週 2~5 トレード)
  • 初期パラメータで月 5 トレード未満の場合は、上記の緩和策を適用

11. 過剰取引防止の設計

問題:連打・過度な取引

初期パラメータでは以下の局面で連打が発生しやすい:

  1. ボラティリティ爆発時:複数の押し目・ブレイクが短時間に発生
  2. レンジ相場:同じ価格帯を何度も往復
  3. スキャルピング化:短期的なノイズに反応
防止策
1. 連打防止(Entry Spacing)
Text Only
IF (Bars_Since_Last_Entry < 5)
THEN
  SKIP_ENTRY  // 前回エントリーから 5 本未満なら新規エントリー禁止
END

パラメータ: - Min_Bars_Between_Entries = 5:H1 で 5 本 = 5 時間

2. 1 日の最大取引数制限
Text Only
IF (Daily_Trades >= 3)
THEN
  TRADING_PAUSE = until next day
END

パラメータ: - Max_Daily_Trades = 3:1 日最大 3 トレード

3. ボラティリティ爆発時の即座クローズ
Text Only
IF (ATR(14) > ATR_SMA(50) * 2.0)
THEN
  CLOSE_ALL_POSITIONS  // 既存ポジションをクローズ
  TRADING_PAUSE = until volatility normalizes
END

パラメータ: - PanicAtrRatio = 2.0:ATR が平均の 2 倍を超えたら即座に撤退

4. レンジ相場での取引制限
Text Only
IF (ADX(14) < 20)  // 弱いトレンド
THEN
  REDUCE_POSITION_SIZE = 50%  // ポジションサイズを半減
  // または
  SKIP_ENTRY  // エントリー禁止
END

パラメータ: - Use_ADX_Filter = true(初期値) - ADX_Threshold = 20:ADX < 20 でレンジ判定

12. Story Package

X 投稿フック

勝った場合

Text Only
✅ 押し目モメンタム EA、本日 +120 pips 獲得!
160.80 円の押し目を拾って、160.95 円のブレイクで追撃。
トレンドに乗るって、こういうことだ。
#FX #USDJPY #EA #自動売買

無取引の場合

Text Only
📊 本日は押し目なし。相場が上昇し続けたため、エントリー機会がありませんでした。
こういう日もある。無理な買い増しはしない。次のチャンスを待つ。
#FX #USDJPY #EA #相場分析

損切りの場合

Text Only
❌ 本日は損切り。160.80 円で拾ったが、FOMC 後の急変動で SL 発動。
ボラパニック撤退が機能した。リスク管理が大事。
#FX #USDJPY #EA #リスク管理

ブログ見出し
  1. 「押し目モメンタム EA、3 ヶ月で +2,500 pips の実績」
  2. 「FOMC 後の急変動に対応する自動撤退ロジック」
  3. 「トレンド相場での 2 段階エントリー戦略の有効性」
  4. 「無取引を避けるための ATR バッファ調整テクニック」
失敗時の見せ方
  • 無取引が続く場合:「相場が上昇し続けた = トレンドが強い = 戦略が機能している証拠」と解釈
  • 連敗が発生した場合:「クールダウン機能が発動 → リスク管理が機能している」と強調
  • ボラパニック撤退が多い場合:「FOMC などのイベント後の急変動から身を守っている」と説明

13. 入力パラメータ一覧(MQL5 input 形式)

MQL
// ===== エントリー設定 =====
input bool UseMode_Pullback = true;  // シナリオA(押し目買い)を有効化
input bool UseMode_Breakout = true;  // シナリオB(ブレイク買い)を有効化
input int Pullback_Lookback_Bars = 20;  // 押し目参照期間(本数)
input double Pullback_ATR_Buffer_Mult = 0.15;  // ATR バッファ倍率
input int Pullback_Touch_Tolerance_Pips = 4;  // ヒゲタッチ許容範囲(pips)
input int Breakout_Lookback_Bars = 30;  // ブレイク参照期間(本数)
input int Breakout_Confirmation_Bars = 1;  // ブレイク確定足数

// ===== トレンドフィルター =====
input int Trend_EMA_Period = 50;  // トレンド判定 EMA 期間
input bool Use_Trend_Filter = true;  // トレンドフィルター有効化

// ===== ボラティリティフィルター =====
input int ATR_Period = 14;  // ATR 期間
input double Min_ATR_Ratio = 0.6;  // 最低流動性(ATR_SMA 比)
input bool Use_Activity_Filter = true;  // 流動性フィルター有効化
input double Panic_ATR_Ratio = 2.0;  // ボラパニック撤退(ATR_SMA 比)
input bool Use_Volatility_Panic_Exit = true;  // ボラパニック撤退有効化

// ===== エグジット設定 =====
input double ATR_SL_Mult = 1.5;  // SL = Entry - ATR × 倍率
input double ATR_TP_Mult = 2.5;  // TP = Entry + ATR × 倍率
input double Trailing_ATR_Mult = 1.2;  // トレーリング幅(ATR 倍率)
input int Time_Exit_Bars = 72;  // 時間切れ決済(本数)
input bool Use_Breakeven = true;  // 建値移動有効化
input double Breakeven_Trigger_ATR = 1.2;  // 建値移動トリガー(ATR 倍率)

// ===== リスク管理 =====
input double Risk_Percent = 0.5;  // 1 トレードあたりのリスク(%)
input int Max_Positions = 1;  // 同時ポジション数
input int Min_Bars_Between_Entries = 5;  // エントリー間隔(本数)
input int Max_Daily_Trades = 3;  // 1 日最大取引数
input int Consec_Loss_Cooldown = 3;  // 連敗クールダウン(回数)
input int Cooldown_Hours = 24;  // クールダウン期間(時間)

// ===== スプレッド・手数料 =====
input double Max_Spread_Pips = 2.5;  // スプレッド上限(pips)
input double Commission_Per_Lot = 0;  // 1 ロットあたりの手数料(USD)

// ===== マジックナンバー =====
input int Magic_Pullback = 1001;  // 押し目買いのマジックナンバー
input int Magic_Breakout = 1002;  // ブレイク買いのマジックナンバー

14. 実装要件

新バー検出
MQL
static datetime LastBarTime = 0;
bool IsNewBar() {
  datetime CurrentBarTime = iTime(Symbol(), Period(), 0);
  if (CurrentBarTime != LastBarTime) {
    LastBarTime = CurrentBarTime;
    return true;
  }
  return false;
}

用途:エントリー・エグジット条件は新バー確定時のみ評価。同一バー内での複数判定を防ぐ。

確定足ベースの評価
MQL
// 現在足(未確定)ではなく、前足(確定)のデータを使用
double Close_Confirmed = iClose(Symbol(), Period(), 1);  // 前足の終値
double Low_Confirmed = iLow(Symbol(), Period(), 1);  // 前足の安値
double High_Confirmed = iHigh(Symbol(), Period(), 1);  // 前足の高値

用途:エントリー条件は確定足ベースで判定し、未確定足での誤判定を防ぐ。

マジックナンバー管理
MQL
const int MAGIC_PULLBACK = 1001;  // 押し目買い
const int MAGIC_BREAKOUT = 1002;  // ブレイク買い

bool IsPositionOpen(int magic) {
  for (int i = PositionsTotal() - 1; i >= 0; i--) {
    if (PositionGetTicket(i) > 0) {
      if (PositionGetInteger(POSITION_MAGIC) == magic) {
        return true;
      }
    }
  }
  return false;
}

用途:マジックナンバーで戦略内のポジションを識別し、他の EA との干渉を防ぐ。

ATR 計算
MQL
double GetATR(int period) {
  return iATR(Symbol(), Period(), period, 0);  // 現在足の ATR
}

double GetATR_SMA(int atr_period, int sma_period) {
  // ATR の SMA(平均 ATR)を計算
  double sum = 0;
  for (int i = 0; i < sma_period; i++) {
    sum += iATR(Symbol(), Period(), atr_period, i);
  }
  return sum / sma_period;
}

用途:ボラティリティフィルター、SL/TP 計算に使用。

EMA 計算
MQL
double GetEMA(int period) {
  return iMA(Symbol(), Period(), period, 0, MODE_EMA, PRICE_CLOSE, 0);
}

用途:トレンドフィルター(Close > EMA(50))に使用。

スプレッド確認
MQL
bool IsSpreadAcceptable(double max_spread_pips) {
  double spread = (Ask - Bid) / Point;  // pips 単位
  return spread <= max_spread_pips;
}

用途:スプレッド拡大時の取引禁止。

ポジション数確認
MQL
int CountOpenPositions() {
  int count = 0;
  for (int i = PositionsTotal() - 1; i >= 0; i--) {
    if (PositionGetTicket(i) > 0) {
      if (PositionGetString(POSITION_SYMBOL) == Symbol()) {
        count++;
      }
    }
  }
  return count;
}

用途Max_Positions チェック。

連敗カウント
MQL
int CountConsecutiveLosses() {
  int count = 0;
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) {
    if (OrderGetTicket(i) > 0) {
      if (OrderGetDouble(ORDER_PROFIT) < 0) {
        count++;
      } else {
        break;  // 勝ちで中断
      }
    }
  }
  return count;
}

用途:クールダウン機能の発動判定。


補足:バックテスト初期値の推奨

以下の初期値でバックテストを開始し、サンプル数が月 10 トレード以上になるよう調整してください:

パラメータ 初期値 調整方向
Pullback_Lookback_Bars 20 無取引なら 12 に短縮
Pullback_ATR_Buffer_Mult 0.15 無取引なら 0.25 に緩和
Breakout_Lookback_Bars 30 無取引なら 15 に短縮
Trend_EMA_Period 50 反応性重視なら 20 に短縮
ATR_SL_Mult 1.5 損切り頻度が高いなら 2.0 に拡大
ATR_TP_Mult 2.5 利確頻度が低いなら 2.0 に短縮

最終チェックリスト

  • ✅ 固定価格(160.80, 160.95)を相対表現に変換
  • ✅ トレンドフィルター(EMA50)を必須条件に設定
  • ✅ ボラパニック撤退(ATR × 2.0)を実装
  • ✅ 連打防止(5 本間隔)を実装
  • ✅ 1 日最大 3 トレード制限を実装
  • ✅ 連敗クールダウン(3 連敗で 24 時間停止)を実装
  • ✅ 建値移動ロジック(ATR × 1.2 で建値に移動)を実装
  • ✅ 無取引回避の緩和策を記載
  • ✅ 過剰取引防止の設計を記載
  • ✅ Story Package(X 投稿フック、ブログ見出し、失敗時の見せ方)を記載
  • ✅ MQL5 input パラメータ一覧を記載
  • ✅ 実装要件(新バー検出、確定足、マジックナンバー等)を記載

免責事項

本EAは自動生成された検証用コードです。実運用可否はご自身で検証してください。

EA1000 一覧に戻る


関連用語

— SPONSORED —