MQL5でスプレッドラベルをつくってみる

Pocket

ウィザードからカスタムインジケータ用のファイルを作成して、チャート上にスプレッドを表示するプログラムを書いてみます。

今回作成したコードでは、インジケータ削除時にラベルが消えません……


“MQL5でスプレッドラベルをつくってみる” の続きを読む

Pocket

動的配列を使って1つづつ要素を増やす

Pocket

配列のサイズを変更できる動的配列の宣言は次の書式になります。

 

配列のサイズ変更にはArrayResize()を使います。

 

配列のサイズを1つだけ増やしたい場合は、現在のサイズ+1をすれば良いことになります。
配列サイズを取得するにはArraySize()を使います。

 

以上のコードを使って、動的配列を1つ増やすコードは次のように書けます。

 

Pocket

MQL5の日付の扱い

Pocket

datetime型

datetime型は1970年1月1日0時0分からの経過”秒数”を表す整数を格納します。
直接日付を指定するにはD”を使ってD’1970.01.01 00:00’などとします。

 

Printなどで出力すると日付の形式で出力されますが、%dとして出力するとdatetime型の値が1970年1月1日0時0分からの経過秒数を示していることが分かります。

MqlDateTime構造体

以下の構造体メンバを含みます。
  • year : 年
  • mon : 月
  • day : 日
  • hour : 時間
  • min : 分
  • sec : 秒
  • day_of_week : 日曜が0,月曜が1…,土曜が6
  • day_of_year : 1月1日を0とした日番号

datetime型からMqlDateTime型へ変換して使う

OnCalculate()で渡される日付時刻データはdatetime型なのでTimeToStruct()を使ってMqlDateTime型に変換できます。MqlDateTime型にしておけば時間の扱いが楽になりそうです。
 
Pocket

MT5の言語を取得する

Pocket

補足:ENUM_TERMINAL_INFO_STRINGの意味

僕の環境では以下のような出力になりました。

TERMINAL_LANGUAGE=Japanese
TERMINAL_COMPANY=MetaQuotes Software Corp.
TERMINAL_NAME=MetaTrader 5
TERMINAL_PATH=C:\Program Files\MetaTrader 5
TERMINAL_DATA_PATH=C:\Users\hogehoge\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
TERMINAL_COMMONDATA_PATH=C:\Users\hogehoge\AppData\Roaming\MetaQuotes\Terminal\Common

各定数の意味はこんな感じだと思います。

TERMINAL_LANGUAGE:MT5の言語
TERMINAL_COMPANY:ブローカー名
TERMINAL_NAME:MT5の名前
TERMINAL_PATH:MT5の起動ディレクトリ
TERMINAL_DATA_PATH:詳細は不明
TERMINAL_COMMONDATA_PATH:詳細は不明

Pocket