news indicator
19 Oct 2014, 15:03
good afternoon, is possible add this indicator in ctarder ? the converter online not work, thanks.
//+--------------------------------------------------------------------------------+
//|ForexNews Market Clock indicator forex_news_market_clock.mq4 |
//| |
//| Made by Tjipke de Vries (deVries) at mql4.com |
//| Indicator displays a News Calendar with a market clock. |
//| news events "http://www.dailyfx.com/files/" |
//| |
//| Some sources I have used |
//| This article Displaying a News Calendar written by Slobodov Gleb and to read at|
//| http://articles.mql4.com/523 shows a way how to get data displayed on the chart|
//| The file contains the description of writing a simple and convenient indicator |
//| displaying in a working area the main economic events from external Internet |
//| resources. |
//| |
//| Another source I have used for this indicator is the indicator SimpleMarketInfo|
//| here to find http://codebase.mql4.com/7157 made by born2trade (2010.11.25)|
//| It shows upcoming news events 1 hour before and 30 minutes after event. It also|
//| shows active sessions etc. It gives a look to all news events. |
//| changes on this. I did wanna have the possibillity to choose the kind of news |
//| I like to see, and when local time isn't brokertime there was not the correct |
//| displaying vertical lines on the chart. And some other changes... |
//| |
//| Found the indicator Clockzv1_2 auto.mq4 (http://forum.mql4.com/14052#91898) |
//| from "Jerome" This version made it possible for me to write down the coming DST|
//| times for the local markets also. ST/DST changes are unique to each timezone. |
//| To know when a market is open we have to know the right localtime... |
//| timezones http://www.timeanddate.com/worldclock/ |
//| markethours: http://www.2011.worldmarkethours.com/Forex/index1024.htm |
//| Auckland/Sydney/Tokyo/Hong Kong/Europe/London/New York |
//| |
//| The clock will display the different times, the open markets and market holiday|
//| More info: http://www.donnaforex.com/forum/index.php?topic=4339.0 |
//+--------------------------------------------------------------------------------+
#property copyright "deVries"
#property link ""
#property indicator_chart_window
#property indicator_buffers 0
#include <stdlib.mqh>
//----
#import "wininet.dll"
int InternetAttemptConnect(int x);
int InternetOpenW(string sAgent,int lAccessType,
string sProxyName="",string sProxyBypass="",
int lFlags=0);
int InternetOpenUrlW(int hInternetSession,string sUrl,
string sHeaders="",int lHeadersLength=0,
int lFlags=0,int lContext=0);
int InternetReadFile(int hFile,int &sBuffer[],int lNumBytesToRead,
int &lNumberOfBytesRead[]);
int InternetCloseHandle(int hInet);
#import
#define COLUMN_DATE 0
#define COLUMN_TIME 1
#define COLUMN_TIMEZONE 2
#define COLUMN_CURRENCY 3
#define COLUMN_DESCRIPTION 4
#define COLUMN_IMPORTANCE 5
#define COLUMN_ACTUAL 6
#define COLUMN_FORECAST 7
#define COLUMN_PREVIOUS 8
#define COLUMN_DATE_DAY_STR 0
#define COLUMN_DATE_MONTH_STR 1
#define COLUMN_DATE_DAY_INT 2
int time_zone_gmt =0;//LOCAL TIMEZONE WILL BE CHANGED TO
//YOUR PC-TIMEZONE AUTOMATICLY
//---- input parameters news
extern string news_parameters="Make your selection";
extern color session_upcoming_title_color=Purple;
extern color session_closing_color=Red;
extern color bar_closing_color=Green;
extern string if_show_currency_news_only="Choose auto true";
extern bool auto=true;
extern bool show_low_news = true;
extern bool show_medium_news = true;
extern bool show_high_news = true;
extern color news_past_color = Gray;
extern color news_high_color = Red;
extern color news_medium_color = Orange;
extern color news_low_color = Blue;
extern string if_auto_false="select news currencie(s)";
extern bool show_eur = true;
extern bool show_usd = true;
extern bool show_jpy = true;
extern bool show_gbp = true;
extern bool show_chf = true;
extern bool show_cad = true;
extern bool show_aud = true;
extern bool show_nzd = true;
extern bool show_cny = true;
//verticale lines
extern bool show_news_lines = true; //verticale lines show moments of news
extern bool show_line_text = true; //news text by verticale lines
//---------------------------------------------------
//---- input parameters clock
int Clockcorner=0;
extern string input_parameters="for the clock";
extern int godown=0;
extern int goright=0;
//Colors clock
extern color labelColor=DarkSlateGray;
extern color clockColor=DarkSlateGray;
extern color ClockMktOpenColor=Red;
extern color ClockMktHolidayClr=PaleTurquoise;// Blue;
bool show12HourTime=false; //YOU CAN CHANGE IT BUT I LIKE THIS MORE
extern bool ShowSpreadChart=true;
extern bool ShowBarTime=true;
extern bool ShowLocal=true;
extern bool ShowBroker=true;
extern bool ShowGMT=true;
//FOUND THE TIMES WHEN THE MARKETS WERE OPEN AT
//World Financial Markets http://www.2011.worldmarkethours.com/Forex/index1024.htm
extern bool Show_NEW_ZEALAND=true;//Auckland GMT+12
extern bool Show_AUSTRALIA=true;//Sydney GMT+12
extern bool Show_JAPAN=true;//Tokyo GMT+9
extern bool Show_HONG_KONG=true;// GMT+8
extern bool Show_EUROPE=true;//Frankfurt GMT+1
extern bool Show_LONDON=true;//GMT+0
extern bool Show_NEW_YORK=true;//GMT-5
string news_url="http://www.dailyfx.com/files/";
int update_interval=15;
int show_min_before_news=60;
double spread;
datetime NZDHoliday =0;
datetime AUDHoliday =0;
datetime JPYHoliday =0;
datetime CNYHoliday =0;
datetime EURHoliday =0;
datetime GBPHoliday =0;
datetime USDHoliday =0;
datetime localTime;
#import "kernel32.dll"
void GetLocalTime(int &LocalTimeArray[]);
void GetSystemTime(int &systemTimeArray[]);
int GetTimeZoneInformation(int &LocalTZInfoArray[]);
bool SystemTimeToTzSpecificLocalTime(int &targetTZinfoArray[],int &systemTimeArray[],int &targetTimeArray[]);
#import
//---- buffers
double ExtMapBuffer1[];
int LondonTZ= 0;
int TokyoTZ = 9;
int NewYorkTZ= -5;
int SydneyTZ = 11;
int BerlinTZ = 1;
int AucklandTZ = 13;
int HongKongTZ = 8;
datetime newyork,london,frankfurt,tokyo,sydney,auckland,hongkong,GMT;
string newyorks,londons,frankfurts,tokyos,sydneys,aucklands,hongkongs,GMTs;
// -----------------------------------------------------------------------------------------------------------------------------
int TotalNews=0;
string News[1000][10];
datetime lastUpdate=0;
int NextNewsLine=0;
int LastAlert=0;
double Points;
// -----------------------------------------------------------------------------------------------------------------------------
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
int top=godown+20;
int left2= 70+goright;
int left =left2;
if(show12HourTime) left=left2-20;
if(ShowSpreadChart)
{
ObjectMakeLabel("Spread Monitor1",left-45,top);
ObjectMakeLabel("Spread Monitor2",left2+25,top);
top+=15;
}
if(ShowBarTime)
{
ObjectMakeLabel("barl",left2,top);
ObjectMakeLabel("bart",left-45,top);
top+=15;
}
top+=5;
if(ShowLocal)
{
ObjectMakeLabel("locl",left2,top);
ObjectMakeLabel("loct",left-45,top);
top+=15;
}
if(ShowBroker)
{
ObjectMakeLabel("brol",left2,top);
ObjectMakeLabel("brot",left-45,top);
top+=15;
}
if(ShowGMT)
{
ObjectMakeLabel("gmtl",left2,top);
ObjectMakeLabel("gmtt",left-45,top);
top+=15;
}
top+=5;
if(Show_NEW_ZEALAND)
{
ObjectMakeLabel("NZDl",left2,top);
ObjectMakeLabel("NZDt",left-45,top);
top+=15;
}
if(Show_AUSTRALIA)
{
ObjectMakeLabel("sydl",left2,top);
ObjectMakeLabel("sydt",left-45,top);
top+=15;
}
if(Show_JAPAN)
{
ObjectMakeLabel("tokl",left2,top);
ObjectMakeLabel("tokt",left-45,top);
top+=15;
}
if(Show_HONG_KONG)
{
ObjectMakeLabel("HKl",left2,top);
ObjectMakeLabel("HKt",left-45,top);
top+=15;
}
if(Show_EUROPE)
{
ObjectMakeLabel("berl",left2,top);
ObjectMakeLabel("bert",left-45,top);
top+=15;
}
if(Show_LONDON)
{
ObjectMakeLabel("lonl",left2,top);
ObjectMakeLabel("lont",left-45,top);
top+=15;
}
if(Show_NEW_YORK)
{
ObjectMakeLabel("nyl",left2,top);
ObjectMakeLabel("nyt",left-45,top);
top+=15;
}
CreateInfoObjects();
return(0);
}
// -----------------------------------------------------------------------------------------------------------------------------
int deinit()
{
//----
ObjectDelete("locl");
ObjectDelete("loct");
ObjectDelete("nyl");
ObjectDelete("nyt");
ObjectDelete("gmtl");
ObjectDelete("gmtt");
ObjectDelete("berl");
ObjectDelete("bert");
ObjectDelete("NZDl");
ObjectDelete("NZDt");
ObjectDelete("lonl");
ObjectDelete("lont");
ObjectDelete("tokl");
ObjectDelete("tokt");
ObjectDelete("HKl");
ObjectDelete("HKt");
ObjectDelete("sydl");
ObjectDelete("sydt");
ObjectDelete("brol");
ObjectDelete("brot");
ObjectDelete("barl");
ObjectDelete("bart");
ObjectDelete("Spread Monitor1");
ObjectDelete("Spread Monitor2");
DeleteNewsObjects();
DeleteSessionInfoObjects();
//----
DisplaySessionInfo();
return(0);
}
// -----------------------------------------------------------------------------------------------------------------------------
int start()
{
static datetime last_timecurrent;
if(!IsDllsAllowed())
{
Alert("Clock V1_2: DLLs are disabled. To enable tick the checkbox in the Common Tab of indicator");
return;
}
int counted_bars=IndicatorCounted();
//----
int systemTimeArray[4];
int LocalTimeArray[4];
int TZInfoArray[43];
int nYear,nMonth,nDay,nHour,nMin,nSec,nMilliSec;
string sMilliSec;
HandleDigits();
GetLocalTime(LocalTimeArray);
//---- parse date and time from array
/*
nYear=TimeArray[0]&0x0000FFFF;
nMonth=TimeArray[0]>>16;
nDay=TimeArray[1]>>16;
nHour=TimeArray[2]&0x0000FFFF;
nMin=TimeArray[2]>>16;
nSec=TimeArray[3]&0x0000FFFF;
nMilliSec=TimeArray[3]>>16;
*/
string LocalTimeS=FormatDateTime(nYear,nMonth,nDay,nHour,nMin,nSec);
datetime localTime=TimeArrayToTime(LocalTimeArray);//StrToTime( LocalTimeS );
//-----------------------------------------------------
GMTs=TimeToString1(GMT);
string locals=TimeToString1(localTime);
londons=TimeToString1(london);
frankfurts=TimeToString1(frankfurt);
tokyos=TimeToString1(tokyo);
newyorks= TimeToString1(newyork);
sydneys = TimeToString1(sydney);
aucklands = TimeToString1( auckland );
hongkongs = TimeToString1( hongkong );
string brokers=TimeToString1(CurTime());
string bars=TimeToStr(CurTime()-Time[0],TIME_MINUTES);
// DisplayTodaysNews();
//-----------------------------------------------------
LondonTZ = GMT_Offset("LONDON",localTime); //GBP
TokyoTZ = GMT_Offset("TOKYO",localTime); //JPY
NewYorkTZ = GMT_Offset("US",localTime); //USD
SydneyTZ = GMT_Offset("SYDNEY",localTime); //AUD
BerlinTZ = GMT_Offset("FRANKFURT",localTime);//EUR
AucklandTZ = GMT_Offset("AUCKLAND",localTime);//NZD
HongKongTZ = GMT_Offset("HONGKONG",localTime);//CNY
//-----------------------------------------------------
/*
int gmt_shift=0;
int dst=GetTimeZoneInformation(TZInfoArray);
if(dst!=0) gmt_shift=TZInfoArray[0];
if(dst==2) gmt_shift+=TZInfoArray[42];
*/
GetSystemTime(systemTimeArray);
GMT=TimeArrayToTime(systemTimeArray);//localTime + gmt_shift * 60;
london= GMT+3600 * LondonTZ;
tokyo = GMT+3600 * TokyoTZ;
newyork= GMT+3600 * NewYorkTZ;
sydney = GMT+3600 * SydneyTZ;
frankfurt= GMT+3600 * BerlinTZ;
auckland = GMT +3600 * AucklandTZ;
hongkong = GMT + 3600 * HongKongTZ;
// time_zone_gmt = -(gmt_shift/60);
time_zone_gmt=(localTime-GMT)/3600;
DisplaySessionInfo();
DisplayTodaysNews();
if(ShowLocal)
{
ObjectSetText("locl","Local time",10,"Arial Black",labelColor);
ObjectSetText("loct",locals,10,"Arial Black",ClockMktOpenColor);
}
if(ShowBroker)
{
ObjectSetText("brol","Broker time",10,"Arial Black",labelColor);
ObjectSetText("brot",brokers,10,"Arial Black",ClockMktOpenColor);
}
if(ShowGMT)
{
ObjectSetText("gmtl","GMT",10,"Arial Black",labelColor);
ObjectSetText("gmtt",GMTs,10,"Arial Black",ClockMktOpenColor);
}
//--------------------------
if(Show_NEW_ZEALAND)
{
if(NZDHoliday<TimeCurrent())
{
if(StrToTime(aucklands)>StrToTime("10:00") && StrToTime(aucklands)<StrToTime("16:45") && TimeDayOfWeek(auckland)!=0 && TimeDayOfWeek(auckland)!=6)
{
ObjectSetText("NZDl","New Zealand ",10,"Arial Black",ClockMktOpenColor);
ObjectSetText("NZDt",aucklands,10,"Arial Black",ClockMktOpenColor);
}
else
{
ObjectSetText("NZDl","New Zealand ",10,"Arial Black",labelColor);
ObjectSetText("NZDt",aucklands,10,"Arial Black",clockColor);
}
}
if(NZDHoliday>TimeCurrent())
{
ObjectSetText("NZDl","New Zealand market Holiday ",10,"Arial Black",ClockMktHolidayClr);
ObjectSetText("NZDt",aucklands,10,"Arial Black",ClockMktHolidayClr);
}
}
//---------------------------
if(Show_AUSTRALIA)
{
if(AUDHoliday<TimeCurrent())
{
if(StrToTime(sydneys)>StrToTime("10:00") && StrToTime(sydneys)<StrToTime("17:00") && TimeDayOfWeek(sydney)!=0 && TimeDayOfWeek(sydney)!=6)
{
ObjectSetText("sydl","Australia ",10,"Arial Black",ClockMktOpenColor);
ObjectSetText("sydt",sydneys,10,"Arial Black",ClockMktOpenColor);
}
else
{
ObjectSetText("sydl","Australia ",10,"Arial Black",labelColor);
ObjectSetText("sydt",sydneys,10,"Arial Black",clockColor);
}
}
if(AUDHoliday>TimeCurrent())
{
ObjectSetText("sydl","Australia market Holiday ",10,"Arial Black",ClockMktHolidayClr);
ObjectSetText("sydt",sydneys,10,"Arial Black",ClockMktHolidayClr);
}
}
//---------------------------
if(Show_JAPAN)
{
if(JPYHoliday<TimeCurrent())
{
if(StrToTime(tokyos)>StrToTime("9:00") && StrToTime(tokyos)<StrToTime("12:30") && TimeDayOfWeek(tokyo)!=0 && TimeDayOfWeek(tokyo)!=6)
{
ObjectSetText("tokl","Japan ",10,"Arial Black",ClockMktOpenColor);
ObjectSetText("tokt",tokyos,10,"Arial Black",ClockMktOpenColor);
}
else
if(StrToTime(tokyos)>StrToTime("14:00") && StrToTime(tokyos)<StrToTime("17:00") && TimeDayOfWeek(tokyo)!=0 && TimeDayOfWeek(tokyo)!=6)
{
ObjectSetText("tokl","Japan ",10,"Arial Black",ClockMktOpenColor);
ObjectSetText("tokt",tokyos,10,"Arial Black",ClockMktOpenColor);
}
else
{
ObjectSetText("tokl","Japan ",10,"Arial Black",labelColor);
ObjectSetText("tokt",tokyos,10,"Arial Black",clockColor);
}
}
if(JPYHoliday>TimeCurrent())
{
ObjectSetText("tokl","Japan market Holiday ",10,"Arial Black",ClockMktHolidayClr);
ObjectSetText("tokt",tokyos,10,"Arial Black",ClockMktHolidayClr);
}
}
//---------------------------
if(Show_HONG_KONG)
{
if(CNYHoliday<TimeCurrent())
{
if(StrToTime(hongkongs)>StrToTime("10:00") && StrToTime(hongkongs)<StrToTime("17:00") && TimeDayOfWeek(hongkong)!=0 && TimeDayOfWeek(hongkong)!=6)
{
ObjectSetText("HKl","Hong Kong ",10,"Arial Black",ClockMktOpenColor);
ObjectSetText("HKt",hongkongs,10,"Arial Black",ClockMktOpenColor);
}
else
{
ObjectSetText("HKl","Hong Kong ",10,"Arial Black",labelColor);
ObjectSetText("HKt",hongkongs,10,"Arial Black",clockColor);
}
}
if(CNYHoliday>TimeCurrent())
{
ObjectSetText("HKl","Hong Kong market Holiday ",10,"Arial Black",ClockMktHolidayClr);
ObjectSetText("HKt",hongkongs,10,"Arial Black",ClockMktHolidayClr);
}
}
//---------------------------
if(Show_EUROPE)
{
if(EURHoliday<TimeCurrent())
{
if(StrToTime(frankfurts)>StrToTime("9:00") && StrToTime(frankfurts)<StrToTime("17:30") && TimeDayOfWeek(frankfurt)!=0 && TimeDayOfWeek(frankfurt)!=6)
{
ObjectSetText("berl","Europe ",10,"Arial Black",ClockMktOpenColor);
ObjectSetText("bert",frankfurts,10,"Arial Black",ClockMktOpenColor);
}
else
{
ObjectSetText("berl","Europe ",10,"Arial Black",labelColor);
ObjectSetText("bert",frankfurts,10,"Arial Black",clockColor);
}
}
if(EURHoliday>TimeCurrent())
{
ObjectSetText("berl","European market Holiday ",10,"Arial Black",ClockMktHolidayClr);
ObjectSetText("bert",frankfurts,10,"Arial Black",ClockMktHolidayClr);
}
}
//---------------------------
if(Show_LONDON)
{
if(GBPHoliday<TimeCurrent())
{
if(StrToTime(londons)>StrToTime("8:00") && StrToTime(londons)<StrToTime("17:00") && TimeDayOfWeek(london)!=0 && TimeDayOfWeek(london)!=6)
{
ObjectSetText("lonl","UK ",10,"Arial Black",ClockMktOpenColor);
ObjectSetText("lont",londons,10,"Arial Black",ClockMktOpenColor);
}
else
{
ObjectSetText("lonl","UK ",10,"Arial Black",labelColor);
ObjectSetText("lont",londons,10,"Arial Black",clockColor);
}
}
if(GBPHoliday>TimeCurrent())
{
ObjectSetText("lonl","London market Holiday ",10,"Arial Black",ClockMktHolidayClr);
ObjectSetText("lont",londons,10,"Arial Black",ClockMktHolidayClr);
}
}
//---------------------------
if(Show_NEW_YORK)
{
if(USDHoliday<TimeCurrent())
{
if(StrToTime(newyorks)>StrToTime("8:00") && StrToTime(newyorks)<StrToTime("17:00") && TimeDayOfWeek(newyork)!=0 && TimeDayOfWeek(newyork)!=6)
{
ObjectSetText("nyl","North America ",10,"Arial Black",ClockMktOpenColor);
ObjectSetText("nyt",newyorks,10,"Arial Black",ClockMktOpenColor);
}
else
{
ObjectSetText("nyl","North America ",10,"Arial Black",labelColor);
ObjectSetText("nyt",newyorks,10,"Arial Black",clockColor);
}
}
if(USDHoliday>TimeCurrent())
{
ObjectSetText("nyl","New York market Holiday ",10,"Arial Black",ClockMktHolidayClr);
ObjectSetText("nyt",newyorks,10,"Arial Black",ClockMktHolidayClr);
}
}
//---------------------------
ObjectSetText("barl","Bar time",10,"Arial Black",labelColor);
ObjectSetText("bart",bars,10,"Arial Black",clockColor);
spread=NormalizeDouble((Ask-Bid)/Points,1);
ObjectSetText("Spread Monitor1","Spread ",10,"Arial Black",labelColor);
ObjectSetText("Spread Monitor2",DoubleToStr(spread,1),10,"Arial Black",clockColor);
//----
return(0);
}
// -----------------------------------------------------------------------------------------------------------------------------
int DisplayTodaysNews()
{
string news[1000][10];
datetime time=TimeCurrent();
if(time>=lastUpdate+update_interval*60)
{
DeleteNewsObjects();
string str="";
InitNews(news,time_zone_gmt,news_url);
if(show_news_lines)
{
DrawNewsLines(news,show_line_text,news_high_color,news_medium_color,news_low_color);
}
}
ShowNewsCountDown(news,show_min_before_news,1,news_high_color,news_medium_color,news_low_color,news_past_color,session_upcoming_title_color);
return(0);
}
// -----------------------------------------------------------------------------------------------------------------------------
string FormatDateTime(int nYear,int nMonth,int nDay,int nHour,int nMin,int nSec)
{
string sMonth,sDay,sHour,sMin,sSec;
//----
sMonth=100+nMonth;
sMonth=StringSubstr(sMonth,1);
sDay=100+nDay;
sDay=StringSubstr(sDay,1);
sHour=100+nHour;
sHour=StringSubstr(sHour,1);
sMin=100+nMin;
sMin=StringSubstr(sMin,1);
sSec=100+nSec;
sSec=StringSubstr(sSec,1);
//----
return(StringConcatenate(nYear,".",sMonth,".",sDay," ",sHour,":",sMin,":",sSec));
}
// -----------------------------------------------------------------------------------------------------------------------------
int Explode(string str,string delimiter,string &arr[])
{
int i=0;
int pos=StringFind(str,delimiter);
while(pos!=-1)
{
if(pos==0) arr[i]=""; else arr[i]=StringSubstr(str,0,pos);
i++;
str = StringSubstr(str, pos+StringLen(delimiter));
pos = StringFind(str, delimiter);
if(pos==-1 || str=="") break;
}
arr[i]=str;
return(i+1);
}
// -----------------------------------------------------------------------------------------------------------------------------
datetime TimeArrayToTime(int &LocalTimeArray[])
{
//---- parse date and time from array
int nYear,nMonth,nDOW,nDay,nHour,nMin,nSec,nMilliSec;
//string sMilliSec;
nYear=LocalTimeArray[0]&0x0000FFFF;
nMonth=LocalTimeArray[0]>>16;
//nDOW=LocalTimeArray[1]&0x0000FFFF;
nDay=LocalTimeArray[1]>>16;
nHour=LocalTimeArray[2]&0x0000FFFF;
nMin=LocalTimeArray[2]>>16;
nSec=LocalTimeArray[3]&0x0000FFFF;
nMilliSec=LocalTimeArray[3]>>16;
string LocalTimeS=FormatDateTime(nYear,nMonth,nDay,nHour,nMin,nSec);
datetime Local_Time=StrToTime(LocalTimeS);
return(Local_Time);
} // end of TimeArrayToTime
//+------------------------------------------------------------------+
// -----------------------------------------------------------------------------------------------------------------------------
// Used to find out if news curreny is of interest to current symbol/chart.
// Will have to be changed if symbol format does not look like for example eurusd or usdjpy
bool IsNewsCurrency(string cSymbol,string fSymbol)
{
if(fSymbol == "usd") fSymbol = "USD";else
if(fSymbol == "gbp") fSymbol = "GBP";else
if(fSymbol == "eur") fSymbol = "EUR";else
if(fSymbol == "cad") fSymbol = "CAD";else
if(fSymbol == "aud") fSymbol = "AUD";else
if(fSymbol == "chf") fSymbol = "CHF";else
if(fSymbol == "jpy") fSymbol = "JPY";else
if(fSymbol == "cny") fSymbol = "CNY";else
if(fSymbol == "nzd") fSymbol = "NZD";
if((auto) && (StringFind(cSymbol,fSymbol,0)>=0)){return(true);}
if(!auto && show_usd && fSymbol == "USD"){return(true);}
if(!auto && show_gbp && fSymbol == "GBP"){return(true);}
if(!auto && show_eur && fSymbol == "EUR"){return(true);}
if(!auto && show_cad && fSymbol == "CAD"){return(true);}
if(!auto && show_aud && fSymbol == "AUD"){return(true);}
if(!auto && show_chf && fSymbol == "CHF"){return(true);}
if(!auto && show_jpy && fSymbol == "JPY"){return(true);}
if(!auto && show_nzd && fSymbol == "NZD"){return(true);}
if(!auto && show_cny && fSymbol == "CNY"){return(true);}
return(false);
}
// -----------------------------------------------------------------------------------------------------------------------------
void InitNews(string &news[][],int timeZone,string newsUrl)
{
if(DoFileDownLoad()) //Added to check if the CSV file already exists
{
DownLoadWebPageToFile(newsUrl); //downloading the CSV file
lastUpdate=TimeCurrent();
}
if(CsvNewsFileToArray(news)==0)
return(0);
NormalizeNewsData(news,timeZone);
}
// -----------------------------------------------------------------------------------------------------------------------------
bool DoFileDownLoad() // If we have recent file don't download again
{
int handle;
datetime time=TimeCurrent();
handle=FileOpen(NewsFileName(),FILE_READ); //commando to open the file
if(handle>0)//when the file exists we read data
{
FileClose(handle);//close it again check is done
if(time >= lastUpdate+update_interval*60)return(true);
return(false);//file exists no need to download again
}
// File does not exist if FileOpen return -1 or if GetLastError = ERR_CANNOT_OPEN_FILE (4103)
return(true); //commando true to download CSV file
}
// -----------------------------------------------------------------------------------------------------------------------------
void NormalizeNewsData(string &news[][],int timeDiffGmt,int startRow=1)
{
int totalNewsItems=ArrayRange(news,0)-startRow;
for(int i=0; i<totalNewsItems; i++)
{
string tmp[3],tmp1[2];
Explode(news[i][COLUMN_DATE]," ",tmp);
int mon=0;
if(tmp[COLUMN_DATE_MONTH_STR]=="Jan") mon=1; else
if(tmp[COLUMN_DATE_MONTH_STR]=="Feb") mon=2; else
if(tmp[COLUMN_DATE_MONTH_STR]=="Mar") mon=3; else
if(tmp[COLUMN_DATE_MONTH_STR]=="Apr") mon=4; else
if(tmp[COLUMN_DATE_MONTH_STR]=="May") mon=5; else
if(tmp[COLUMN_DATE_MONTH_STR]=="Jun") mon=6; else
if(tmp[COLUMN_DATE_MONTH_STR]=="Jul") mon=7; else
if(tmp[COLUMN_DATE_MONTH_STR]=="Aug") mon=8; else
if(tmp[COLUMN_DATE_MONTH_STR]=="Sep") mon=9; else
if(tmp[COLUMN_DATE_MONTH_STR]=="Oct") mon=10; else
if(tmp[COLUMN_DATE_MONTH_STR]=="Nov") mon=11; else
if(tmp[COLUMN_DATE_MONTH_STR]=="Dec") mon=12;
news[i][COLUMN_DATE]=Year()+"."+mon+"."+tmp[COLUMN_DATE_DAY_INT];
if(news[i][COLUMN_TIME]=="")
{
news[i][COLUMN_TIME]="00:00";
news[i][COLUMN_TIMEZONE]="ALL";
}
datetime dt=StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME]);
// Adjust for time zone
dt=dt+((timeDiffGmt)*3600);
news[i][COLUMN_DATE] = TimeToStr(dt , TIME_DATE);
news[i][COLUMN_TIME] = TimeToStr(dt , TIME_MINUTES);
}
}
// -----------------------------------------------------------------------------------------------------------------------------
void DownLoadWebPageToFile(string url="http://www.dailyfx.com/files/") // andre9@ya.ru
{
if(url == "http://www.dailyfx.com/files/")
url = StringConcatenate(url,NewsFileName(true));
if(!IsDllsAllowed())
{
Alert("Please allow DLL imports");
return("");
}
int result = InternetAttemptConnect(0);
if(result != 0)
{
Alert("Cannot connect to internet - InternetAttemptConnect()");
return("");
}
int hInternetSession = InternetOpenW("Microsoft Internet Explorer", 0, "", "", 0);
if(hInternetSession <= 0)
{
Alert("Cannot open internet session - InternetOpenA()");
return("");
}
int hURL=InternetOpenUrlW(hInternetSession,
url,"",0,0,0);
if(hURL<=0)
{
Alert("Cannot open URL ",url," - InternetOpenUrlA()");
InternetCloseHandle(hInternetSession);
return(0);
}
int cBuffer[256];
int dwBytesRead[1];
string fileContents="";
while(!IsStopped())
{
for(int i=0; i<256; i++) cBuffer[i]=0;
bool bResult=InternetReadFile(hURL,cBuffer,1024,dwBytesRead);
if(dwBytesRead[0]==0) break;
string text="";
for(i=0; i<256; i++)
{
text=text+CharToStr(cBuffer[i]&0x000000FF);
if(StringLen(text)==dwBytesRead[0]) break;
text=text+CharToStr(cBuffer[i]>>8 &0x000000FF);
if(StringLen(text)==dwBytesRead[0]) break;
text=text+CharToStr(cBuffer[i]>>16 &0x000000FF);
if(StringLen(text)==dwBytesRead[0]) break;
text=text+CharToStr(cBuffer[i]>>24 &0x000000FF);
}
fileContents=fileContents+text;
Sleep(1);
}
InternetCloseHandle(hInternetSession);
// Save to text file
int handle;
handle=FileOpen(NewsFileName(),FILE_CSV|FILE_WRITE,';');
if(handle>0)
{
FileWrite(handle,fileContents);
FileClose(handle);
}
}
// -----------------------------------------------------------------------------------------------------------------------------
// We will get news every sunday, so name file with sundays date
string NewsFileName(bool forDailyFXUrl=false)
{
int adjustDays=0;
switch(TimeDayOfWeek(TimeLocal()))
{
case 0:
adjustDays=0;
break;
case 1:
adjustDays=1;
break;
case 2:
adjustDays=2;
break;
case 3:
adjustDays=3;
break;
case 4:
adjustDays=4;
break;
case 5:
adjustDays=5;
break;
case 6:
adjustDays=6;
break;
}
datetime date=TimeLocal() -(adjustDays *86400);
string fileName="";
if(TimeDayOfWeek(date)==0)// sunday
{
if(forDailyFXUrl) // if we are building URL to get file from daily fx site.
{
fileName=(StringConcatenate("Calendar-",PadString(DoubleToStr(TimeMonth(date),0),"0",2),"-",PadString(DoubleToStr(TimeDay(date),0),"0",2),"-",TimeYear(date),".csv"));
}
else
{
fileName=(StringConcatenate(TimeYear(date),"-",PadString(DoubleToStr(TimeMonth(date),0),"0",2),"-",PadString(DoubleToStr(TimeDay(date),0),"0",2),"-News",".csv"));
}
}
return (fileName);
}
// -----------------------------------------------------------------------------------------------------------------------------
string PadString(string toBePadded,string paddingChar,int paddingLength)
{
while(StringLen(toBePadded)<paddingLength)
{
toBePadded=StringConcatenate(paddingChar,toBePadded);
}
return (toBePadded);
}
// -----------------------------------------------------------------------------------------------------------------------------
int CsvNewsFileToArray(string &lines[][],int numDelimItems=8,bool ignoreFirstLine=true,int freeTextCol=4)
{
int handle;
handle=FileOpen(NewsFileName(),FILE_READ,",");
if(handle>0)
{
int lineCount=0;
int lineNumber=0;
bool processedFirstLine=false;
while(!FileIsEnding(handle))
{
string lineData="";
if(ArrayRange(lines,0)>lineCount)
{
for(int itemCount=0;itemCount<=numDelimItems; itemCount++)
{
lineData=FileReadString(handle);
if(ignoreFirstLine && lineCount>0)
{
lineNumber=lineCount-1;
lines[lineNumber][itemCount]=lineData;
if(itemCount==freeTextCol)
{
for(int i=0; i<10; i++)
{
lineData=FileReadString(handle);
if(lineData=="Low" || lineData=="Medium" || lineData=="LOW" || lineData=="High" || lineData=="HIGH")
{
lines[lineNumber][freeTextCol+1]=lineData;
itemCount=freeTextCol+1;
break;
}
else
{
if(lineData!="")
{
lines[lineNumber][itemCount]=lines[lineNumber][itemCount]+", "+lineData;
}
}
}
}
}
}
}
lineCount++;
}
ArrayResize(lines,lineCount);
FileClose(handle);
}
else if(handle<1)
{
Print("File ",NewsFileName()," not found, the last error is ",GetLastError());
}
return(lineCount);
}
// -----------------------------------------------------------------------------------------------------------------------------
int DeleteNewsObjects()
{
for(int i=0; i<1000; i++)
{
ObjectDelete("NewsLine"+i);
ObjectDelete("NewsText"+i);
ObjectDelete("NewsCountDown"+i);
}
return(0);
}
// -----------------------------------------------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------------------------------------------
void DrawNewsLines(string news[][],bool showLineText,color high_color=Red,color medium_color=DarkOrange,color low_color=Blue,int startRow=1)
{
datetime local=TimeLocal();
datetime broker=TimeCurrent();
datetime current=0;
double impact;
bool skip;
int totalNewsItems=ArrayRange(news,0)-startRow;
if(Period()>PERIOD_H1)
Print("Line text will only be shown for chart periods less than 4 hours");
for(int i=0; i<totalNewsItems; i++)
{
skip=false;
if(i>0)
{
if(news[i][COLUMN_TIME]!=news[i-1][COLUMN_TIME])impact=0;
}
else
impact=0;
string newsCurrency=news[i][COLUMN_CURRENCY];
if(!IsNewsCurrency(Symbol(),newsCurrency)){skip=true;}
if(!show_high_news && (news[i][COLUMN_IMPORTANCE]=="High" || news[i][COLUMN_IMPORTANCE]=="HIGH"))
{skip=true;}
if(!show_medium_news && news[i][COLUMN_IMPORTANCE]=="Medium")
{skip=true;}
if(!show_low_news && (news[i][COLUMN_IMPORTANCE]=="Low" || news[i][COLUMN_IMPORTANCE]=="LOW"))
{skip=true;}
if(news[i][COLUMN_TIME]=="All Day" ||
news[i][COLUMN_TIME]== "Tentative" ||
news[i][COLUMN_TIME]==""){skip=true;}
if(!skip)
{
if(ImpactToNumber(news[i][COLUMN_IMPORTANCE])>impact)impact=ImpactToNumber(news[i][COLUMN_IMPORTANCE]);
if(StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])== current) continue;
current=(broker-local)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME]);
color clr = low_color;
if(impact == 2) clr = medium_color; else
if(impact == 3)clr = high_color;
string text="";
if(news[i][COLUMN_PREVIOUS]!="" || news[i][COLUMN_FORECAST]!="") text="["+news[i][COLUMN_PREVIOUS]+", "+news[i][COLUMN_FORECAST]+"]";
if(news[i][COLUMN_IMPORTANCE]!="") text=text+" "+news[i][COLUMN_IMPORTANCE];
ObjectCreate("NewsLine"+i,OBJ_VLINE,0,current,0);
ObjectSet("NewsLine"+i,OBJPROP_COLOR,clr);
ObjectSet("NewsLine"+i,OBJPROP_STYLE,STYLE_DASHDOTDOT);
ObjectSet("NewsLine"+i,OBJPROP_BACK,true);
ObjectSetText("NewsLine"+i,news[i][COLUMN_DATE]+" "+news[i][COLUMN_DESCRIPTION]+" "+text,8);
if(showLineText)
{
if(Period()<PERIOD_H4)
{
ObjectCreate("NewsText"+i,OBJ_TEXT,0,current,WindowPriceMin()+(WindowPriceMax()-WindowPriceMin())*0.8);
ObjectSet("NewsText"+i,OBJPROP_COLOR,clr);
ObjectSet("NewsText"+i,OBJPROP_ANGLE,90);
ObjectSetText("NewsText"+i,news[i][COLUMN_DATE]+" "+news[i][COLUMN_DESCRIPTION]+" "+text,8);
}
}
}
}
}
// -----------------------------------------------------------------------------------------------------------------------------
double ImpactToNumber(string impact)
{
if(impact=="High" || impact=="HIGH")
return (3);
if(impact=="Medium")
return (2);
if(impact=="Low" || impact=="LOW")
return (1);
else
return (0);
}
// -----------------------------------------------------------------------------------------------------------------------------
void ShowNewsCountDown(string &news[][],int alertMinsBeforeNews=60,int startRow=1,color high_color=Red,
color medium_color=DarkOrange,color low_color=Blue,color past_color=Gray,color title_color=Purple)
{
bool skip;
int alertBeforeNews= alertMinsBeforeNews*60;
int totalNewsItems = ArrayRange(news,0)-startRow;
for(int iCount=1; iCount<20; iCount++)
{
ObjectDelete("NewsCountDown"+iCount);
ObjectDelete("NewsCountDown"+iCount);
}
int noOfAlerts=0;
for(int i=0; i<totalNewsItems; i++)//looking to all newsitems
{
datetime newsDate=StrToTime(TimeToStr(StrToTime(news[i][COLUMN_DATE]),TIME_DATE)+" "+news[i][COLUMN_TIME]);
if(TimeDay(newsDate)==TimeDay(TimeLocal()))//news for today
// if(TimeDay(newsDate) == TimeDay(GMT))//news for today
{
skip=false;
if(StringFind(news[i][COLUMN_DESCRIPTION],"Bank Holiday",0)>=0)
{
if(CurTime()>=(CurTime()-localTime)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME]))
{
if(news[i][COLUMN_CURRENCY]=="NZD"){NZDHoliday=(CurTime()-localTime)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])+86400;}
if(news[i][COLUMN_CURRENCY]=="AUD"){AUDHoliday=(CurTime()-localTime)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])+86400;}
if(news[i][COLUMN_CURRENCY]=="JPY"){JPYHoliday=(CurTime()-localTime)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])+86400;}
if(news[i][COLUMN_CURRENCY]=="CNY"){CNYHoliday=(CurTime()-localTime)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])+86400;}
if(news[i][COLUMN_CURRENCY]=="EUR"){EURHoliday=(CurTime()-localTime)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])+86400;}
if(news[i][COLUMN_CURRENCY]=="GBP"){GBPHoliday=(CurTime()-localTime)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])+86400;}
if(news[i][COLUMN_CURRENCY]=="USD"){USDHoliday=(CurTime()-localTime)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])+86400;}
if(news[i][COLUMN_CURRENCY]=="nzd"){NZDHoliday=(CurTime()-localTime)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])+86400;}
if(news[i][COLUMN_CURRENCY]=="aud"){AUDHoliday=(CurTime()-localTime)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])+86400;}
if(news[i][COLUMN_CURRENCY]=="jpy"){JPYHoliday=(CurTime()-localTime)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])+86400;}
if(news[i][COLUMN_CURRENCY]=="cny"){CNYHoliday=(CurTime()-localTime)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])+86400;}
if(news[i][COLUMN_CURRENCY]=="eur"){EURHoliday=(CurTime()-localTime)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])+86400;}
if(news[i][COLUMN_CURRENCY]=="gbp"){GBPHoliday=(CurTime()-localTime)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])+86400;}
if(news[i][COLUMN_CURRENCY]=="usd"){USDHoliday=(CurTime()-localTime)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])+86400;}
}
}
int timediff=(newsDate-TimeLocal());// alertMinsBeforeNews display the minutes before news
if(alertBeforeNews>=timediff && timediff>-3600) // display until 60 mins after news event
{
string newsCurrency=news[i][COLUMN_CURRENCY];
if(!IsNewsCurrency(Symbol(),newsCurrency)){skip=true;}
string importance=news[i][COLUMN_IMPORTANCE];
if(!show_high_news && (news[i][COLUMN_IMPORTANCE]=="High" || news[i][COLUMN_IMPORTANCE]=="HIGH"))
{skip=true;}
if(!show_medium_news && news[i][COLUMN_IMPORTANCE]=="Medium")
{skip=true;}
if(!show_low_news && (news[i][COLUMN_IMPORTANCE]=="LOW" || news[i][COLUMN_IMPORTANCE]=="Low"))
{skip=true;}
if(news[i][COLUMN_TIME]=="All Day" ||
news[i][COLUMN_TIME]== "Tentative" ||
news[i][COLUMN_TIME]==""){skip=true;}
if(!skip)
{
color textColor=low_color;
if(news[i][COLUMN_IMPORTANCE]=="Medium")
{
textColor=medium_color;
}
if(news[i][COLUMN_IMPORTANCE]=="High" || news[i][COLUMN_IMPORTANCE]=="HIGH")
{
textColor=high_color;
}
if(timediff<0)
textColor=past_color;
noOfAlerts++;
int yDistance=45+(noOfAlerts*15);
string timeDiffString=TimeToStr(MathAbs(timediff),TIME_MINUTES|TIME_SECONDS);
string description=StringSubstr(news[i][COLUMN_DESCRIPTION],0,40)+" "+timeDiffString;
ObjectCreate("NewsCountDown"+noOfAlerts,OBJ_LABEL,0,0,0,0,0);
ObjectSet("NewsCountDown"+noOfAlerts,OBJPROP_CORNER,1);
ObjectSet("NewsCountDown"+noOfAlerts,OBJPROP_XDISTANCE,4);
ObjectSet("NewsCountDown"+noOfAlerts,OBJPROP_YDISTANCE,yDistance);
ObjectSet("NewsCountDown"+noOfAlerts,OBJPROP_BACK,true);
ObjectSetText("NewsCountDown"+noOfAlerts,description,10,"Arial Black",textColor);
}
}
}
}
if(noOfAlerts>0)
{
ObjectCreate("NewsCountDown0",OBJ_LABEL,0,0,0,0,0);
ObjectSet("NewsCountDown0",OBJPROP_CORNER,1);
ObjectSet("NewsCountDown0",OBJPROP_XDISTANCE,4);
ObjectSet("NewsCountDown0",OBJPROP_YDISTANCE,45);
if(auto){ObjectSetText("NewsCountDown0","Your News Events this Currency",10,"Arial Black",title_color);}
ObjectSetText("NewsCountDown0","Upcoming/Recent News Events",10,"Arial Black",title_color);
}
}
// -----------------------------------------------------------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////|
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int GMT_Offset(string region,datetime dt1)
{
int r1=0;
if(region=="LONDON")
r1=GMT0(dt1);
else if(region=="US")
r1=GMT_5(dt1);
else if(region=="FRANKFURT")
r1=GMT1(dt1);
else if(region=="HONGKONG")
r1=GMT8(dt1);
else if(region=="TOKYO")
r1=GMT9(dt1);
else if(region=="SYDNEY")
r1=GMT11(dt1);
else if(region=="AUCKLAND")
r1=GMT12(dt1);
return (r1);
}
//+------------------------------------------------------------------+
//| London DST === Standard and Summertime setting |
//+------------------------------------------------------------------+
int GMT0(datetime dt1)
{
//UK Standard Time = GMT
//UK Summer Time = BST (British Summer time) = GMT+1
//For 2003-2007 inclusive, the summer-time periods begin and end respectively on
//the following dates at 1.00am Greenwich Mean Time:
//2003: the Sundays of 30 March and 26 October
//2004: the Sundays of 28 March and 31 October
//2005: the Sundays of 27 March and 30 October
//2006: the Sundays of 26 March and 29 October
//2007: the Sundays of 25 March and 28 October
if((dt1>last_sunday(TimeYear(dt1),3)) && (dt1<last_sunday(TimeYear(dt1),10)))
return(1);//summer
else
return(0);
}
//+------------------------------------------------------------------+
//| Frankfurt DST === Standard and Summertime setting |
//+------------------------------------------------------------------+
int GMT1(datetime dt1)
{
//Standard Time = GMT +1
//Summer Time = GMT+2
//For 2003-2007 inclusive, the summer-time periods begin and end respectively on
//the following dates at 1.00am Greenwich Mean Time:
//2003: the Sundays of 30 March and 26 October
//2004: the Sundays of 28 March and 31 October
//2005: the Sundays of 27 March and 30 October
//2006: the Sundays of 26 March and 29 October
//2007: the Sundays of 25 March and 28 October
if((dt1>last_sunday(TimeYear(dt1),3)) && (dt1<last_sunday(TimeYear(dt1),10)))
return(2);//summer
else
return(1);
}
//+------------------------------------------------------------------+
//| New York US times |
//+------------------------------------------------------------------+
int GMT_5(datetime dt1)
{
/*US
//-------------------------------------------------------------------
//Eastern Standard Time (EST) = GMT-5
//-------------------------------------------------------------------
//Eastern Daylight Time (EDT) = GMT-4
//-----+--------------------------+----------------------------------
//Year | DST Begins 2 a.m. | DST Ends 2 a.m.
//1990-| |
//2006 | (First Sunday in April) | (Last Sunday in October)
//-----+--------------------------+----------------------------------
//-----+--------------------------+----------------------------------
//Year | DST Begins 2 a.m. | DST Ends 2 a.m.
//2007-| (Second Sunday in March)| (First Sunday in November)
//-----+--------------------------+----------------------------------
year DST begins DST ends
2000 zondag, 2 april, 02:00 zondag, 29 oktober, 02:00
2001 zondag, 1 april, 02:00 zondag, 28 oktober, 02:00
2002 zondag, 7 april, 02:00 zondag, 27 oktober, 02:00
2003 zondag, 6 april, 02:00 zondag, 26 oktober, 02:00
2004 zondag, 4 april, 02:00 zondag, 31 oktober, 02:00
2005 zondag, 3 april, 02:00 zondag, 30 oktober, 02:00
2006 zondag, 2 april, 02:00 zondag, 29 oktober, 02:00
2007 zondag, 11 maart, 02:00 zondag, 4 november, 02:00
2008 zondag, 9 maart, 02:00 zondag, 2 november, 02:00
2009 zondag, 8 maart, 02:00 zondag, 1 november, 02:00
2010 zondag, 14 maart, 02:00 zondag, 7 november, 02:00
2011 zondag, 13 maart, 02:00 zondag, 6 november, 02:00
2012 zondag, 11 maart, 02:00 zondag, 4 november, 02:00
2013 zondag, 10 maart, 02:00 zondag, 3 november, 02:00
2014 zondag, 9 maart, 02:00 zondag, 2 november, 02:00
2015 zondag, 8 maart, 02:00 zondag, 1 november, 02:00
2016 zondag, 13 maart, 02:00 zondag, 6 november, 02:00
2017 zondag, 12 maart, 02:00 zondag, 5 november, 02:00
2018 zondag, 11 maart, 02:00 zondag, 4 november, 02:00
2019 zondag, 10 maart, 02:00 zondag, 3 november, 02:00
*/
if(TimeYear(dt1)<2007)
if((dt1>sunday_number(TimeYear(dt1),4,1)) && (dt1<last_sunday(TimeYear(dt1),10)))
return(-4);
else
return(-5);
else
if(TimeYear(dt1)>=2007)
if((dt1>sunday_number(TimeYear(dt1),3,2)) && (dt1<sunday_number(TimeYear(dt1),11,1)))
return(-4);
else
return(-5);
}
//+------------------------------------------------------------------+
//| Hong Kong CNY |
//+------------------------------------------------------------------+
int GMT8(datetime dt1)
{
return(8);//standard NO DST =summer=+8
}
//+------------------------------------------------------------------+
//| Tokyo JPY |
//+------------------------------------------------------------------+
int GMT9(datetime dt1)
{
return(9);//standard NO DST =summer=+9
}
//+------------------------------------------------------------------+
int GMT11(datetime dt1)
{
/*+------------------------------------------------------------------+
//| Sydney AUD |
//+------------------------------------------------------------------+
//| Eastern Standard Time (EST) = GMT+10 No DST |
//| Eastern Daylight Time (EDT) = GMT+11 DST |
//+-----+--------------------------+---------------------------------+
year enddate startdate
2000 zondag, 26 maart, 03:00 zondag, 27 augustus, 02:00
2001 zondag, 25 maart, 03:00 zondag, 28 oktober, 02:00
2002 zondag, 31 maart, 03:00 zondag, 27 oktober, 02:00
2003 zondag, 30 maart, 03:00 zondag, 26 oktober, 02:00
2004 zondag, 28 maart, 03:00 zondag, 31 oktober, 02:00
2005 zondag, 27 maart, 03:00 zondag, 30 oktober, 02:00
2006 zondag, 2 april, 03:00 zondag, 29 oktober, 02:00
2007 zondag, 25 maart, 03:00 zondag, 28 oktober, 02:00
2008 zondag, 6 april, 03:00 zondag, 5 oktober, 02:00
2009 zondag, 5 april, 03:00 zondag, 4 oktober, 02:00
2010 zondag, 4 april, 03:00 zondag, 3 oktober, 02:00
2011 zondag, 3 april, 03:00 zondag, 2 oktober, 02:00
2012 zondag, 1 april, 03:00 zondag, 7 oktober, 02:00
2013 zondag, 7 april, 03:00 zondag, 6 oktober, 02:00
2014 zondag, 6 april, 03:00 zondag, 5 oktober, 02:00
2015 zondag, 5 april, 03:00 zondag, 4 oktober, 02:00
2016 zondag, 3 april, 03:00 zondag, 2 oktober, 02:00
2017 zondag, 2 april, 03:00 zondag, 1 oktober, 02:00
2018 zondag, 1 april, 03:00 zondag, 7 oktober, 02:00
2019 zondag, 7 april, 03:00 zondag, 6 oktober, 02:00
//-----+--------------------------+----------------------------------
*/
if(TimeYear(dt1)<1996)
if((dt1>sunday_number(TimeYear(dt1),3,1)) && (dt1<last_sunday(TimeYear(dt1),10)))
return(10);
else
return(11);
else
if((TimeYear(dt1)>=1996 && TimeYear(dt1)<2008) && (TimeYear(dt1)!=2006))
if((dt1>last_sunday(TimeYear(dt1),3)) && (dt1<last_sunday(TimeYear(dt1),10)))
return(10);
else
return(11);
else
if(TimeYear(dt1)==2006)
if((dt1>sunday_number(TimeYear(dt1),4,1)) && (dt1<last_sunday(TimeYear(dt1),10)))
return(10);
else
return(11);
else
if(TimeYear(dt1)>=2008)
if((dt1>sunday_number(TimeYear(dt1),4,1)) && (dt1<sunday_number(TimeYear(dt1),10,1)))
return(10);
else
return(11);
}
//+------------------------------------------------------------------+
int GMT12(datetime dt1)
{
/*+------------------------------------------------------------------+
//| New Zealand Auckland NZD |
//+------------------------------------------------------------------+
//| Eastern Standard Time (EST) = GMT+12 No DST |
//| Eastern Daylight Time (EDT) = GMT+13 DST |
//+-----+--------------------------+---------------------------------+
year enddate startdate
2000 zondag, 19 maart, 03:00 zondag, 1 oktober, 02:00
2001 zondag, 18 maart, 03:00 zondag, 7 oktober, 02:00
2002 zondag, 17 maart, 03:00 zondag, 6 oktober, 02:00
2003 zondag, 16 maart, 03:00 zondag, 5 oktober, 02:00
2004 zondag, 21 maart, 03:00 zondag, 3 oktober, 02:00
2005 zondag, 20 maart, 03:00 zondag, 2 oktober, 02:00
2006 zondag, 19 maart, 03:00 zondag, 1 oktober, 02:00
2007 zondag, 18 maart, 03:00 zondag, 30 september, 02:00
2008 zondag, 6 april, 03:00 zondag, 28 september, 02:00
2009 zondag, 5 april, 03:00 zondag, 27 september, 02:00
2010 zondag, 4 april, 03:00 zondag, 26 september, 02:00
2011 zondag, 3 april, 03:00 zondag, 25 september, 02:00
2012 zondag, 1 april, 03:00 zondag, 30 september, 02:00
2013 zondag, 7 april, 03:00 zondag, 29 september, 02:00
2014 zondag, 6 april, 03:00 zondag, 28 september, 02:00
2015 zondag, 5 april, 03:00 zondag, 27 september, 02:00
2016 zondag, 3 april, 03:00 zondag, 25 september, 02:00
2017 zondag, 2 april, 03:00 zondag, 24 september, 02:00
2018 zondag, 1 april, 03:00 zondag, 30 september, 02:00
2019 zondag, 7 april, 03:00 zondag, 29 september, 02:00
//-----+--------------------------+----------------------------------
*/
if(TimeYear(dt1)<2007)
if((dt1>sunday_number(TimeYear(dt1),3,3)) && (dt1<sunday_number(TimeYear(dt1),10,1)))
return(12);
else
return(13);
else
if(TimeYear(dt1)==2007)
if((dt1>sunday_number(TimeYear(dt1),3,3)) && (dt1<last_sunday(TimeYear(dt1),9)))
return(12);
else
return(13);
else
if(TimeYear(dt1)>2007)
if((dt1>sunday_number(TimeYear(dt1),4,1)) && (dt1<last_sunday(TimeYear(dt1),9)))
return(12);
else
return(13);
return(13);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool is_leap_year(int year1)
{
if((MathMod(year1,100)==0) && (MathMod(year1,400)==0))
return(true);
else if((MathMod(year1,100)!=0) && (MathMod(year1,4)==0))
return(true);
else
return (false);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int n_days(int year1,int month1)
{
int ndays1;
if(month1==1)
ndays1=31;
else if(month1==2)
{
if(is_leap_year(year1))
ndays1=29;
else
ndays1=28;
}
else if(month1==3)
ndays1=31;
else if(month1==4)
ndays1=30;
else if(month1==5)//mai
ndays1=31;
else if(month1==6)//iun
ndays1=30;
else if(month1==7)//iul
ndays1=31;
else if(month1==8)//aug
ndays1=31;
else if(month1==9)//sep
ndays1=30;
else if(month1==10)//oct
ndays1=31;
else if(month1==11)//nov
ndays1=30;
else if(month1==12)
ndays1=31;
return(ndays1);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int n_sdays(int year1,int month1)
{
datetime ddt2;
int ndays2=n_days(year1,month1);
int i,nsun1=0;
for(i=1;i<=ndays2;i++)
{
ddt2=StrToTime(DoubleToStr(year1,0)+"."+DoubleToStr(month1,0)+"."+DoubleToStr(i,0)+" 00:00");
if(TimeDayOfWeek(ddt2)==0)
nsun1=nsun1+1;
}
return(nsun1);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
datetime last_sunday(int year1,int month1)
{
int i,ndays2,nsun1,nsun2;
datetime dt2,dt3;
ndays2=n_days(year1,month1);
nsun2=n_sdays(year1,month1);
nsun1=0;
for(i=1;i<=ndays2;i++)
{
dt2=StrToTime(DoubleToStr(year1,0)+"."+DoubleToStr(month1,0)+"."+DoubleToStr(i,0)+" 00:00");
if(TimeDayOfWeek(dt2)==0)
{
nsun1=nsun1+1;
}
if(nsun1==nsun2)
{
dt3=dt2;
break;
}
}
return(dt3);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
datetime sunday_number(int year1,int month1,int sundaycount)
{
int i,ndays2,nsun1,nsun2;
datetime dt2,dt3;
ndays2=n_days(year1,month1);
nsun2=sundaycount;//n_sdays(year1,month1);
nsun1=0;
for(i=1;i<=ndays2;i++)
{
dt2=StrToTime(DoubleToStr(year1,0)+"."+DoubleToStr(month1,0)+"."+DoubleToStr(i,0)+" 00:00");
if(TimeDayOfWeek(dt2)==0)
{
nsun1=nsun1+1;
}
if(nsun1==nsun2)
{
dt3=dt2;
break;
}
}
return(dt3);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void DisplaySessionInfo()
{
string openSessions="Active sessions: ";
string closingSession="";
//----
// info from http://www.2011.worldmarkethours.com/Forex/index1024.htm
// New Zealand/Auckland.............: 10.00 - 16.45 localtimes timezone country
// Australia/Sydney local session...: 10.00 - 17.00
// Japan/Tokyo......................: 9.00 - 12.30 Re-opens 14.00 - 17.00
// Hong Kong........................: 10.00 - 17.00
// Europe...........................: 9.00 - 17.30
// London local session.............: 08.00 - 17.00
// New York local session...........: 08.00 - 17.00
//New Zealand....: 10.00 - 16.45
if(NZDHoliday<TimeCurrent())
{
if((StrToTime(aucklands)>StrToTime("9:45")) && (StrToTime(aucklands)<StrToTime("10:00")) && TimeDayOfWeek(auckland)!=0 && TimeDayOfWeek(auckland)!=6)
{closingSession="New Zealand opens in "+(60-TimeMinute(TimeLocal()))+" mins";}
if((StrToTime(aucklands)>StrToTime("10:00")) && (StrToTime(aucklands)<StrToTime("16:45")) && TimeDayOfWeek(auckland)!=0 && TimeDayOfWeek(auckland)!=6)
{
openSessions=openSessions+" New Zealand";
if(TimeHour(auckland)==16 && TimeMinute(auckland)>14 && TimeMinute(auckland)<45)
{
closingSession="New Zealand closing in "+(45-TimeMinute(TimeLocal()))+" mins";
}
}
}
//Australia...: 10.00 - 17.00
if(AUDHoliday<TimeCurrent())
{
if((StrToTime(sydneys)>StrToTime("9:45")) && (StrToTime(sydneys)<StrToTime("10:00")) && TimeDayOfWeek(sydney)!=0 && TimeDayOfWeek(sydney)!=6)
{closingSession="Australia opens in "+(60-TimeMinute(TimeLocal()))+" mins";}
if((StrToTime(sydneys)>StrToTime("10:00")) && (StrToTime(sydneys)<StrToTime("17:00")) && TimeDayOfWeek(sydney)!=0 && TimeDayOfWeek(sydney)!=6)
{
openSessions=openSessions+" Australia";
if(TimeHour(sydney)==16 && TimeMinute(sydney)>29)
{
closingSession="Australia closing in "+(60-TimeMinute(TimeLocal()))+" mins";
}
}
}
//Japan ....: 9.00 - 12.30 Re-opens 14.00 - 17.00
if(JPYHoliday<TimeCurrent())
{
if(StrToTime(tokyos)>=StrToTime("8:45") && StrToTime(tokyos)<StrToTime("9:00") && TimeDayOfWeek(tokyo)>0 && TimeDayOfWeek(tokyo)<6)
{closingSession="Tokyo first session opens in "+(60-TimeMinute(TimeLocal()))+" mins";}
if(TimeHour(tokyo)>=9 && TimeHour(tokyo)<17 && TimeDayOfWeek(tokyo)>0 && TimeDayOfWeek(tokyo)<6)
{
if((StrToTime(tokyos)>StrToTime("9:00")) && (StrToTime(tokyos)<StrToTime("12:30")) && TimeDayOfWeek(tokyo)!=0 && TimeDayOfWeek(tokyo)!=6)
{openSessions=openSessions+" Tokyo";}
if(StrToTime(tokyos)>=StrToTime("13:45") && StrToTime(tokyos)<StrToTime("14:00") && TimeDayOfWeek(tokyo)>0 && TimeDayOfWeek(tokyo)<6)
{closingSession="Tokyo second session opens in "+(60-TimeMinute(TimeLocal()))+" mins";}
if((StrToTime(tokyos)>StrToTime("14:00")) && (StrToTime(tokyos)<StrToTime("17:00")) && TimeDayOfWeek(tokyo)!=0 && TimeDayOfWeek(tokyo)!=6)
{openSessions=openSessions+" Tokyo";}
if(TimeHour(tokyo)==16 && TimeMinute(tokyo)>29)
{
closingSession="Tokyo final closing in "+(60-TimeMinute(TimeLocal()))+" mins";
}
}
}
//Hong Kong..: 10.00 - 17.00
if(CNYHoliday<TimeCurrent())
{
if(StrToTime(hongkongs)>=StrToTime("9:45") && StrToTime(hongkongs)<StrToTime("10:00") && TimeDayOfWeek(london)>0 && TimeDayOfWeek(london)<6)
{closingSession="Hong Kong opens in "+(60-TimeMinute(TimeLocal()))+" mins";}
if((StrToTime(hongkongs)>StrToTime("10:00")) && (StrToTime(hongkongs)<StrToTime("17:00")) && TimeDayOfWeek(hongkong)!=0 && TimeDayOfWeek(hongkong)!=6)
{
openSessions=openSessions+" Hong Kong";
if(TimeHour(hongkong)==16 && TimeMinute(hongkong)>29)
{
closingSession="Hong Kong closing in "+(60-TimeMinute(TimeLocal()))+" mins";
}
}
}
//Europe...: 9.00 - 17.30
if(EURHoliday<TimeCurrent())
{
if(StrToTime(frankfurts)>=StrToTime("8:45") && StrToTime(frankfurts)<StrToTime("9:00") && TimeDayOfWeek(london)>0 && TimeDayOfWeek(london)<6)
{closingSession="Europe opens in "+(60-TimeMinute(TimeLocal()))+" mins";}
if((StrToTime(frankfurts)>StrToTime("9:00")) && (StrToTime(frankfurts)<StrToTime("17:30")) && TimeDayOfWeek(frankfurt)!=0 && TimeDayOfWeek(frankfurt)!=6)
{
openSessions=openSessions+" Europe";
if(TimeHour(frankfurt)==17 && TimeMinute(frankfurt)<30)
{
closingSession="Europe closing in "+(30-TimeMinute(TimeLocal()))+" mins";
}
}
}
// London....: 08.00 - 17.00
if(GBPHoliday<TimeCurrent())
{
if(StrToTime(londons)>=StrToTime("7:45") && StrToTime(londons)<StrToTime("8:00") && TimeDayOfWeek(london)>0 && TimeDayOfWeek(london)<6)
{closingSession="London opens in "+(60-TimeMinute(TimeLocal()))+" mins";}
if(TimeHour(london)>=8 && TimeHour(london)<17 && TimeDayOfWeek(london)>0 && TimeDayOfWeek(london)<6)
{
openSessions=openSessions+" London";
if(TimeHour(london)==16 && TimeMinute(london)>29)
{
closingSession="London closing in "+(60-TimeMinute(TimeLocal()))+" mins";
}
}
}
// New York....: 08.00 - 17.00
if(USDHoliday<TimeCurrent())
{
if(StrToTime(newyorks)>=StrToTime("7:45") && StrToTime(newyorks)<StrToTime("8:00") && TimeDayOfWeek(newyork)>0 && TimeDayOfWeek(newyork)<6)
{closingSession="New York opens in "+(60-TimeMinute(TimeLocal()))+" mins";}
if(TimeHour(newyork)>=8 && TimeHour(newyork)<17 && TimeDayOfWeek(newyork)>0 && TimeDayOfWeek(newyork)<6)
{
openSessions=openSessions+" New York";
if(TimeHour(newyork)==16)
{
closingSession="New York closing in "+(60-TimeMinute(TimeLocal()))+" mins";
}
}
}
string TimeLeft=TimeToStr((iTime(NULL,Period(),0)+Period()*60-TimeCurrent()),TIME_MINUTES|TIME_SECONDS);
//----
if(openSessions=="Active sessions: ") openSessions="Markets Closed";
ObjectSetText("OpenSessions",openSessions,12,"Arial Black",session_upcoming_title_color);
ObjectSetText("BarClosing","Time to bar close "+TimeLeft,10,"Arial Black",bar_closing_color);
ObjectSetText("SessionClosing",closingSession,10,"Arial Black",session_closing_color);
}
//+------------------------------------------------------------------+
void CreateInfoObjects()
{
ObjectCreate("OpenSessions",OBJ_LABEL,0,0,0,0,0);
ObjectSet("OpenSessions",OBJPROP_CORNER,1);
ObjectSet("OpenSessions",OBJPROP_XDISTANCE,4);
ObjectSet("OpenSessions",OBJPROP_YDISTANCE,0);
ObjectSetText("OpenSessions","",12,"Arial Black",session_upcoming_title_color);
ObjectCreate("SessionClosing",OBJ_LABEL,0,0,0,0,0);
ObjectSet("SessionClosing",OBJPROP_CORNER,1);
ObjectSet("SessionClosing",OBJPROP_XDISTANCE,4);
ObjectSet("SessionClosing",OBJPROP_YDISTANCE,15);
ObjectCreate("BarClosing",OBJ_LABEL,0,0,0,0,0);
ObjectSet("BarClosing",OBJPROP_CORNER,1);
ObjectSet("BarClosing",OBJPROP_XDISTANCE,4);
ObjectSet("BarClosing",OBJPROP_YDISTANCE,30);
ObjectSetText("BarClosing","",10,"Arial Black",bar_closing_color);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void DeleteSessionInfoObjects()
{
ObjectDelete("OpenSessions");
ObjectDelete("BarClosing");
ObjectDelete("SessionClosing");
}
//+------------------------------------------------------------------+
string TimeToString1(datetime when)
{
if(!show12HourTime)
return (TimeToStr( when, TIME_MINUTES ));
int hour=TimeHour(when);
int minute=TimeMinute(when);
string ampm=" AM";
string timeStr;
if(hour>=12)
{
hour = hour - 12;
ampm = " PM";
}
if(hour == 0 )
hour = 12;
timeStr = DoubleToStr( hour, 0 ) + ":";
if(minute<10)
timeStr=timeStr+"0";
timeStr = timeStr + DoubleToStr( minute, 0 );
timeStr = timeStr + ampm;
return (timeStr);
}
// -----------------------------------------------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int ObjectMakeLabel(string n,int xoff,int yoff)
{
ObjectCreate(n,OBJ_LABEL,0,0,0);
ObjectSet(n,OBJPROP_CORNER,Clockcorner);
ObjectSet(n,OBJPROP_XDISTANCE,xoff);
ObjectSet(n,OBJPROP_YDISTANCE,yoff);
ObjectSet(n,OBJPROP_BACK,true);
}
//deal with five digit broker
void HandleDigits()
{
// Automatically handles full-pip and sub-pip accounts
if(Digits==4 || Digits==2)
{
Points=Point;
}
if(Digits==5 || Digits==3)
{
Points=Point*10;
}
}
//+------------------------------------------------------------------+
Replies
bellong
19 Oct 2014, 15:44
RE: dailyfx url not found
aisaac said:
good afternoon, is possible add this indicator in ctarder ? the converter online not work, thanks.
//+--------------------------------------------------------------------------------+ //|ForexNews Market Clock indicator forex_news_market_clock.mq4 | //| | //| Made by Tjipke de Vries (deVries) at mql4.com | //| Indicator displays a News Calendar with a market clock. | //| news events "http://www.dailyfx.com/files/" | //| | //| Some sources I have used | //| This article Displaying a News Calendar written by Slobodov Gleb and to read at| //| http://articles.mql4.com/523 shows a way how to get data displayed on the chart| //| The file contains the description of writing a simple and convenient indicator | //| displaying in a working area the main economic events from external Internet | //| resources. | //| | //| Another source I have used for this indicator is the indicator SimpleMarketInfo| //| here to find http://codebase.mql4.com/7157 made by born2trade (2010.11.25)| //| It shows upcoming news events 1 hour before and 30 minutes after event. It also| //| shows active sessions etc. It gives a look to all news events. | //| changes on this. I did wanna have the possibillity to choose the kind of news | //| I like to see, and when local time isn't brokertime there was not the correct | //| displaying vertical lines on the chart. And some other changes... | //| | //| Found the indicator Clockzv1_2 auto.mq4 (http://forum.mql4.com/14052#91898) | //| from "Jerome" This version made it possible for me to write down the coming DST| //| times for the local markets also. ST/DST changes are unique to each timezone. | //| To know when a market is open we have to know the right localtime... | //| timezones http://www.timeanddate.com/worldclock/ | //| markethours: http://www.2011.worldmarkethours.com/Forex/index1024.htm | //| Auckland/Sydney/Tokyo/Hong Kong/Europe/London/New York | //| | //| The clock will display the different times, the open markets and market holiday| //| More info: http://www.donnaforex.com/forum/index.php?topic=4339.0 | //+--------------------------------------------------------------------------------+ #property copyright "deVries" #property link "" #property indicator_chart_window #property indicator_buffers 0 #include //---- #import "wininet.dll" int InternetAttemptConnect(int x); int InternetOpenW(string sAgent,int lAccessType, string sProxyName="",string sProxyBypass="", int lFlags=0); int InternetOpenUrlW(int hInternetSession,string sUrl, string sHeaders="",int lHeadersLength=0, int lFlags=0,int lContext=0); int InternetReadFile(int hFile,int &sBuffer[],int lNumBytesToRead, int &lNumberOfBytesRead[]); int InternetCloseHandle(int hInet); #import #define COLUMN_DATE 0 #define COLUMN_TIME 1 #define COLUMN_TIMEZONE 2 #define COLUMN_CURRENCY 3 #define COLUMN_DESCRIPTION 4 #define COLUMN_IMPORTANCE 5 #define COLUMN_ACTUAL 6 #define COLUMN_FORECAST 7 #define COLUMN_PREVIOUS 8 #define COLUMN_DATE_DAY_STR 0 #define COLUMN_DATE_MONTH_STR 1 #define COLUMN_DATE_DAY_INT 2 int time_zone_gmt =0;//LOCAL TIMEZONE WILL BE CHANGED TO //YOUR PC-TIMEZONE AUTOMATICLY //---- input parameters news extern string news_parameters="Make your selection"; extern color session_upcoming_title_color=Purple; extern color session_closing_color=Red; extern color bar_closing_color=Green; extern string if_show_currency_news_only="Choose auto true"; extern bool auto=true; extern bool show_low_news = true; extern bool show_medium_news = true; extern bool show_high_news = true; extern color news_past_color = Gray; extern color news_high_color = Red; extern color news_medium_color = Orange; extern color news_low_color = Blue; extern string if_auto_false="select news currencie(s)"; extern bool show_eur = true; extern bool show_usd = true; extern bool show_jpy = true; extern bool show_gbp = true; extern bool show_chf = true; extern bool show_cad = true; extern bool show_aud = true; extern bool show_nzd = true; extern bool show_cny = true; //verticale lines extern bool show_news_lines = true; //verticale lines show moments of news extern bool show_line_text = true; //news text by verticale lines //--------------------------------------------------- //---- input parameters clock int Clockcorner=0; extern string input_parameters="for the clock"; extern int godown=0; extern int goright=0; //Colors clock extern color labelColor=DarkSlateGray; extern color clockColor=DarkSlateGray; extern color ClockMktOpenColor=Red; extern color ClockMktHolidayClr=PaleTurquoise;// Blue; bool show12HourTime=false; //YOU CAN CHANGE IT BUT I LIKE THIS MORE extern bool ShowSpreadChart=true; extern bool ShowBarTime=true; extern bool ShowLocal=true; extern bool ShowBroker=true; extern bool ShowGMT=true; //FOUND THE TIMES WHEN THE MARKETS WERE OPEN AT //World Financial Markets http://www.2011.worldmarkethours.com/Forex/index1024.htm extern bool Show_NEW_ZEALAND=true;//Auckland GMT+12 extern bool Show_AUSTRALIA=true;//Sydney GMT+12 extern bool Show_JAPAN=true;//Tokyo GMT+9 extern bool Show_HONG_KONG=true;// GMT+8 extern bool Show_EUROPE=true;//Frankfurt GMT+1 extern bool Show_LONDON=true;//GMT+0 extern bool Show_NEW_YORK=true;//GMT-5 string news_url="http://www.dailyfx.com/files/"; int update_interval=15; int show_min_before_news=60; double spread; datetime NZDHoliday =0; datetime AUDHoliday =0; datetime JPYHoliday =0; datetime CNYHoliday =0; datetime EURHoliday =0; datetime GBPHoliday =0; datetime USDHoliday =0; datetime localTime; #import "kernel32.dll" void GetLocalTime(int &LocalTimeArray[]); void GetSystemTime(int &systemTimeArray[]); int GetTimeZoneInformation(int &LocalTZInfoArray[]); bool SystemTimeToTzSpecificLocalTime(int &targetTZinfoArray[],int &systemTimeArray[],int &targetTimeArray[]); #import //---- buffers double ExtMapBuffer1[]; int LondonTZ= 0; int TokyoTZ = 9; int NewYorkTZ= -5; int SydneyTZ = 11; int BerlinTZ = 1; int AucklandTZ = 13; int HongKongTZ = 8; datetime newyork,london,frankfurt,tokyo,sydney,auckland,hongkong,GMT; string newyorks,londons,frankfurts,tokyos,sydneys,aucklands,hongkongs,GMTs; // ----------------------------------------------------------------------------------------------------------------------------- int TotalNews=0; string News[1000][10]; datetime lastUpdate=0; int NextNewsLine=0; int LastAlert=0; double Points; // ----------------------------------------------------------------------------------------------------------------------------- int init() { SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); int top=godown+20; int left2= 70+goright; int left =left2; if(show12HourTime) left=left2-20; if(ShowSpreadChart) { ObjectMakeLabel("Spread Monitor1",left-45,top); ObjectMakeLabel("Spread Monitor2",left2+25,top); top+=15; } if(ShowBarTime) { ObjectMakeLabel("barl",left2,top); ObjectMakeLabel("bart",left-45,top); top+=15; } top+=5; if(ShowLocal) { ObjectMakeLabel("locl",left2,top); ObjectMakeLabel("loct",left-45,top); top+=15; } if(ShowBroker) { ObjectMakeLabel("brol",left2,top); ObjectMakeLabel("brot",left-45,top); top+=15; } if(ShowGMT) { ObjectMakeLabel("gmtl",left2,top); ObjectMakeLabel("gmtt",left-45,top); top+=15; } top+=5; if(Show_NEW_ZEALAND) { ObjectMakeLabel("NZDl",left2,top); ObjectMakeLabel("NZDt",left-45,top); top+=15; } if(Show_AUSTRALIA) { ObjectMakeLabel("sydl",left2,top); ObjectMakeLabel("sydt",left-45,top); top+=15; } if(Show_JAPAN) { ObjectMakeLabel("tokl",left2,top); ObjectMakeLabel("tokt",left-45,top); top+=15; } if(Show_HONG_KONG) { ObjectMakeLabel("HKl",left2,top); ObjectMakeLabel("HKt",left-45,top); top+=15; } if(Show_EUROPE) { ObjectMakeLabel("berl",left2,top); ObjectMakeLabel("bert",left-45,top); top+=15; } if(Show_LONDON) { ObjectMakeLabel("lonl",left2,top); ObjectMakeLabel("lont",left-45,top); top+=15; } if(Show_NEW_YORK) { ObjectMakeLabel("nyl",left2,top); ObjectMakeLabel("nyt",left-45,top); top+=15; } CreateInfoObjects(); return(0); } // ----------------------------------------------------------------------------------------------------------------------------- int deinit() { //---- ObjectDelete("locl"); ObjectDelete("loct"); ObjectDelete("nyl"); ObjectDelete("nyt"); ObjectDelete("gmtl"); ObjectDelete("gmtt"); ObjectDelete("berl"); ObjectDelete("bert"); ObjectDelete("NZDl"); ObjectDelete("NZDt"); ObjectDelete("lonl"); ObjectDelete("lont"); ObjectDelete("tokl"); ObjectDelete("tokt"); ObjectDelete("HKl"); ObjectDelete("HKt"); ObjectDelete("sydl"); ObjectDelete("sydt"); ObjectDelete("brol"); ObjectDelete("brot"); ObjectDelete("barl"); ObjectDelete("bart"); ObjectDelete("Spread Monitor1"); ObjectDelete("Spread Monitor2"); DeleteNewsObjects(); DeleteSessionInfoObjects(); //---- DisplaySessionInfo(); return(0); } // ----------------------------------------------------------------------------------------------------------------------------- int start() { static datetime last_timecurrent; if(!IsDllsAllowed()) { Alert("Clock V1_2: DLLs are disabled. To enable tick the checkbox in the Common Tab of indicator"); return; } int counted_bars=IndicatorCounted(); //---- int systemTimeArray[4]; int LocalTimeArray[4]; int TZInfoArray[43]; int nYear,nMonth,nDay,nHour,nMin,nSec,nMilliSec; string sMilliSec; HandleDigits(); GetLocalTime(LocalTimeArray); //---- parse date and time from array /* nYear=TimeArray[0]&0x0000FFFF; nMonth=TimeArray[0]>>16; nDay=TimeArray[1]>>16; nHour=TimeArray[2]&0x0000FFFF; nMin=TimeArray[2]>>16; nSec=TimeArray[3]&0x0000FFFF; nMilliSec=TimeArray[3]>>16; */ string LocalTimeS=FormatDateTime(nYear,nMonth,nDay,nHour,nMin,nSec); datetime localTime=TimeArrayToTime(LocalTimeArray);//StrToTime( LocalTimeS ); //----------------------------------------------------- GMTs=TimeToString1(GMT); string locals=TimeToString1(localTime); londons=TimeToString1(london); frankfurts=TimeToString1(frankfurt); tokyos=TimeToString1(tokyo); newyorks= TimeToString1(newyork); sydneys = TimeToString1(sydney); aucklands = TimeToString1( auckland ); hongkongs = TimeToString1( hongkong ); string brokers=TimeToString1(CurTime()); string bars=TimeToStr(CurTime()-Time[0],TIME_MINUTES); // DisplayTodaysNews(); //----------------------------------------------------- LondonTZ = GMT_Offset("LONDON",localTime); //GBP TokyoTZ = GMT_Offset("TOKYO",localTime); //JPY NewYorkTZ = GMT_Offset("US",localTime); //USD SydneyTZ = GMT_Offset("SYDNEY",localTime); //AUD BerlinTZ = GMT_Offset("FRANKFURT",localTime);//EUR AucklandTZ = GMT_Offset("AUCKLAND",localTime);//NZD HongKongTZ = GMT_Offset("HONGKONG",localTime);//CNY //----------------------------------------------------- /* int gmt_shift=0; int dst=GetTimeZoneInformation(TZInfoArray); if(dst!=0) gmt_shift=TZInfoArray[0]; if(dst==2) gmt_shift+=TZInfoArray[42]; */ GetSystemTime(systemTimeArray); GMT=TimeArrayToTime(systemTimeArray);//localTime + gmt_shift * 60; london= GMT+3600 * LondonTZ; tokyo = GMT+3600 * TokyoTZ; newyork= GMT+3600 * NewYorkTZ; sydney = GMT+3600 * SydneyTZ; frankfurt= GMT+3600 * BerlinTZ; auckland = GMT +3600 * AucklandTZ; hongkong = GMT + 3600 * HongKongTZ; // time_zone_gmt = -(gmt_shift/60); time_zone_gmt=(localTime-GMT)/3600; DisplaySessionInfo(); DisplayTodaysNews(); if(ShowLocal) { ObjectSetText("locl","Local time",10,"Arial Black",labelColor); ObjectSetText("loct",locals,10,"Arial Black",ClockMktOpenColor); } if(ShowBroker) { ObjectSetText("brol","Broker time",10,"Arial Black",labelColor); ObjectSetText("brot",brokers,10,"Arial Black",ClockMktOpenColor); } if(ShowGMT) { ObjectSetText("gmtl","GMT",10,"Arial Black",labelColor); ObjectSetText("gmtt",GMTs,10,"Arial Black",ClockMktOpenColor); } //-------------------------- if(Show_NEW_ZEALAND) { if(NZDHolidayStrToTime("10:00") && StrToTime(aucklands)TimeCurrent()) { ObjectSetText("sydl","Australia market Holiday ",10,"Arial Black",ClockMktHolidayClr); ObjectSetText("sydt",sydneys,10,"Arial Black",ClockMktHolidayClr); } } //--------------------------- if(Show_JAPAN) { if(JPYHolidayStrToTime("9:00") && StrToTime(tokyos)TimeCurrent()) { ObjectSetText("tokl","Japan market Holiday ",10,"Arial Black",ClockMktHolidayClr); ObjectSetText("tokt",tokyos,10,"Arial Black",ClockMktHolidayClr); } } //--------------------------- if(Show_HONG_KONG) { if(CNYHolidayStrToTime("10:00") && StrToTime(hongkongs)TimeCurrent()) { ObjectSetText("berl","European market Holiday ",10,"Arial Black",ClockMktHolidayClr); ObjectSetText("bert",frankfurts,10,"Arial Black",ClockMktHolidayClr); } } //--------------------------- if(Show_LONDON) { if(GBPHolidayStrToTime("8:00") && StrToTime(londons)TimeCurrent()) { ObjectSetText("nyl","New York market Holiday ",10,"Arial Black",ClockMktHolidayClr); ObjectSetText("nyt",newyorks,10,"Arial Black",ClockMktHolidayClr); } } //--------------------------- ObjectSetText("barl","Bar time",10,"Arial Black",labelColor); ObjectSetText("bart",bars,10,"Arial Black",clockColor); spread=NormalizeDouble((Ask-Bid)/Points,1); ObjectSetText("Spread Monitor1","Spread ",10,"Arial Black",labelColor); ObjectSetText("Spread Monitor2",DoubleToStr(spread,1),10,"Arial Black",clockColor); //---- return(0); } // ----------------------------------------------------------------------------------------------------------------------------- int DisplayTodaysNews() { string news[1000][10]; datetime time=TimeCurrent(); if(time>=lastUpdate+update_interval*60) { DeleteNewsObjects(); string str=""; InitNews(news,time_zone_gmt,news_url); if(show_news_lines) { DrawNewsLines(news,show_line_text,news_high_color,news_medium_color,news_low_color); } } ShowNewsCountDown(news,show_min_before_news,1,news_high_color,news_medium_color,news_low_color,news_past_color,session_upcoming_title_color); return(0); } // ----------------------------------------------------------------------------------------------------------------------------- string FormatDateTime(int nYear,int nMonth,int nDay,int nHour,int nMin,int nSec) { string sMonth,sDay,sHour,sMin,sSec; //---- sMonth=100+nMonth; sMonth=StringSubstr(sMonth,1); sDay=100+nDay; sDay=StringSubstr(sDay,1); sHour=100+nHour; sHour=StringSubstr(sHour,1); sMin=100+nMin; sMin=StringSubstr(sMin,1); sSec=100+nSec; sSec=StringSubstr(sSec,1); //---- return(StringConcatenate(nYear,".",sMonth,".",sDay," ",sHour,":",sMin,":",sSec)); } // ----------------------------------------------------------------------------------------------------------------------------- int Explode(string str,string delimiter,string &arr[]) { int i=0; int pos=StringFind(str,delimiter); while(pos!=-1) { if(pos==0) arr[i]=""; else arr[i]=StringSubstr(str,0,pos); i++; str = StringSubstr(str, pos+StringLen(delimiter)); pos = StringFind(str, delimiter); if(pos==-1 || str=="") break; } arr[i]=str; return(i+1); } // ----------------------------------------------------------------------------------------------------------------------------- datetime TimeArrayToTime(int &LocalTimeArray[]) { //---- parse date and time from array int nYear,nMonth,nDOW,nDay,nHour,nMin,nSec,nMilliSec; //string sMilliSec; nYear=LocalTimeArray[0]&0x0000FFFF; nMonth=LocalTimeArray[0]>>16; //nDOW=LocalTimeArray[1]&0x0000FFFF; nDay=LocalTimeArray[1]>>16; nHour=LocalTimeArray[2]&0x0000FFFF; nMin=LocalTimeArray[2]>>16; nSec=LocalTimeArray[3]&0x0000FFFF; nMilliSec=LocalTimeArray[3]>>16; string LocalTimeS=FormatDateTime(nYear,nMonth,nDay,nHour,nMin,nSec); datetime Local_Time=StrToTime(LocalTimeS); return(Local_Time); } // end of TimeArrayToTime //+------------------------------------------------------------------+ // ----------------------------------------------------------------------------------------------------------------------------- // Used to find out if news curreny is of interest to current symbol/chart. // Will have to be changed if symbol format does not look like for example eurusd or usdjpy bool IsNewsCurrency(string cSymbol,string fSymbol) { if(fSymbol == "usd") fSymbol = "USD";else if(fSymbol == "gbp") fSymbol = "GBP";else if(fSymbol == "eur") fSymbol = "EUR";else if(fSymbol == "cad") fSymbol = "CAD";else if(fSymbol == "aud") fSymbol = "AUD";else if(fSymbol == "chf") fSymbol = "CHF";else if(fSymbol == "jpy") fSymbol = "JPY";else if(fSymbol == "cny") fSymbol = "CNY";else if(fSymbol == "nzd") fSymbol = "NZD"; if((auto) && (StringFind(cSymbol,fSymbol,0)>=0)){return(true);} if(!auto && show_usd && fSymbol == "USD"){return(true);} if(!auto && show_gbp && fSymbol == "GBP"){return(true);} if(!auto && show_eur && fSymbol == "EUR"){return(true);} if(!auto && show_cad && fSymbol == "CAD"){return(true);} if(!auto && show_aud && fSymbol == "AUD"){return(true);} if(!auto && show_chf && fSymbol == "CHF"){return(true);} if(!auto && show_jpy && fSymbol == "JPY"){return(true);} if(!auto && show_nzd && fSymbol == "NZD"){return(true);} if(!auto && show_cny && fSymbol == "CNY"){return(true);} return(false); } // ----------------------------------------------------------------------------------------------------------------------------- void InitNews(string &news[][],int timeZone,string newsUrl) { if(DoFileDownLoad()) //Added to check if the CSV file already exists { DownLoadWebPageToFile(newsUrl); //downloading the CSV file lastUpdate=TimeCurrent(); } if(CsvNewsFileToArray(news)==0) return(0); NormalizeNewsData(news,timeZone); } // ----------------------------------------------------------------------------------------------------------------------------- bool DoFileDownLoad() // If we have recent file don't download again { int handle; datetime time=TimeCurrent(); handle=FileOpen(NewsFileName(),FILE_READ); //commando to open the file if(handle>0)//when the file exists we read data { FileClose(handle);//close it again check is done if(time >= lastUpdate+update_interval*60)return(true); return(false);//file exists no need to download again } // File does not exist if FileOpen return -1 or if GetLastError = ERR_CANNOT_OPEN_FILE (4103) return(true); //commando true to download CSV file } // ----------------------------------------------------------------------------------------------------------------------------- void NormalizeNewsData(string &news[][],int timeDiffGmt,int startRow=1) { int totalNewsItems=ArrayRange(news,0)-startRow; for(int i=0; i>8 &0x000000FF); if(StringLen(text)==dwBytesRead[0]) break; text=text+CharToStr(cBuffer[i]>>16 &0x000000FF); if(StringLen(text)==dwBytesRead[0]) break; text=text+CharToStr(cBuffer[i]>>24 &0x000000FF); } fileContents=fileContents+text; Sleep(1); } InternetCloseHandle(hInternetSession); // Save to text file int handle; handle=FileOpen(NewsFileName(),FILE_CSV|FILE_WRITE,';'); if(handle>0) { FileWrite(handle,fileContents); FileClose(handle); } } // ----------------------------------------------------------------------------------------------------------------------------- // We will get news every sunday, so name file with sundays date string NewsFileName(bool forDailyFXUrl=false) { int adjustDays=0; switch(TimeDayOfWeek(TimeLocal())) { case 0: adjustDays=0; break; case 1: adjustDays=1; break; case 2: adjustDays=2; break; case 3: adjustDays=3; break; case 4: adjustDays=4; break; case 5: adjustDays=5; break; case 6: adjustDays=6; break; } datetime date=TimeLocal() -(adjustDays *86400); string fileName=""; if(TimeDayOfWeek(date)==0)// sunday { if(forDailyFXUrl) // if we are building URL to get file from daily fx site. { fileName=(StringConcatenate("Calendar-",PadString(DoubleToStr(TimeMonth(date),0),"0",2),"-",PadString(DoubleToStr(TimeDay(date),0),"0",2),"-",TimeYear(date),".csv")); } else { fileName=(StringConcatenate(TimeYear(date),"-",PadString(DoubleToStr(TimeMonth(date),0),"0",2),"-",PadString(DoubleToStr(TimeDay(date),0),"0",2),"-News",".csv")); } } return (fileName); } // ----------------------------------------------------------------------------------------------------------------------------- string PadString(string toBePadded,string paddingChar,int paddingLength) { while(StringLen(toBePadded)0) { int lineCount=0; int lineNumber=0; bool processedFirstLine=false; while(!FileIsEnding(handle)) { string lineData=""; if(ArrayRange(lines,0)>lineCount) { for(int itemCount=0;itemCount<=numDelimItems; itemCount++) { lineData=FileReadString(handle); if(ignoreFirstLine && lineCount>0) { lineNumber=lineCount-1; lines[lineNumber][itemCount]=lineData; if(itemCount==freeTextCol) { for(int i=0; i<10; i++) { lineData=FileReadString(handle); if(lineData=="Low" || lineData=="Medium" || lineData=="LOW" || lineData=="High" || lineData=="HIGH") { lines[lineNumber][freeTextCol+1]=lineData; itemCount=freeTextCol+1; break; } else { if(lineData!="") { lines[lineNumber][itemCount]=lines[lineNumber][itemCount]+", "+lineData; } } } } } } } lineCount++; } ArrayResize(lines,lineCount); FileClose(handle); } else if(handle<1) { Print("File ",NewsFileName()," not found, the last error is ",GetLastError()); } return(lineCount); } // ----------------------------------------------------------------------------------------------------------------------------- int DeleteNewsObjects() { for(int i=0; i<1000; i++) { ObjectDelete("NewsLine"+i); ObjectDelete("NewsText"+i); ObjectDelete("NewsCountDown"+i); } return(0); } // ----------------------------------------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------------------------- void DrawNewsLines(string news[][],bool showLineText,color high_color=Red,color medium_color=DarkOrange,color low_color=Blue,int startRow=1) { datetime local=TimeLocal(); datetime broker=TimeCurrent(); datetime current=0; double impact; bool skip; int totalNewsItems=ArrayRange(news,0)-startRow; if(Period()>PERIOD_H1) Print("Line text will only be shown for chart periods less than 4 hours"); for(int i=0; i0) { if(news[i][COLUMN_TIME]!=news[i-1][COLUMN_TIME])impact=0; } else impact=0; string newsCurrency=news[i][COLUMN_CURRENCY]; if(!IsNewsCurrency(Symbol(),newsCurrency)){skip=true;} if(!show_high_news && (news[i][COLUMN_IMPORTANCE]=="High" || news[i][COLUMN_IMPORTANCE]=="HIGH")) {skip=true;} if(!show_medium_news && news[i][COLUMN_IMPORTANCE]=="Medium") {skip=true;} if(!show_low_news && (news[i][COLUMN_IMPORTANCE]=="Low" || news[i][COLUMN_IMPORTANCE]=="LOW")) {skip=true;} if(news[i][COLUMN_TIME]=="All Day" || news[i][COLUMN_TIME]== "Tentative" || news[i][COLUMN_TIME]==""){skip=true;} if(!skip) { if(ImpactToNumber(news[i][COLUMN_IMPORTANCE])>impact)impact=ImpactToNumber(news[i][COLUMN_IMPORTANCE]); if(StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME])== current) continue; current=(broker-local)+StrToTime(news[i][COLUMN_DATE]+" "+news[i][COLUMN_TIME]); color clr = low_color; if(impact == 2) clr = medium_color; else if(impact == 3)clr = high_color; string text=""; if(news[i][COLUMN_PREVIOUS]!="" || news[i][COLUMN_FORECAST]!="") text="["+news[i][COLUMN_PREVIOUS]+", "+news[i][COLUMN_FORECAST]+"]"; if(news[i][COLUMN_IMPORTANCE]!="") text=text+" "+news[i][COLUMN_IMPORTANCE]; ObjectCreate("NewsLine"+i,OBJ_VLINE,0,current,0); ObjectSet("NewsLine"+i,OBJPROP_COLOR,clr); ObjectSet("NewsLine"+i,OBJPROP_STYLE,STYLE_DASHDOTDOT); ObjectSet("NewsLine"+i,OBJPROP_BACK,true); ObjectSetText("NewsLine"+i,news[i][COLUMN_DATE]+" "+news[i][COLUMN_DESCRIPTION]+" "+text,8); if(showLineText) { if(Period()StrToTime("9:45")) && (StrToTime(aucklands)StrToTime("10:00")) && (StrToTime(aucklands)29) { closingSession="Australia closing in "+(60-TimeMinute(TimeLocal()))+" mins"; } } } //Japan ....: 9.00 - 12.30 Re-opens 14.00 - 17.00 if(JPYHoliday=StrToTime("8:45") && StrToTime(tokyos)0 && TimeDayOfWeek(tokyo)<6) {closingSession="Tokyo first session opens in "+(60-TimeMinute(TimeLocal()))+" mins";} if(TimeHour(tokyo)>=9 && TimeHour(tokyo)<17 && TimeDayOfWeek(tokyo)>0 && TimeDayOfWeek(tokyo)<6) { if((StrToTime(tokyos)>StrToTime("9:00")) && (StrToTime(tokyos)29) { closingSession="Tokyo final closing in "+(60-TimeMinute(TimeLocal()))+" mins"; } } } //Hong Kong..: 10.00 - 17.00 if(CNYHoliday=StrToTime("9:45") && StrToTime(hongkongs)0 && TimeDayOfWeek(london)<6) {closingSession="Hong Kong opens in "+(60-TimeMinute(TimeLocal()))+" mins";} if((StrToTime(hongkongs)>StrToTime("10:00")) && (StrToTime(hongkongs)=StrToTime("7:45") && StrToTime(londons)0 && TimeDayOfWeek(london)<6) {closingSession="London opens in "+(60-TimeMinute(TimeLocal()))+" mins";} if(TimeHour(london)>=8 && TimeHour(london)<17 && TimeDayOfWeek(london)>0 && TimeDayOfWeek(london)<6) { openSessions=openSessions+" London"; if(TimeHour(london)==16 && TimeMinute(london)>29) { closingSession="London closing in "+(60-TimeMinute(TimeLocal()))+" mins"; } } } // New York....: 08.00 - 17.00 if(USDHoliday=StrToTime("7:45") && StrToTime(newyorks)0 && TimeDayOfWeek(newyork)<6) {closingSession="New York opens in "+(60-TimeMinute(TimeLocal()))+" mins";} if(TimeHour(newyork)>=8 && TimeHour(newyork)<17 && TimeDayOfWeek(newyork)>0 && TimeDayOfWeek(newyork)<6) { openSessions=openSessions+" New York"; if(TimeHour(newyork)==16) { closingSession="New York closing in "+(60-TimeMinute(TimeLocal()))+" mins"; } } } string TimeLeft=TimeToStr((iTime(NULL,Period(),0)+Period()*60-TimeCurrent()),TIME_MINUTES|TIME_SECONDS); //---- if(openSessions=="Active sessions: ") openSessions="Markets Closed"; ObjectSetText("OpenSessions",openSessions,12,"Arial Black",session_upcoming_title_color); ObjectSetText("BarClosing","Time to bar close "+TimeLeft,10,"Arial Black",bar_closing_color); ObjectSetText("SessionClosing",closingSession,10,"Arial Black",session_closing_color); } //+------------------------------------------------------------------+ void CreateInfoObjects() { ObjectCreate("OpenSessions",OBJ_LABEL,0,0,0,0,0); ObjectSet("OpenSessions",OBJPROP_CORNER,1); ObjectSet("OpenSessions",OBJPROP_XDISTANCE,4); ObjectSet("OpenSessions",OBJPROP_YDISTANCE,0); ObjectSetText("OpenSessions","",12,"Arial Black",session_upcoming_title_color); ObjectCreate("SessionClosing",OBJ_LABEL,0,0,0,0,0); ObjectSet("SessionClosing",OBJPROP_CORNER,1); ObjectSet("SessionClosing",OBJPROP_XDISTANCE,4); ObjectSet("SessionClosing",OBJPROP_YDISTANCE,15); ObjectCreate("BarClosing",OBJ_LABEL,0,0,0,0,0); ObjectSet("BarClosing",OBJPROP_CORNER,1); ObjectSet("BarClosing",OBJPROP_XDISTANCE,4); ObjectSet("BarClosing",OBJPROP_YDISTANCE,30); ObjectSetText("BarClosing","",10,"Arial Black",bar_closing_color); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ void DeleteSessionInfoObjects() { ObjectDelete("OpenSessions"); ObjectDelete("BarClosing"); ObjectDelete("SessionClosing"); } //+------------------------------------------------------------------+ string TimeToString1(datetime when) { if(!show12HourTime) return (TimeToStr( when, TIME_MINUTES )); int hour=TimeHour(when); int minute=TimeMinute(when); string ampm=" AM"; string timeStr; if(hour>=12) { hour = hour - 12; ampm = " PM"; } if(hour == 0 ) hour = 12; timeStr = DoubleToStr( hour, 0 ) + ":"; if(minute<10) timeStr=timeStr+"0"; timeStr = timeStr + DoubleToStr( minute, 0 ); timeStr = timeStr + ampm; return (timeStr); } // ----------------------------------------------------------------------------------------------------------------------------- //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int ObjectMakeLabel(string n,int xoff,int yoff) { ObjectCreate(n,OBJ_LABEL,0,0,0); ObjectSet(n,OBJPROP_CORNER,Clockcorner); ObjectSet(n,OBJPROP_XDISTANCE,xoff); ObjectSet(n,OBJPROP_YDISTANCE,yoff); ObjectSet(n,OBJPROP_BACK,true); } //deal with five digit broker void HandleDigits() { // Automatically handles full-pip and sub-pip accounts if(Digits==4 || Digits==2) { Points=Point; } if(Digits==5 || Digits==3) { Points=Point*10; } } //+------------------------------------------------------------------+
@bellong

aisaac
19 Oct 2014, 15:08
and this indicator for calculate the margin required and more....
//+------------------------------------------------------------------+ //| Price and Time.mq4 | //| Copyright © 2011, newpip | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, dibosh" #property link "dibosh@gmail.com" #property indicator_chart_window //+------------------------------------------------------------------+ extern string CreatedBy = "dibosh *** dibosh@gmail.com"; //=================================================== extern string note0 = "// B-Clock"; extern int fontSize = 8; bool attachment=true; color ClockColor = C'21,115,166'; //'21,115,166'; //=================================================== string note00 = "// Dollar Calculation"; extern string DollarFont ="Arial"; extern int DollarFontSize =9; color DollarColor = C'17,90,130'; //=================================================== extern string note1 = "// MAS"; extern int MACorner = 1; extern int MA1_value = 8; extern int MA2_value = 14; extern int MA1_type = 1; extern int MA2_type = 0; extern int MAYpos = 75; //=================================================== extern string note5 = "// Spread"; extern bool spreadShow =true; extern int spreadfontSize = 13; extern color spreadColor = C'128,128,128'; extern string spreadFont = "Arial"; extern int spreadCorner =3; extern int spreadPosX =5; extern int spreadPosY =5; //=================================================== extern string note2 = "// ASK-BID"; extern bool AskP =true; extern bool BidP =true; extern bool ABText =false; extern int AfontSize = 8; extern int BfontSize = 8; extern int MainFontBigger = 4; // (AfontSize or BfontSize) + MainFontBigger extern int LastDigitFontSmaller = 0; // (AfontSize or BfontSize) - MainFontBigger extern color AskBidColor = C'105,105,105'; extern color MainDigitAsk = C'30,144,255'; extern color LastDigitAsk = C'105,105,105'; extern color MainDigitBid = C'17,90,130'; extern color LastDigitBid = C'105,105,105'; extern int Corner =3; extern int AskPosX =85; extern int AskPosY =25; extern int BidPosX =85; extern int BidPosY =5; //=================================================== extern string note4 = "// Period"; extern bool PRShow =true; extern int PRfontSize =15; extern string PRFont = "impact"; extern color PRColor = C'11,57,83'; extern int PRCorner =1; extern int PRPosX =5; extern int PRPosY =38; //=================================================== extern string note3 = "// Pair"; extern bool PaiRShow =true; extern int PaiRfontSize = 20; extern string PairFont = "Impact"; extern color PaiRColor = C'60,60,60'; extern int PaiRCorner =1; extern int PairPosX =5; extern int PairPosY =10; //+------------------------------------------------------------------+ double s1[]; //+------------------------------------------------------------------+ int deinit() { ObjectDelete("time"); ObjectDelete("Market_Label"); ObjectDelete("Market_LabelB"); ObjectDelete("PR_Label"); ObjectDelete("pair"); ObjectDelete("sp"); ObjectDelete("spt"); ObjectDelete("Trend"); ObjectDelete("Flow"); ObjectDelete("50Cross100"); ObjectDelete("ask1"); ObjectDelete("ask2"); ObjectDelete("ask3"); ObjectDelete("bid1"); ObjectDelete("bid2"); ObjectDelete("bid3"); ObjectDelete("dollar1"); ObjectDelete("dollar2"); ObjectDelete("dollar3"); ObjectDelete("marginR1"); ObjectDelete("marginR2"); ObjectDelete("marginR3"); ObjectDelete("note1"); ObjectDelete("note2"); } //+------------------------------------------------------------------+ int init(){ return(0); } //+------------------------------------------------------------------+ int start() { double i; int sec,d,h,m,s,k; sec=Time[0]+Period()*60-CurTime(); i=sec/60; s=sec%60; m=(sec-sec%60)/60; h=(m-m%60)/60; d=(h-h%24)/24; // Comment( m + " minutes " + s + " seconds left to bar end"); string Bid_Price, Ask_Price; Bid_Price = DoubleToStr (Bid,Digits); Ask_Price = DoubleToStr (Ask,Digits); ObjectDelete("time"); if(ObjectFind("time") != 0) { string time=m+":"+s; //4h, 1D TIME FRAME if (Period()==240 || Period()==1440){ m=m-(h*60); if (h>=1){ time=h+":"+m+":"+s; }else{ time=m+":"+s; } } //1W, 1M TIME FRAME if (Period()==10080 || Period()==43200){ m=m-(h*60); h=h-(d*24); d=d-1; if (d>=1){ time=" "+h+":"+m+":"+s+" ("+d+"d)"; }else{ if (h>=1){ time=h+":"+m+":"+s; }else{ time=m+":"+s; } } } if (attachment){ ObjectCreate("time", OBJ_TEXT, 0, Time[1], Close[0]+ 0.0000); ObjectSetText("time", " "+time, fontSize, "Arial", ClockColor); }else{ ObjectCreate("time", OBJ_LABEL, 0, 0, 0); ObjectSetText("time", time, fontSize, "Arial", ClockColor); ObjectSet("time", OBJPROP_CORNER, 3); ObjectSet("time", OBJPROP_XDISTANCE, spreadPosX); ObjectSet("time", OBJPROP_YDISTANCE, spreadPosY+13*10); } } else { ObjectMove("time", 0, Time[0], Close[0]+0.0005); } int gap1, gap2; if (AskP){ string ap1, ap2, ap3; ap1=Ask_Price; if (Digits==5){ ap1=StringSubstr(Ask_Price,0,4)+" "; ap2=StringSubstr(Ask_Price,4,2)+" "; ap3=StringSubstr(Ask_Price,6,0); gap1=25; gap2=3; }else if(Digits==4){ ap1=StringSubstr(Ask_Price,0,4)+" "; ap2=StringSubstr(Ask_Price,4,2); ap3=""; gap1=25; gap2=3; }else if(Digits==3){ if(Symbol()=="EURJPY" || Symbol()=="GBPJPY"){ ap1=StringSubstr(Ask_Price,0,4)+" "; ap2=StringSubstr(Ask_Price,4,2)+""; ap3=StringSubstr(Ask_Price,6,1); gap1=25; gap2=9; }else{ ap1=StringSubstr(Ask_Price,0,3)+" "; ap2=StringSubstr(Ask_Price,3,2)+""; ap3=StringSubstr(Ask_Price,5,1); gap1=25; gap2=9; } } //MainDigit ObjectCreate("ask1", OBJ_LABEL, 0, 0, 0); ObjectSetText("ask1", ap1, BfontSize, "tahoma", AskBidColor); ObjectSet("ask1", OBJPROP_CORNER, Corner); ObjectSet("ask1", OBJPROP_XDISTANCE, AskPosX+gap1); ObjectSet("ask1", OBJPROP_YDISTANCE, AskPosY); ObjectCreate("ask2", OBJ_LABEL, 0, 0, 0); ObjectSetText("ask2", ap2, BfontSize+MainFontBigger, "tahoma", MainDigitAsk); ObjectSet("ask2", OBJPROP_CORNER, Corner); ObjectSet("ask2", OBJPROP_XDISTANCE, AskPosX+gap2); ObjectSet("ask2", OBJPROP_YDISTANCE, AskPosY); ObjectCreate("ask3", OBJ_LABEL, 0, 0, 0); ObjectSetText("ask3", ap3, BfontSize-LastDigitFontSmaller, "tahoma", LastDigitAsk); ObjectSet("ask3", OBJPROP_CORNER, Corner); ObjectSet("ask3", OBJPROP_XDISTANCE, AskPosX+00); ObjectSet("ask3", OBJPROP_YDISTANCE, AskPosY+5); if (ABText){ ObjectCreate("t2", OBJ_LABEL, 0, 0, 0); ObjectSetText("t2", "BUY PRICE", 8, "tahoma", MainDigitAsk); ObjectSet("t2", OBJPROP_CORNER, Corner); ObjectSet("t2", OBJPROP_XDISTANCE, AskPosX); ObjectSet("t2", OBJPROP_YDISTANCE, AskPosY-8); } } if (BidP){ string bp1, bp2, bp3; bp1=Bid_Price; if (Digits==5){ bp1=StringSubstr(Bid_Price,0,4)+" "; bp2=StringSubstr(Bid_Price,4,2)+" "; bp3=StringSubstr(Bid_Price,6,0); gap1=25; gap2=3; }else if(Digits==4){ bp1=StringSubstr(Bid_Price,0,4)+" "; bp2=StringSubstr(Bid_Price,4,2); bp3=""; gap1=25; gap2=3; }else if(Digits==3){ if(Symbol()=="EURJPY" || Symbol()=="GBPJPY"){ bp1=StringSubstr(Bid_Price,0,4)+" "; bp2=StringSubstr(Bid_Price,4,2)+""; bp3=StringSubstr(Bid_Price,6,1); gap1=25; gap2=9; }else{ bp1=StringSubstr(Bid_Price,0,3)+" "; bp2=StringSubstr(Bid_Price,3,2)+""; bp3=StringSubstr(Bid_Price,5,1); gap1=25; gap2=9; } } ObjectCreate("bid1", OBJ_LABEL, 0, 0, 0); ObjectSetText("bid1", bp1, BfontSize, "tahoma", AskBidColor); ObjectSet("bid1", OBJPROP_CORNER, Corner); ObjectSet("bid1", OBJPROP_XDISTANCE, BidPosX+gap1); ObjectSet("bid1", OBJPROP_YDISTANCE, BidPosY); ObjectCreate("bid2", OBJ_LABEL, 0, 0, 0); ObjectSetText("bid2", bp2, BfontSize+MainFontBigger, "tahoma", MainDigitBid); ObjectSet("bid2", OBJPROP_CORNER, Corner); ObjectSet("bid2", OBJPROP_XDISTANCE, BidPosX+gap2); ObjectSet("bid2", OBJPROP_YDISTANCE, BidPosY); ObjectCreate("bid3", OBJ_LABEL, 0, 0, 0); ObjectSetText("bid3", bp3, BfontSize-LastDigitFontSmaller, "tahoma", LastDigitBid); ObjectSet("bid3", OBJPROP_CORNER, Corner); ObjectSet("bid3", OBJPROP_XDISTANCE, BidPosX+00); ObjectSet("bid3", OBJPROP_YDISTANCE, BidPosY+5); if (ABText){ ObjectCreate("t1", OBJ_LABEL, 0, 0, 0); ObjectSetText("t1", "SELL PRICE", 8, "tahoma", AskBidColor); ObjectSet("t1", OBJPROP_CORNER, Corner); ObjectSet("t1", OBJPROP_XDISTANCE, BidPosX); ObjectSet("t1", OBJPROP_YDISTANCE, BidPosY-8); } } if (PRShow){ ObjectCreate("PR_Label", OBJ_LABEL, 0, 0, 0); if (Period()==43200){ ObjectSetText("PR_Label", "Monthly", PRfontSize, PRFont, PRColor); }else if (Period()==10080){ ObjectSetText("PR_Label", "Weekly", PRfontSize, PRFont, PRColor); }else if (Period()==1440){ ObjectSetText("PR_Label", "Daily", PRfontSize, PRFont, PRColor); }else if (Period()>30){ ObjectSetText("PR_Label", (Period()/60)+" Hour", PRfontSize, PRFont, PRColor); }else{ ObjectSetText("PR_Label", Period()+" Min", PRfontSize, PRFont, PRColor); } ObjectSet("PR_Label", OBJPROP_CORNER, PRCorner); ObjectSet("PR_Label", OBJPROP_XDISTANCE, PRPosX); ObjectSet("PR_Label", OBJPROP_YDISTANCE, PRPosY); } if (PaiRShow){ ObjectCreate("pair", OBJ_LABEL, 0, 0, 0); ObjectSetText("pair", Symbol(), PaiRfontSize, PairFont, PaiRColor); ObjectSet("pair", OBJPROP_CORNER, PaiRCorner); ObjectSet("pair", OBJPROP_XDISTANCE, PairPosX); ObjectSet("pair", OBJPROP_YDISTANCE, PairPosY); } if (spreadShow){ //Spread Counter string spreadCount, echo, micro, standared, mega; double diff=Ask-Bid, margineRequired= (MarketInfo(Symbol(), MODE_MARGINREQUIRED)); switch (Digits){ case 0: spreadCount=DoubleToStr(diff,0); micro=DoubleToStr((diff)*10,2); standared=DoubleToStr((diff)*1,2); mega=DoubleToStr((diff)/10,2); echo = "0"; break; case 1: spreadCount=DoubleToStr(diff*10,0); micro=DoubleToStr((diff*10)*10,2); standared=DoubleToStr((diff*10)*1,2); mega=DoubleToStr((diff*10)/10,2); echo = "1"; break; case 2: spreadCount=DoubleToStr(diff*100,0); micro=DoubleToStr((diff*100)*10,2); standared=DoubleToStr((diff*100)*1,2); mega=DoubleToStr((diff*100)/10,2); echo = "2"; break; case 3: spreadCount=DoubleToStr(diff*100,1); micro=DoubleToStr((diff*100)*10,2); standared=DoubleToStr((diff*100)*1,2); mega=DoubleToStr((diff*100)/10,2); echo = "3"; break; case 4: spreadCount=DoubleToStr(diff*10000,0); micro=DoubleToStr((diff*10000)*10,2); standared=DoubleToStr((diff*10000)*1,2); mega=DoubleToStr((diff*10000)/10,2); echo = "4"; break; case 5: spreadCount=DoubleToStr(diff*10000,1); micro=DoubleToStr((diff*10000)*10,2); standared=DoubleToStr((diff*10000)*1,2); mega=DoubleToStr((diff*10000)/10,2); echo = "5"; break; default: spreadCount=DoubleToStr(diff*1000000,0); micro=DoubleToStr((diff*1000000)*10,2); standared=DoubleToStr((diff*1000000)*1,2); mega=DoubleToStr((diff*1000000)/10,2); echo = ""; break; } // Comment ("PAIR COUNT "+ echo+ " DIGITS AFTER DOT"); ObjectCreate("sp", OBJ_LABEL, 0, 0, 0); ObjectSetText("sp", spreadCount, spreadfontSize, spreadFont, DollarColor); ObjectSet("sp", OBJPROP_CORNER, spreadCorner); ObjectSet("sp", OBJPROP_XDISTANCE, spreadPosX); ObjectSet("sp", OBJPROP_YDISTANCE, spreadPosY+13*8+9); ObjectCreate("spt", OBJ_LABEL, 0, 0, 0); ObjectSetText("spt", "SPREAD", 7, "tahoma", spreadColor); ObjectSet("spt", OBJPROP_CORNER, spreadCorner); ObjectSet("spt", OBJPROP_XDISTANCE, spreadPosX); ObjectSet("spt", OBJPROP_YDISTANCE, spreadPosY+13*8); ObjectCreate("note1", OBJ_LABEL, 0, 0, 0); ObjectSetText("note1", "COST", 7, DollarFont, DollarColor); ObjectSet("note1", OBJPROP_CORNER, spreadCorner); ObjectSet("note1", OBJPROP_XDISTANCE, spreadPosX); ObjectSet("note1", OBJPROP_YDISTANCE, spreadPosY+13*7); ObjectCreate("dollar3", OBJ_LABEL, 0, 0, 0); ObjectSetText("dollar3", micro+" $", DollarFontSize, DollarFont, spreadColor); ObjectSet("dollar3", OBJPROP_CORNER, spreadCorner); ObjectSet("dollar3", OBJPROP_XDISTANCE, spreadPosX); ObjectSet("dollar3", OBJPROP_YDISTANCE, spreadPosY+13*6); ObjectCreate("dollar2", OBJ_LABEL, 0, 0, 0); ObjectSetText("dollar2", standared+" $", DollarFontSize, DollarFont, spreadColor); ObjectSet("dollar2", OBJPROP_CORNER, spreadCorner); ObjectSet("dollar2", OBJPROP_XDISTANCE, spreadPosX); ObjectSet("dollar2", OBJPROP_YDISTANCE, spreadPosY+13*5); ObjectCreate("dollar1", OBJ_LABEL, 0, 0, 0); ObjectSetText("dollar1", mega+" $", DollarFontSize, DollarFont, spreadColor); ObjectSet("dollar1", OBJPROP_CORNER, spreadCorner); ObjectSet("dollar1", OBJPROP_XDISTANCE, spreadPosX); ObjectSet("dollar1", OBJPROP_YDISTANCE, spreadPosY+13*4); ObjectCreate("note2", OBJ_LABEL, 0, 0, 0); ObjectSetText("note2", "MARGIN", 7, DollarFont, DollarColor); ObjectSet("note2", OBJPROP_CORNER, spreadCorner); ObjectSet("note2", OBJPROP_XDISTANCE, spreadPosX); ObjectSet("note2", OBJPROP_YDISTANCE, spreadPosY+13*3); ObjectCreate("marginR3", OBJ_LABEL, 0, 0, 0); ObjectSetText("marginR3", DoubleToStr(margineRequired,2)+" $", DollarFontSize, DollarFont, spreadColor); ObjectSet("marginR3", OBJPROP_CORNER, spreadCorner); ObjectSet("marginR3", OBJPROP_XDISTANCE, spreadPosX); ObjectSet("marginR3", OBJPROP_YDISTANCE, spreadPosY+13*2); ObjectCreate("marginR2", OBJ_LABEL, 0, 0, 0); ObjectSetText("marginR2", DoubleToStr(margineRequired/10,2)+" $", DollarFontSize, DollarFont, spreadColor); ObjectSet("marginR2", OBJPROP_CORNER, spreadCorner); ObjectSet("marginR2", OBJPROP_XDISTANCE, spreadPosX); ObjectSet("marginR2", OBJPROP_YDISTANCE, spreadPosY+13); ObjectCreate("marginR1", OBJ_LABEL, 0, 0, 0); ObjectSetText("marginR1", DoubleToStr(margineRequired/100,2)+" $", DollarFontSize, DollarFont, spreadColor); ObjectSet("marginR1", OBJPROP_CORNER, spreadCorner); ObjectSet("marginR1", OBJPROP_XDISTANCE, spreadPosX); ObjectSet("marginR1", OBJPROP_YDISTANCE, spreadPosY); } double MA1, MA2, MA50, MA100, MA200; color mas_color; MA1 = iMA(NULL, 0, MA1_value, 0, MA1_type, PRICE_CLOSE, 0); MA2 = iMA(NULL, 0, MA2_value, 0, MA2_type, PRICE_CLOSE, 0); MA50 = iMA(NULL, 0, 50, 0, 0, PRICE_CLOSE, 0); MA100 = iMA(NULL, 0, 100, 0, 0, PRICE_CLOSE, 0); MA200 = iMA(NULL, 0, 200, 0, 0, PRICE_CLOSE, 0); ObjectCreate("Flow", OBJ_LABEL, 0, 0, 0); ObjectSet("Flow", OBJPROP_CORNER, MACorner); ObjectSet("Flow", OBJPROP_XDISTANCE, spreadPosX+24); ObjectSet("Flow", OBJPROP_YDISTANCE, MAYpos); ObjectCreate("50Cross100", OBJ_LABEL, 0, 0, 0); ObjectSet("50Cross100", OBJPROP_CORNER, MACorner); ObjectSet("50Cross100", OBJPROP_XDISTANCE, spreadPosX+12); ObjectSet("50Cross100", OBJPROP_YDISTANCE, MAYpos); ObjectCreate("Trend", OBJ_LABEL, 0, 0, 0); ObjectSet("Trend", OBJPROP_CORNER, MACorner); ObjectSet("Trend", OBJPROP_XDISTANCE, spreadPosX); ObjectSet("Trend", OBJPROP_YDISTANCE, MAYpos); if (MA50 > MA200 && MA1 > MA200 && MA1 > MA50){ ObjectSetText("Trend", "p", 8, "Wingdings 3", C'73,74,86'); }else if (MA50 < MA200 && MA1 < MA200 && MA1 < MA50){ ObjectSetText("Trend", "q", 8, "Wingdings 3", C'73,74,86'); }else{ if (MA50>MA200){ ObjectSetText("Trend", "{", 8, "Wingdings 3", C'73,74,86'); }else if(MA50<MA200){ ObjectSetText("Trend", "y", 8, "Wingdings 3", C'73,74,86'); } } if (MA1>MA2){ ObjectSetText("Flow", "p", 8, "Wingdings 3", C'21,115,166'); }else if(MA1<MA2){ ObjectSetText("Flow", "q", 8, "Wingdings 3", C'179,0,4'); } if (MA50>MA100){ ObjectSetText("50Cross100", "p", 8, "Wingdings 3", C'0,111,94'); }else if(MA50<MA100){ ObjectSetText("50Cross100", "q", 8, "Wingdings 3", C'111,94,0'); } return(0); }@aisaac