CalendarFX-I-A16
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «calendarfx-deactivateeas_v1.02_danedit.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор для MetaTrader 4, отображающий на графике экономический календарь. Он загружает данные календаря из внешнего источника в формате XML, разбирает список событий и выводит на график информацию о ближайших новостях: время до события или прошедшее время, страну и заголовок события, а также цветовую маркировку по уровню влияния (высокое, среднее, низкое) и банковским праздникам. Данные обновляются периодически, а панель с ближайшими событиями размещается в выбранном месте графика.
Индикатор позволяет включать и выключать отображение панели, новостных линий, меток событий и текста линий, а также настраивать внешний вид: цвета, шрифты, размеры, положение панели и диапазон таймфреймов, на которых индикатор отображается. Отдельно можно выбирать, новости каких валют показывать, и игнорировать ли валюту текущего графика. Предусмотрены уведомления о приближении важных событий через всплывающие оповещения, push-уведомления и электронную почту.
Дополнительно реализован режим предупреждения о ключевых событиях (например, заседания центральных банков и отчёты по занятости) и функция временного отключения советников перед новостями с возможностью закрытия всех ордеров и последующего включения. Индикатор также поддерживает отображение исторических событий и интерактивное взаимодействие с метками событий на графике.
Настройки программы
| Настройка | Описание |
|---|---|
| minutes (deactivate_Minutes_Before) | Отключать за минут — За сколько минут до новости временно отключать советники. |
| minutes (duration_Deactivation) | Длительность отключения — Длительность временного отключения советников в минутах. |
| minutes (CloseAllBeforeNews) | Закрывать всё перед новостями — Закрывает все ордера перед выходом новостей при отключении советников. |
| BarPeriod | Период бара — Таймфрейм, по которому проверяется появление нового бара для обновления. |
| ShowTable | Показывать таблицу — Включает показ таблицы новостей на графике. |
| ShowNewsLines | Показывать линии новостей — Включает показ вертикальных линий новостей на графике. |
| ShowEventFlags | Показывать метки событий — Включает показ меток событий на графике. |
| Object Description for NewsLines (NewsLineDescription) | Описание новостных линий — Включает описание объектов для новостных линий. |
| ShowCaution | Показывать предупреждение — Включает показ предупреждения о важных событиях. |
| CautionHoursBeforeHrs | Часов до предупреждения — За сколько часов до важного события показывать предупреждение. |
| CautionCorner | Угол предупреждения — Угол графика для размещения предупреждения о важных событиях. |
| CautionXCoordinate | Координата X предупреждения — Смещение предупреждения по горизонтали. |
| CautionYCoordinate | Координата Y предупреждения — Смещение предупреждения по вертикали. |
| CautionFontSize | Размер шрифта предупреждения — Размер шрифта предупреждения о важных событиях. |
| CautionFont | Шрифт предупреждения — Шрифт текста предупреждения о важных событиях. |
| ShowNextUp | Показывать следующее событие — Включает показ надписи о следующем предстоящем событии. |
| NextUpCorner | Угол следующего события — Угол графика для размещения надписи о следующем событии. |
| NextUpXCoordinate | Координата X следующего события — Смещение надписи о следующем событии по горизонтали. |
| NextUpYCoordinate | Координата Y следующего события — Смещение надписи о следующем событии по вертикали. |
| NextUpFontSize | Размер шрифта следующего события — Размер шрифта надписи о следующем событии. |
| NextUpFont | Шрифт следующего события — Шрифт надписи о следующем событии. |
| ShowLineText | Показывать текст линий — Включает показ текста вдоль новостных линий. |
| Number of Characters to use for News Line Text (NewsLineTextSize) | Размер текста линии — Количество символов, используемых для текста новостной линии. |
| NewsLineStyle | Стиль линий новостей — Стиль линий новостей. |
| NewsLineWidth | Толщина линий новостей — Толщина линий новостей. |
| HistoryOn | Показывать историю — Сохраняет на графике линии и метки прошедших событий. |
| SleepInSeconds | Пауза в секундах — Пауза в секундах для снижения нагрузки при обновлении. |
| Part_1 | Часть 1 — Заголовок группы настроек отображения индикатора. |
| Indicator_On | Включить индикатор — Включает или выключает работу индикатора без удаления с графика. |
| Allow_Panel_In_Subwindow_1 | Разрешить панель в подокне 1 — Разрешает размещение панели в первом подокне графика. |
| Allow_Panel_In_Subwindow_2 | Разрешить панель в подокне 2 — Разрешает размещение панели во втором подокне графика. |
| Allow_Panel_At_Chart_Right | Разрешить панель справа — Разрешает размещение панели у правого края графика. |
| Display_Min_TF | Минимальный таймфрейм — Минимальный таймфрейм, на котором отображается индикатор. |
| Display_Max_TF | Максимальный таймфрейм — Максимальный таймфрейм, на котором отображается индикатор. |
| TF_Choices | Выбор таймфреймов — Список доступных таймфреймов для выбора отображения. |
| __ | Разделитель — Пустой разделитель между группами настроек. |
| Part_2 | Часть 2 — Заголовок группы настроек отображения заголовков. |
| FFCal_Title | Цвет заголовка — Цвет заголовка панели календаря. |
| Low_Impact_News_Color | Цвет новостей низкого влияния — Цвет новостей с низким влиянием. |
| Low_Impact_News_On | Показывать новости низкого влияния — Включает показ новостей с низким влиянием. |
| Medium_Impact_News_Color | Цвет новостей среднего влияния — Цвет новостей со средним влиянием. |
| Medium_Impact_News_On | Показывать новости среднего влияния — Включает показ новостей со средним влиянием. |
| High_Impact_News_Color | Цвет новостей высокого влияния — Цвет новостей с высоким влиянием. |
| Bank_Holiday_Color | Цвет банковских праздников — Цвет отображения банковских праздников. |
| Bank_Holiday_On | Показывать банковские праздники — Включает показ банковских праздников. |
| Remarks_Color | Цвет замечаний — Цвет прочих замечаний и текста. |
| Show_Panel_Background | Показывать фон панели — Включает отображение фона панели новостей. |
| Background_Color_ | Цвет фона — Цвет фона панели новостей. |
| clrAlertOn | Цвет оповещения включён — Цвет индикатора оповещения во включённом состоянии. |
| clrAlertOff | Цвет оповещения выключен — Цвет индикатора оповещения в выключенном состоянии. |
| Set to "0" for no Alert (Alert_Minutes_Before) | Оповещать за минут — За сколько минут до события отправлять оповещение; значение 0 отключает оповещение. |
| NotificationOn | Включить уведомления — Включает отправку push-уведомлений о новостях. |
| AlertOn | Включить оповещения — Включает всплывающие оповещения о приближении новостей. |
| MailOn | Отправлять на почту — Включает отправку оповещений по электронной почте. |
| Set to "0" to not adjust time/DST settings (Offset_Hours) | Смещение часов — Смещение времени в часах; значение 0 отключает корректировку времени и переход на летнее время. |
| ___ | Разделитель — Пустой разделитель между группами настроек. |
| Part_3 | Часть 3 — Заголовок группы настроек новостей других валют. |
| "true" = USD news on non-USD pair charts (Show_USD_News) | Показывать новости USD — Включает показ новостей США (USD) на графиках пар без USD. |
| Show_EUR_News | Показывать новости EUR — Включает показ новостей еврозоны (EUR). |
| Show_GBP_News | Показывать новости GBP — Включает показ новостей Великобритании (GBP). |
| Show_NZD_News | Показывать новости NZD — Включает показ новостей Новой Зеландии (NZD). |
| Show_JPY_News | Показывать новости JPY — Включает показ новостей Японии (JPY). |
| Show_AUD_News | Показывать новости AUD — Включает показ новостей Австралии (AUD). |
| Show_CAD_News | Показывать новости CAD — Включает показ новостей Канады (CAD). |
| Show_CHF_News | Показывать новости CHF — Включает показ новостей Швейцарии (CHF). |
| Show_CNY_News | Показывать новости CNY — Включает показ новостей Китая (CNY). |
| Show_XAU_News | Показывать новости XAU — Включает показ новостей по золоту (XAU). |
| Ignore_Current_Symbol | Игнорировать текущий символ — Игнорирует валюту текущего графика при выборе отображаемых новостей. |
Поиск по коду файла
/*-------------------------------------------------------------------------------------------------
User Notes:
This indicator is coded to run on MT4 Build 600.
This is a special version of the FFCal.mq4 indicator designed especially for the Sonic R. System.
It places a panel on the chart in which are displayed up to four news releases listed on the
Forex Factory Calendar. Significant changes are made since the last release. These changes are
summarized at the bottom of these User Notes.
The time, title and ranking (by color) of the releases are shown.
The time of a releases is important because the market frequently holds price moves until after
important releases come out. Also, Market Makers can prepare in advance for these moves. The
Market Makers and banks do know the essence of news and releases in advance, and there is no
regulation against insider trading in the forex market. Banks can place orders in advance of
releases and Market Makers can use the intervening time to move prices to fill those orders,
saving the move that will make profits on the orders until the time of the releases.
The title of the release, and it's ranking by color, is important because the variety of low
impact releases frequently have no effect on price, whereas the variety of high impact releases
can trigger a big price move, or can cause Market Makers to start moving prices days in advance,
in preparations for big moves to be made in conjunction with those releases.
Of the three impact level events (High, Medium, Low) and Bank Holidays, you have the option to not
show all but the High Impact events. The Previous/Forecast data (available on the Forex Factory
Calendar) is not displayed because prices can go either way regardless of specifics released. it
is the timing of news that is important, as a market volatility event. The vertical display and
the second alert of the original FFCal. mq4 indicator are removed, but one alert remains.
Prioritization of events is fully automated and two more event labels are added to help avoid
surprises. When two or more events occur simultaneously, only one event of the highest impact
displays unless there are multiple high impact events. In that case the multple high impact
events are displayed. When 2nd, 3rd or 4th events are not scheduled, text noting that appears.
A current day Bank Holiday will remain displayed in the first label until the Bank Holiday is
over. You can show events for any pair on any chart. For example, you can show a CNY (China)
event on a AUDUSD chart. A new option is added allowing you to ignore the chart pair and
select what currencies you want to show news for, so that you do not have to display the news
for the chart pair.
You can select a range of TFs for the display of this indicator, so it automatically will not
display on a chart TF outside that range. The indicator can be turned on/off without having
to remove it from the chart, thereby preserving your chart settings.
Changes from release 04-04-2012 to release 05-01-2012:
01 - Corrected errors in coding of prioritization of previous and current/future events.
02 - Revised order of External Inputs.
Changes from release 05-01-2012 to release 05-25-2013:
01 - Removes outdated .xml files (through previous year) from Experts files.
02 - Saves current files without the chart TF in the file name (reduces current files needed).
03 - Removes all reference to Broker Watermark, which new coding automatically handles.
04 - adds options for sub-window and right side of chart locations.
05 - adds option to not show the panel background.
06 - prefixes background boxes with "z" assuring "on top" display.
Changes from release 05-25-2013 to release 03-01-2014:
01 - Only one .xml file is used as the source file for all charts with FFCal on them.
02 - Updating was 240 seconds while comment says minutes, now it is minutes.
03 - Checking currency pairs for a country with news now works on Symbols with broker prefix.
Note: All these improvements have been contributed by "deVries".
Changes from release 03-01-2014 to release 03-17-2014:
Contributed by "deVries".....
01 - Only one .xml file is used as the source file for all charts with FFCal on them.
02 - Updating was 240 seconds while comment says minutes, now it is minutes.
03 - Checking currency pairs for a country with news now works on Symbols with broker prefix.
04 - Deleted function for calculating GMT and replaced it with TimeGMT(), a new function inside
the new 600+ release.
05 - Totally changed the file reading and maintenance coding, involving numerous sections of
coding, to streamline for compatibility with MT4 Build 600, and which results in faster
exectution which is very noticeable when changing chart time frames.
Contributed by "qFish".....
06 - Improved the code controlling the timing of updates.
Contributed by "atstrader".....
07 - Added option to ignore news for both sides of the pair and to replace with news for any pair
or pairs featured.
- Traderathome, 03-17-2014
email: t**********e*@msn.com
---------------------------------------------------------------------------------------------------
ACKNOWLEDGEMENTS:
derkwehler and other contributors - the core code of the FFCal indicator,
FFCal_v20 dated 07/07/2009, Copyright @ 2006 derkwehler
email: d********r*@gmail.com
deVries - for his excellent donated work that significantly altered and streamlined the file
handling coding to establish compatibility with the new release of MT4 Build 600+,
and which has resulted in faster code execution.
(Jobs for deVries www.mql5.com/en/job/new?prefered=deVries)
qFish - for his generously given time and help during the effort to improve this indicator.
atstrader - For a neat new option controlling for what pair/pairs(s) news is shown.
---------------------------------------------------------------------------------------------------
Suggested Colors: White Charts Black Charts
FFCal_Title Black C'180,180,180'
News_Low_Impact Green C'046,186,046'
News_Medium_Impact MediumBlue C'086,138,235'
News_High_Impact Crimson C'217,000,000'
Bank_Holiday_Color DarkOrchid Orchid
Remarks_Color DarkGray DimGray
Background_Color_ White Black
-------------------------------------------------------------------------------------------------*/
#property show_inputs
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 CLR_NONE
#define READURL_BUFFER_SIZE 100
#define TITLE 0
#define COUNTRY 1
#define DATE 2
#define TIME 3
#define IMPACT 4
#define FORECAST 5
#define PREVIOUS 6
#import "Wininet.dll"
int InternetOpenW(string,int,string,string,int);
int InternetConnectW(int,string,int,string,string,int,int,int);
int HttpOpenRequestW(int,string,string,int,string,int,string,int);
int InternetOpenUrlW(int,string,string,int,int,int);
int InternetReadFile(int,uchar &arr[],int,int &arr[]);
int InternetCloseHandle(int);
#import
#include <WinUser32.mqh>
#import "user32.dll"
int GetAncestor(int, int);
#define MT4_WMCMD_EXPERTS 33020
#import
bool deactivated = false;
int startDeactivationM;
int startDeactivationH;
string shortname="FFCal";
extern string FFCalURL = "";
extern int deactivate_Minutes_Before = 5; // minutes
extern int duration_Deactivation = 10; // minutes
extern bool CloseAllBeforeNews = false; // minutes
extern int BarPeriod=PERIOD_M1;
extern bool ShowTable=True;
extern bool ShowNewsLines=True;
extern bool ShowEventFlags=true;
extern bool NewsLineDescription=True; //Object Description for NewsLines
extern bool ShowCaution=True;
extern int CautionHoursBeforeHrs=8;
extern int CautionCorner=0;
extern int CautionXCoordinate=20;
extern int CautionYCoordinate=10;
extern int CautionFontSize=8;
extern string CautionFont="Arial";
extern bool ShowNextUp=True;
extern int NextUpCorner=1;
extern int NextUpXCoordinate=0;
extern int NextUpYCoordinate=15;
extern int NextUpFontSize=8;
extern string NextUpFont="Arial";
extern bool ShowLineText=false;
extern int NewsLineTextSize=25; // Number of Characters to use for News Line Text
extern int NewsLineStyle=0;
extern int NewsLineWidth=0;
extern bool HistoryOn=True;
extern int SleepInSeconds=10;
extern string Part_1 = "Indicator Display Controls:";
extern bool Indicator_On = true;
extern bool Allow_Panel_In_Subwindow_1 = false;
extern bool Allow_Panel_In_Subwindow_2 = false;
extern bool Allow_Panel_At_Chart_Right = false;
extern int Display_Min_TF = 1;
extern int Display_Max_TF = 240;
extern string TF_Choices = "1-5-15-30-60-240-1440-10080-43200";
extern string __ = "";
extern string Part_2 = "Headline Display Settings:";
extern color FFCal_Title=Black;
extern color Low_Impact_News_Color = clrGold;
extern bool Low_Impact_News_On = False;
extern color Medium_Impact_News_Color = clrDarkOrange;
extern bool Medium_Impact_News_On = True;
extern color High_Impact_News_Color = clrCrimson;
extern color Bank_Holiday_Color = clrSalmon;
extern bool Bank_Holiday_On = True;
extern color Remarks_Color = clrBlueViolet;
extern bool Show_Panel_Background = true;
extern color Background_Color_ = clrSilver;
extern color clrAlertOn = clrDarkGreen;
extern color clrAlertOff = clrFireBrick;
extern int Alert_Minutes_Before=0; //Set to "0" for no Alert
extern bool NotificationOn = False;
extern bool AlertOn = False;
extern bool MailOn = False;
extern int Offset_Hours=0; //Set to "0" to not adjust time/DST settings
extern string ___ = "";
extern string Part_3 = "Other Currency News Settings:";
extern bool Show_USD_News=true; //"true" = USD news on non-USD pair charts
extern bool Show_EUR_News = true;
extern bool Show_GBP_News = true;
extern bool Show_NZD_News = true;
extern bool Show_JPY_News = true;
extern bool Show_AUD_News = true;
extern bool Show_CAD_News = true;
extern bool Show_CHF_News = true;
extern bool Show_CNY_News = true;
extern bool Show_XAU_News = true;
extern bool Ignore_Current_Symbol = false;
bool Deinitialized,skip;
bool FLAG_done0,FLAG_done1,FLAG_done2,FLAG_done3;
bool FLAG_none0,FLAG_none1,FLAG_none2,FLAG_none3;
int BankIdx1,cnr;
color TxtColorNews;
datetime newsTime,calendardate; //sundaydate calendar
double ExtMapBuffer0[]; // Contains (minutes until) each news event
int xmlHandle,BoEvent,finalend,end,begin,minsTillNews,tmpMins,idxOfNext,
dispMinutes[10],newsIdx,next,nextNewsIdx,dispMins,Days,Hours,Mins;
int dayStart,monthStart,F1,F2,i,j,k,curY,W,sx,sfx,Box,x1,x2,x3,y1,y2,y3,index;
int WebUpdateFreq = 240; // 240 Minutes between web updates to not overload FF server
int TxtSize = 8; //7
int TitleSpacer = 7;
int EventSpacer = 4;
int curX = 3;
static int PrevMinute=-1;
string xmlFileName;
string xmlSearchName;
int PrevTF=0;
static int UpdateRateSec=10;
string sUrl=FFCalURL;//""; //original
string myEvent,mainData[100][7],sData,csvoutput,sinceUntil,TimeStr;
string G,/*pair, cntry1, cntry2,*/ dispTitle[10],dispCountry[10],dispImpact[10],event[5];
string sTags[7]=
{
"<title>","<country>","<date><![CDATA[","<time><![CDATA[",
"<impact><![CDATA[","<forecast><![CDATA[","<previous><![CDATA["
};
string eTags[7]=
{
"</title>","</country>","]]></date>","]]></time>",
"]]></impact>","]]></forecast>","]]></previous>"
};
string Text_Style="Arial";
string box1 = "z[FFCal] Box1";
string box2 = "z[FFCal] Box2";
string News1 = "z[FFCal] News1";
string News2 = "z[FFCal] News2";
string News3 = "z[FFCal] News3";
string News4 = "z[FFCal] News4";
string Sponsor = "z[FFCal] Sponsor";
bool Default_selection = false;
bool Default_ray_left = false;
bool Default_ray_right = false;
int numM1Bars;
void CloseAll()
{
int total = OrdersTotal();
for(int i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
int type = OrderType();
bool result = false;
switch(type)
{
case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
break;
case OP_BUYLIMIT :
case OP_BUYSTOP : result = OrderDelete( OrderTicket() );
case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
break;
case OP_SELLLIMIT :
case OP_SELLSTOP : result = OrderDelete( OrderTicket() );
}
if(result == false)
{
Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
Sleep(3000);
}
}
}
string tempstr;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
FindDeleteObjectsA("LineNews"); /////////////
int obj_total=ObjectsTotal();
for(i=obj_total; i>=0; i--)
{
string name=ObjectName(i);
if(StringSubstr(name,0,8)=="z[FFCal]") {ObjectDelete(name);}
}
ObjectDelete("AlertBefore");
ObjectDelete("Alert");
ObjectDelete("Notify");
ObjectDelete("Mail");
ObjectDelete("strNextUp");
ObjectDelete("strCaution");
for(i=1; i<=4; i++) ObjectDelete("Event"+DoubleToStr(i,0));
if (!HistoryOn) DeleteAllEventObjects(); else DeleteAllEventsExceptHistory();
return(0);
}
void Desactivate()
{
if (minsTillNews == deactivate_Minutes_Before)
{
startDeactivationM = Minute();
startDeactivationH = Hour();
if (!deactivated)
{
int main = GetAncestor(WindowHandle(Symbol(), Period()), 2/*GA_ROOT*/);
PostMessageA(main, WM_COMMAND, MT4_WMCMD_EXPERTS, 0) ; // Toggle Expert Advisor button
}
if (CloseAllBeforeNews == true)
CloseAll();
deactivated = true;
}
}
void Reactivate()
{
int m = 0;
if (Minute()>=startDeactivationM)
m = Minute() - startDeactivationM;
else
m = Minute()+60 - startDeactivationM;
int h = 0;
if (Hour()>=startDeactivationH)
h = Hour() - startDeactivationH;
else
h = Hour()+24 - startDeactivationH;
if (deactivated == true && h * 60 + m >= duration_Deactivation)
{
deactivated = false;
int main2 = GetAncestor(WindowHandle(Symbol(), Period()), 2/*GA_ROOT*/);
PostMessageA(main2, WM_COMMAND, MT4_WMCMD_EXPERTS, 1) ; // Toggle Expert Advisor button
}
}
int start()
{
// код доступен только после оплаты
} //start()
void InitNews(string newsUrl)
{
if(DoFileDownLoad()) //Added to check if the CSV file already exists
{
DownLoadWebPageToFile(newsUrl); //downloading the xml file
}
}
bool DoFileDownLoad()
{
xmlHandle=0;
int size;
datetime time=TimeCurrent();
if(GlobalVariableCheck("Update.FF_Cal") == false)return(true);
if((time - GlobalVariableGet("Update.FF_Cal")) > WebUpdateFreq*60)return(true);
xmlFileName=GetXmlFileName();
xmlHandle=FileOpen(xmlFileName,FILE_BIN|FILE_READ); //check if file exist
if(xmlHandle>=0)//when the file exists we read data
{
size=FileSize(xmlHandle);
sData=FileReadString(xmlHandle,size);
FileClose(xmlHandle);//close it again check is done
return(false);//file exists no need to download again
}
return(true); //commando true to download xml file
}
string GetXmlFileName()
{
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;
}
calendardate=TimeLocal() -(adjustDays *86400);
string fileName=(StringConcatenate(TimeYear(calendardate),"-",
PadString(DoubleToStr(TimeMonth(calendardate),0),"0",2),"-",
PadString(DoubleToStr(TimeDay(calendardate),0),"0",2),"-FFCal-News",".xml"));
return(fileName); //Always a Sunday date
}
void DownLoadWebPageToFile(string url)//="")
{
int HttpOpen=InternetOpenW(" ",0," "," ",0);
int HttpConnect = InternetConnectW(HttpOpen, "", 80, "", "", 3, 0, 1);
int HttpRequest = InternetOpenUrlW(HttpOpen, url, NULL, 0, 0, 0);
int read[1];
uchar Buffer[];
ArrayResize(Buffer,READURL_BUFFER_SIZE+1);
string NEWS="";
xmlFileName=GetXmlFileName();
xmlHandle=FileOpen(xmlFileName,FILE_BIN|FILE_READ|FILE_WRITE);
if(xmlHandle>=0) {FileClose(xmlHandle); FileDelete(xmlFileName);}
xmlHandle=FileOpen(xmlFileName,FILE_BIN|FILE_WRITE);
while(true)
{
InternetReadFile(HttpRequest,Buffer,READURL_BUFFER_SIZE,read);
string strThisRead = CharArrayToString(Buffer,0,read[0],CP_UTF8);
if(read[0]> 0)NEWS = NEWS + strThisRead;
else
{
FileWriteString(xmlHandle,NEWS);
FileClose(xmlHandle);
end=StringFind(NEWS,"</weeklyevents>",0);
if(end==-1) {Alert(Symbol()," ",Period(),", FFCal Error: File download incomplete!");}
else {GlobalVariableSet("Update.FF_Cal",TimeCurrent());}
break;
}
}
if(HttpRequest>0) InternetCloseHandle(HttpRequest);
if(HttpConnect>0) InternetCloseHandle(HttpConnect);
if(HttpOpen>0) InternetCloseHandle(HttpOpen);
}
string PadString(string toBePadded,string paddingChar,int paddingLength)
{
while(StringLen(toBePadded)<paddingLength)
{
toBePadded=StringConcatenate(paddingChar,toBePadded);
}
return (toBePadded);
}
bool IsNewsCurrency(string cSymbol,string fSymbol)
{
if(!Ignore_Current_Symbol && (StringFind(cSymbol,fSymbol,0)>=0)){return(true);}
if(Show_USD_News && fSymbol == "USD"){return(true);}
if(Show_GBP_News && fSymbol == "GBP"){return(true);}
if(Show_EUR_News && fSymbol == "EUR"){return(true);}
if(Show_CAD_News && fSymbol == "CAD"){return(true);}
if(Show_AUD_News && fSymbol == "AUD"){return(true);}
if(Show_CHF_News && fSymbol == "CHF"){return(true);}
if(Show_JPY_News && fSymbol == "JPY"){return(true);}
if(Show_NZD_News && fSymbol == "NZD"){return(true);}
if(Show_CNY_News && fSymbol == "CNY"){return(true);}
if(Show_XAU_News && fSymbol == "XAU"){return(true);}
return(false);
}
void OutputToChart()
{
string news4String,news3String,news2String,news1String;
color news4Color,news3Color,news2Color,news1Color;
string strNextUpEvent="";
color clrNextUp;
sinceUntil="until ";
dispMins=dispMinutes[3]+1;
if(dispMinutes[3]<=0) {dispMins=dispMins-1; sinceUntil="since "; dispMins*=-1;}
if(dispMins<60) {TimeStr=dispMins+"m ";}
else // time is 60 minutes or more
{
Hours= MathRound(dispMins/60);
Mins = dispMins%60;
if(Hours<24) // less than a day: show hours and minutes
{
TimeStr=Hours+"h "+Mins+"m ";
}
else // days, hours, and minutes
{
Days = MathRound(Hours / 24);
Hours = Hours % 24;
TimeStr=Days+" days "+Hours+"h "+Mins+"m ";
}
}
index=StringFind(TimeStr+sinceUntil+dispCountry[3],"since m",0);
TxtColorNews=ImpactToColor(dispImpact[3]);
if (!HistoryOn) DeleteAllEventObjects(); else DeleteAllEventsExceptHistory();
ObjectDelete(News4);
ObjectCreate(News4,OBJ_LABEL,W,0,0);
if((index!=-1) || (FLAG_none3))
{
news4String="";
news4Color=clrNONE;
ObjectSetText(News4," ",
TxtSize,Text_Style,Remarks_Color);
event[4]=" ";
}
else
{
news4String=" "+dispCountry[3]+": "+dispTitle[3]+" ";////////////////////////////////////
news4String=StringSubstr(news4String,0,NewsLineTextSize);
news4Color=TxtColorNews;
ObjectSetText(News4,TimeStr+sinceUntil+dispCountry[3]+": "+dispTitle[3],TxtSize,Text_Style,TxtColorNews);
event[4]=TimeStr+sinceUntil+dispCountry[3]+": "+dispTitle[3];
if(dispMinutes[3]>0) {strNextUpEvent=event[4];clrNextUp=TxtColorNews;}
}
sinceUntil="until ";
dispMins=dispMinutes[2]+1;
if(dispMinutes[2]<=0) {dispMins=dispMins-1; sinceUntil="since "; dispMins*=-1;}
if(dispMins<60) {TimeStr=dispMins+"m ";}
else // time is 60 minutes or more
{
Hours= MathRound(dispMins/60);
Mins = dispMins%60;
if(Hours<24) // less than a day: show hours and minutes
{
TimeStr=Hours+"h "+Mins+"m ";
}
else // days, hours, and minutes
{
Days = MathRound(Hours / 24);
Hours = Hours % 24;
TimeStr=Days+" days "+Hours+"h "+Mins+"m ";
}
}
index=StringFind(TimeStr+sinceUntil+dispCountry[2],"since m",0);
TxtColorNews=ImpactToColor(dispImpact[2]);
ObjectDelete(News3);
ObjectCreate(News3,OBJ_LABEL,W,0,0);
if((index!=-1) || (FLAG_none2))
{
news3String="";
news3Color=clrNONE;
ObjectSetText(News3," ",
TxtSize,Text_Style,Remarks_Color);
event[3]=" ";
}
else
{
news3String=" "+dispCountry[2]+": "+dispTitle[2]+" ";////////////////////////////////////
news3String=StringSubstr(news3String,0,NewsLineTextSize);
news3Color=TxtColorNews;
ObjectSetText(News3,TimeStr+sinceUntil+dispCountry[2]+": "+dispTitle[2],TxtSize,Text_Style,TxtColorNews);
event[3]=TimeStr+sinceUntil+dispCountry[2]+": "+dispTitle[2];
if(dispMinutes[2]>0) {strNextUpEvent=event[3];clrNextUp=TxtColorNews;}
}
sinceUntil="until ";
dispMins=dispMinutes[1]+1;
if(dispMinutes[1]<=0) {dispMins=dispMins-1; sinceUntil="since "; dispMins*=-1;}
if(dispMins<60) {TimeStr=dispMins+"m ";}
else // time is 60 minutes or more
{
Hours= MathRound(dispMins/60);
Mins = dispMins%60;
if(Hours<24) // less than a day: show hours and minutes
{
TimeStr=Hours+"h "+Mins+"m ";
}
else // days, hours, and minutes
{
Days=MathRound(Hours/24);
Hours=Hours%24;
TimeStr=Days+" days "+Hours+"h "+Mins+"m ";
}
Показано первые 50% кода (символов: 54884)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.