Скрипт установки линий новостей (Forex, MQL4, Metatrader)
Суть: с сайта http://www.dailyfx.com/calendar/ качается
*.csv
файл с новостями и макроидикаторами на неделю. Перемещается
в папку files папки установки Метатрейдера.
Затем скриптом устанавливаются вертикальные линии. Синим
– прогноз по индикатору отрицательный, красным – положительный. Также
устанавливаются значки важности новости. Ведется поиск – принадлежит ли макроиндикатор данной паре валют (серым,
если не принадлежит).
#property copyright
"Shumi"
#property link ""
extern int xTime=27;
//time for EA to wait for news
to be released
int start()
{
Alert("Set
News");
int
z = DownloadCalendar();
return(0);
}
//+------------------------------------------------------------------+
int DownloadCalendar()
{
double pips
= 0, t_shift = 0; // добавляем,
чтобы надписи не друг на друге были
int count = 0, simv_find;
string
stDate1,stTime1, stTimeZone1, stCurrency1, stDescription1, stImportance1,
stActual1, stForecast1, stPrevious1, graph_text;
datetime
vremya, prev = 0;
int
file1 = FileOpen("Calendar.csv",FILE_CSV|FILE_READ,',');
while (!FileIsEnding(file1))
{
stDate1=FileReadString(file1);
if (stDate1 !=
"")
{
stTime1 = FileReadString(file1);
vremya
= ToDate(stDate1, stTime1);
int
shift = iBarShift(NULL,0,vremya); // преобразование datetime в тики
stTimeZone1 = FileReadString(file1);
stCurrency1 = FileReadString(file1);
string simv = Symbol();
simv_find = StringFind(simv, StringTrimRight(StringTrimLeft(stCurrency1)),0);
stDescription1 = FileReadString(file1);
stImportance1 = FileReadString(file1);
// Устанавливаем
важность
if (StringFind(stImportance1, "Low", 0) > -1)
{count++;ObjectCreate(DoubleToStr(count,0),OBJ_ARROW,0,vremya,High[shift]+pips);ObjectSet(DoubleToStr(count,0),OBJPROP_ARROWCODE,68);}
if (StringFind(stImportance1, "High", 0) > -1)
{count++;ObjectCreate(DoubleToStr(count,0),OBJ_ARROW,0,vremya,High[shift]+pips);ObjectSet(DoubleToStr(count,0),OBJPROP_ARROWCODE,67);}
pips = pips +
0.0002;
stActual1 = FileReadString(file1);
stActual1 = StringTrimRight(StringTrimLeft(stActual1));
stForecast1 = FileReadString(file1);
stForecast1 = StringTrimRight(StringTrimLeft(stForecast1));
stPrevious1 = FileReadString(file1);
stPrevious1 = StringTrimRight(StringTrimLeft(stPrevious1));
graph_text =
stDescription1 + ";" + stActual1 + ";" + stForecast1 +
";" + stPrevious1;
count++;
//ObjectCreate(graph_text,OBJ_TEXT,0,vremya,High[shift]+ pips);
//ObjectSetText(graph_text,graph_text,8,"Arial", White);
// ставим линии
//ObjectCreate(DoubleToStr(count,0),OBJ_VLINE,0,vremya+t_shift,0,0,0);
ObjectCreate(graph_text,OBJ_VLINE,0,vremya+t_shift,0,0,0);
if (simv_find > -1) // если
принадлежит данному графику
{
if (StrToDouble(stPrevious1) != 0 && (StrToDouble(stForecast1) != 0))
{
if (((StrToDouble(stForecast1)>=StrToDouble(stPrevious1))
&& (simv_find < 3)) || ((StrToDouble(stForecast1) < StrToDouble(stPrevious1))
&& (simv_find > 2)))
{
ObjectSet(graph_text,OBJPROP_COLOR,Red); //красным
}
else if
(((StrToDouble(stForecast1)<=StrToDouble(stPrevious1))
&& (simv_find < 3)) || ((StrToDouble(stForecast1) > StrToDouble(stPrevious1))
&& (simv_find > 2)))
{
ObjectSet(graph_text,OBJPROP_COLOR,White); //белым
}
else
{
ObjectSet(graph_text,OBJPROP_COLOR,Lime); //лайм,
если чтото не нашли
}
}
else
{
ObjectSet(graph_text,OBJPROP_COLOR,Blue); //синим,
если нет значения предсказания
}
}
else
{
ObjectSet(graph_text,OBJPROP_COLOR,Gray);
// если не принадлежит, то серым
}
// ставим стрелочки
if (StringLen(stActual1) > 0)
{
if (((StrToDouble(stActual1) >=
StrToDouble(stForecast1)) && (simv_find < 3)) || ((StrToDouble(stActual1)
< StrToDouble(stForecast1)) && (simv_find > 2))) // если относится к первой валюте пары
{
ObjectCreate(DoubleToStr(count,0),OBJ_ARROW,0,vremya +
3,High[shift]+pips);ObjectSet(DoubleToStr(count,0),OBJPROP_ARROWCODE,241);
//стрелка вверх
}
if (((StrToDouble(stActual1) < StrToDouble(stForecast1))
&& (simv_find > 2)) || ((StrToDouble(stActual1) >= StrToDouble(stForecast1))
&& (simv_find < 3)))
{
ObjectCreate(DoubleToStr(count,0),OBJ_ARROW,0,vremya + 3,High[shift]+pips);ObjectSet(DoubleToStr(count,0),OBJPROP_ARROWCODE,242);
//стрелка вниз
}
}
if (vremya == prev) {pips = pips +
0.0002;t_shift = t_shift+60;}
else {pips = 0; t_shift = 0;}
prev
= vremya;
count++;
}
}
//WinExec(GetrightAdress+"
/URL:"+HtmlAdress+" /FILE:Calendar.csv /W
/O",0);
FileClose(file1);
return (1);
}
//------------------------------------------------------------------------
datetime ToDate(string stDate,string stTime)
{
// вычисляем месяц
string Mes = StringSubstr(stDate,4,3);
string MesNum = 0;
if (Mes=="Jan") MesNum="01";
if (Mes=="Feb") MesNum="02";
if (Mes=="Mar") MesNum="03";
if (Mes=="Apr") MesNum="04";
if (Mes=="May") MesNum="05";
if (Mes=="Jun") MesNum="06";
if (Mes=="Jul") MesNum="07";
if (Mes=="Aug") MesNum="08";
if (Mes=="Sep") MesNum="09";
if (Mes=="Oct") MesNum="10";
if (Mes=="Nov") MesNum="11";
if (Mes=="Dec") MesNum="12";
int
DayNum = StrToInteger(StringSubstr(stDate,8));
string Dat = "2010." + MesNum
+ "." + DoubleToStr(DayNum,0);
// вычисляем день
int
ind
= StringFind(stTime, "
",0);
string tt = StringSubstr(stTime,0,ind);
string Vozvrat = Dat + " " + tt;
datetime
TD = StrToTime(Vozvrat) +
2*60*60; // добавляем 2 часа
- смещение до времени MetaTradera
//Alert(TD);
return (TD);
}