← К каталогу
Исходный код · ID 943

CalendarFX-I-A16

calendarfx-deactivateeas_v1.02_danedit.mq4

Похожие материалы по тегам

#3 news panel (black) bgp.mq5MQL5 / MetaTrader 5 · 1 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 1 общих теговindicator marketmind for tradingview.pineTradingView · 1 общих теговmarket crusher ea guidlines.txtMQL · 1 общих теговsovetnikov_v5.mq4MQL4 / MetaTrader 4 · 1 общих теговunlocker manual.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Индикатор для 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 и перейдите к оплате.

Стоимость полного кода
5 488,40₽ ≈ $67.09