1. MQL5の移動平均クロスとは何か
1.1 定義
【結論】
移動平均クロスとは、短期移動平均線と長期移動平均線の交差を「売買シグナル」として利用する最も基本的なトレンドフォロー手法です。
【定義】
移動平均クロスは、短期の価格平均(短期移動平均)が長期の価格平均(長期移動平均)を上抜け・下抜けするタイミングを根拠に、売買の方向を判断するロジックです。
この手法は、裁量判断を排除しやすく、EA(自動売買)のエントリー条件として非常に広く使われています。特にMQL5では、iMA関数とCopyBufferを組み合わせることで簡単に実装できるため、初心者が最初に学ぶべき戦略の一つです。
重要なポイントは以下の通りです。
- 上抜け(ゴールデンクロス)→ 買いシグナル
- 下抜け(デッドクロス)→ 売りシグナル
- トレンドが発生した後に追従する「遅行型」手法
この「遅れて入る」という特性により、ノイズ(無意味な価格変動)をある程度回避できる一方、エントリーが遅れるという弱点も持ちます。
1.2 用語整理(初心者向け)
【結論】
移動平均クロスを理解するには、「短期・長期」と「クロスの意味」を押さえるだけで十分です。
まず、移動平均(Moving Average)とは「一定期間の平均価格」です。
これにより、価格のブレ(ノイズ)をならして、トレンド方向を見やすくします。
主要な用語は以下の通りです。
- 短期移動平均:直近の価格を強く反映(例:期間5〜20)
- 長期移動平均:過去を含めた平均(例:期間50〜200)
- ゴールデンクロス:短期が長期を上抜け → 上昇トレンド開始の可能性
- デッドクロス:短期が長期を下抜け → 下降トレンド開始の可能性
なぜこれが重要かというと、
短期=「今の市場の意思」、長期=「市場全体の平均評価」を表すためです。
つまり、
- 短期 > 長期 → 市場が強気に転じた
- 短期 < 長期 → 市場が弱気に転じた
という構造になります。
注意点として、以下は初心者がよく混乱します。
- 「クロス=必ず勝てる」ではない
- レンジ相場(横ばい)ではダマシが頻発する
- 期間設定によって挙動が大きく変わる
1.3 何が解決できるか
【結論】
移動平均クロスは「トレンド検出の自動化」と「再現性のある売買ルール構築」を同時に実現できます。
この手法を使うことで、以下の課題を解決できます。
1. 裁量のブレを排除できる
人間の判断は感情や状況に左右されますが、クロスは完全に数値ベースです。
- 判断基準が明確
- 誰が実装しても同じ結果になる
- バックテスト可能(再現性あり)
2. トレンドに乗る戦略が作れる
為替市場(Forex)はトレンドが発生すると長く続く傾向があります。
移動平均クロスは、その「流れに乗る」ための基本ロジックです。
3. EA設計の土台になる
実務では単体ではなく、以下と組み合わせて使います。
- スプレッドフィルター(spread拡大回避)
- スリッページ対策(slippage)
- 約定条件(execution制御)
- ATRやRSIによるフィルター
つまり、移動平均クロスは「完成された手法」ではなく、
EA設計のコア部品(シグナル生成エンジン)として使うのが正しい位置づけです。
よくある失敗として、
- クロスだけで勝とうとする
- フィルターを入れない
- ロット管理を軽視する
があります。これらは実運用で破綻する原因になります。
2. MQL5で移動平均クロスを実装する手順
【結論】
移動平均クロスの実装は「移動平均取得 → データ取得 → クロス判定 → 注文」の4ステップで構成されます。
この流れをそのままコード化すれば、EAとして動作します。

