сейчас проверил. Если открыть настройки советника и нажать ок, то он, перечитав настройки начинает получать данные нормально. Но опять же до поры до времени.
Вы как то странно пишите.
Сначала открываете файл и если file_handle2==INVALID_HANDLE, то выводите в принт ошибку. Но далее считываете из файла строчки и закрываете файл. А если было условие file_handle2==INVALID_HANDLE, то откуда вы считываете строчку и какой файл вы закрываете?
Тоже самое и с вебреквестом. Идет проверка if(res!=200), а потом несмотря на результаты
string html=CharArrayToString(result,0,WHOLE_ARRAY,CP_UTF8); return html;
Вы как то странно пишите.
Сначала открываете файл и если file_handle2==INVALID_HANDLE, то выводите в принт ошибку. Но далее считываете из файла строчки и закрываете файл. А если было условие file_handle2==INVALID_HANDLE, то откуда вы считываете строчку и какой файл вы закрываете?
Тоже самое и с вебреквестом. Идет проверка if(res!=200), а потом несмотря на результаты
так в этом и беда, что изначально это все делал не я.
А чтобы переделать моего уровня программирования не хватает, я только по мелочи могу исправить.
так в этом и беда, что изначально это все делал не я.
А чтобы переделать моего уровня программирования не хватает, я только по мелочи могу исправить.
Закройте скобками, может поможет.
string GetHtml() { if(request_url=="test.html"){ int file_handle2=FileOpen("test.html",FILE_READ|FILE_TXT|FILE_ANSI); if(file_handle2==INVALID_HANDLE) { Print("FileOpen error #"+(string)GetLastError()); } if(file_handle2!=INVALID_HANDLE) { string res_str = ""; while(!FileIsEnding(file_handle2)) { res_str += FileReadString(file_handle2) + "\r\n"; } FileClose(file_handle2); return res_str; } } string method = "GET"; // HTTP method string headers = ""; // headers char data[]; // the array of the HTTP message body char result[]; // an array containing server response data string result_headers; // headers of server response ResetLastError(); int res=WebRequest(method,request_url,headers,_request_wait_timeout,data,result,result_headers); if(res!=200) { Print("Error WebRequest :: "+(string)res+", LastError="+(string)GetLastError() + ", Error="+ErrorDescription(GetLastError())); return ""; } if(res==200) { string html=CharArrayToString(result,0,WHOLE_ARRAY,CP_UTF8); return html; } return ""; }
В общем то, не помогло. Какие еще есть варианты?
Кто вызывает GetHtml()? И что затем происходит если возврат ""?
- т.е. есть проверка на возврат пустой строчки?
Кто вызывает GetHtml()? И что затем происходит если возврат ""?
- т.е. есть проверка на возврат пустой строчки?
его вызывает другая функция, для разбора полученных данных
void InitValues() { string html = GetHtml(); order_type = GetValueFromHTML(html, "id=\"order-type\">"); t_profit = (double)GetValueFromHTML(html, "id=\"order-tp\">"); s_loss = (double)GetValueFromHTML(html, "id=\"order-sl\">"); }
его вызывает другая функция, для разбора полученных данных
Может так случиться, что файл не прочитается. Вам нужно такой вариант предусмотреть чтобы далее алгоритм не обрабатывал пустое значение и не глючил.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет! Помогите пожалуйста разобраться, в чем причина ошибки. Есть у меня советник, который чекает периодически веб страницу. Все работает нормально, но через какое то время (несколько дней, неделя и т.д) он перестает работать. Возвращая ошибку 5203
2019.11.06 08:21:58.647 WebEA XAUUSD,H1: Error WebRequest :: -1, LastError=5203, Error=no error
Самое интересное, что советник тестируется в нескольких терминалах и забирает данные с одного и того же сайта. И бывает такое, что на одном из терминалов работает, а на другом нет. И сова установлена на нескольких валютных парах. Перестает работать на всех. Что такое, ума не приложу.
Вот функция для веб-запроса.