Web Lukes
📄

【コピペOK】移動平均線クロスEAの作り方|ゴールデンクロス・デッドクロスで自動売買

公開日: 2025/12/13更新日: 2025/12/13

「移動平均線のクロスで売買したいけど、ずっとチャート見てられない...」

そんなあなたのために、ゴールデンクロスで買い、デッドクロスで売るEAを作ります。

この記事のコードはコピペでそのまま動きます。まずは動かしてみて、そのあと中身を理解していきましょう。

移動平均線クロス戦略とは?

超有名な王道戦略です。

  • ゴールデンクロス:短期MAが長期MAを下から上に突き抜ける → 買いサイン
  • デッドクロス:短期MAが長期MAを上から下に突き抜ける → 売りサイン

シンプルだけど、トレンドフォローの基本中の基本。これを自動化します。

完成コード(コピペOK)

まずは完成版コードです。MetaEditorに貼り付けて、F7でコンパイルすれば動きます。

MQL4
//+------------------------------------------------------------------+
//| MA Cross EA - 移動平均線クロスで自動売買 |
//+------------------------------------------------------------------+
#property copyright "Your Name"
#property version "1.00"
#property strict
//--- 入力パラメータ
input int FastMA_Period = 5; // 短期MA期間
input int SlowMA_Period = 20; // 長期MA期間
input double LotSize = 0.01; // ロット数
input int StopLoss = 50; // 損切り(pips)
input int TakeProfit = 100; // 利確(pips)
input int MagicNumber = 12345; // マジックナンバー
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
Print("MA Cross EA 起動!");
Print("短期MA: ", FastMA_Period, " / 長期MA: ", SlowMA_Period);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
// 既存ポジションがあれば何もしない(1ポジション限定)
if(CountMyPositions() > 0)
return;
// 移動平均線の値を取得
double fastMA_current = iMA(NULL, 0, FastMA_Period, 0, MODE_SMA, PRICE_CLOSE, 0);
double fastMA_prev = iMA(NULL, 0, FastMA_Period, 0, MODE_SMA, PRICE_CLOSE, 1);
double slowMA_current = iMA(NULL, 0, SlowMA_Period, 0, MODE_SMA, PRICE_CLOSE, 0);
double slowMA_prev = iMA(NULL, 0, SlowMA_Period, 0, MODE_SMA, PRICE_CLOSE, 1);
// ゴールデンクロス判定(短期MAが長期MAを下から上に突き抜けた)
if(fastMA_prev < slowMA_prev && fastMA_current > slowMA_current)
{
Print("★ゴールデンクロス検出!買いエントリー");
OpenBuy();
}
// デッドクロス判定(短期MAが長期MAを上から下に突き抜けた)
if(fastMA_prev > slowMA_prev && fastMA_current < slowMA_current)
{
Print("★デッドクロス検出!売りエントリー");
OpenSell();
}
}
//+------------------------------------------------------------------+
//| 買い注文を出す |
//+------------------------------------------------------------------+
void OpenBuy()
{
double sl = Ask - StopLoss * Point * 10;
double tp = Ask + TakeProfit * Point * 10;
int ticket = OrderSend(
Symbol(), // 通貨ペア
OP_BUY, // 買い注文
LotSize, // ロット数
Ask, // 買値
3, // スリッページ
sl, // 損切り
tp, // 利確
"MA Cross Buy", // コメント
MagicNumber, // マジックナンバー
0, // 有効期限
clrGreen // 矢印の色
);
if(ticket < 0)
Print("買い注文エラー: ", GetLastError());
else
Print("買い注文成功!チケット: ", ticket);
}
//+------------------------------------------------------------------+
//| 売り注文を出す |
//+------------------------------------------------------------------+
void OpenSell()
{
double sl = Bid + StopLoss * Point * 10;
double tp = Bid - TakeProfit * Point * 10;
int ticket = OrderSend(
Symbol(), // 通貨ペア
OP_SELL, // 売り注文
LotSize, // ロット数
Bid, // 売値
3, // スリッページ
sl, // 損切り
tp, // 利確
"MA Cross Sell", // コメント
MagicNumber, // マジックナンバー
0, // 有効期限
clrRed // 矢印の色
);
if(ticket < 0)
Print("売り注文エラー: ", GetLastError());
else
Print("売り注文成功!チケット: ", ticket);
}
//+------------------------------------------------------------------+
//| このEAのポジション数を数える |
//+------------------------------------------------------------------+
int CountMyPositions()
{
int count = 0;
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
count++;
}
}
return count;
}
//+------------------------------------------------------------------+

