
MQL4MQL5 イベント関数
OnInit()
- できること
- EA・インジケーターの起動時に1回だけ呼ばれる
- 対応
- MQL4・MQL5
OnInit() とは
EA やインジケーターをチャートに入れたとき、パラメーターを変えたとき、時間足や通貨ペアを切り替えたときなどに1回だけ呼ばれる関数です。インジケーターのハンドル作成、入力値のチェック、タイマーの開始などの準備処理を書きます。
OnInit() の書式と引数
int OnInit()引数はありません。
戻り値
INIT_SUCCEEDED(0)を返すと初期化成功です。INIT_FAILED を返すとプログラムは停止し、INIT_PARAMETERS_INCORRECT は入力値の誤りを表します(最適化ではその組み合わせを飛ばします)。
OnInit() の使い方(コード例)
MQL4・MQL5 共通
input int InpPeriod = 20; // 期間
int OnInit()
{
// 入力値のチェック:おかしな値なら起動しない
if(InpPeriod < 1)
{
Print("期間は1以上にしてください");
return INIT_PARAMETERS_INCORRECT;
}
EventSetTimer(60); // 60秒ごとに OnTimer() を呼ぶ
return INIT_SUCCEEDED;
}
void OnDeinit(const int reason)
{
EventKillTimer();
}
void OnTick()
{
}
void OnTimer()
{
Print("1分経過");
}MetaEditor でコンパイルできることを確認済みです。
OnInit() の注意点
- 戻り値が INIT_SUCCEEDED 以外だと、EA はチャートから外れて動きません。エキスパートタブに「initialization failed」と出たときは、OnInit() がどの return で終わったかを Print() で確認します。
- OnInit() の時点ではまだ価格データがそろっていないことがあります。iClose() や CopyBuffer() で値が取れなくても失敗扱いにせず、実際の値の取得は OnTick()・OnCalculate() で行うのが安全です。
- void OnInit() と書くこともできますが、成功・失敗を返せるよう int OnInit() で書くのがおすすめです。












