はじめに
MQL5は、MetaTrader 5(MT5)用のプログラミング言語であり、エキスパートアドバイザー(EA)、インジケーター、スクリプトの作成に利用されます。MQL4と比べて、より高度なイベント処理やオブジェクト指向プログラミング(OOP)のサポートが強化されており、バックテストの精度やマルチスレッド処理の対応も向上しています。その中で、
int OnInit()
void OnDeinit(const int reason)
void OnTick()
は特に重要な関数です。本記事では、それぞれの役割と使い方について詳しく解説します。
OnInit()関数とは?
概要
OnInit()
関数は、エキスパートアドバイザー(EA)やカスタムインジケーターがチャートに適用された際やプログラムが起動した際に一度だけ実行される関数です。この関数を使用して、変数の初期化、ファイルの読み込み、インジケーターのバッファ設定などを行います。
基本構文
int OnInit()
{
// 初期化処理
return INIT_SUCCEEDED; // 成功時にはINIT_SUCCEEDEDを返す
}
戻り値
INIT_SUCCEEDED
(0): 正常に初期化が完了した場合INIT_FAILED
(1): 初期化に失敗した場合(エラーを示す)
使用例
int OnInit()
{
Print("EAが初期化されました。");
return INIT_SUCCEEDED;
}
OnDeinit()関数とは?
概要
OnDeinit()
関数は、エキスパートアドバイザーやインジケーターが削除されるときに一度だけ実行される関数です。ここで、メモリの解放やリソースのクリーンアップを行います。例えば、ファイルハンドルの閉鎖、動的配列やバッファの解放、開いているポジションや注文の処理を適切に終了することが重要です。
基本構文
void OnDeinit(const int reason)
{
// 終了時の処理
}
引数 reason
reason
には、終了の理由を示す値が入ります。例えば:
REASON_REMOVE
(0): 手動でEAやインジケーターが削除された場合REASON_RECOMPILE
(1): 再コンパイル時REASON_CHARTCHANGE
(3): チャートが閉じられたとき
使用例
void OnDeinit(const int reason)
{
Print("EAが削除されました。理由: ", reason);
}
OnTick()関数とは?
概要
OnTick()
関数は、新しいティック(価格変動)が発生するたびに実行される関数です。EAのロジック(売買判断など)は主にこの関数内で記述されます。
基本構文
void OnTick()
{
// ティックごとの処理
}
使用例
以下のコードは、最新のBid価格を取得し、特定の価格レベルを超えた場合に買い注文を出し、逆に一定の価格を下回った場合に売り注文を出すシンプルなEAの例です。
void OnTick()
{
double bidPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID);
Print("現在のBid価格: ", bidPrice);
if (bidPrice > 1.1000)
{
Print("価格が1.1000を超えました!");
// 売買ロジックを実装
}
}
まとめ
MQL5では、OnInit()
、OnDeinit()
、OnTick()
の3つの関数が非常に重要な役割を果たします。
関数名 | 実行タイミング | 役割 |
---|---|---|
OnInit() |
初回実行時 | 変数の初期化、バッファ設定など |
OnDeinit() |
削除・終了時 | メモリ解放、リソースのクリーンアップ |
OnTick() |
ティック発生ごと | 売買判断やデータの処理 |
これらの関数を理解し、適切に活用することで、より効率的で正確なMQL5プログラムを作成できるようになります。例えば、エキスパートアドバイザー(EA)を活用した自動売買の実装や、カスタムインジケーターを作成して独自のテクニカル分析を行うことが可能になります。また、トレード管理ツールを開発し、リスク管理やポジションサイズの自動計算を組み込むこともできます。
コメント