MQL4の基礎入門
こんにちは。もるふぉと申します。外資系IT会社のプログラマです。
今まで、PHP, Ruby, Python, Java, C++, GoLang などを利用して自社、他社問わず様々な企業のソフトウェアを構築してきました。
EAは自分用のものを作成してきました。
エンジニアリングの観点から皆様のお力になれるのではないかと思いEAに関する情報発信していきます。
MetaTrader 4(MT4)は、世界中のトレーダーに広く利用されている取引プラットフォームであり、MQL4(MetaQuotes Language 4)はそのプラットフォーム上で動作するエキスパートアドバイザー(EA)やカスタムインディケータを開発するためのプログラミング言語です。この記事では、MQL4の基本的な構文やデータ型、初めてのエキスパートアドバイザーの作成方法について紹介します。
1. MQL4の概要
MQL4は、C言語に似た構文を持つ高級プログラミング言語で、トレーダーが自分の取引戦略を自動化するための強力なツールです。MT4プラットフォームに組み込まれており、エキスパートアドバイザー、カスタムインディケータ、スクリプト、ライブラリを作成できます。
エキスパートアドバイザー(EA): 自動取引プログラムで、指定されたルールに従って取引を行います。
カスタムインディケータ: 独自のテクニカル指標を作成するためのプログラムです。
スクリプト: 一度だけ実行される単発のプログラムです。
ライブラリ: 他のプログラムで使用する関数やクラスをまとめたものです。
2. MQL4の基本的な構文とデータ型
まずは、MQL4の基本的な構文とデータ型について見ていきましょう。
2.1 データ型
MQL4にはいくつかの基本的なデータ型があります。(他にもたくさんあります)
int: 整数型(例: int a = 10;)
double: 浮動小数点数型(例: double b = 1.2345;)
bool: 真偽値型(例: bool flag = true;)
string: 文字列型(例: string text = "Hello, world!";)
color: 色を表す型(例: color clr = clrRed;)
2.2 変数と定数
変数は、プログラムの中で値を保持するためのものです。
定数は、一度値を設定すると変更できないものです。
int variable = 10; // 変数
const double PI = 3.14159; // 定数
2.3 演算子
MQL4には、算術演算子、比較演算子、論理演算子などがあります。
算術演算子: `+`, `-`, `*`, `/`, `%`
比較演算子: `==`, `!=`, `<`, `>`, `<=`, `>=`
論理演算子: `&&`, `||`, `!`
2.4 制御構造
MQL4には、条件分岐やループなどの制御構造があります。
条件分岐: `if`, `else`
ループ: `for`, `while`, `do...while`
int x = 5;
if (x > 0) {
Print("x is positive");
} else {
Print("x is non-positive");
}
for (int i = 0; i < 10; i++) {
Print("i = ", i);
}
3. 初めてのエキスパートアドバイザーの作成
それでは、実際に簡単なエキスパートアドバイザーを作成してみましょう。
3.1 MT4のセットアップ
まず、MT4プラットフォームをインストールして起動します。次に、MT4のメインメニューから「ファイル」→「新規作成」を選び、「エキスパートアドバイザー」を選択します。これにより、エキスパートアドバイザーのテンプレートが作成されます。
3.2 基本的なエキスパートアドバイザー
次に、簡単なエキスパートアドバイザーを作成します。このEAは、シンプルに指定された条件が満たされたときに注文を出すものです。
//+------------------------------------------------------------------+
//| SimpleEA.mq4 |
//| Copyright 2024, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property strict
// パラメータの定義
input double Lots = 0.1;
input double StopLoss = 50;
input double TakeProfit = 50;
input int MagicNumber = 12345;
//+------------------------------------------------------------------+
//| エキスパート初期化関数 |
//+------------------------------------------------------------------+
int OnInit() {
// 初期化処理
return INIT_SUCCEEDED;
}
//+------------------------------------------------------------------+
//| エキスパートのメイン関数 |
//+------------------------------------------------------------------+
void OnTick() {
// 条件が満たされた場合に買い注文を出す
if (ConditionsToBuy()) {
OpenBuyOrder();
}
}
//+------------------------------------------------------------------+
//| 条件が満たされたかを確認する関数 |
//+------------------------------------------------------------------+
bool ConditionsToBuy() {
// シンプルな条件: 価格が移動平均を上回った場合
if (iClose(NULL, 0, 0) > iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0)) {
return true;
}
return false;
}
//+------------------------------------------------------------------+
//| 買い注文を出す関数 |
//+------------------------------------------------------------------+
void OpenBuyOrder() {
double price = Ask;
double sl = price - StopLoss * Point;
double tp = price + TakeProfit * Point;
// 買い注文を出す
int ticket = OrderSend(Symbol(), OP_BUY, Lots, price, 3, sl, tp, "Simple EA", MagicNumber, 0, clrGreen);
if (ticket < 0) {
Print("Error opening order: ", ErrorDescription(GetLastError()));
} else {
Print("Order opened successfully: Ticket #", ticket);
}
}
//+------------------------------------------------------------------+
3.3 エキスパートアドバイザーの説明
このエキスパートアドバイザーは、以下のように動作します。
初期化関数(OnInit): エキスパートアドバイザーの初期化処理を行います。ここでは特に何も行っていません。
メイン関数(OnTick): 新しいティックが到着するたびに呼び出される関数です。ここで取引の条件をチェックし、条件が満たされた場合に買い注文を出します。
条件チェック関数(ConditionsToBuy): 買い注文を出す条件を定義します。この例では、現在の価格が14期間の単純移動平均(SMA)を上回った場合に買い注文を出します。
注文関数(OpenBuyOrder): 実際に買い注文を出す関数です。注文が成功したかどうかをチェックし、結果をプリントします。
3.4 エキスパートアドバイザーのテスト
エキスパートアドバイザーをテストするためには、MT4の「ストラテジーテスター」を使用します。ストラテジーテスターを開き、作成したEAを選択し、テストパラメータを設定してテストを開始します。テスト結果を分析し、必要に応じてEAを改善します。
4. まとめ
この記事では、MQL4の基本的な構文とデータ型、エキスパートアドバイザーの作成方法について紹介しました。MQL4は強力なプログラミング言語であり、MT4プラットフォーム上での自動取引を実現するための重要なツールです。基礎をしっかりと学び、実際にコードを書いてみることで、MQL4の理解を深めることができます。今後の記事では、さらに高度な取引戦略やカスタムインディケータの作成方法についても取り上げていきますので、ぜひご期待ください。