Может while(true) заменить на while(InternetReadFile(HttpRequest,Buffer,READURL_BUFFER_SIZE,read))
Ну и перед началом чтения проверить что HttpRequest>0
[Новостной индикатор] Truly News Indicator📌
От Rever27, 2 февраля, 2016 в Индикаторы
Пробуйте с корректировкой от master_255.
Также поправил проверку на один из трех адресов новостей: текущий и которые были раньше.
На мой скромный взгляд, правильный вариант должен быть через WebRequest чтобы не было лишних вызовов API
string cookie=NULL,headers;
char post[],result[];
int res;
string news_url="https://cdn-nfs.faireconomy.media/ff_calendar_thisweek.xml";
ResetLastError();
int timeout=5000;
res=WebRequest("GET",news_url,cookie,NULL,timeout,post,0,result,headers);
if(res==-1)
{
Print("Ошибка в WebRequest. Код ошибки =",GetLastError());
MessageBox("Необходимо добавить адрес '"+news_url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
}
else
{
PrintFormat("Файл успешно загружен, Размер файла =%d байт.",ArraySize(result));
int filehandle=FileOpen("news.xml",FILE_WRITE|FILE_BIN);
if(filehandle!=INVALID_HANDLE)
{
FileWriteArray(filehandle,result,0,ArraySize(result));
FileClose(filehandle);
}
else Print("Ошибка в FileOpen. Код ошибки =",GetLastError());
}
Версия Truly News Indicator 2.2.76 больше не вешает терминал но по-прежнему не работает, пишет File download incomplete!
Настройки терминала на скрине, нужно добавить еще какие-то url?
Также, возможно ли в настройках сделать поле для URL, на случай новых переездов календаря
Изменено 9 апреля, 2019 пользователем dmitrykirillov
WebRequest
Я WebRequest не стал ставить, чтобы пользователям не нужно было добавлять вручную эти сайты в настройки терминала.
Пробовал как с ним, так и без него - у меня ошибок никаких не было.
Да, ситуация с 2.2.76 аналогичная как у Дмитрия Кириллова. Терминалы не вешает, но и новостной файл не грузит.
0 20:24:43.974 Custom indicator Truly News Indicator 2.2.76 EURUSD,H1: loaded successfully
0 20:24:48.129 Truly News Indicator 2.2.76 EURUSD,H1: initialized
0 20:24:48.853 Truly News Indicator 2.2.76 EURUSD,H1: Alert: EURUSD 60, ForexFactory-News Error: File download incomplete!
0 20:24:49.102 Truly News Indicator 2.2.76 EURUSD,H1: Alert: EURUSD 60, ForexFactory-News Error: File download incomplete!
0 20:24:49.104 Truly News Indicator 2.2.76 EURUSD,H1: Error OutputToChart 4052: string function internal error
InternetConnectW не может содержать в качестве параметра servername пустую строку. Должно быть SERVERNAME.COM или иное доменное имя. Иначе как функция поймет куда вы подключаетесь?
Таким образом, получаем ошибку после вызова,
Last Error Value 0x0000007B : "Синтаксическая ошибка в имени файла, имени папки или метке тома."
что целиком совпадает с предсказанным поведением функции
Изменено 9 апреля, 2019 пользователем nixxer
InternetConnectW вообще выкинуть он тут даже не используется :)
На мой скромный взгляд, правильный вариант должен быть через WebRequest чтобы не было лишних вызовов API
WebRequest нельзя вызвать в индикаторе.
InternetConnectW вообще выкинуть он тут даже не используется
Убрал строку вообще
Я не понимаю, откуда возникла проблема и почему раньше ее не было. Я проверить ее не могу, у меня все окей работает.
На всякий случай закомментировал добавленный dll.
Перед установкой в папке Files нужно удалить подобный файл "2019-04-07-ForexFactory-News"
Прописывать в настройках WebRequest терминала ничего не нужно.
Версия Truly News Indicator 2.2.76 больше не вешает терминал но по-прежнему не работает, пишет File download incomplete!
Настройки терминала на скрине, нужно добавить еще какие-то url?
Вот у меня тоже самое пишет, до недавнего времен всё работало нормально пару лет, только время менял при переходе на летнее и всё....а тут вот такую фигню как у Вас стал писать и не линий с новостями...ни че го.....((((
2.2.77 так же как и 2.2.76 терминал не вешает, но download incomplete . Файл 2019-04-07-ForexFactory-News удалял несколько раз, начиная с "висящей" версии - никак не влияет.
ERR_STRING_FUNCTION_INTERNAL_ERROR 4052 String function internal error.
Версия 2,1,73 не выдаёт ошибку 4052
Изменено 9 апреля, 2019 пользователем JoeBl4ck
Truly News Indicator 2.2.77
Аналогично, не работает
Думаю что проблема в отсутствии в поле User-Agent какого-либо осмысленного текста. Сейчас там находится пробел.
Также я думаю что код можно упростить до использования URLDownloadToFile из urlmon.dll
Изменено 9 апреля, 2019 пользователем nixxer
Думаю что проблема в отсутствии в поле User-Agent какого-либо осмысленного текста. Сейчас там находится пробел.
Почитал справку, поправил без пробелов.
bool DownLoadWebPageToFile(string url) { //new coding replacing old "GrabWeb" coding
if(url == "") {
Print("-Host is not specified");
return(false);
}
bool CheckReadInfo = false;
string UserAgent="Mozilla"; string nill="";
int HttpOpen = InternetOpenW(UserAgent,OPEN_TYPE_PRECONFIG,nill,nill,0);
int HttpRequest = InternetOpenUrlW(HttpOpen, url, NULL, 0, 0, 0);
if(HttpRequest > 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); } //File exists if FileOpen return >=0.
xmlHandle=FileOpen(xmlFileName,FILE_BIN|FILE_WRITE); //Open new XML. Write the ForexFactory page contents to a .htm file. Close new XML.
while(InternetReadFile(HttpRequest,Buffer,READURL_BUFFER_SIZE,read))
{
string strThisRead = CharArrayToString(Buffer,0,read[0],CP_UTF8);
if (read[0] > 0) NEWS = NEWS + strThisRead;
else {
if(StringLen(NEWS) int end_tag = StringFind(NEWS,"",0); //Find the XML end tag to ensure a complete page was downloaded.
//If the end of file tag is not found, a return -1 (or, "end if(end_tag == -1) {
Alert(Symbol()," ",Period(),", ForexFactory-News Error: File download incomplete!");
Print("Строка с новостями: " + NEWS + ". Количество символов: " + IntegerToString(StringLen(NEWS)));
}
else { //Else, set global to time of last update
FileWriteString(xmlHandle,NEWS);
FileClose(xmlHandle);
GlobalVariableSet("Update.FF_Cal",TimeCurrent());
CheckReadInfo = true;
}
break;
}
}
}
if(HttpRequest > 0) InternetCloseHandle(HttpRequest);
if(HttpOpen > 0) InternetCloseHandle(HttpOpen);
return(CheckReadInfo);
}
nixxer Подключить Urlmon.dll не получилось, выдает ошибку Cannot find 'URLDownloadToFile' in 'Urlmon.dll'
Я не знаю этот язык программирования, соответственно мне сложно в этом все разобраться. Если можешь - накидай корректный код для нее.
Вообще сложно искать ошибку, которая появилась из воздуха. У меня ее вообще нет, как ее вызвать не знаю.
Проверьте эту версию, уже не знаю, на что смотреть.
у меня все последние индикаторы ув. Rever27 нормально работают в билде 1170...

2.2.78
2019.04.10 11:19:53.765 Truly News Indicator 2.2.78 EURUSD,M30: Alert: EURUSD 30, ForexFactory-News Error: File download incomplete!
Но ошибки 4052 не стало.
upd
Скачал FFC.mql c сайта mql5_com/en/forum/94492/page8#comment_11235003, который тоже изначально не грузит xml.
Обновил адрес xml по комменту Сергея Голубева на cdn-nfs.faireconomy.media/ff_calendar_thisweek.xml
FFC заработал и в терминале Альпари и в Робофорексе
В нём, кстати, urlmon.dll фигурирует:
//--- to download the xml
#import "urlmon.dll"
int URLDownloadToFileW(int pCaller,string szURL,string szFileName,int dwReserved,int Callback);
#import
Нельзя ли сделать так с ТрулиНьюз? Взять 2.1.73 или 74, вставить действующий xml адрес без всяких переборок, или как предложили выше вывести его в настройки.
Изменено 10 апреля, 2019 пользователем JoeBl4ck
Truly News Indicator 2.2.78
Аналогично, file download incomplete
Скачал FFC.mql c сайта mql5_com/en/forum/94492/page8#comment_11235003, который тоже изначально не грузит xml.
Обновил адрес xml по комменту Сергея Голубева на cdn-nfs.faireconomy.media/ff_calendar_thisweek.xml
В нём, кстати, urlmon.dll фигурирует:
Вот это понятный советник к действиям, проверяйте
Версия 2.3.80
- заменен импорт DLL "Wininet.dll" на "urlmon.dll" для сохранения данный новостей в файл.
2.3.80 вообще никаких признаков на графике. Нет ни сообщений в алертах, ни надписей на графике, терминал не виснет. Но в журнале какие-то ошибки выдаёт.
Даже файла не создаёт на диске. На скрине - это от FFC индикатора. Остальные версии 2,2,75-78 создают пустышку 0кб
Изменено 10 апреля, 2019 пользователем JoeBl4ck
Еще вариант.
Ура! Заработало! Работает и в альпари и в робофорексе. Ещё не присматривался к времени отображения новостей, сдвигу гмт и алертов не было. Отпишусь, если вдруг возникнут ошибки.
Спасибо вам большое.
Хостер новостей теперь Cloudfront. Что это означает? Стабильность, защита от лишней передачи данных через кэширование и базовая защита от атак.
Если кто-то получил файл новостей, далее какое-то время будет код HTTP 304 Not modified вместо 200 OK. Так как сервер будет считать что вам не надо заново качать то, что еще не изменилось. В частности, именно поэтому сложно уловить ошибку тому, кто уже получал успешно документ :-b
Смею предположить, что проблема был а в ссылке https. По совету мудрого человека заменил на http.
Все остальные мои телодвижения в предыдущих версиях были лишними. На всякий случай теперь проверяется и http и https.
На самом деле проблема не у нас. Почему cloudfront тупит я не знаю.
Решил все таки посмотреть трафик внимательно и пришел к выводу, сервер cloudfront не устанавливает соединение после этапа обмена handshake. TLSv1 и SSLv3 обламываются из-за неверного значения handshake при получении сертификата.
Тот же forexfactory установку соединения делает успешно но там в ответе только ответ HTTP 410 Gone. Так что forexfactory можно смело удалять из всех списков источника новостей xml формата.
Пора TLP мутить свой источник новостей в блек джеком и пруфурсетками :d
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем