FXのチャート分析ソフトMT4で日本時間を表示するには |
FX(外国為替証拠金取引)のチャート分析ソフトMT4(Meta Trader 4)での時刻表示は、MT4のダウンロード先にもよりますが、一般的には中央ヨーロッパ時間であることが多いようです。日本時間の9時は中央ヨーロッパ時間の1時になります。なお、中央ヨーロッパ時間が夏時間の場合には、2時になります。
中央ヨーロッパ時間の他にも、西ヨーロッパ時間、東ヨーロッパ時間などがあり、また、それぞれに夏時間があります。
以下は、日本の時間と各ヨーロッパ時間との対応表です。
MT4で日本時間を表示するには「JPN_Time_Sub」というインディケーターを用いることにより可能になります。「JPN_Time_Sub」は、MT4に標準でインストールされていませんので下のリストをコピーして使用してください。
ファイル名は「JPN_Time_Sub.mq4」として、MT4のインストールされているフォルダ内の「experts」フォルダ内にある「indicators」フォルダに保存します。
「JPN_Time_Sub.mq4」
//作成画面とバッファの指定
#property indicator_separate_window
#property indicator_minimum -1
#property indicator_maximum 2
//初期設定変数
extern bool Grid = false;
extern bool YEAR = false;
extern bool MONTH = true;
extern bool DAY = true;
extern bool HOUR = true;
extern bool MINUTE = true;
extern bool SECOND = false;
extern bool ARROW = false;
extern bool NewLine = false;
extern color GridColor = LightSlateGray;
extern int Time_difference = 7;
extern int FontSize = 8;
extern int TimeInterval = 12;
extern color TextColor = White;
string ObjArray[300000];
datetime JPNT,StandardTime;
//string JPND,JPNM,WinName="JPN_Time_Sub";
string JPND,JPNM,WinName=" ";
int DefPeri,DefWin,ObjTotal;
//初期化
int init(){
IndicatorShortName(" ");
if(DefPeri != Period()){
DefPeri = Period();
DeleteTimeObject();
}
return(0);
}
//終了時 時間表示を削除
int deinit(){
DeleteTimeObject();
return(0);
}
int start(){
int limit=Bars-IndicatorCounted();
for(int i=limit; i>=0; i--){
//基準時間を超えたら作成
if(StandardTime //日本時間の生成
JPNT = Time[i] + Time_difference * 3600;
SetTimeText(Time[i]);
//次の基準時間を設定する
datetime Period_Interval=DefPeri * 60 * TimeInterval;
for(StandardTime = Time[i] + Period_Interval;(TimeDayOfWeek(StandardTime) == 0 || TimeDayOfWeek(StandardTime) == 6) && DefPeri < PERIOD_H1;StandardTime += Period_Interval){}
}
}
return(0);
}
void SetTimeText(datetime settime){
//日付文字列の作成
string Y="";
string M="";
string D="";
JPND = StringSubstr(TimeToStr(JPNT, TIME_DATE),2);
if(YEAR){
Y=StringSubstr(JPND,0,2);
}
if(MONTH){
if(YEAR){
Y=StringConcatenate(Y,".");
}
M=StringSubstr(JPND,3,2);
}
if(DAY){
if(YEAR || MONTH){
M=StringConcatenate(M,".");
}
D=StringSubstr(JPND,6,2);
}
JPND=StringConcatenate(Y,M,D);
//時間文字列の作成
string h="";
string m="";
string s="";
JPNM = TimeToStr(JPNT, TIME_SECONDS);
if(HOUR){
h=StringSubstr(JPNM,0,2);
}
if(MINUTE){
if(HOUR){
h=StringConcatenate(h,":");
}
m=StringSubstr(JPNM,3,2);
}
if(SECOND){
if(HOUR || MINUTE){
m=StringConcatenate(m,":");
}
s=StringSubstr(JPNM,6,2);
}
JPNM=StringConcatenate(h,m,s);
//同じオブジェクトが存在しなければ作成
if(ObjectFind(StringConcatenate("JPNTS_Arrow",JPND,"_",JPNM)) == -1){
MakeTimeObject(StringConcatenate("JPNTS_Arrow",JPND,"_",JPNM),StringConcatenate("JPNTS_Text",JPND,"_",JPNM,"_1"),StringConcatenate("JPNTS_Text",JPND,"_",JPNM,"_2"),StringConcatenate("JPNTS_GridJPN",JPND,"_",JPNM),JPND,JPNM,settime);
}
}
void MakeTimeObject(string ArrowName,string TimeTextName1,string TimeTextName2,string GridName,string DATE,string TIME,datetime settime){
DefWin=WindowFind(WinName);//念の為
int Pos=2;
//矢印の作成
if(ARROW){
ObjArray[ObjTotal]=ArrowName;
ObjTotal++;
ObjectCreate(ArrowName, OBJ_ARROW,DefWin,settime, Pos);
Pos--;
ObjectSet(ArrowName,OBJPROP_ARROWCODE,241);
ObjectSet(ArrowName,OBJPROP_COLOR,TextColor);
}
if(NewLine){
//2行で表示
//日付の作成
ObjArray[ObjTotal]=TimeTextName1;
ObjTotal++;
ObjectCreate(TimeTextName1, OBJ_TEXT,DefWin,settime, Pos);
Pos--;
ObjectSetText(TimeTextName1, DATE, FontSize, "Arial", TextColor);
//時間の作成
ObjArray[ObjTotal]=TimeTextName2;
ObjTotal++;
ObjectCreate(TimeTextName2, OBJ_TEXT,DefWin,settime, Pos);
Pos--;
ObjectSetText(TimeTextName2, TIME, FontSize, "Arial", TextColor);
}else{
//1行で表示
ObjArray[ObjTotal]=StringConcatenate(TimeTextName1,"_",TimeTextName2);
ObjectCreate(ObjArray[ObjTotal], OBJ_TEXT,DefWin,settime, Pos);
Pos--;
if(YEAR || MONTH || DAY){
if(HOUR || MINUTE || SECOND){
ObjectSetText(ObjArray[ObjTotal], StringConcatenate(DATE,"_",TIME), FontSize, "Arial", TextColor);
}else{
ObjectSetText(ObjArray[ObjTotal], DATE, FontSize, "Arial", TextColor);
}
}else if(HOUR || MINUTE || SECOND){
ObjectSetText(ObjArray[ObjTotal], TIME, FontSize, "Arial", TextColor);
}
ObjTotal++;
}
//グリッドの作成
if(Grid){
ObjArray[ObjTotal]=GridName;
ObjTotal++;
ObjectCreate(GridName,OBJ_TREND, 0, settime,0,settime,WindowPriceMax(0));
ObjectSet(GridName,OBJPROP_COLOR,GridColor);
ObjectSet(GridName, OBJPROP_STYLE, STYLE_DOT);
}
ObjectsRedraw();
}
void DeleteTimeObject(){
DefWin=WindowFind(WinName);
//配列に格納した名前で削除
for(int i = 0 ; i < ObjTotal ;i++){
if(ObjArray[i] != ""){
ObjectDelete(ObjArray[i]);
ObjArray[i]="";
}
}
//メソッドからすべてのオブジェクトを取得して削除
ObjTotal=ObjectsTotal();
for(i=ObjTotal;i>=0;i--){
string ObjName=ObjectName(i);
if(StringSubstr(ObjName,0,5) == "JPNTS"){
ObjectDelete(ObjName);
}
}
ObjTotal=0;
}
ファイルを保存したら、MT4を起動します。すでにMT4を起動中の場合には、MT4を再起動します。再起動しないと「JPN_Time_Sub」が動きません。
ナビゲーターウィンドウのCustom Indicatorsに「JPN_Time_Sub」が登録されているのが確認できたら、「JPN_Time_Sub」の文字をダブルクリックします。

