MetaEditorを開くと、デフォルトで表示されている関数ですね。
※MT4 Build 600 以降については、以下の記事をご覧ください
「int OnInit(), void OnDeinit(const int reason), void OnTick() を理解しよう」
各関数の動作タイミングは、Alert関数を挿入して簡単に確認することできます。
下記mq4のソースコードをコンパイルして、チャートに適用してみてください。(ダブルクリックで全選択)
//+------------------------------------------------------------------+
//| Alert.mq4 |
//| Copyright 2013, BLT. |
//| http://mt4ordersenderror.blog.fc2.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, BLT."
#property link "http://mt4ordersenderror.blog.fc2.com/"
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
Alert("init");
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
Alert("deinit");
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
Alert("start");
//----
return(0);
}
//+------------------------------------------------------------------+
アラート音が鳴って、下記のようにポップアップ表示されましたか?

Alert.mq4は、int init(), int deinit(), int start() の関数が実行される度に
Alert関数を使用して、アラートメッセージを表示するようにしています。
EAをチャートに適用したり、削除したり、時間足を変えてみたり、チャートを閉じてみたり、
プロパティを変更してみたり、MT4を再起動してみたり・・・いろいろ試してみてください。
なんとなくでも動作タイミングは理解出来ましたか?
init関数は、EA適用時や時間足変更時、プロパティ変更時、MT4再起動時のタイミングで動作します。
初期化処理ですね。
deinit関数は、EA削除時や時間足変更直前、プロパティ変更直前、MT4再起動直前のタイミングで動作します。
終了処理ですね。
start関数は、適用したチャートの通貨ペアのレートが配信されるタイミングで動作します。
ここがメイン処理です。ロジックを記述する部分です。
過去にご紹介した「RSIインジケーターを利用したドテンEA」「ボリンジャーバンドを利用したドテンEA」を
確認してみてください。メインとなるstart関数内のみ記述しているのが確認できるかと思います。
EAを販売する場合は、FX会社によって桁数が違ったりするので、init関数内で初期化処理を記載したり
start関数内で、EA動作時にラインを描いたりした時には、deinit関数内で終了処理をしたりします。
今回使用したAlert関数は、デバッグするときに非常に便利なので、みなさんも活用してみてください。