動かし方

1. コードをコピー

上のコードをすべてコピーします。

2. MetaEditorで新規ファイル作成

  1. MT4でF4キー → MetaEditor起動
  2. ファイル → 新規作成 → エキスパートアドバイザ
  3. 名前を「MACrossEA」にして完了
  4. 生成されたコードを全部消して、コピーしたコードを貼り付け

3. コンパイル

F7キーを押す。「0 error(s)」と出ればOK。

4. チャートにセット

  1. MT4に戻る
  2. ナビゲーターから「MACrossEA」をチャートにドラッグ
  3. 「自動売買を許可する」にチェック
  4. OKをクリック

5. 自動売買をON

MT4上部の「自動売買」ボタンをクリックして緑色に。

これで、ゴールデンクロス/デッドクロスが発生するたびに自動で売買します!

コードを1行ずつ理解しよう

入力パラメータ部分

MQL4
input int FastMA_Period = 5; // 短期MA期間
input int SlowMA_Period = 20; // 長期MA期間
input double LotSize = 0.01; // ロット数
input int StopLoss = 50; // 損切り(pips)
input int TakeProfit = 100; // 利確(pips)
input int MagicNumber = 12345; // マジックナンバー

inputをつけると、EAをチャートにセットする時に画面から変更できるパラメータになります。

  • FastMA_Period: 短期移動平均の期間(デフォルト5)
  • SlowMA_Period: 長期移動平均の期間(デフォルト20)
  • LotSize: 1回の取引量(0.01 = 1000通貨)
  • StopLoss: 損切り幅(50pips)
  • TakeProfit: 利確幅(100pips)
  • MagicNumber: このEAの識別番号

移動平均線の取得

MQL4
double fastMA_current = iMA(NULL, 0, FastMA_Period, 0, MODE_SMA, PRICE_CLOSE, 0);
double fastMA_prev = iMA(NULL, 0, FastMA_Period, 0, MODE_SMA, PRICE_CLOSE, 1);

iMA()関数で移動平均の値を取得します。

  • 最後の数字 0 = 現在の足
  • 最後の数字 1 = 1本前の足

currentとprevを比較することで、クロスを検出します。

ゴールデンクロス判定

MQL4
if(fastMA_prev < slowMA_prev && fastMA_current > slowMA_current)

これを日本語にすると:

「1本前は短期MAが長期MAより下にあった」かつ「現在は短期MAが長期MAより上にある」

→ つまり、下から上に突き抜けた = ゴールデンクロス!

注文の出し方

MQL4
int ticket = OrderSend(
Symbol(), // 現在のチャートの通貨ペア
OP_BUY, // 買い(OP_SELLなら売り)
LotSize, // ロット数
Ask, // 価格(買いはAsk、売りはBid)
3, // スリッページ許容
sl, // 損切り価格
tp, // 利確価格
"MA Cross Buy", // 注文につけるコメント
MagicNumber, // このEAの識別子
0, // 有効期限(0=無期限)
clrGreen // チャート上の矢印の色
);

OrderSend()で注文を出します。成功するとチケット番号が返ってきます。

ポジション数のカウント

MQL4
int CountMyPositions()
{
int count = 0;
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
count++;
}
}
return count;
}

全注文をループして、このEAが出した注文だけを数えます。

  • OrderSymbol() == Symbol() : 同じ通貨ペアか?
  • OrderMagicNumber() == MagicNumber : このEAが出した注文か?

カスタマイズしてみよう

MA期間を変える

短期MA=10、長期MA=50 にしたい場合:

EAをチャートにセットする画面で、パラメータを変更するだけ!コードを書き換える必要はありません。

EMA(指数移動平均)を使う

MQL4
// MODE_SMA を MODE_EMA に変更
double fastMA_current = iMA(NULL, 0, FastMA_Period, 0, MODE_EMA, PRICE_CLOSE, 0);

エントリー時にアラートを鳴らす

MQL4
if(fastMA_prev < slowMA_prev && fastMA_current > slowMA_current)
{
Alert("ゴールデンクロス発生!"); // この行を追加
Print("★ゴールデンクロス検出!買いエントリー");
OpenBuy();
}

スプレッドが広いときはエントリーしない

MQL4
void OnTick()
{
// スプレッドチェック(3pips以上なら見送り)
double spread = (Ask - Bid) / Point / 10;
if(spread > 3.0)
{
Print("スプレッド広すぎ: ", spread, "pips スキップ");
return;
}
// 以下は同じ...
}