上のチャートに日本時間が表示されました。なお、表示の高さは自由に設定できます。
▼JPN_Time_Subのパラメータの設定方法
チャート画面を右クリックしてリストから「表示中の罫線分析ツール」を選びます。

次に、「JPN_Time_Sub」をクリックして「編集」のボタンをクリックします。

「パラメータの入力」タブをクリックすると、各種パラメータが設定できます。

各種パラメータの内容は次の通りです。
日本時間の表示に重要なパラメータは「Time_difference」です。
中央ヨーロッパ時間の他にも、西ヨーロッパ時間、東ヨーロッパ時間などがあり、また、それぞれに夏時間があります。
以下は、日本の時間と各ヨーロッパ時間との対応表です。
日本 | 西ヨーロッパ | 中央ヨーロッパ | 東ヨーロッパ | |||
時間 | 時間 | 夏時間 | 時間 | 夏時間 | 時間 | 夏時間 |
0 | 前15 | 前16 | 前16 | 前17 | 前17 | 前18 |
1 | 前16 | 前17 | 前17 | 前18 | 前18 | 前19 |
2 | 前17 | 前18 | 前18 | 前19 | 前19 | 前20 |
3 | 前18 | 前19 | 前19 | 前20 | 前20 | 前21 |
4 | 前19 | 前20 | 前20 | 前21 | 前21 | 前22 |
5 | 前20 | 前21 | 前21 | 前22 | 前22 | 前23 |
6 | 前21 | 前22 | 前22 | 前23 | 前23 | 0 |
7 | 前22 | 前23 | 前23 | 0 | 0 | 1 |
8 | 前23 | 0 | 0 | 1 | 1 | 2 |
9 | 0 | 1 | 1 | 2 | 2 | 3 |
10 | 1 | 2 | 2 | 3 | 3 | 4 |
11 | 2 | 3 | 3 | 4 | 4 | 5 |
12 | 3 | 4 | 4 | 5 | 5 | 6 |
13 | 4 | 5 | 5 | 6 | 6 | 7 |
14 | 5 | 6 | 6 | 7 | 7 | 8 |
15 | 6 | 7 | 7 | 8 | 8 | 9 |
16 | 7 | 8 | 8 | 9 | 9 | 10 |
17 | 8 | 9 | 9 | 10 | 10 | 11 |
18 | 9 | 10 | 10 | 11 | 11 | 12 |
19 | 10 | 11 | 11 | 12 | 12 | 13 |
20 | 11 | 12 | 12 | 13 | 13 | 14 |
21 | 12 | 13 | 13 | 14 | 14 | 15 |
22 | 13 | 14 | 14 | 15 | 15 | 16 |
23 | 14 | 15 | 15 | 16 | 16 | 17 |
ファイル名は「JPN_Time_Sub.mq4」として、MT4のインストールされているフォルダ内の「experts」フォルダ内にある「indicators」フォルダに保存します。
「JPN_Time_Sub.mq4」
//作成画面とバッファの指定
#property indicator_separate_window
#property indicator_minimum -1
#property indicator_maximum 2
//初期設定変数
extern bool Grid = false;
extern bool YEAR = false;
extern bool MONTH = true;
extern bool DAY = true;
extern bool HOUR = true;
extern bool MINUTE = true;
extern bool SECOND = false;
extern bool ARROW = false;
extern bool NewLine = false;
extern color GridColor = LightSlateGray;
extern int Time_difference = 7;
extern int FontSize = 8;
extern int TimeInterval = 12;
extern color TextColor = White;
string ObjArray[300000];
datetime JPNT,StandardTime;
//string JPND,JPNM,WinName="JPN_Time_Sub";
string JPND,JPNM,WinName=" ";
int DefPeri,DefWin,ObjTotal;
//初期化
int init(){
IndicatorShortName(" ");
if(DefPeri != Period()){
DefPeri = Period();
DeleteTimeObject();
}
return(0);
}
//終了時 時間表示を削除
int deinit(){
DeleteTimeObject();
return(0);
}
int start(){
int limit=Bars-IndicatorCounted();
for(int i=limit; i>=0; i--){
//基準時間を超えたら作成
if(StandardTime //日本時間の生成
JPNT = Time[i] + Time_difference * 3600;
SetTimeText(Time[i]);
//次の基準時間を設定する
datetime Period_Interval=DefPeri * 60 * TimeInterval;
for(StandardTime = Time[i] + Period_Interval;(TimeDayOfWeek(StandardTime) == 0 || TimeDayOfWeek(StandardTime) == 6) && DefPeri < PERIOD_H1;StandardTime += Period_Interval){}
}
}
return(0);
}
void SetTimeText(datetime settime){
//日付文字列の作成
string Y="";
string M="";
string D="";
JPND = StringSubstr(TimeToStr(JPNT, TIME_DATE),2);
if(YEAR){
Y=StringSubstr(JPND,0,2);
}
if(MONTH){
if(YEAR){
Y=StringConcatenate(Y,".");
}
M=StringSubstr(JPND,3,2);
}
if(DAY){
if(YEAR || MONTH){
M=StringConcatenate(M,".");
}
D=StringSubstr(JPND,6,2);
}
JPND=StringConcatenate(Y,M,D);
//時間文字列の作成
string h="";
string m="";
string s="";
JPNM = TimeToStr(JPNT, TIME_SECONDS);
if(HOUR){
h=StringSubstr(JPNM,0,2);
}
if(MINUTE){
if(HOUR){
h=StringConcatenate(h,":");
}
m=StringSubstr(JPNM,3,2);
}
if(SECOND){
if(HOUR || MINUTE){
m=StringConcatenate(m,":");
}
s=StringSubstr(JPNM,6,2);
}
JPNM=StringConcatenate(h,m,s);
//同じオブジェクトが存在しなければ作成
if(ObjectFind(StringConcatenate("JPNTS_Arrow",JPND,"_",JPNM)) == -1){
MakeTimeObject(StringConcatenate("JPNTS_Arrow",JPND,"_",JPNM),StringConcatenate("JPNTS_Text",JPND,"_",JPNM,"_1"),StringConcatenate("JPNTS_Text",JPND,"_",JPNM,"_2"),StringConcatenate("JPNTS_GridJPN",JPND,"_",JPNM),JPND,JPNM,settime);
}
}
void MakeTimeObject(string ArrowName,string TimeTextName1,string TimeTextName2,string GridName,string DATE,string TIME,datetime settime){
DefWin=WindowFind(WinName);//念の為
int Pos=2;
//矢印の作成
if(ARROW){
ObjArray[ObjTotal]=ArrowName;
ObjTotal++;
ObjectCreate(ArrowName, OBJ_ARROW,DefWin,settime, Pos);
Pos--;
ObjectSet(ArrowName,OBJPROP_ARROWCODE,241);
ObjectSet(ArrowName,OBJPROP_COLOR,TextColor);
}
if(NewLine){
//2行で表示
//日付の作成
ObjArray[ObjTotal]=TimeTextName1;
ObjTotal++;
ObjectCreate(TimeTextName1, OBJ_TEXT,DefWin,settime, Pos);
Pos--;
ObjectSetText(TimeTextName1, DATE, FontSize, "Arial", TextColor);
//時間の作成
ObjArray[ObjTotal]=TimeTextName2;
ObjTotal++;
ObjectCreate(TimeTextName2, OBJ_TEXT,DefWin,settime, Pos);
Pos--;
ObjectSetText(TimeTextName2, TIME, FontSize, "Arial", TextColor);
}else{
//1行で表示
ObjArray[ObjTotal]=StringConcatenate(TimeTextName1,"_",TimeTextName2);
ObjectCreate(ObjArray[ObjTotal], OBJ_TEXT,DefWin,settime, Pos);
Pos--;
if(YEAR || MONTH || DAY){
if(HOUR || MINUTE || SECOND){
ObjectSetText(ObjArray[ObjTotal], StringConcatenate(DATE,"_",TIME), FontSize, "Arial", TextColor);
}else{
ObjectSetText(ObjArray[ObjTotal], DATE, FontSize, "Arial", TextColor);
}
}else if(HOUR || MINUTE || SECOND){
ObjectSetText(ObjArray[ObjTotal], TIME, FontSize, "Arial", TextColor);
}
ObjTotal++;
}
//グリッドの作成
if(Grid){
ObjArray[ObjTotal]=GridName;
ObjTotal++;
ObjectCreate(GridName,OBJ_TREND, 0, settime,0,settime,WindowPriceMax(0));
ObjectSet(GridName,OBJPROP_COLOR,GridColor);
ObjectSet(GridName, OBJPROP_STYLE, STYLE_DOT);
}
ObjectsRedraw();
}
void DeleteTimeObject(){
DefWin=WindowFind(WinName);
//配列に格納した名前で削除
for(int i = 0 ; i < ObjTotal ;i++){
if(ObjArray[i] != ""){
ObjectDelete(ObjArray[i]);
ObjArray[i]="";
}
}
//メソッドからすべてのオブジェクトを取得して削除
ObjTotal=ObjectsTotal();
for(i=ObjTotal;i>=0;i--){
string ObjName=ObjectName(i);
if(StringSubstr(ObjName,0,5) == "JPNTS"){
ObjectDelete(ObjName);
}
}
ObjTotal=0;
}
ファイルを保存したら、MT4を起動します。すでにMT4を起動中の場合には、MT4を再起動します。再起動しないと「JPN_Time_Sub」が動きません。
ナビゲーターウィンドウのCustom Indicatorsに「JPN_Time_Sub」が登録されているのが確認できたら、「JPN_Time_Sub」の文字をダブルクリックします。

