Web Lukes
📄

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

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

「EAを作りたいけど、プログラミングがわからない...」 「変数?関数?if文?何それおいしいの?」

大丈夫です。この記事を読めば、MQL4でEAを書くために必要な基礎がわかります。

プログラミングって聞くと難しそうですが、実は日常生活でやってることと同じなんです。料理のレシピを書くようなもの。「卵を割る」「フライパンで焼く」「皿に盛る」という手順を、コンピュータがわかる言葉で書くだけ。

この記事で学べること

  1. 変数 - データを入れる箱
  2. データ型 - 箱の種類
  3. if文 - 「もし〜なら」の条件分岐
  4. for文 - 繰り返し処理
  5. 関数 - 処理のまとまり
  6. MQL4の組み込み機能 - すぐ使える便利機能

1. 変数 - データを入れる「箱」

変数って何?

変数はデータを入れておく箱です。

日常生活で例えると:

  • 「財布」= お金を入れる箱
  • 「冷蔵庫」= 食べ物を入れる箱
  • 「本棚」= 本を入れる箱

プログラミングでも同じように、データを入れる箱を作って名前をつけます。

MQL4
int age = 30; // 「age」という箱に「30」を入れる
double price = 149.50; // 「price」という箱に「149.50」を入れる
string name = "太郎"; // 「name」という箱に「太郎」を入れる

なぜ変数を使うの?

変数を使わないと、同じ値を何度も書かないといけません。

MQL4
// 変数を使わない場合(面倒...)
Print("現在価格は149.50です");
Print("149.50で買います");
Print("149.50を記録しました");
// 変数を使う場合(楽!)
double price = 149.50;
Print("現在価格は", price, "です");
Print(price, "で買います");
Print(price, "を記録しました");

価格が変わっても、1箇所直すだけでOKになります。

2. データ型 - 箱の「種類」

箱には種類があります。お金を入れる財布に本は入れませんよね?

MQL4でよく使うデータ型は4つ:

データ型入れられるもの例
int整数(小数点なし)1, 100, -50
double小数(小数点あり)149.50, 3.14
string文字列"こんにちは", "USDJPY"
booltrue か falsetrue, false

使い分けの例

MQL4
int lotCount = 3; // 注文回数(整数)
double price = 149.523; // 価格(小数)
string symbol = "USDJPY"; // 通貨ペア(文字)
bool isOpen = true; // ポジションがあるか(はい/いいえ)

よくある間違い

MQL4
// ❌ 間違い:整数型に小数を入れようとしている
int price = 149.50; // 149になってしまう!
// ✅ 正しい:小数にはdoubleを使う
double price = 149.50;

3. if文 - 「もし〜なら」

if文って何?

if文は条件によって処理を変える仕組みです。

日常生活で例えると:

  • 「もし雨が降ったら、傘を持っていく」
  • 「もしお腹が空いたら、ご飯を食べる」
MQL4
if(雨が降っている)
{
傘を持っていく;
}

MQL4での書き方

MQL4
double price = 150.00;
if(price > 149.00)
{
Print("価格が149円を超えました!");
}

if-else: 「もし〜なら、そうでなければ」

MQL4
double price = 148.00;
if(price > 149.00)
{
Print("高い!売りを検討");
}
else
{
Print("まだ安い。様子見");
}

if-else if-else: 複数の条件

MQL4
double price = 150.00;
if(price > 155.00)
{
Print("かなり高い!");
}
else if(price > 150.00)
{
Print("やや高い");
}
else if(price > 145.00)
{
Print("普通");
}
else
{
Print("安い!");
}

条件の書き方

記号意味例
>より大きいprice > 100
<より小さいprice < 100
>=以上price >= 100
<=以下price <= 100
==等しいprice == 100
!=等しくないprice != 100

注意: 「等しい」は = じゃなくて ==(2つ)です!

MQL4
// ❌ 間違い
if(price = 100) // これは「代入」になってしまう
// ✅ 正しい
if(price == 100) // これが「比較」

複数の条件を組み合わせる

MQL4
// AND(両方満たす): &&
if(price > 149.00 && price < 151.00)
{
Print("149〜151の範囲内");
}
// OR(どちらか満たす): ||
if(price < 145.00 || price > 155.00)
{
Print("145未満か155超過");
}

4. for文 - 繰り返し処理

for文って何?

for文は同じ処理を繰り返す仕組みです。

日常で例えると:

  • 「腕立て伏せを10回繰り返す」
  • 「階段を5段上る」
MQL4
for(int i = 0; i < 10; i++)
{
Print("腕立て ", i+1, "回目!");
}

出力:

Code
腕立て 1回目!
腕立て 2回目!
...
腕立て 10回目!

for文の構造

MQL4
for(初期値; 条件; 増加)
{
繰り返す処理;
}
  • 初期値: カウンターの開始値(int i = 0)
  • 条件: 繰り返しを続ける条件(i < 10)
  • 増加: 1回ごとにカウンターを増やす(i++)

EAでの使用例

過去10本分のローソク足の終値を表示する:

MQL4
for(int i = 0; i < 10; i++)
{
double closePrice = iClose(NULL, 0, i);
Print(i, "本前の終値: ", closePrice);
}

5. 関数 - 処理のまとまり

関数って何?

関数は処理をまとめて名前をつけたものです。

日常で例えると:

  • 「朝の準備」= 起きる→顔洗う→着替える→朝食
  • 「料理する」= 材料切る→炒める→味付け→盛り付け

一連の処理をまとめて「朝の準備」と呼ぶのと同じです。

関数の作り方

