MQL4は、MT4(MetaTrader 4)プラットフォームでの自動売買やカスタムインジケーター作成のために使用されるプログラミング言語です。
この記事では、プログラミング初心者にもわかりやすいように、MQL4の基本的な構文と関数の使い方について解説します。
これから紹介する内容を参考に、あなたもMQL4で自分のトレード戦略を自動化してみましょう。
MQL4の基本構文
MQL4は、MetaTrader 4プラットフォームで使われるプログラミング言語で、主に自動売買やカスタムインジケーターの作成に使用されます。
プログラミングを始める際にまず覚えておくべきことは、基本的な構文です。
MQL4のコードは、主に以下の要素から構成されています:
コメント、変数宣言、制御構文です。
コメントの使い方
プログラムにコメントを入れると、コードの説明やメモを書いておくことができます。
コメントはプログラムの動作には影響しないので、自由に使えます。
MQL4では、コメントは「//」で始めます。
例えば、次のように書きます:
// これはコメントです。プログラムには影響しません。
コメントを使うことで、後でコードを見返したときに理解しやすくなりますよ。
変数の宣言
変数は、データを保存するために使います。例えば、数値や文字列を保存することができます。
変数を宣言するには、まず変数の型を指定し、その後に変数名を付けます。
例として、整数型の変数を宣言して値を代入する方法は以下の通りです:
int a = 10; // 整数型の変数aを宣言し、10を代入
double b = 3.14; // 実数型の変数bを宣言し、3.14を代入
このようにして変数を宣言し、必要なデータを保存します。
制御構文の使い方
制御構文を使うと、プログラムの流れを制御することができます。
代表的な制御構文には、条件分岐(if文)やループ(for文)があります。
条件分岐を使うと、特定の条件が満たされた場合にのみコードを実行することができます。
例として、if文を使った条件分岐の方法は以下の通りです:
if (a > 5) {
Print("aは5より大きい");
} else {
Print("aは5以下");
}
このようにして、条件に応じて異なる処理を行うことができます。
ループ構文の使い方
ループ構文を使うと、同じ処理を繰り返し実行することができます。
例えば、for文を使って10回繰り返す処理を行う方法は以下の通りです:
for (int i = 0; i < 10; i++) {
Print("繰り返し回数: ", i);
}
このようにして、指定した回数だけ同じ処理を繰り返します。
ループ構文を使うことで、同じ処理を効率的に行うことができますよ。
関数の基本
MQL4では、よく使われる処理を関数としてまとめることができます。
関数を使うと、コードの再利用性が高まり、プログラムが見やすくなります。
例えば、引数として数値を受け取り、それを2倍にして返す関数は以下のように書きます:
int DoubleValue(int number) {
int result = number * 2;
return result;
}
この関数を呼び出すと、指定した数値を2倍にして返します。
例えば、次のように関数を呼び出します:
int doubled = DoubleValue(5);
Print(doubled); // 10と出力されます
このように、関数を使うとコードが整理され、わかりやすくなりますよ。
MQL4の基本関数
MQL4には、取引や分析を行うための多くの組み込み関数があります。
これらの関数を使いこなすことで、自動売買プログラムを効率的に作成することができます。
ここでは、初心者でも理解しやすいように、基本的な関数をいくつか紹介します。
各関数の使い方を具体的なコード例と共に説明していきますね。
Print関数
まずは「Print」関数です。これは、プログラムの中でメッセージを出力するための関数です。
デバッグ時に変数の値を確認するために非常に便利です。
以下のコード例を見てみましょう。
Print("Hello, MQL4!"); // コンソールに"Hello, MQL4!"と出力
このように書くだけで、実行時にコンソールにメッセージが表示されますよ。
プログラムの流れを確認したり、特定の処理が実行されているかどうかを調べたりするのに役立ちます。
OrderSend関数
次に「OrderSend」関数です。これは、新規注文を送信するための関数です。
自動売買プログラムを作る際に、取引を実行するために必須の関数です。
以下に基本的な使い方を示します。
int ticket = OrderSend(Symbol(), OP_BUY, 1.0, Ask, 3, 0, 0, "My order", 0, 0, Blue);
この例では、現在のシンボル(通貨ペア)で1ロットの買い注文を送信します。
注文が成功すると、「ticket」という変数に注文番号が返されます。
この関数の使い方を覚えておくと、トレードの自動化が簡単になりますよ。
OrderClose関数
「OrderClose」関数も重要です。これは、既存の注文を決済するための関数です。
自動売買プログラムでは、ポジションを管理するために頻繁に使います。
以下のコード例で使い方を見てみましょう。
bool result = OrderClose(ticket, 1.0, Bid, 3, Red);
この例では、指定した注文番号のポジションを決済します。
ポジションが正しく決済されると、「result」という変数にtrueが返されます。
失敗した場合はfalseが返されるので、エラーハンドリングも可能です。
iMA関数
テクニカル分析でよく使われる「iMA」関数についても説明します。
これは、移動平均線を計算するための関数です。
以下のコード例で基本的な使い方を確認しましょう。
double movingAverage = iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0);
Print("現在の移動平均値: ", movingAverage);
この例では、14期間の単純移動平均を計算して出力します。
チャート上のテクニカル指標としてよく使われるので、ぜひ活用してくださいね。
Comment関数
最後に「Comment」関数を紹介します。これは、チャート上にコメントを表示するための関数です。
デバッグや情報の可視化に便利です。
Comment("現在の価格: ", Bid);
この例では、現在の価格(Bid)をチャートの左上に表示します。
複数の情報を同時に表示することもできるので、状況を簡単に把握できますよ。
Alert関数
次に「Alert」関数について説明します。
この関数は、メッセージをポップアップで表示するために使用されます。
トレードの重要なイベントや警告をユーザーに通知するのに便利です。
Alert("トレードが実行されました!");
このコードを実行すると、メッセージボックスが表示され、「トレードが実行されました!」と通知されます。
ポップアップメッセージは、トレードの進行状況をリアルタイムで監視するのに役立ちます。
簡単にトレードのイベントを追跡できるので、ぜひ利用してくださいね。
FileWrite関数
「FileWrite」関数は、ファイルにデータを書き込むために使用されます。
トレードの記録や分析データの保存に役立ちます。
int file_handle = FileOpen("trades.txt", FILE_WRITE|FILE_CSV);
FileWrite(file_handle, "日時", "通貨ペア", "取引量", "価格");
FileWrite(file_handle, "2023-07-14 10:00", "EURUSD", 1.0, 1.2345);
FileClose(file_handle);
このコードは、”trades.txt”というファイルを作成し、取引の詳細をCSV形式で書き込みます。
取引の履歴を記録することで、後で分析や確認が簡単にできます。
ファイル操作を学ぶと、プログラムの柔軟性が大幅に向上しますよ。
MarketInfo関数
「MarketInfo」関数は、市場の情報を取得するための関数です。
例えば、現在の価格やスプレッドなどの情報を取得することができます。
double spread = MarketInfo(Symbol(), MODE_SPREAD);
Print("現在のスプレッドは: ", spread);
この例では、現在のスプレッドを取得して出力します。
トレードの判断に必要な情報を簡単に取得できるので、非常に便利です。
市場の状態をリアルタイムで把握するのに役立ちます。
OrderSelect関数
「OrderSelect」関数は、特定の注文を選択するための関数です。
選択した注文の詳細情報を取得したり、注文を操作したりするために使います。
bool result = OrderSelect(0, SELECT_BY_POS);
if (result) {
double order_price = OrderOpenPrice();
Print("選択した注文の価格は: ", order_price);
}
このコードでは、最初の注文を選択し、その注文の価格を取得して出力します。
ポジション管理に欠かせない関数なので、ぜひ覚えておきましょう。
MathSqrt関数
「MathSqrt」関数は、平方根を計算するための関数です。
計算に使用することが多いので、プログラムに組み込むと便利です。
double value = 16.0;
double sqrt_value = MathSqrt(value);
Print("平方根は: ", sqrt_value);
この例では、16の平方根を計算して出力します。
数学的な計算を行う際に非常に役立つ関数です。
複雑な計算を簡単に行うことができますよ。
MQL4での関数の作り方
自分で関数を作ることで、コードをより整理し、再利用可能にすることができますね。
関数を作ることで、プログラムがより読みやすくなり、同じ処理を何度も書く必要がなくなりますよ。
ここでは、MQL4での関数の作り方を基本から詳しく解説しますね。
初めてプログラミングをする方でも、安心して取り組めるように丁寧に説明しますよ。
関数の基本構造
関数を作成するには、まずその基本構造を理解する必要があります。
関数の基本構造は以下のようになります。
戻り値の型 関数名(引数) {
関数の内容;
return 戻り値;
}
例えば、2つの数字を足す関数を作る場合は、次のように書きます。
int Add(int a, int b) {
int sum = a + b;
return sum;
}
この関数は、引数として2つの整数を受け取り、その合計を返します。
関数名はAddで、戻り値の型はint(整数型)です。
また、引数としてint型のaとbを受け取ります。
引数と戻り値の扱い方
関数の引数とは、関数に渡される値のことです。
引数を使うことで、関数をより汎用的に利用することができますよ。
例えば、先ほどのAdd関数では、2つの引数aとbを受け取り、その合計を計算します。
引数の型は、関数を定義する際に指定します。
戻り値とは、関数が処理を終えた後に返す値のことです。
戻り値の型も関数を定義する際に指定します。
実際の関数作成例
ここでは、もう少し実際的な関数の例を紹介しますね。
例えば、指定された数値の2乗を計算する関数を作ってみましょう。
double Square(double x) {
double result = x * x;
return result;
}
この関数は、引数として受け取った数値xの2乗を計算し、その結果を返します。
戻り値の型はdouble(実数型)で、引数も同じくdouble型です。
このように、自分で関数を作ることで、複雑な処理を簡単に呼び出せるようになりますよ。
関数の呼び出し方
作成した関数を呼び出す方法についても説明しますね。
関数を呼び出すには、関数名と引数を指定します。
double result = Square(5.0);
Print(result); // 25.0と表示されます
この例では、Square関数を呼び出し、引数として5.0を渡しています。
関数が計算を行い、その結果がresult変数に格納されます。
そして、Print関数を使って結果を表示します。
関数の再利用と管理
関数を使うことで、同じ処理を何度も書く必要がなくなりますね。
これにより、コードのメンテナンスが容易になりますよ。
また、関数を使ってコードをモジュール化することで、他のプロジェクトでも再利用しやすくなります。
例えば、複数のプロジェクトで同じ計算を行う場合、関数として定義しておけば、その関数を呼び出すだけで済みます。
さらに、関数をまとめたライブラリを作成することもできます。
これにより、必要な関数を簡単に管理でき、コードの品質も向上します。
以上が、MQL4での関数の基本的な作り方と利用方法です。
自分で関数を作ることで、プログラムがより整理され、再利用可能になりますよ。
是非、これを機会に自分だけの関数を作ってみてくださいね。
具体例:移動平均線の計算
MQL4では、テクニカル分析のための多くの関数が用意されています。
その中でも、移動平均線を計算するiMA関数は、トレードの基本としてよく使われます。
ここでは、iMA関数の使い方と、その応用例を紹介します。
移動平均線を使うことで、トレンドの方向を確認し、エントリーやエグジットのタイミングを見つけることができますよ。
iMA関数の基本的な使い方
iMA関数は、移動平均線を計算するための関数です。
この関数を使うと、指定した期間の移動平均値を簡単に取得できます。
基本的な構文は以下の通りです。
double iMA(
string symbol, // 通貨ペア
int timeframe, // 時間枠
int period, // 移動平均の期間
int shift, // シフト数
int ma_method, // 移動平均の種類
int applied_price, // 適用する価格
int shift // バーのシフト数
);
例えば、現在のチャートの終値を基に14期間の単純移動平均を計算する場合、以下のように記述します。
double movingAverage = iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0);
このコードは、現在のチャートの終値に基づいて、14期間の単純移動平均値を計算します。
移動平均線の応用例
移動平均線を使ったトレード戦略の一例として、クロスオーバー戦略があります。
これは、短期移動平均線と長期移動平均線の交差を利用して売買のタイミングを決める方法です。
例えば、50期間の移動平均線と200期間の移動平均線を使って、以下のようにプログラムを組むことができます。
double shortMA = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, 0);
double longMA = iMA(NULL, 0, 200, 0, MODE_SMA, PRICE_CLOSE, 0);
if(shortMA > longMA) {
Print("ゴールデンクロス:買いシグナル");
} else if(shortMA < longMA) {
Print("デッドクロス:売りシグナル");
}
このコードでは、短期移動平均線が長期移動平均線を上回った場合に買いシグナルを、下回った場合に売りシグナルを出すようにしています。
移動平均線の設定と調整
移動平均線の期間や種類は、トレードスタイルに合わせて調整することが重要です。
短期トレードの場合は、短期間の移動平均線を使うとよいでしょう。
一方で、長期トレードの場合は、長期間の移動平均線を使用します。
また、移動平均線には、単純移動平均(SMA)、指数平滑移動平均(EMA)など、複数の種類があります。
これらを適切に選択することで、トレードの精度を高めることができます。
double simpleMA = iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0);
double exponentialMA = iMA(NULL, 0, 14, 0, MODE_EMA, PRICE_CLOSE, 0);
このように、同じ期間でも異なる移動平均を計算できます。
移動平均線の種類とその特徴
移動平均線にはいくつかの種類があります。
それぞれに特徴があり、トレードスタイルに応じて使い分けることが大切です。
ここでは、代表的な移動平均線の種類とその特徴を紹介します。
単純移動平均(SMA):一定期間の価格の平均値を計算する最も基本的な移動平均線です。
計算が簡単で、価格の全体的なトレンドを把握するのに適しています。
ただし、価格の変動が激しいときには反応が遅れることがあります。
double simpleMA = iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0);
指数平滑移動平均(EMA):最新の価格に重みを置いて計算する移動平均線です。
価格の変動に対して迅速に反応します。
そのため、短期トレードや急激な価格変動の際に有効です。
double exponentialMA = iMA(NULL, 0, 14, 0, MODE_EMA, PRICE_CLOSE, 0);
平滑移動平均(SMMA):SMAとEMAの中間的な特徴を持つ移動平均線です。
過去の価格データの影響を少しずつ減少させることで、価格の変動に対する過剰な反応を防ぎます。
トレンドの確認に適していますが、計算が複雑です。
double smoothedMA = iMA(NULL, 0, 14, 0, MODE_SMMA, PRICE_CLOSE, 0);
線形加重移動平均(LWMA):特定の期間内の各価格に重みを付けて計算する移動平均線です。
最新の価格に最も重みを置くため、非常に敏感に反応します。
そのため、短期トレードやスキャルピングに適しています。
double linearWeightedMA = iMA(NULL, 0, 14, 0, MODE_LWMA, PRICE_CLOSE, 0);
移動平均線の応用テクニック
移動平均線は、単にトレンドを確認するだけでなく、さまざまなトレード戦略に応用できます。
ここでは、いくつかの応用テクニックを紹介します。
ボリンジャーバンド:移動平均線を基に、価格の標準偏差を利用してバンドを形成します。
価格がバンドの上下限に触れることで、買いや売りのシグナルとして利用できます。
double upperBand = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, 0);
double lowerBand = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, 0);
MACD(移動平均収束拡散法):2本のEMAの差を利用してトレンドの強さと方向を分析します。
シグナルラインとMACDラインの交差を利用して、買いや売りのタイミングを判断します。
double macd = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 0);
double signal = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 0);
移動平均線を組み合わせることで、より精度の高いトレードが可能になります。
自分のトレードスタイルや目的に合わせて、最適な手法を選びましょう。
例えば、短期トレードにはEMAを使い、長期トレードにはSMAを使うといった具合です。
また、複数の移動平均線を併用することで、より確実なシグナルを得ることができます。
移動平均線を使った自動売買プログラム
MQL4では、移動平均線を使った自動売買プログラムを作成することができます。
これにより、トレードの効率を大幅に向上させることができます。
以下は、移動平均線を使った自動売買プログラムの一例です。
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
double shortMA = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, 0);
double longMA = iMA(NULL, 0, 200, 0, MODE_SMA, PRICE_CLOSE, 0);
if(shortMA > longMA) {
OrderSend(Symbol(), OP_BUY, 1.0, Ask, 3, 0, 0, "Buy Order", 0, 0, clrGreen);
} else if(shortMA < longMA) {
OrderSend(Symbol(), OP_SELL, 1.0, Bid, 3, 0, 0, "Sell Order", 0, 0, clrRed);
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
このプログラムは、50期間の短期移動平均線と200期間の長期移動平均線を比較し、買いまたは売りの注文を自動で行います。
このように、自動売買プログラムを利用することで、トレードの機会を逃さずに済みます。
また、感情に左右されないトレードができるため、安定した結果を得ることが可能です。
是非、自分のトレードスタイルに合わせた自動売買プログラムを作成してみてくださいね。
まとめ
MQL4は、MT4プラットフォームでのトレードを自動化するための強力なツールです。
基本的な構文や関数の使い方をマスターすることで、自分だけのトレード戦略を簡単にプログラム化することができます。
例えば、移動平均線を使ったトレード戦略や、ボリンジャーバンド、MACDなどのテクニカル指標を活用した自動売買プログラムを作成することが可能です。
初心者の方でも、まずは簡単なコードから始めて、徐々に複雑なプログラムに挑戦してみましょう。
自分のトレードスタイルに合わせたプログラムを作成することで、効率的で感情に左右されないトレードが実現できます。
これからもプログラミングを楽しみながら学んでいってくださいね。
コメント