上のチャートに日本時間が表示されました。なお、表示の高さは自由に設定できます。
▼JPN_Time_Subのパラメータの設定方法
チャート画面を右クリックしてリストから「表示中の罫線分析ツール」を選びます。

次に、「JPN_Time_Sub」をクリックして「編集」のボタンをクリックします。

「パラメータの入力」タブをクリックすると、各種パラメータが設定できます。

各種パラメータの内容は次の通りです。
日本時間の表示に重要なパラメータは「Time_difference」です。
- Grid
- 表示した時刻に垂線を引きます。垂線の色は、GridColorで指定できます。
- YEAR
- 年を表示します。2012年なら「12」を表示します。
- MONTH
- 月を表示します。
- DAY
- 日を表示します。
- HOUR
- 時を表示します。
- MINUTE
- 分を表示します。
- SECOND
- 秒を表示します。
- ARROW
- 表示した時刻の上に矢印を表示します。
- NewLine
- 時刻の表示を2行で表示します。
- GridColor
- 垂線の色を指定します。
- Time_difference
- MT4の表示時刻と日本時間との差を指定します。各ヨーロッパ時間や夏時間などによる時間差を設定します。通常は「7」に設定されていますが、夏時間の場合には「6」に設定します。
- FontSize
- 時刻を表示する文字の大きさを指定します。
- TimeInterval
- ローソク足1本分を1として、時刻を表示する間隔を指定します。
- TextColor
- 時刻を表示する色を指定します。
(2012年05月30日更新)