2.1 実装全体フロー
【結論】
処理の順序を固定すれば、どの環境でも再現可能なロジックになります。
実装手順は以下の通りです。
iMAで短期・長期の移動平均ハンドルを作成CopyBufferで最新データを取得- 過去と現在の値を比較
- クロスを判定
OrderSendで売買実行
この順序を崩すと、バグや誤判定が発生しやすくなります。
2.2 iMAで移動平均を取得する
【結論】
まずは移動平均の「ハンドル(識別子)」を生成します。
int ma_short;
int ma_long;
ma_short = iMA(_Symbol, _Period, 20, 0, MODE_EMA, PRICE_CLOSE);
ma_long = iMA(_Symbol, _Period, 50, 0, MODE_EMA, PRICE_CLOSE);
ポイント:
20と50は期間(短期・長期)MODE_EMAは指数移動平均(反応が速い)_Symbolは通貨ペア(例:EURUSD)_Periodは時間足
よくある失敗:
- ハンドル生成に失敗してもチェックしない
→INVALID_HANDLE確認が必要
2.3 CopyBufferでデータ取得
【結論】
クロス判定には「現在と1本前」の値が必須です。
double ma_s[2];
double ma_l[2];
CopyBuffer(ma_short, 0, 0, 2, ma_s);
CopyBuffer(ma_long, 0, 0, 2, ma_l);
重要ポイント:
[0]=現在バー[1]=1本前のバー- 配列サイズは必ず2以上
注意点:
ArraySetAsSeriesを使うかどうかでインデックスが逆になる- CopyBufferの戻り値チェックを怠ると不正データになる
if(CopyBuffer(ma_short,0,0,2,ma_s) <= 0) return;
2.4 クロス判定ロジック
【結論】
「前回」と「今回」の関係を比較することでクロスを検出します。
bool golden_cross = (ma_s[1] < ma_l[1]) && (ma_s[0] > ma_l[0]);
bool dead_cross = (ma_s[1] > ma_l[1]) && (ma_s[0] < ma_l[0]);
意味:
- ゴールデンクロス:下→上に抜けた
- デッドクロス:上→下に抜けた
よくあるミス:
- 「現在だけ」で判定する → 誤判定になる
- 同値(=)ケースを考慮しない
2.5 売買処理(OrderSend)
【結論】
クロス検出後は、条件に応じて注文を出します。
#include <Trade/Trade.mqh>
CTrade trade;
if(golden_cross)
{
trade.Buy(0.1, _Symbol);
}
else if(dead_cross)
{
trade.Sell(0.1, _Symbol);
}
実務で必須の考慮:
- spread(スプレッド)が広いときは回避
- slippage(スリッページ)対策
- execution条件(成行 / 指値)
- ポジション重複防止
例:
if(PositionSelect(_Symbol)) return; // 重複防止
2.6 最小EAコード例(実務レベル)
【結論】
以下のコードで「動く最小構成」が完成します。
#include <Trade/Trade.mqh>
CTrade trade;
int ma_short, ma_long;
int OnInit()
{
ma_short = iMA(_Symbol, _Period, 20, 0, MODE_EMA, PRICE_CLOSE);
ma_long = iMA(_Symbol, _Period, 50, 0, MODE_EMA, PRICE_CLOSE);
if(ma_short == INVALID_HANDLE || ma_long == INVALID_HANDLE)
return(INIT_FAILED);
return(INIT_SUCCEEDED);
}
void OnTick()
{
double ma_s[2], ma_l[2];
if(CopyBuffer(ma_short,0,0,2,ma_s) <= 0) return;
if(CopyBuffer(ma_long,0,0,2,ma_l) <= 0) return;
bool golden_cross = (ma_s[1] < ma_l[1]) && (ma_s[0] > ma_l[0]);
bool dead_cross = (ma_s[1] > ma_l[1]) && (ma_s[0] < ma_l[0]);
if(PositionSelect(_Symbol)) return;
if(golden_cross)
trade.Buy(0.1,_Symbol);
else if(dead_cross)
trade.Sell(0.1,_Symbol);
}
よくある失敗(重要)
- ロット制約(min/max/step)未対応 → Invalid volume
- 証拠金不足チェックなし → not enough money
- 約定拒否(off quotes)未対応
- VPS遅延によるexecutionズレ
これらはバックテストでは見えないが、実運用で致命傷になります。
3. なぜ移動平均クロスが機能するのか
【結論】
移動平均クロスは「トレンド発生後に追従する」ことでノイズを排除し、一定の確率で優位性を持つ設計です。
ただし本質は“勝つ手法”ではなく「トレンドを機械的に検出するフィルター」です。
3.1 トレンドフォロー戦略の本質
【結論】
為替市場は「レンジ→トレンド→レンジ」を繰り返すため、トレンド区間だけを抜き取る戦略が有効です。
市場構造として、以下の特徴があります。
- 多くの時間はレンジ(方向感なし)
- 一部の時間だけ強いトレンドが発生
- 利益の大半はトレンド期間で決まる
移動平均クロスは、この中で「トレンド発生後」を狙う設計です。
なぜ“後追い”するのかというと、
- 初動はノイズが多く誤判定しやすい
- 確認後に入る方が再現性が高い
という理由です。
重要ポイント:
- 早く入るほど利益は増えるが、誤判定も増える
- 遅く入るほど安定するが、利益は削られる
移動平均クロスはこのトレードオフの中で「安定側」に寄せた手法です。
3.2 なぜクロスでシグナルになるのか
【結論】
短期と長期の関係が逆転する瞬間=市場参加者の評価が変わったポイントだからです。
構造的には以下です。
- 短期移動平均:現在の価格圧力(直近の意思)
- 長期移動平均:市場全体の平均的な評価
この2つの関係が変わると、
- 上抜け → 買い圧力が平均を上回った
- 下抜け → 売り圧力が平均を下回った
という意味になります。
つまりクロスは、
「市場のバランスが崩れた瞬間」
を検出していることになります。
さらに重要なのは、
- クロス後は「同方向の注文」が増える
- 結果としてトレンドが継続しやすい
という自己強化構造です。
ただし、これは必ず成立するわけではありません。
3.3 弱点(重要)
【結論】
移動平均クロスの最大の弱点は「レンジ相場でのダマシ」と「遅延」です。
主な問題点は以下の通りです。
1. レンジ相場での誤判定
価格が横ばいの場合、
- クロスが頻発する
- シグナルが逆転し続ける
- 損失が積み重なる
これがいわゆる「ダマシ」です。
2. 遅延(ラグ)
移動平均は過去データの平均なので、
- トレンド開始後にしか反応しない
- 利益の初動を取り逃がす
という構造的制約があります。
3. execution環境の影響
実運用では以下も影響します。
- spread拡大 → エントリーコスト増加
- slippage → 想定より不利な価格で約定
- 約定拒否(off quotes)
これにより、バックテストと実運用の乖離が発生します。
実務での対策(重要)
【結論】
移動平均クロスは単体で使わず「フィルター前提」で設計します。
代表的な改善方法:
- ATRでボラティリティフィルター
- RSIで過熱状態を回避
- スプレッド条件でエントリー制限
- 上位足トレンド確認(マルチタイムフレーム)
本質は以下です。
「クロス=エントリー条件ではなく、トレンド判定条件」
この理解がないと、長期的に勝てる設計にはなりません。
4. 他の手法との比較
【結論】
移動平均クロスは「トレンド追従に強いが、レンジに弱い」という特性を持つため、他の指標(RSI・MACD・ATRなど)と役割分担して使うのが実務では前提です。単体での優位性は限定的です。
4.1 主要手法との比較(判断基準を明確化)
【結論】
各指標は「得意な相場」が異なります。選択基準を持たないと過剰最適化(過学習)に陥ります。
比較の観点は以下です。
- トレンド適性(trend following)
- レンジ適性(mean reversion)
- シグナルの早さ(遅延)
- ノイズ耐性(ダマシ耐性)
| 手法 | 特徴 | 強み | 弱点 | 向いている相場 |
|---|---|---|---|---|
| 移動平均クロス | トレンドフォロー | シンプル・再現性 | レンジに弱い・遅延あり | トレンド |
| RSI | オシレーター(過熱判断) | 逆張りが可能 | トレンドで機能低下 | レンジ |
| MACD | MAの派生(差分) | トレンド+モメンタム | 遅延あり・調整が必要 | トレンド |
| ATR | ボラティリティ指標 | ノイズ除去・損切り設計 | 単独で売買不可 | 全相場(補助) |
重要ポイント:
- 移動平均クロスは「方向」を判断
- RSIは「過熱」を判断
- ATRは「変動幅」を判断
役割が異なるため、競合ではなく「補完関係」です。
4.2 併用戦略(実務での基本設計)
【結論】
移動平均クロスは「フィルターと組み合わせることで初めて実戦レベルになります」。
代表的な組み合わせは以下です。
1. MAクロス + RSIフィルター
- 条件:クロス発生 + RSIが中立〜トレンド方向
- 目的:過熱状態でのエントリー回避
例:
- 買い:ゴールデンクロス & RSI < 70
- 売り:デッドクロス & RSI > 30
2. MAクロス + ATRフィルター
- 条件:クロス + 一定以上のボラティリティ
- 目的:レンジ回避(ダマシ削減)
例:
- ATRが一定値以上のときのみエントリー
3. MAクロス + スプレッド制御
- 条件:クロス + spreadが許容範囲内
- 目的:executionコスト最適化
double spread = SymbolInfoDouble(_Symbol, SYMBOL_SPREAD);
if(spread > 20) return; // スプレッドが広すぎる場合は回避
4. マルチタイムフレーム(MTF)
- 条件:下位足クロス + 上位足トレンド一致
- 目的:ダマシ削減・勝率向上
例:
- 1時間足でクロス
- 日足が同方向トレンド
4.3 他手法との違い(本質理解)
【結論】
移動平均クロスは「トレンド検出器」、他指標は「状態フィルター」です。
この違いを理解しないと設計を誤ります。
移動平均クロス
- 役割:方向判定(trend direction)
- 出力:買い or 売り
- 問題:ダマシが多い
RSI
- 役割:過熱・反転可能性
- 出力:買われすぎ / 売られすぎ
- 問題:トレンドで逆張りになる
ATR
- 役割:市場の活発さ(volatility)
- 出力:エントリー可否・損切り幅
- 問題:方向性なし
つまり、
- MAクロス → 「入る方向」
- RSI/ATR → 「入るかどうか」
という分離設計が重要です。
よくある失敗
【結論】
複数指標を「増やせば精度が上がる」という考えは危険です。
典型例:
- 指標を増やしすぎる → エントリーしない
- 過去データに最適化 → 将来で崩壊
- 条件が複雑すぎる → 再現性低下
実務では以下を守るべきです。
- ロジックはシンプルに保つ
- フィルターは2〜3個まで
- フォワードテストで検証
5. よくある失敗と注意点
【結論】
移動平均クロスは「実装は簡単・運用は難しい」手法です。
失敗の大半は「市場環境の誤認」「実行条件の未考慮」「資金管理不足」に集中します。
5.1 レンジ相場によるダマシ
【結論】
横ばい(レンジ)相場ではクロスが頻発し、連続損失が発生しやすくなります。
原因:
- 価格が上下に振れるだけで方向性がない
- 短期と長期の関係が頻繁に入れ替わる
- トレンド前提のロジックが崩れる
典型パターン:
- ゴールデンクロス → すぐ反転 → 損切り
- デッドクロス → すぐ反転 → 損切り
対策:
- ATRでボラティリティフィルターを追加
- トレンド強度(例:ADX)で条件制限
- 上位足トレンドと一致した場合のみエントリー
重要ポイント:
- 「クロスが出た=エントリー」ではない
- 「クロス+環境条件」で初めて成立する
5.2 パラメータ過剰最適化(過学習)
【結論】
バックテストで最適化しすぎると、実運用で再現しません。
よくある誤り:
- 期間を細かく調整(例:19と21の違い)
- 特定期間に最適化
- 利益最大化だけを追う
結果:
- 過去データ専用のロジックになる
- 将来で崩壊する
対策:
- パラメータは大まかに設定(例:20/50など)
- フォワードテスト(未来データ)で検証
- walk-forward分析を実施
重要ポイント:
- 「最適」より「頑健性(robustness)」を優先
- シンプルな方が長期的に安定する
5.3 実行環境の問題(executionリスク)
【結論】
バックテストでは見えない「実行コスト」が利益を削ります。
主な要因:
- spread(スプレッド)拡大
- slippage(スリッページ)
- 約定拒否(off quotes)
- レイテンシ(遅延)
典型例:
- 指標発表時にspread急拡大
- 想定より不利な価格で約定
- VPS遅延でシグナル遅れ
対策:
double spread = SymbolInfoDouble(_Symbol, SYMBOL_SPREAD);
if(spread > 20) return; // スプレッド制限
if(!trade.Buy(0.1,_Symbol))
{
Print("Order failed: ", GetLastError());
}
重要ポイント:
- 「エントリー条件」だけでなく「実行条件」も設計に含める
- ブローカーや口座タイプ(ECN/STD)で結果が変わる
5.4 ロット・証拠金管理の不備
【結論】
ロット管理を誤ると、どんなロジックでも破綻します。
よくある問題:
- ロット固定(リスク無視)
- 証拠金不足で注文失敗
- ロットステップ未対応(Invalid volume)
例:
double minLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
double step = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
double lot = 0.1;
lot = MathFloor(lot / step) * step;
lot = MathMax(lot, minLot);
対策:
- 1トレードあたりのリスクを固定(例:口座の1%)
- OrderCalcMarginで証拠金チェック
- SYMBOL_VOLUME_STEPで正規化
重要ポイント:
- ロット管理=リスク管理の中核
- エントリー精度より優先度が高い
5.5 ポジション管理の欠如
【結論】
ポジション制御がないと「無限エントリー」になり破綻します。
典型ミス:
- クロスごとに新規エントリー
- 同方向ポジションが増え続ける
対策:
if(PositionSelect(_Symbol)) return; // 既存ポジションがあれば新規禁止
発展:
- 最大ポジション数制限
- ピラミッディング(追加エントリー)制御
- トレーリングストップ
まとめ的な重要ポイント(短文化)
- クロス単体では勝てない
- レンジ対策が必須
- executionを無視すると崩壊
- ロット管理が最重要
6. 実務での使いどころ
【結論】
移動平均クロスは「トレンドが出ている、または出始めた相場」で使うと期待値が安定します。
逆にレンジや高コスト環境では使用を控えるのが合理的です。
6.1 有効な相場環境
【結論】
「方向性が明確で、ボラティリティが十分にある相場」で最も機能します。
具体的には以下の条件です。
- 上位足(例:日足・4時間足)でトレンドが出ている
- 価格が移動平均から一方向に乖離している
- ATRが一定以上(市場が動いている)
実務的な判断基準:
- 上位足の移動平均が右肩上がり/右肩下がり
- 高値・安値が更新されている
- スプレッドが安定している(低コスト)
EAに組み込む例:
double atr[];
CopyBuffer(iATR(_Symbol,_Period,14),0,0,1,atr);
if(atr[0] < 0.0005) return; // ボラティリティ不足は回避
なぜ有効か:
- トレンドが継続しやすい
- クロス後も同方向に伸びやすい
- ダマシが相対的に減る
6.2 向いていないケース
【結論】
「方向性がない相場」と「コストが高い環境」では、移動平均クロスは機能しません。
代表的なNGケース:
1. レンジ市場
- 価格が一定範囲で上下するだけ
- クロスが頻発 → 連続損失
2. スキャルピング(超短期)
- クロスは遅延がある
- entry timingが遅れる
3. 高コスト環境
- スプレッド拡大(spread widening)
- スリッページ増加(slippage)
- execution不安定
例:
double spread = SymbolInfoDouble(_Symbol, SYMBOL_SPREAD);
if(spread > 30) return; // コストが高いときは回避
4. 重要指標発表前後
- 急激な価格変動
- 約定拒否(off quotes)
- 想定外の価格でexecution
重要ポイント:
- 「使わない判断」が利益を守る
- 取引しない=戦略の一部
6.3 EA設計への組み込み例
【結論】
移動平均クロスは「単独戦略」ではなく「モジュール」として使うのが最適です。
実務での主な使い方:
1. エントリー条件として使用
- クロス発生 → エントリー
- 最もシンプルな構成
2. トレンドフィルターとして使用
- 上位足が上昇 → 買いのみ許可
- 下位足でエントリー精度向上
3. ポジション追加(ピラミッディング)
- トレンド継続時に追加エントリー
- 利益拡大を狙う
4. exit条件として使用
- 逆クロスで決済
- トレンド終了のシグナル
実務設計の基本パターン
【結論】
「方向判定+フィルター+実行条件」の3層構造が安定します。
例:
- 方向判定:移動平均クロス
- フィルター:ATR / RSI
- 実行条件:spread / slippage / execution
擬似コード:
if(trend_is_up && golden_cross && spread_ok && atr_ok)
{
trade.Buy(lot,_Symbol);
}
重要ポイント(短文化)
- トレンド相場で使う
- レンジでは使わない
- executionコストを必ず考慮
- 「使う場面」を設計することが最重要
7. 発展:精度を上げる改良手法
【結論】
移動平均クロスはそのまま使うと不安定ですが、「フィルター追加・時間軸統合・指標選択」を行うことで実運用レベルに改善できます。
7.1 フィルター追加(ダマシ削減)
【結論】
最も効果が高い改善は「無効な相場を除外すること」です。
移動平均クロスの弱点はレンジ相場です。
そのため、エントリー前に条件を追加します。
代表的なフィルター
- ATR(ボラティリティ)
- RSI(過熱状態)
- スプレッド制御(コスト管理)
実装例(ATRフィルター)
int atr_handle = iATR(_Symbol, _Period, 14);
double atr[1];
if(CopyBuffer(atr_handle,0,0,1,atr) <= 0) return;
if(atr[0] < 0.0005) return; // ボラティリティ不足は回避
実装例(RSIフィルター)
int rsi_handle = iRSI(_Symbol, _Period, 14, PRICE_CLOSE);
double rsi[1];
CopyBuffer(rsi_handle,0,0,1,rsi);
if(golden_cross && rsi[0] > 70) return; // 買われすぎ回避
重要ポイント:
- フィルターは「増やしすぎない」
- 2〜3個に絞る
- 意味が異なる指標を選ぶ(方向・過熱・ボラ)
7.2 マルチタイムフレーム(MTF)
【結論】
上位足のトレンドと一致させることで、勝率を大きく改善できます。
考え方:
- 上位足 → 大きな流れ(トレンド)
- 下位足 → エントリータイミング
具体例
- 日足:上昇トレンド
- 1時間足:ゴールデンクロス → 買い
実装イメージ
int ma_daily = iMA(_Symbol, PERIOD_D1, 50, 0, MODE_EMA, PRICE_CLOSE);
double ma_d[1];
CopyBuffer(ma_daily,0,0,1,ma_d);
double price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
bool trend_up = price > ma_d[0];
ポイント:
- 上位足に逆らわない
- クロスのダマシを減らす
- トレンドフォローとしての一貫性を保つ
7.3 移動平均の種類選択(遅延改善)
【結論】
SMAよりEMAを使うことで、シグナルの遅延を軽減できます。
代表的な違い:
| 種類 | 特徴 |
|---|---|
| SMA(単純移動平均) | 安定・遅い |
| EMA(指数移動平均) | 反応が速い |
| LWMA | より敏感 |
実務判断:
- スイングトレード → SMAでも可
- 短期トレード → EMA推奨
実装例(EMA)
iMA(_Symbol, _Period, 20, 0, MODE_EMA, PRICE_CLOSE);
注意点:
- 反応が速い=ダマシも増える
- フィルターとの併用が前提
7.4 エントリー条件の強化
【結論】
クロス単体ではなく「条件の重なり」で精度を上げます。
例:
- クロス発生
- 上位足トレンド一致
- ATR条件クリア
- スプレッド正常
擬似コード:
if(golden_cross && trend_up && atr_ok && spread_ok)
{
trade.Buy(lot,_Symbol);
}
重要:
- 条件は「役割ごとに分ける」
- 同じ意味の条件を重ねない
7.5 exit戦略の改善
【結論】
利益を伸ばすには「エントリーより出口設計」が重要です。
主な方法:
- 逆クロスで決済
- トレーリングストップ
- ATRベースの損切り
例:
double stop_loss = Bid - atr[0] * 2;
重要ポイント:
- 損切りを必ず設定
- 利益を伸ばす設計が必要
- exit設計で収益が決まる
重要ポイント(短文化)
- クロス単体では不十分
- フィルターで「使う場面」を限定
- 上位足との一致が最重要
- exit設計が収益を左右する
8. FAQ(よくある質問)
【結論】
移動平均クロスは「使い方次第で結果が大きく変わる手法」です。
誤解されやすいポイントを整理しておくことで、無駄な試行錯誤を減らせます。
8.1 移動平均クロスは本当に勝てる手法ですか?
【結論】
単体では安定しませんが、トレンド相場では有効性があります。
理由:
- トレンドが続く局面では利益を伸ばしやすい
- ただしレンジでは損失が積み重なる
実務では、
- フィルター(ATR / RSI)
- execution条件(spread / slippage)
- 資金管理
と組み合わせて初めて成立します。
8.2 SMAとEMAはどちらを使うべきですか?
【結論】
短期トレードならEMA、安定重視ならSMAが適しています。
違い:
- EMA:反応が速い(シグナル早い)
- SMA:滑らか(ノイズ耐性あり)
注意点:
- EMAはダマシが増えやすい
- SMAはエントリーが遅れる
8.3 最適な移動平均の期間はありますか?
【結論】
固定の最適解は存在せず、相場や戦略によって変わります。
一般的な例:
- 短期:5〜20
- 長期:50〜200
重要なのは、
- 細かく最適化しすぎない
- 大まかな設定で安定性を重視
8.4 ダマシを減らすにはどうすればいいですか?
【結論】
「使う場面を制限する」ことが最も効果的です。
具体策:
- ATRでボラティリティ確認
- RSIで過熱回避
- 上位足トレンドと一致
ポイント:
- 条件を増やすのではなく「無効な相場を除外」する
8.5 EAにそのまま組み込めますか?
【結論】
可能ですが、そのままでは実運用に耐えません。
最低限必要な要素:
- ロット管理(risk per trade)
- スプレッド制御
- 約定エラーハンドリング
if(!trade.Buy(lot,_Symbol))
{
Print("Error:", GetLastError());
}
8.6 スキャルピングに向いていますか?
【結論】
基本的には向いていません。
理由:
- クロスは遅延がある
- 短期ノイズに弱い
- executionコストの影響が大きい
スキャルピングでは、
- ティックベース
- 板情報
- 高速execution
が重要になります。
8.7 バックテストで勝っても実運用で負けるのはなぜですか?
【結論】
主な原因は「過学習」と「execution差」です。
具体例:
- スプレッドが固定でない
- スリッページが再現されない
- 約定拒否が考慮されていない
対策:
- フォワードテストを実施
- VPS環境で検証
- 現実のコストを反映
8.8 どの通貨ペアに向いていますか?
【結論】
トレンドが出やすく、流動性の高い通貨ペアが適しています。
例:
- EURUSD
- USDJPY
- GBPUSD
理由:
- スプレッドが安定
- executionが安定
- トレンドが比較的明確
重要ポイント(短文化)
- クロス単体では不十分
- フィルター前提で設計する
- executionとコストを必ず考慮
- 検証はバックテスト+フォワード
9. まとめ
【結論】
移動平均クロスは「最もシンプルなトレンド検出ロジック」であり、単体では不十分だが、適切なフィルターと組み合わせることで実運用レベルの戦略に発展します。
本記事の要点:
- 移動平均クロス=短期と長期の関係変化を利用したトレンド判定
- シンプルで再現性が高く、EAの基礎ロジックとして最適
- ただしレンジ相場ではダマシが多く、そのままでは不安定
実務での重要ポイント:
- 「クロス=エントリー」ではなく「クロス=方向判定」と考える
- ATR・RSI・スプレッドなどのフィルターと組み合わせる
- execution(約定条件)とコスト(spread / slippage)を必ず考慮する
- ロット管理と証拠金管理を最優先に設計する
推奨される基本構造:
- 方向判定:移動平均クロス
- フィルター:ATR / RSI / 上位足トレンド
- 実行条件:spread / slippage / execution
- リスク管理:ロット・ドローダウン制御
短文化:
- クロスは「入口」ではなく「判断材料」
- フィルターなしでは期待値が安定しない
- exit設計と資金管理が収益を決める
次に学ぶべき内容:
- ロットサイズ計算(position sizing)
- ドローダウン制御(drawdown control)
- エクイティ保護(equity protection)
- フォワードテストと最適化手法
これらを組み合わせることで、単なるロジックから「実運用可能なEA設計」に進化します。