FFCal
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ffcal.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
FFCal — индикатор для MetaTrader 4, получающий данные экономического календаря ForexFactory и отображающий информационные объявления на графике. Индикатор скачивает XML-файл с календарём новостей, парсит его и сохраняет в CSV для последующего использования. Поддерживает фильтрацию по уровню влияния и типу новостей.
Настройки программы
| Настройка | Описание |
|---|---|
| IncludeHigh | Включить высокие — Логический переключатель: включает или выключает отображение новостей с высоким уровнем влияния |
| IncludeMedium | Включить средние — Логический переключатель: включает или выключает отображение новостей со средним уровнем влияния |
| IncludeLow | Включить низкие — Логический переключатель: включает или выключает отображение новостей с низким уровнем влияния |
| news items with "Speaks" in them have different characteristics (IncludeSpeaks) | Включить Speaks — Логический переключатель: включает или выключает отображение новостей, содержащих слово Speaks в заголовке |
| IsEA_Call | Вызов из советника — Логический переключатель: при true индикатор не выводит информацию на график самостоятельно, а предоставляет данные через буферы для вызывающего советника |
| No longer used - euclid (OffsetHours) | Смещение часов — Целочисленный параметр смещения часов, более не используется |
| Set this to false when another indicator instance is already (AllowWebUpdates) | Разрешить веб-обновления — Логический переключатель: разрешает или запрещает загрузку данных с веб-сайта при запущенном другом экземпляре индикатора на том же символе и таймфрейме |
| Set to -1 for no Alert (Alert1MinsBefore) | Первая тревога за минуты — Целочисленное значение: за сколько минут до события отправлять первое уведомление; -1 отключает тревогу |
| Set to -1 for no Alert (Alert2MinsBefore) | Вторая тревога за минуты — Целочисленное значение: за сколько минут до события отправлять второе уведомление; -1 отключает тревогу |
| ReportAllForUSD | Сообщать все для USD — Логический переключатель: включает отображение всех новостей для USD вне зависимости от текущей валютной пары |
| Perhaps remove this from externs once its working well (EnableLogging) | Включить журналирование — Логический переключатель: включает запись отладочных сообщений в лог-файл |
| ShowNextTwoEvents | Показать следующие два события — Логический переключатель: определяет, отображать ли информацию о двух ближайших новостях на графике |
| ShowVertNews | Показать вертикальные новости — Логический переключатель: отображает вертикальные линии и текстовые метки на графике в местах прохождения новостей |
| TxtSize | Размер текста — Целочисленный размер шрифта текстовых меток индикатора на графике |
| TxtColorTitle | Цвет заголовка — Цвет текстовой метки заголовка индикатора |
| TxtColorNews | Цвет новостей — Цвет текстовой метки с информацией о новостях |
| TxtColorImpact | Цвет влияния — Цвет текстовой метки с уровнем влияния события |
| TxtColorPrevious | Цвет предыдущего — Цвет текстовой метки с предыдущим значением показателя |
| TxtColorForecast | Цвет прогноза — Цвет текстовой метки с прогнозным значением |
| How far away below the ask line we want to place our vertical news text (VertTxtShift) | Смещение вертикального текста — Целочисленное значение вертикального смещения текста новостей ниже линии цены Ask |
| How far away to the left of the line we want to place our vertical news text (VertLeftLineShift) | Смещение левой линии — Целочисленное горизонтальное смещение влево для размещения первой вертикальной линии и метки новости |
| How far away to the left of the line we want to place our vertical news text (VertRightLineShift) | Смещение правой линии — Целочисленное горизонтальное смещение вправо для размещения второй вертикальной линии и метки новости |
| Color of our vertical news line (VertLineColor) | Цвет вертикальной линии — Цвет вертикальной линии, обозначающей момент прохождения новости |
| Color of our vertical text color (VertTxtColor) | Цвет вертикального текста — Цвет текста вертикальной текстовой метки новости |
| Color of our vertical text (VertTxtSize) | Размер вертикального текста — Целочисленный размер шрифта вертикальной текстовой метки новости |
| Choose which corner to place headlines 0=Upper Left, 1=Upper Right, 2=lower left , 3=lower right (NewsCorner) | Угол новостей — Целочисленное значение определяет угол графика для размещения заголовков: 0 — верхний левый, 1 — верхний правый, 2 — нижний левый, 3 — нижний правый |
| If true, this will keep the daily XML files (SaveXmlFiles) | Сохранять XML-файлы — Логический переключатель: при true загруженные XML-файлы сохраняются на диск, при false удаляются при деинициализации индикатора |
Поиск по коду файла
/*
IDEAS FOR ADDITIONS:
* A text lable of what the news was and when it was, e.g
"USD CPI m/m @ [broker time here]" at the top or bottom within the shaded area.
* Label the number of pips it went in its initial direction and how much it
retraced...of course you'd have to come up with a convention for measuring
movement. Or you could label what price was just prior to news then labels
the next two price exteremes. I think it would be nice to have the numbers
right under/over the candle that produced the extremes for whatever timeframe
you are in.
* Label the volume count for the candle that included the news in it...whatever
timeframe your in. So I could switch from 1 min. to 5 min. to 15 min.
timeframes and get different vol. counts for the bar that included the news.
*/
#property indicator_chart_window
#property indicator_buffers 3
#define TITLE 0
#define COUNTRY 1
#define DATE 2
#define TIME 3
#define IMPACT 4
#define FORECAST 5
#define PREVIOUS 6
#define EVENTMAX 256
extern bool IncludeHigh = true;
extern bool IncludeMedium = true;
extern bool IncludeLow = false;
extern bool IncludeSpeaks = true; // news items with "Speaks" in them have different characteristics
extern bool IsEA_Call = false;
extern int OffsetHours = 0; // No longer used - euclid
extern bool AllowWebUpdates = true; // Set this to false when another indicator instance is already
extern int Alert1MinsBefore = -1; // Set to -1 for no Alert
extern int Alert2MinsBefore = -1; // Set to -1 for no Alert
extern bool ReportAllForUSD = false;
extern bool EnableLogging = false; // Perhaps remove this from externs once its working well
extern bool ShowNextTwoEvents = true;
extern bool ShowVertNews = false;
extern int TxtSize = 10;
extern color TxtColorTitle = LightGray;
extern color TxtColorNews = DeepSkyBlue;
extern color TxtColorImpact = Red;
extern color TxtColorPrevious = Peru;
extern color TxtColorForecast = Lime;
extern int VertTxtShift = 21; // How far away below the ask line we want to place our vertical news text
extern int VertLeftLineShift = 900; // How far away to the left of the line we want to place our vertical news text
extern int VertRightLineShift= 200; // How far away to the left of the line we want to place our vertical news text
extern color VertLineColor = SlateBlue; // Color of our vertical news line
extern color VertTxtColor = DimGray; // Color of our vertical text color
extern int VertTxtSize = 8; // Color of our vertical text
extern int NewsCorner = 0; // Choose which corner to place headlines 0=Upper Left, 1=Upper Right, 2=lower left , 3=lower right
extern bool SaveXmlFiles = true; // If true, this will keep the daily XML files
int DebugLevel = 2;
double ExtMapBuffer0[]; // Contains (minutes until) each news event
double ExtMapBuffer1[]; // Contains only most recent and next news event ([0] & [1])
double ExtMapBuffer2[]; // Contains impact value for most recent and next news event
string sUrl = "";
int xmlHandle;
int logHandle = -1;
int BoEvent, finalend, end, i;
int begin;
string mainData[EVENTMAX][7];
int minsTillNews;
string sData, csvoutput;
string commentStr;
int tmpMins;
int idxOfNext;
int dispMinutes[2];
string dispTitle[2],
dispCountry[2],
dispImpact[2],
dispForecast[2],
dispPrevious[2];
string sTags[7] = { "<title>", "<country>", "<date>", "<time>", "<impact>", "<forecast>", "<previous>" };
string eTags[7] = { "</title>", "</country>", "</date>", "</time>", "</impact>", "</forecast>", "</previous>" };
bool NeedToGetFile = false;
int PrevMinute = -1;
datetime LastTimeAlert1 = 0; // Used to make sure we only draw something once per annoucement. Added by MN
string xmlFileName; // Made global. added by MN
int LastSTO=0; //Added by euclid
int init()
{
// код доступен только после оплаты
}
int deinit()
{
ObjectDelete("Sponsor");
ObjectDelete("Minutes");
ObjectDelete("Impact");
ObjectDelete("Previous");
ObjectDelete("Forecast");
ObjectDelete("Minutes2");
ObjectDelete("Impact2");
ObjectDelete("Previous2");
ObjectDelete("Forecast2");
DeleteVLines(); //added by euclid
xmlFileName = GetXmlFileName();
if (xmlHandle >= 0)
FileClose(xmlHandle);
if (!SaveXmlFiles)
FileDelete(xmlFileName);
if (logHandle > 0) //added by euclid
FileClose(logHandle);
return(0);
}
void DeleteVLines()
{//delete lines - moved to function call by euclid
int i;
for(i=ObjectsTotal()-1; i >= 0; i--)
{
string VerticalLineName = ObjectName(i);
if (StringSubstr(VerticalLineName, 0, 5) != "vLine")
continue;
ObjectDelete(VerticalLineName);
}
for (i=ObjectsTotal()-1; i >= 0; i--)
{
string HeadlineName = ObjectName(i);
if (StringSubstr(HeadlineName, 0, 8) != "Headline")
continue;
ObjectDelete(HeadlineName);
}
}
string GetXmlFileName()
{
return (Month() + "-" + Day() + "-" + Year() + "-" + Symbol() + Period() + "-" + "FFCal.xml");
}
int start()
{
// код доступен только после оплаты
}
/*
void DisplayVerticalNews(string dispTitle, string dispCountry, int shift)
{
double Pivot, Height = 0.0;
Pivot = (iHigh(NULL, 1440, 1) +
iLow(NULL, 1440, 1) +
iClose(NULL, 1440, 1)) / 3;
if (Open[0] > Pivot)
Height = Low[iLowest(NULL,0,MODE_LOW,5,0)] - VertTxtShift*Point;
else
Height = High[iHighest(NUПоказано первые 50% кода (символов: 22071)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.