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