よくある質問

Q: エラー130が出る

A: 損切り/利確の値がおかしい。業者によって最低pips数が決まっています。StopLossとTakeProfitを大きくしてみてください。

Q: エラー131が出る

A: ロット数がおかしい。業者の最小ロット数を確認してください。0.01が最小の業者もあれば、0.1が最小の業者もあります。

Q: 全然エントリーしない

A: クロスが発生していないか、スプレッドフィルターに引っかかっている可能性。エキスパートタブのログを確認してください。

Q: 複数ポジション持ちたい

A: CountMyPositions() > 0の部分を変更:

MQL4
// 3ポジションまで持てるようにする
if(CountMyPositions() >= 3)
return;

注意点

⚠️ デモ口座で必ずテストしてください

このEAはシンプルな学習用です。実際の相場では:

  • レンジ相場でダマシが多発する
  • トレンドがないとひたすら負ける
  • スプレッドが広いとコスト負けする

まずはデモで動作確認、次にバックテストで検証してから、本番運用を検討しましょう。

次のステップ

移動平均線クロスEAが動くようになりました!

次は**RSI(相対力指数)**を使った逆張りEAに挑戦しましょう。トレンドフォロー(順張り)と逆張り、両方のパターンを知ることで、戦略の幅が広がります。

📚 次に読む記事: RSI逆張りEAを作ろう

おめでとうございます!これであなたは実際に売買するEAを作れるようになりました。ここからが本当のスタートです。いろんな戦略を試して、自分だけのEAを育てていきましょう! 🚀

🎁おすすめツール・サービス

FX自動売買VPSなら50%OFF

キャンペーンで月1,790円〜。MT4/MT5プリインストール済み、自動復旧機能付き。14日間無料お試し。

シンクラウドデスクトップ for FX
ゴトー日EAを探しているならソースコード付

4年で資金4.7倍のバックテスト実績。ソースコード付きで自由にカスタマイズ可能。

ゴトー日EA Ultimate版(3,980円)

※上記リンクにはプロモーション(広告)が含まれています

🔮
MEMBERSHIP

量子相場謀略|ホソノP

ブログでは書けない本音のトレード戦略とEA開発の裏側を公開。 データに基づいた検証で、再現性のある手法だけをお届けします。

✓EAソースコード公開
✓バックテスト生データ共有
✓リアルタイム相場分析
✓メンバー限定記事
メンバーシップに参加する※ noteアカウントで簡単登録

📚あわせて読みたい

📄

【完全初心者向け】MT4 EA(自動売買)の作り方|30分で動くEAを作ろう

MT4のEA(自動売買プログラム)を作りたいけど何から始めればいいかわからない...そんな完全初心者のあなたへ。プログラミング未経験でも30分で動くEAが作れる入門ガイドです。

FX自動売買2025/12/13
📄

【コピペOK】RSI逆張りEAの作り方|売られすぎ・買われすぎで自動売買

RSIが30以下で買い、70以上で売りという逆張りEAを作ります。移動平均線クロス(順張り)との違いも解説。コード全文公開、初心者でも理解できます。

FX自動売買2025/12/13
📄

🤖【革命】ChatGPTでEA開発!プログラミング初心者でも自動売買が作れる時代に

ChatGPTを使えばプログラミング未経験でもMT4/MT5のEA(自動売買)が作れる?実際に試した人の声と、メリット・デメリット、成功のコツをまとめました。EA開発のハードルが劇的に下がっています。

FX自動売買2026/1/18
📄

【2026年最新】シンクラウドデスクトップFXの評判と5社比較!さくら・ConoHa・ABLENET・お名前.com

シンクラウドデスクトップfor FXの評判・口コミを徹底調査。さくらVPS、ConoHa、ABLENET、お名前.comデスクトップクラウドと料金・スペック・機能を比較。FX自動売買VPS選びの決定版ガイド。

FX自動売買2026/1/1
📄

【MQL4入門】プログラミング未経験者のための基礎文法ガイド

MQL4のプログラミングを始めたいけど、変数?関数?何それ?という完全初心者向け。日常の例えを使って、EAを書くために必要な基礎文法をゼロから解説します。

FX自動売買2025/12/13
📄

【MT4バックテスト完全ガイド】EAを過去データで検証する方法

作ったEAが本当に勝てるのか?MT4のStrategy Testerを使って過去データで検証する方法を完全解説。ヒストリカルデータの取得から結果の読み方まで。

FX自動売買2025/12/13