今回は、MetaTrader 5でのインジケーターにおける「新しいバー」イベントハンドラーの考え方についてお話しします。このアプローチの詳細は、「新しいバー」イベントハンドラーの記事で詳しく説明されています。ここでは、インジケーターのための解決策を紹介します。基本的なアイデアは同じで、新しいバーが出現したときだけ再計算を行うことができる便利な方法です。この方法は、OnCalculate()関数の直接的な使用に代わる便利な選択肢です。
以下に、新しいバーが出現したときにラインを表示するシンプルなインジケーターの例を示します:
//+------------------------------------------------------------------+ //| OnNewBarCalculate.mq5 | //| Copyright 2010, Lizar | //| Lizar@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright 2010, Lizar" #property link "Lizar@mail.ru" #property version "1.00" #property indicator_chart_window #include <OnNewBarCalculate.mqh> // OnNewBarCalculate()関数を呼び出す秘密//+------------------------------------------------------------------+ //| インジケーター用の新しいバーイベントハンドラー | //+------------------------------------------------------------------+ int OnNewBarCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { //--- ここにOnCalculate()に似たコードを書けます。 //--- ただし、この関数は新しいバーが出現したときのみ呼ばれます(毎ティックではありません) PrintFormat("新しいバー: %s",TimeToString(TimeCurrent(),TIME_SECONDS)); //--- 次回の呼び出しのためのprev_calculatedの返り値 return(rates_total); }