FFCal Panel
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ffcal panel (black).mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор FFCal Panel отображает на графике MetaTrader панель с новостями из календаря Forex Factory. Он загружает XML-файл с данными о экономических событиях, анализирует их и выводит до четырёх приоритетных новостей с указанием времени, страны и уровня влияния. Приоритизация событий происходит автоматически: при совпадении по времени отображается событие с наибольшим влиянием.
Индикатор поддерживает фильтрацию новостей по валютным парам и уровням влияния (высокий, средний, низкий), а также позволяет задать диапазон таймфреймов для отображения. Панель может размещаться в подокне или в правой части графика, а фон и цветовая индикация настраиваются пользователем.
Встроена система уведомлений: пользователь может задать оповещение за определённое количество минут до первого запланированного события. При срабатывании оповещение выводится на график с соответствующим статусом. Данные обновляются с заданным интервалом без перезагрузки индикатора.
Настройки программы
| Настройка | Описание |
|---|---|
| Part_1 | Разделитель группы настроек отображения — Разделитель группы настроек отображения индикатора. |
| Indicator_On | Индикатор включён — Включение или выключение индикатора на графике. |
| Show_H_HM_HML_123 | Фильтр отображения по уровню влияния — Фильтр отображения событий по уровню влияния: 1 — только высокий, 2 — высокий и средний, 3 — все. |
| Allow_Panel_In_Subwindow_1 | Панель в подокне 1 — Отображение панели в подокне графика, если оно существует. |
| Allow_Panel_At_Chart_Right | Панель справа на графике — Размещение панели в правой части графика. По умолчанию панель размещается слева. |
| Display_Min_TF | Минимальный таймфрейм отображения — Минимальный таймфрейм для отображения индикатора на графике. |
| Display_Max_TF | Максимальный таймфрейм отображения — Максимальный таймфрейм для отображения индикатора на графике. |
| TF_Choices | Доступные таймфреймы — Список доступных таймфреймов для отображения в формате минут. |
| __ | Разделитель групп настроек — Разделитель между группами настроек. |
| Part_2 | Разделитель группы настроек заголовков — Разделитель группы настроек заголовков. |
| FFCal_Title | Цвет заголовка панели — Цвет заголовка панели. |
| Low_Impact_News_Color | Цель новостей с низким влиянием — Цвет отображения новостей с низким уровнем влияния. |
| Medium_Impact_News_Color | Цель новостей со средним влиянием — Цвет отображения новостей со средним уровнем влияния. |
| High_Impact_News_Color | Цель новостей с высоким влиянием — Цвет отображения новостей с высоким уровнем влияния. |
| Bank_Holiday_Color | Цвет банковских праздников — Цвет отображения банковских праздников. |
| Remarks_Color | Цель вспомогательного текста — Цвет отображения вспомогательного текста и уведомлений о незапланированных событиях. |
| Background_Color_ | Цвет фона панели — Цвет фона панели. |
| Show_Panel_Background | Показывать фон панели — Отображение фоновой заливки панели. |
| ___ | Разделитель групп настроек — Разделитель между группами настроек. |
| Part_3 | Разделитель группы настроек валют — Разделитель группы настроек валют. |
| Show_USD_News | Показывать новости 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). |
| Ignore_Current_Symbol | Игнорировать текущий символ — Игнорировать текущий символ графика и показывать новости для выбранных валют. |
| ____ | Разделитель групп настроек — Разделитель между группами настроек. |
| Part_4 | Разделитель группы настроек оповещений — Разделитель группы настроек оповещений. |
| Alert_Minutes_Before_Event_1 | Минуты до события 1 для оповещения — Количество минут до первого запланированного события для срабатывания оповещения. При значении 0 оповещение отключено. |
Поиск по коду файла
/*-------------------------------------------------------------------------------------------------
User Notes:
This FFCal Panel indicator is coded to run on MT4 Build 600+. It places a panel on the chart in
which are displayed up to four news releases listed on the Forex Factory Calendar. Details are
provided below.
FFCAL PANEL CONTENTS -
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 PRIORITIZATION OF EVENTS -
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.
THE ALERT -
You can specify to be alerted "x" minutes ahead of the scheduled release of Event #1. When
that time arrives, an alert will sound/appear on the chart. If during the same minute, while
the relase time and the alert time are of the same minute, if you change chart time framse the
alert will retrigger on the selected new chart time frame. After that minute passes, there will
be no retrigger of the set alert under any circumstances. Enter your "Broker_Name_In_Alert" to
avoid confusion if simultaneously using multiple platforms.
When "Alert_Minutes_Before_Event_1" is set at "0" the Alert is not set to function. If any
other number appears, the Alert is set to function. When the Alert is set to function....
* If the minutes input is less than the time to the release of Event #1, the Alert is set
to trigger and "Alert Pending" appears in the FFCal title.
* If the minutes input equals the time to the release, the Alert triggers and "Alert Received"
appears in the FFCal title.
* If the minutes input now exceeds the time to the release, the release is already one or
more minutes into the past and "Alert Completed" appears in the FFCal title. When this is
the case, open the External Inputs and reset the input to "0" to turn off the Alert.
THE TFs FOR DISPLAY OF FFCAL -
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.
- Traderathome, 05-30-2015
---------------------------------------------------------------------------------------------------
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+,
(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 the option controlling for what pair/pairs(s) news is shown, and for providing
new file access coding in 2015.
traderathome - for the modification of the original work to show more and prioritized headlines.
---------------------------------------------------------------------------------------------------
Suggested Colors: White Charts Black Charts
FFCal_Title Black C'180,180,180'
News_Low_Impact C'000,125,029' C'046,186,046'
News_Medium_Impact MediumBlue C'098,147,238'
News_High_Impact Crimson C'240,038,038'
Bank_Holiday_Color DarkOrchid Orchid
Remarks_Color DarkGray DimGray
Background_Color_ White C'010,010,010''
-------------------------------------------------------------------------------------------------*/
#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, uint, uint, uint);
int InternetReadFile(int, uchar & arr[], int, int & arr[]);
int InternetCloseHandle(int);
#import
extern string Part_1 = "Indicator Display Controls:";
extern bool Indicator_On = true;
extern int Show_H_HM_HML_123 = 3;
extern bool Allow_Panel_In_Subwindow_1 = true;
extern bool Allow_Panel_At_Chart_Right = false;
extern int Display_Min_TF = 1;
extern int Display_Max_TF = 43200;
extern string TF_Choices = "1-5-15-30-60-240-1440-10080-43200";
extern string __ = "";
extern string Part_2 = "Headline Settings:";
extern color FFCal_Title = C'180,180,180';
extern color Low_Impact_News_Color = C'046,186,046';
extern color Medium_Impact_News_Color = C'098,147,238';
extern color High_Impact_News_Color = C'240,038,038';
extern color Bank_Holiday_Color = Orchid;
extern color Remarks_Color = DimGray;
extern color Background_Color_ = C'010,010,010';
extern bool Show_Panel_Background = true;
extern string ___ = "";
extern string Part_3 = "Other Currency Settings:";
extern bool Show_USD_News = false;
extern bool Show_EUR_News = false;
extern bool Show_GBP_News = false;
extern bool Show_NZD_News = false;
extern bool Show_JPY_News = false;
extern bool Show_AUD_News = false;
extern bool Show_CAD_News = false;
extern bool Show_CHF_News = false;
extern bool Show_CNY_News = false;
extern bool Ignore_Current_Symbol = false;
extern string ____ = "";
extern string Part_4 = "Alert Setting:";
extern int Alert_Minutes_Before_Event_1 = 0;
bool Deinitialized, skip;
bool FLAG_1_done, FLAG_2_done, FLAG_3_done, FLAG_4_done;
bool FLAG_1_none, FLAG_2_none, FLAG_3_none, FLAG_4_none;
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;
int Minutes[8], newsIdx, next, dispMins, Days, Hours, Mins;
int i,k,curX,curY,W,Box,x1,x2,index;
int WebUpdateFreq = 240; // 240 Minutes between web updates to not overload FF server
int TxtSize = 7;
int TitleSpacer = 6;
int EventSpacer = 4;
static int PrevMinute = -1;
string xmlFileName;
string xmlSearchName;
int PrevTF = 0;
static int UpdateRateSec = 10;
string sUrl = ""; //original
string myEvent,mainData[200][7], sData, csvoutput, sinceUntil, TimeStr;
string G,/*pair, cntry1, cntry2,*/ Title[8], Country[8], Impact[8],event[5],Color[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 = "Courier Narrow";
string header;
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 Alert_Allowed;
int deinit()
{
int obj_total= ObjectsTotal();
for (i= obj_total; i>=0; i--)
{
string name= ObjectName(i);
if (StringSubstr(name,0,8)=="z[FFCal]") {ObjectDelete(name);}
}
return(0);
}
int init()
{
// код доступен только после оплаты
}
int start()
{
// код доступен только после оплаты
}
if((!Indicator_On) || ((Period() < Display_Min_TF) || (Period() > Display_Max_TF)))
{
if (!Deinitialized) {deinit(); Deinitialized = true;}
return(0);
}
InitNews(sUrl);
if(PrevTF==Period())
{
if(MathMod(Seconds(),UpdateRateSec)==0)
{
return (true);
}
else
{
PrevTF = Period();
}
}
ArrayInitialize(ExtMapBuffer0, 0);
xmlHandle = FileOpen(xmlFileName, FILE_BIN|FILE_READ);
if(xmlHandle>=0)
{
int size = FileSize(xmlHandle);
sData = FileReadString(xmlHandle, size);
FileClose(xmlHandle);
}
BankIdx1 = 0;
FLAG_1_done = false;
FLAG_2_done = false;
FLAG_3_done = false;
FLAG_4_done = false;
FLAG_1_none = false;
FLAG_2_none = false;
FLAG_3_none = false;
FLAG_4_none = false;
for (i=0; i<=9; i++)
{
Title[i] = "";
Country[i] = "";
Impact[i] = "";
Minutes[i] = 0;
}
newsIdx = 0;
tmpMins = 10080; // (a week)
BoEvent = 0;
while (true)
{
BoEvent = StringFind(sData, "<event>", BoEvent);
if (BoEvent == -1) break;
BoEvent += 7;
next = StringFind(sData, "</event>", BoEvent);
if (next == -1) break;
myEvent = StringSubstr(sData, BoEvent, next - BoEvent);
BoEvent = next;
begin = 0;
skip = false;
for (i=0; i < 7; i++)
{
mainData[newsIdx][i] = "";
next = StringFind(myEvent, sTags[i], begin);
if (next == -1) continue;
else
{
begin = next + StringLen(sTags[i]); // Advance past the start tag
end = StringFind(myEvent, eTags[i], begin); // Find start of end tag
if (end > begin && end != -1)
{mainData[newsIdx][i] = StringSubstr(myEvent, begin, end - begin);}
}
}//End "for" loop
if(!IsNewsCurrency(Symbol(),mainData[newsIdx][COUNTRY])) //deVries
{skip = true;}
else if ((Show_H_HM_HML_123 == 1) &&
(mainData[newsIdx][IMPACT] == "Medium"))
{skip = true;}
else if ((Show_H_HM_HML_123 == 1 || Show_H_HM_HML_123 == 2) &&
(mainData[newsIdx][IMPACT] == "Low"))
{skip = true;}
else if (!StringSubstr(mainData[newsIdx][TITLE],0,4)== "Bank")
{skip = true;}
else if (!StringSubstr(mainData[newsIdx][TITLE],0,8)== "Daylight")
{skip = true;}
else if ((mainData[newsIdx][TIME] == "All Day" && mainData[newsIdx][TIME] == "") ||
(mainData[newsIdx][TIME] == "Tentative" && mainData[newsIdx][TIME] == "") ||
(mainData[newsIdx][TIME] == ""))
{skip = true;}
if (!skip)
{
newsTime = MakeDateTime(mainData[newsIdx][DATE], mainData[newsIdx][TIME]);
minsTillNews = (newsTime - TimeGMT()) / 60;
if (minsTillNews < 0 || MathAbs(tmpMins) > minsTillNews)
{idxOfNext = newsIdx; tmpMins = minsTillNews;}
ExtMapBuffer0[newsIdx] = minsTillNews;
newsIdx++;
}//End "skip" routine
}//End "while" routine
for (i=0; i < newsIdx; i++)
{
if (i == idxOfNext-3)
{
Title[7] = mainData[i][TITLE];
Country[7] = mainData[i][COUNTRY];
Impact[7] = mainData[i][IMPACT];
Minutes[7] = ExtMapBuffer0[i];
}
if (i == idxOfNext-2)
{
Title[6] = mainData[i][TITLE];
Country[6] = mainData[i][COUNTRY];
Impact[6] = mainData[i][IMPACT];
Minutes[6] = ExtMapBuffer0[i];
}
if (i == idxOfNext-1)
{
Title[5] = mainData[i][TITLE];
Country[5] = mainData[i][COUNTRY];
Impact[5] = mainData[i][IMPACT];
Minutes[5] = ExtMapBuffer0[i];
}
if (i == idxOfNext)
{
Title[1] = mainData[i][TITLE];
Country[1] = mainData[i][COUNTRY];
Impact[1] = mainData[i][IMPACT];
Minutes[1] = ExtMapBuffer0[i];
if (Minutes[0] <= 0)
{
if ((Minutes[0] == Minutes[4]) &&
((Impact[1] == "Medium" && Impact[5] == "High") ||
(Impact[1] == "Low" && Impact[5] == "High") ||
(Impact[1] == "Low" && Impact[5] == "Medium")))
{
Title[1] = Title[5];
Country[1] = Country[5];
Impact[1] = Impact[5];
Minutes[1] = Minutes[5];
}
else if ((Minutes[0] == Minutes[5]) &&
((Impact[1] == "Medium" && Impact[5] == "High") ||
(Impact[1] == "Low" && Impact[5] == "High") ||
(Impact[1] == "Low" && Impact[5] == "Medium")))
{
Title[1] = Title[6];
Country[1] = Country[6];
Impact[1] = Impact[6];
Minutes[1] = Minutes[6];
}
else if ((Minutes[0] == Minutes[6]) &&
((Impact[1] == "Medium" && Impact[7] == "High") ||
(Impact[1] == "Low" && Impact[7] == "High") ||
(Impact[1] == "Low" && Impact[7] == "Medium")))
{
Title[1] = Title[7];
Country[1] = Country[7];
Impact[1] = Impact[7];
Minutes[1] = Minutes[7];
}
}
}
if (i >= idxOfNext+1)
{
Title[7] = mainData[i][TITLE];
Country[7] = mainData[i][COUNTRY];
Impact[7] = mainData[i][IMPACT];
Minutes[7] = ExtMapBuffer0[i];
if (!FLAG_1_done)
{
if ((Minutes[1] == Minutes[7]) &&
((Impact[1] == "Medium" && Impact[7] == "High") ||
(Impact[1] == "Low" && Impact[7] == "High") ||
(Impact[1] == "Low" && Impact[7] == "Medium")))
{
Title[1] = Title[7];
Country[1] = Country[7];
Impact[1] = Impact[7];
Minutes[1] = Minutes[7];
}Показано первые 50% кода (символов: 24928)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.