【MQL4関数】OnTick関数とは?ロウソク足が動いたときに実行されるイベント関数

【中級編】MQLプログラムの読み方・書き方
朝日奈りさ
朝日奈りさ

OnTick関数は、ロウソク足が動いたときに実行されるイベント関数です。自動売買(エキスパートアドバイザ)のみで有効な関数で、自動売買の基礎となるイベント関数なので、しっかり確認すると良いでしょう。

OnTick関数とは

「自動売買プログラムを動かしたい!」

という方は、OnTick関数を使ってみましょう!

OnTick関数は、イベント関数の一つで、ロウソク足が動いたときに実行されるイベント関数です。

そのため、自動売買の基礎となる関数になります。

つまり、OnTick関数内に、ロジックを記述したり、トレード注文を出すプログラムを記述したりします。

また、OnTick関数は、自動売買(エキスパートアドバイザ)を新規作成すると、自動的にプログラミングされています。

自動的にプログラミングされているのは、主に以下の3つなので、確認しておくと良いでしょう。

今回は、OnTick関数に注目して解説していきます。

自動売買を新規作成したときのプログラム

自動売買を新規作成すると、以下のようなプログラムが自動作成されます。

//+------------------------------------------------------------------+
//|                                             newExpertAdviser.mq4 |
//|                                     Copyright 2022, Asahina Risa |
//|                                      https://mql-programing.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, Asahina Risa"
#property link      "https://mql-programing.com/"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+

このように、すでにOnInit関数・OnDeinit関数・OnTick関数が記述されています。

OnTick関数は、31行目にあります。

OnTick関数の特徴

OnTick関数はイベント関数なので、イベントが起こったときに実行されます。

そのイベントとは、「ロウソク足が動いたとき」です。

つまり、チャートの価格が変動するたびに実行されます。

そのため、1秒間で何度も実行されることもあれば、1分以上も実行されない場合もあります。

もし、一定時間ごとに実行させたいプログラムがある場合は、OnTimer関数を利用すると良いでしょう。

OnTick関数は、インジケータやスクリプトでは、実行されません。

自動売買(エキスパートアドバイザ)のみで、実行される関数です。

OnTick関数の書き方

OnTick関数の使い方は、基本的な関数と同じです。

関数をマスターしていない方はこちらの記事が参考になります。

基本的な書き方

OnTick関数はとてもシンプルな関数です。

引数はありません。

戻り値はvoid型です。

OnTick関数の基本的な書き方は以下の通りです。

void OnTick()
  {
   
  }

戻り値はvoid型なので、特にreturnは必要ありません。

戻り値

なし

引数

なし

OnTick関数のサンプルプログラム

サンプルプログラムは、こちらになります。

このプログラムは、1つのロウソク足で、OnTick関数が何回実行されたのかを表示します。

ここでは簡単のために、内容を薄くしておりますが、もっと詳しい動作を知りたい方は、こちらの記事が役立つと思います。

//ロウソク足が更新されたときに、1回だけ実行するためのフラグ
datetime time = Time[0];

//OnTick関数が実行された回数を格納する変数
int countOnTick = 0;

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

//カウントを1増やす
   countOnTick++;

//現在の時間と、フラグが同じならリターン
   if(time == Time[0])
      return;

//フラグを更新
   time = Time[0];

//1つのロウソク足で、OnTick関数が何回呼び出されたかを表示
   Print("OnTick関数が " + IntegerToString(countOnTick) + "回 実行されました。");

//カウントをリセット
   countOnTick = 0;

  }

 

 

まとめ

OnTick関数は、「ロウソク足が動いたとき」に実行されるイベント関数です。

そのため、1秒間で何度も実行されることもあれば、1分以上も実行されない場合もあります。

また、OnTick関数は、自動売買のロジックやトレードのプログラムを記述する関数になりますので、書き方や動くタイミングを把握しておきましょう。