MQL4の構造

MT4プログラミング

MQL4プログラムの書き方は、MetaTrader 4(MT4)プラットフォームで自動売買プログラム(EA)、カスタムインディケータ、スクリプトなどを開発するために使用されます。ここでは、基本的なMQL4プログラムの構造と書き方を説明します。


1. MQL4プログラムの基本構造

MQL4プログラムは、以下のような基本構造を持っています。

(1) ヘッダー部

  • 必要な外部設定や変数の宣言を行います。
mql4著作権を所有する//+------------------------------------------------------------------+
//|                           サンプルEA                             |
//+------------------------------------------------------------------+
#property strict                // 厳密なエラー検出モード
input double LotSize = 0.1;    // ロットサイズ(外部変数)

(2) 初期化関数(OnInit())

  • プログラムの初期化時に実行される部分です。
mql4著作権を所有するint OnInit() {
    Print("EA initialized.");  // 初期化メッセージを表示
    return(INIT_SUCCEEDED);    // 初期化成功を示す
}

(3) ティックイベント関数(OnTick())

  • 市場データ(ティック)が更新されるたびに実行される部分です。
mql4著作権を所有するvoid OnTick() {
    double ma = iMA(Symbol(), 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0);  // 移動平均を取得
    double price = iClose(Symbol(), 0, 1);  // 最新の終値を取得
    
    if (price > ma) {
        Print("価格が移動平均を上回っています。");
    }
}

(4) 終了関数(OnDeinit())

  • プログラムが終了する際にお呼びします。
mql4著作権を所有するvoid OnDeinit(const int reason) {
    Print("EA terminated.");  // 終了メッセージを表示
}

2. 簡単な自動売買プログラムの例

以下は、シンプルな「移動平均ブレイクアウト戦略」を使用した自動売買プログラムの例です。

mql4著作権を所有する//+------------------------------------------------------------------+
//|                        移動平均ブレイクアウトEA                 |
//+------------------------------------------------------------------+
#property strict

// 外部入力パラメータ
input double LotSize = 0.1;      // ロットサイズ
input int MA_Period = 14;        // 移動平均の期間

// 初期化関数
int OnInit() {
    Print("移動平均ブレイクアウトEAが初期化されました。");
    return(INIT_SUCCEEDED);
}

// ティックイベント関数
void OnTick() {
    double ma = iMA(Symbol(), 0, MA_Period, 0, MODE_SMA, PRICE_CLOSE, 0);  // 移動平均を取得
    double price = iClose(Symbol(), 0, 1);  // 最新の終値を取得
    
    // 買い条件: 終値が移動平均を上回った場合
    if (price > ma && OrdersTotal() == 0) {
        OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, 0, 0, "Buy Order", 0, 0, Green);
        Print("買いポジションを取りました。");
    }
    
    // 売り条件: 終値が移動平均を下回った場合
    if (price < ma && OrdersTotal() == 0) {
        OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3, 0, 0, "Sell Order", 0, 0, Red);
        Print("売りポジションを取りました。");
    }
}

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

3. インデックスのポイント

  1. 変数と外部入力パラメータの管理
    • input修飾子を使って、外部から調整可能なパラメータを設定します。
  2. リスク管理
    • 自動売買では、ロットサイズや損益管理をしっかり設定しましょう。
    • 例: 損切り利益や確定のための価格をOrderSend()指定します。
  3. エラー処理
    • MQL4はGetLastError()関数でエラーコードを取得できます。エラー処理を正しく行うことで、プログラムの理解性を高めます。
  4. バックテスト
    • 作成したEAはMT4の「戦略テスター」を使ってバックテストを行い、戦略の有効性を確認します。

4. MQL4プログラムをMT4に追加する方法

  1. コード保存
    • MetaEditorを起動し、作成したプログラムをファイルとして.mq4保存します。
    • 保存場所はMQL4/Expertsフォルダ。
  2. コンパイル
    • MetaEditorでコードをコンパイルし、.ex4ファイルを生成します。
  3. EA 実行
    • MT4プラットフォームを開き、ナビゲーターウィンドウからEAをチャートにスキップ&ドロップします。

MQL4でのプログラムの作成は、簡単なものから高度な自動売買戦略まで可能です。

コメント

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