MQL4の概念

MT4プログラミング

MQL4(MetaQuotes Language 4)は、MetaTrader 4 プラットフォーム上での自動売買プログラム(EA: Expert Advisor)、カスタムインディケータ、スクリプトを作成するための専用プログラミング言語です。C言語に似た構文を持ち、トレード戦略の実装や市場データの分析が可能です。

以下では、MQL4 の主要な概念と構文を説明します。


1. MQL4の基本概念

(1)プログラム

MQL4では、次のプログラムが作成可能です:

  • Expert Advisor (EA) : 自動売買プログラム
  • カスタムインディケータ: チャート上に描画される独自のインディケータ
  • スクリプト: 単発で動作する小規模プログラム
  • ライブラリ: 共通コードを再利用可能な形でまとめたファイル

(2) MQL4の特徴

  • イベント駆動型プログラミング: ティック更新( OnTick)、チャート描画更新( OnCalculate)など特定のイベントをトリガーして動作します。
  • バックテスト機能: EAの動作を過去のデータで検証可能。
  • 金融市場専用の関数群:OrderSend()iMA()など、トレードやインディケータ計算用の関数を提供します。

2. 基本構文

(1) 変数の宣言

MQL4では、さまざまなデータ型をサポートしています。

int myInt = 10;          // 整数型
double myDouble = 1.234; // 小数型
string myString = "Hello, MQL4"; // 文字列型
bool isActive = true; // 真偽値

(2)条件分岐(if文)

条件によって異なる処理を実行します。

if (myInt > 5) {
Print("myIntは5より大きい");
} else {
Print("myIntは5以下");
}

(3) 繰り返し処理(forループ)

特定の回数だけ処理を繰り返します。

for (int i = 0; i < 10; i++) {
Print("iの値: ", i);
}

(4) 関数

MQL4では、独自の関数を定義できます。

double CalculateSum(double a, double b) {
return a + b;
}

void OnTick() {
double sum = CalculateSum(3.5, 4.5);
Print("合計: ", sum);
}

3.主要なイベントハンドラ

(1)OnInit()

プログラムの初期化時に実行される関数。

int OnInit() {
Print("EAが初期化されました");
return(INIT_SUCCEEDED);
}

(2)OnDeinit()

プログラムの終了時に呼び出される関数。

void OnDeinit(const int reason) {
Print("EAが終了しました");
}

(3)OnTick()

市場データ(ティック)が更新されるたびに実行される関数。

void OnTick() {
double price = iClose(Symbol(), 0, 0); // 現在の終値を取得
Print("現在の価格: ", price);
}

(4)OnCalculate()

カスタムインディケータでデータを計算する際に呼び出される関数。

int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[],
const double &open[], const double &high[], const double &low[], const double &close[],
const long &tick_volume[], const long &volume[], const int &spread[]) {
// インディケータの計算ロジック
return(rates_total);
}

4.トレード関連の関数

MQL4にはトレードに特化した関数が用意されています。

(1) ポジションを開く

OrderSend()を使用して注文を送信します。

int ticket = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "Buy Order", 0, 0, Green);
if (ticket > 0) {
Print("買い注文を送信しました: ", ticket);
}

(2) 現在のポジションを確認

OrdersTotal()最新の注文数を確認します。

int totalOrders = OrdersTotal();
Print("現在の注文数: ", totalOrders);

(3) インディケータ値を取得

例として、移動平均を取得する関数。

double ma = iMA(Symbol(), 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0);
Print("移動平均: ", ma);

5. MQL4のサンプルプログラム

シンプルなEAの例

以下は移動平均のクロスオーバーを用いた自動売買EAの例です。

//+------------------------------------------------------------------+
//| MA Cross EA |
//+------------------------------------------------------------------+
#property strict

input double LotSize = 0.1; // ロットサイズ
input int FastMAPeriod = 10; // 短期移動平均
input int SlowMAPeriod = 50; // 長期移動平均

void OnTick() {
double fastMA = iMA(Symbol(), 0, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
double slowMA = iMA(Symbol(), 0, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);

if (fastMA > slowMA && OrdersTotal() == 0) {
OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, 0, 0, "Buy Order", 0, 0, Green);
} else if (fastMA < slowMA && OrdersTotal() == 0) {
OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3, 0, 0, "Sell Order", 0, 0, Red);
}
}

6.注意事項

  • リスク管理:自動売買ではリスクを適切に管理することが重要です。
  • デバッグ:Print()関数を使ってログ出力し、動作を確認します。
  • バックテスト: EAを使う前にバックテストを行い、期待される結果を確認してください。

コメント

タイトルとURLをコピーしました