2012年8月20日月曜日

MT4でFXやCFDの1日ごとの相場を表示するには

MT4(Meta Trader 4)でFXやCFDなどのチャートを表示して、1日ごとの相場の動きを一目でわかるようにするインディケーターを紹介します。

インディケーターは「Coloured_Days_on_Chart」という名前で、1日ごとに背景色が変わるため、例えば2日前の相場の動きをすぐに見つけることができます。また、1日の高値と安値の値幅分が背景色になるので、1日ごとの値動きを知ることもできます。


上の図は、EUR/USDのチャートにColoured_Days_on_Chartを表示したものです。

1日ごとに背景の色が変わって表示されます。また、1日ごとに背景の高さがかわっていることがわかります。


上の図は、EUR/USDのチャートにColoured_Days_on_Chartを表示したもので、時間足を4時間に設定したものです。背景色のない部分(2か所)は週末です。Coloured_Days_on_Chartを用いると、相場全体の動きを知ることができます。例えば、赤色の四角で囲んだ部分では、背景の部分が細長い長方形になっています。背景の部分が細長くなればなるほど、高値と安値の差が大きいことになりボラティリティが高かったことがわかります。

次のリストは、Coloured_Days_on_Chartのプログラムです。「Coloured_Days_on_Chart.mq4」のファイル名で、MT4のインストールされた「experts」フォルダ内の「indicators」フォルダに保存することで使用できます。

「Coloured_Days_on_Chart.mq4」
//+------------------------------------------------------------------+
//| Coloured Days on Chart.mq4 v1.0 |
//| Copyright (C) 2008, Jason Robinson (jnrtrading). |
//| http://www.spreadtrade2win.com |
//+------------------------------------------------------------------+
#property copyright "Copyright (C) 2008, Jason Robinson (jnrtrading)."
#property link "http://www.spreadtrade2win.com"

#property indicator_chart_window
extern int No_of_days_to_colour = 20;
extern color Colour1 = LightGray;
extern color Colour2 = DarkGray;
double Days[][6];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
ArrayCopyRates(Days,Symbol(),PERIOD_D1);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
for (int i = No_of_days_to_colour; i >= 0; i--) {
ObjectDelete("Day"+i);
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//---

for (int i = 0; i <= No_of_days_to_colour; i++) {
ObjectCreate("Day"+i,OBJ_RECTANGLE,0,Days[i][0]+86400,Days[i][3],Days[i][0],Days[i][2]);
if (i % 2 == 0)
ObjectSet("Day"+i,OBJPROP_COLOR,Colour1);
else
ObjectSet("Day"+i,OBJPROP_COLOR,Colour2);
}


//----
return(0);
}
//+------------------------------------------------------------------+