上下は価格、左右は時間のバーインデックス
チャートの端っこの位置を知りたい時、皆さんはどうしていますか?
黄色い線を引いている4ヶ所のことです。
例えば、テキストオブジェクトを端っこに常駐させておきたい時などに必要になりますよね。
チャートの上端・下端は簡単です。
開いているチャートの一番上あるいは一番下の価格を取得してくれるMT4の組込み関数、WindowPriceMax関数(上端)とWindowPriceMin関数(下端)を呼ぶだけです。
じゃあ左端と右端はどうかと言いますと、左端は上下と同様に組込み関数のWindowFirstVisibleBar関数を呼ぶだけです。
チャートの左端(見えている範囲)のバーインデックスを返してくれる関数なので、Time[WindowFirstVisibleBar()]みたいに使うと良いと思います。
問題はチャートの右端(見えている範囲)です。
なぜか、チャートの右端だけは一発で取得させてくれません。
どうしたもんかなーと他の組込み関数を眺めていたら、WindowBarsPerChart関数を見つけました。
これはチャートに表示されている(可視範囲の)バー数を返してくれる関数です。
WindowBarsPerChart関数とWindowFirstVisibleBar関数を合わせればチャートの右端を導き出せそうです。
というわけで、チャートの上下左右の端は以下の式で取得できます。
double UpPrice = WindowPriceMax(); // 上端 double DownPrice = WindowPriceMin(); // 下端 datetime LeftTime = Time[WindowFirstVisibleBar()]; // 左端 datetime RightTime = Time[0] + (WindowBarsPerChart() - WindowFirstVisibleBar() - 1) * Period() * 60; // 右端
右端の式に存在する「-1」の理由は冒頭のチャートの左上にあるComment関数の出力結果を見ながら考えてみてください!(チャートをクリックすれば拡大します)
ヒントは「WindowFirstVisibleBar関数で取得できるものはバーインデックスであってバー数ではない」です。
なお、「テキストオブジェクトなんか使わずにラベルオブジェクトを使えば良いんじゃないの?」という突っ込みはスルーです。