DayOfWeek()やHour()といった時刻関数の書式を調べても、実際に組み合わせてどう使うのか分からない——という人向けの記事です。
この記事では、各時刻関数の説明に加えて、実際にMetaEditorでコンパイルしてチャート上に現在時刻を表示できるサンプルコードを紹介します。
時刻関数
今回は日付と時間を扱う時刻の関数系をご紹介したいと思います。
DayOfWeek()
DayOfWeekは、現在の曜日の関数になります。0から始まる点に注意してください(1からではありません)。
int DayOfWeek();//0:日曜日、1:月曜日、2:火曜日、3:水曜日、4:木曜日、5:金曜日、6:土曜日
Year()
Year()は現在の年の関数になります。
int Year();
Month()
int Month();
Day()
Day()は現在の日の関数になります。
int Day();
Hour()
Hour()は現在の時間の関数になります。
int Hour();
Minute()
Minute()は現在の分数の関数になります。
int Minute();
Seconds()
Seconds()の現在の秒数の関数になります。
int Seconds();
TimeCurrent()
TimeCurrent() は現在のサーバーの時刻です。
- OnTick()で呼び出し:tick受信した時間を返す
- OnInit()関数, OnDeinit()関数, OnTimer()関数:クォート受信時間を返す
datetime TimeCurrent();
TimeLocal()
TimeLocal()は実行しているコンピュータのローカル時間を返します。
datetime TimeLocal();
時刻関数を組み合わせてチャートに現在時刻を表示する
ここまでの関数を組み合わせて、サーバー時刻をチャート左上に1秒ごとに表示するインジケーターを作ってみましょう。
//+------------------------------------------------------------------+
//| TimeLabel.mq4 |
//+------------------------------------------------------------------+
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
EventSetTimer(1);//1秒ごとにOnTimer()を呼び出す
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
EventKillTimer();
ObjectDelete(0, "TimeLabel");
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
string text = StringFormat("%04d/%02d/%02d %02d:%02d:%02d (曜日:%d)",
Year(), Month(), Day(), Hour(), Minute(), Seconds(), DayOfWeek());
if(ObjectFind(0, "TimeLabel") < 0)
{
ObjectCreate(0, "TimeLabel", OBJ_LABEL, 0, 0, 0);
ObjectSetInteger(0, "TimeLabel", OBJPROP_CORNER, CORNER_LEFT_UPPER);
ObjectSetInteger(0, "TimeLabel", OBJPROP_XDISTANCE, 10);
ObjectSetInteger(0, "TimeLabel", OBJPROP_YDISTANCE, 20);
}
ObjectSetString(0, "TimeLabel", OBJPROP_TEXT, text);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
return(0);
}
//+------------------------------------------------------------------+
ポイントはEventSetTimer(1)とOnTimer()の組み合わせです。OnTick()は新しいティックが来ないと呼ばれませんが、EventSetTimer()で登録した秒数ごとにOnTimer()が呼ばれるため、値動きがない時間帯でも時刻表示を更新し続けられます。OnDeinit()で必ずEventKillTimer()を呼んでタイマーを解除し、表示していたラベルも削除しておきましょう。
まとめ
今回は時刻関数についてご紹介しました。これらの関数を活用することで、
インジケーターやEAなどを時間制御することが可能になります。
コメント