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を使う前にバックテストを行い、期待される結果を確認してください。
コメント