ホーム » 初心者向けEA講座 » 02.初心者向け MQL5 学習プラン » 1-4. MQL5の基本構造(OnInit, OnTick, OnDeinit)

1-4. MQL5の基本構造(OnInit, OnTick, OnDeinit)

02.初心者向け MQL5 学習プラン

MQL5の基本構造概要

MQL5では、プログラムを作成する際に基本的な構造として、主に3つの関数(イベントハンドラ)が使われます。これらの関数は、MQL5のエキスパートアドバイザー(EA)やインジケーター、スクリプトにおいて非常に重要な役割を果たします。ここでは、それぞれの関数がどのような役割を持ち、どのように使用するかについて詳しく解説します。

OnInit関数

OnInit関数は、MQL5プログラムにおいて最初に呼び出される関数です。プログラムがチャートに読み込まれた時、またはEAやインジケーターが最初に実行される際に実行されます。この関数は、プログラムの初期化処理を行うために使用されます。

主な用途

  • 初期化処理を行う
  • 設定や変数、リソースの初期化
  • その他の初期化処理やインジケーター設定

OnInit関数内では、プログラムのセットアップや初期化、インジケーターの設定、必要なリソースの読み込みなどを行います。例えば、ファイルのオープンやデータベースの接続を行う際にも利用します。

int OnInit() {
    // 初期化処理
    Print("プログラムが初期化されました");
    return(INIT_SUCCEEDED);  // 初期化成功を返す
}

このコードでは、OnInit関数が初期化処理を行い、その後INIT_SUCCEEDEDを返すことでプログラムが正常に初期化されたことを示します。

OnTick関数

OnTick関数は、最も頻繁に使用される関数です。この関数は、新しいティックが受信されるたびに呼び出され、主に価格変動に基づいたロジックを実行する場所です。マーケットが更新されるたびにこの関数が実行されるため、取引シグナルの生成や価格監視、取引の実行に使われます。

主な用途

  • 価格やティックデータの取得
  • トレード戦略の実行(買い、売り、決済)
  • その他のインジケーター計算やデータ処理

通常、取引シグナルを出す処理やトレードの実行はこのOnTick関数内で行われます。例えば、移動平均線が交差したタイミングでエントリーを行うような戦略をOnTick内に実装します。

void OnTick() {
    // 現在のティックに基づいた価格を取得
    double currentPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID);
    Print("現在の価格: ", currentPrice);

    // 価格が特定の値を超えた場合に注文を出す(例)
    if(currentPrice > 1.2000) {
        // 売買注文のロジックを追加
        Print("条件を満たしました。取引開始!");
    }
}

このコードでは、OnTick内でティックごとに現在の価格を取得し、その価格が特定の値(1.2000)を超えた場合に取引を開始するシグナルを出しています。

OnDeinit関数

OnDeinit関数は、プログラムが終了する際に呼び出されます。EAやインジケーター、スクリプトがチャートから削除される時やプログラムが終了する際に実行されるので、リソースの解放や最終処理を行うのに使用します。

主な用途

  • 使用したリソースの解放
  • 開いたファイルやポジションのクローズ
  • 最後のログ出力や清掃処理

OnDeinitは、プログラム終了時にクリーンアップ処理を行うため、重要な役割を持っています。例えば、ファイルを閉じる、データベース接続を切断する、あるいは開いているポジションを決済する処理が記述されます。

void OnDeinit(const int reason) {
    // プログラム終了時の処理
    Print("プログラムが終了しました。");
}

このコードでは、OnDeinit関数が呼ばれるときに「プログラムが終了しました」とメッセージを出力します。

まとめ

  • OnInit: プログラムの初期化処理を行う関数。プログラム開始時に一度だけ呼び出される。
  • OnTick: 市場の更新があるたびに呼び出され、取引やシグナル生成に使われる。
  • OnDeinit: プログラム終了時に呼び出され、リソースの解放や最終処理を行う。

これらの基本的な関数を理解し、上手に使うことで、MQL5プログラムの効率的な開発が可能になります。これらは、EAやインジケーターを作成する際に必須の基本構造となりますので、しっかりと押さえておきましょう。

サンプルコード

//+------------------------------------------------------------------+
//|                                                       HelloWorld.mq5 |
//|                        MetaTrader 5                           |
//|                        Written by Your                       |
//+------------------------------------------------------------------+

// プロパティ設定
#property copyright "Your Name"      // 著作権情報
#property link      "https://www.example.com"  // 開発者のウェブサイトリンク
#property version   "1.00"           // バージョン番号

// グローバル変数
int g_counter = 0; // カウンター用の変数

//+------------------------------------------------------------------+
//| 初期化イベントハンドラ OnInit                                 |
//| チャートにインジケーターやEAを読み込む際に呼び出される         |
//+------------------------------------------------------------------+
int OnInit()
{
   // 初期化メッセージをログに出力
   Print("Hello World - OnInitが呼ばれました");
   
   // 変数の初期化処理などを行うことができる
   g_counter = 0; // カウンターをリセット
   
   // 成功を返す
   return INIT_SUCCEEDED;
}

//+------------------------------------------------------------------+
//| 新しいティックが到着するたびに呼び出される OnTick             |
//| 市場価格の変動を追跡するためのロジックを追加できる             |
//+------------------------------------------------------------------+
void OnTick()
{
   // 毎回ティックが来る度にカウンターを増加
   g_counter++;
   
   // カウンターの値をログに出力
   Print("ティックのカウント: ", g_counter);
   
   // 例えば、100ティックごとにアラートを出す
   if(g_counter % 100 == 0)
   {
      Alert("100ティックが経過しました!");
   }
}

//+------------------------------------------------------------------+
//| 終了イベントハンドラ OnDeinit                                  |
//| インジケーターやEAが削除される際に呼び出される                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // 終了メッセージをログに出力
   Print("Hello World - OnDeinitが呼ばれました");
   
   // 必要に応じて、後片付け処理(リソースの解放等)を行う
   // 例えばファイルを閉じるなど
}

用語集

用語説明
イベントハンドラプログラムが特定のイベント(例:市場のティック更新、インジケーターの計算、取引の実行など)を検出した際に自動的に実行される関数。MQL5では、OnInit、OnTick、OnDeinitなどが代表的なイベントハンドラ。
イベントプログラムの外部または内部で発生する出来事。例えば、新しい価格情報(ティック)の受信やユーザーの操作などがイベントとして発生し、それに対応したハンドラが実行される。
関数特定の処理をまとめて定義したコードの塊。MQL5ではイベントハンドラとして特定の関数が自動的に呼び出される。
OnInitプログラムの初期化処理を行う関数。プログラム開始時に一度だけ呼び出される。
OnTick新しいティック(価格更新)ごとに呼び出され、取引やシグナル生成に使われる。
OnDeinitプログラム終了時に呼び出され、リソースの解放や最終処理を行う。
ティック市場の価格が更新されること。新しい価格情報が取得されるたびに発生。
インジケーターチャート上で表示される計算結果を基にした分析ツール。移動平均線やRSIなどが含まれるZ

コメント

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