MQL4
// 関数の定義(作る)
void SayHello()
{
Print("こんにちは!");
Print("今日もトレード頑張りましょう!");
}
// 関数の呼び出し(使う)
void OnTick()
{
SayHello(); // これで上の2行が実行される
}

引数(パラメータ)を受け取る関数

MQL4
// 名前を受け取って挨拶する関数
void Greet(string name)
{
Print("こんにちは、", name, "さん!");
}
// 使い方
Greet("太郎"); // → こんにちは、太郎さん!
Greet("花子"); // → こんにちは、花子さん!

値を返す関数

MQL4
// スプレッドをpipsで計算して返す関数
double GetSpreadPips()
{
double spread = (Ask - Bid) * 10000;
return spread; // 計算結果を返す
}
// 使い方
void OnTick()
{
double spread = GetSpreadPips();
Print("現在のスプレッド: ", spread, "pips");
}

voidとは?

voidは「何も返さない」という意味です。

  • void = 処理するだけ、結果は返さない
  • double = 計算して小数の結果を返す
  • int = 計算して整数の結果を返す
  • bool = true/falseを返す
  • string = 文字列を返す

6. MQL4の組み込み機能

MQL4には、最初から使える便利な機能がたくさんあります。

よく使う値(変数)

名前意味例
Ask現在の買値149.523
Bid現在の売値149.520
Point最小価格単位0.001
Digits小数点以下の桁数3
MQL4
void OnTick()
{
Print("買値: ", Ask);
Print("売値: ", Bid);
Print("スプレッド: ", (Ask - Bid) / Point, "ポイント");
}

よく使う関数

関数意味使い方
Print()ログに出力Print("Hello");
Symbol()現在の通貨ペアSymbol() → "USDJPY"
Period()現在の時間足Period() → 60(1時間足)
iClose()終値を取得iClose(NULL, 0, 1)
iOpen()始値を取得iOpen(NULL, 0, 1)
iHigh()高値を取得iHigh(NULL, 0, 1)
iLow()安値を取得iLow(NULL, 0, 1)
iMA()移動平均を取得後述

iClose(), iOpen()などの引数

MQL4
iClose(通貨ペア, 時間足, 何本前のローソク足か);
// 例
iClose(NULL, 0, 0); // 現在の足の終値(NULL=現在のチャート)
iClose(NULL, 0, 1); // 1本前の足の終値
iClose("USDJPY", 60, 5); // USDJPYの1時間足で5本前の終値

移動平均線を取得する

MQL4
iMA(通貨ペア, 時間足, 期間, シフト, 種類, 適用価格, 何本前か);
// 例:20期間の単純移動平均(現在の値)
double ma20 = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
// 例:5期間の指数移動平均(1本前)
double ema5 = iMA(NULL, 0, 5, 0, MODE_EMA, PRICE_CLOSE, 1);

実践:学んだことを組み合わせる

これまで学んだことを使って、「スプレッドが狭い時に移動平均を表示する」EAを作ってみましょう。

MQL4
//+------------------------------------------------------------------+
//| 学習用EA |
//+------------------------------------------------------------------+
#property strict
// スプレッドを計算する関数
double GetSpreadPips()
{
return (Ask - Bid) * 10000;
}
// メイン処理
void OnTick()
{
// 変数を使う
double spread = GetSpreadPips();
double ma20 = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
double currentPrice = Bid;
// if文で条件分岐
if(spread <= 2.0)
{
Print("=== スプレッド良好!===");
Print("スプレッド: ", spread, "pips");
Print("現在価格: ", currentPrice);
Print("20MA: ", ma20);
// 価格とMAの位置関係をチェック
if(currentPrice > ma20)
{
Print("→ 価格がMAより上(上昇トレンド?)");
}
else
{
Print("→ 価格がMAより下(下降トレンド?)");
}
}
}

よくあるエラーと対処法

「';' expected」

原因: 行末のセミコロン忘れ

MQL4
// ❌
int price = 100
// ✅
int price = 100;

「'〇〇' - undeclared identifier」

原因: 変数を宣言せずに使おうとしている

MQL4
// ❌
price = 100; // priceが宣言されていない
// ✅
double price = 100; // 先に宣言する

「'=' - l-value required」

原因: 比較の == を = と書いている

MQL4
// ❌
if(price = 100)
// ✅
if(price == 100)

まとめ

概念一言で日常の例え
変数データを入れる箱財布、冷蔵庫
データ型箱の種類財布にはお金、冷蔵庫には食べ物
if文もし〜なら雨なら傘を持つ
for文繰り返し腕立て10回
関数処理のまとまり「朝の準備」

これでMQL4の基礎文法は理解できました!

次は実際に、この知識を使って移動平均線クロスで売買する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
📄

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

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

FX自動売買2026/1/18
📄

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

移動平均線のゴールデンクロス・デッドクロスで自動売買するEAを作ります。コード全文公開、コピペですぐ動く!初心者でも理解できるよう1行ずつ解説します。

FX自動売買2025/12/13
📄

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

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

FX自動売買2025/12/13
📄

😤「聖杯見つけた!」って叫ぶ前にフォワードテスト出してくれ ― 驚き屋に煽られる初心者への警告

「この手法ヤバい!」と騒ぐ上級者トレーダーたち。でもフォワードテストは出さない。バックテストだけで「勝てる」と言い切る無責任さと、それに乗せられて損する初心者たち。25変数PCAで実際に検証した経験から、驚き屋文化の問題を斬る。

FX自動売買2026/3/22
📄

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

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

FX自動売買2026/1/1