Какая у вас ОС ?
Рабочая альтернатива есть?
Вынесение WebRequest функций в скрипт/советник и обмен информацией с индикатором через БД и т.п..
Но очень интересно почему отвалилась dll.
Вынесение WebRequest функций в скрипт/советник и обмен информацией с индикатором через БД и т.п..
Но очень интересно почему отвалилась dll.
Потому, что с индикатором через БД.
Вынесение WebRequest функций в скрипт/советник и обмен информацией с индикатором через БД и т.п..
Но очень интересно почему отвалилась dll.
что-то "починили и улучшили" в планировщике (что-то с таймерами и приоритетами и очередями windows). Некоторые, причём очень не все, вещи с wininet dll в индикаторах стали валится. До того весьма долго работали (собирал чуть не пару лет назад и нареканий ни у кого не было)
Функция WebRequest() является синхронной, это означает, что она приостанавливает выполнение программы и ждет ответа от запрашиваемого сервера. Так как задержки при получении ответа на отправленный запрос могут быть большими, то функция запрещена для вызовов из индикаторов, поскольку индикаторы работают в едином потоке, общем для всех индикаторов и графиков на данном символе. Задержка выполнения индикатора на одном из графиков символа может привести к остановке обновления всех графиков по данному символу.
Функцию можно вызывать только из экспертов и скриптов, так как они работают в собственном потоке выполнения. При вызове из индикатора GetLastError() вернет ошибку 4014 – "Системная функция не разрешена для вызова".
Рабочая альтернатива есть?
В последнее время wininet не работает в мт5.
опробовал разные примеры из статей, перестала работать длл в терминале.
По идее можно из индикатора вызывать скрипт а в нем уже WebRequest
Как из индикатора вызвать скрипт?
Вопрос не праздный, если кто знает подскажите, ткните носом в мануал, если туплю и не нашел.
Нужно именно для парсинга, WebRequest() запустить, пока решил exeшником который пишет в SQLite BD, но хотелось бы без костылей, чисто на MQL. Вариант с советником тоже на айс, как я понимаю, так как если в основной помещать эту функцию, то "она же синхронная", а отдельного эксперта только под функцию парсинга... ну те еще городульки, уж лучше через exe. В идеале скрипт - более-менее изящное решение.
Вопрос не праздный, если кто знает подскажите, ткните носом в мануал, если туплю и не нашел.
Нужно именно для парсинга, WebRequest() запустить, пока решил exeшником который пишет в SQLite BD, но хотелось бы без костылей, чисто на MQL. Вариант с советником тоже на айс, как я понимаю, так как если в основной помещать эту функцию, то "она же синхронная", а отдельного эксперта только под функцию парсинга... ну те еще городульки, уж лучше через exe. В идеале скрипт - более-менее изящное решение.
вот такой способ - придумал. работает!
1. на скрипт назначил комбинацию клавиш
2 Создал .VBS файл - который вызовет нажатие клавиш Alt+L (тут Оператор SendKeys (VBA) )
set WshShell = WScript.CreateObject("WScript.Shell") WScript.Sleep 1000 WshShell.SendKeys "%Д" WshShell.SendKeys "%L"
3. В индикаторе прописать путь к .VBS файлу - у меня такой путь("D:\\WebRequest.vbs")
//+------------------------------------------------------------------+ //| ShellExecuteW.mq5 | //| Copyright 2021, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //---- импорт функции из внешней DLL #import "shell32.dll" int ShellExecuteW(int hwnd,string lpOperation,string lpFile,string lpParameters,string lpDirectory,int nShowCmd); #import //---- #property indicator_chart_window #property indicator_plots 0 //---- string m_name[]= {"vbs"}; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- create timer EventSetTimer(3); //--- indicator buffers mapping //--- int u=15; for(int y=0; y<ArraySize(m_name); y++) { ButtonCreate(m_name[y],5,u,25,15,8); u=u+17; } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); //--- for(int y=0; y<ArraySize(m_name); y++) { ObjectDelete(0,Symbol()+m_name[y]); } //--- } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- if(ObjectGetInteger(0,Symbol()+"vbs",OBJPROP_STATE)!=0) { ObjectSetInteger(0,Symbol()+"vbs",OBJPROP_STATE,0); ShellExecuteW(NULL,NULL,"D:\\WebRequest.vbs",NULL,NULL,1); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void ButtonCreate(string name,int Xdist,int Ydist,int Xsize,int Ysize,int FONTSIZE=12) { if(ObjectFind(0,Symbol()+name)<0) ObjectCreate(0,Symbol()+name,OBJ_BUTTON,0,100,100); ObjectSetInteger(0,Symbol()+name,OBJPROP_COLOR,clrWhite); ObjectSetInteger(0,Symbol()+name,OBJPROP_BGCOLOR,clrDimGray); ObjectSetInteger(0,Symbol()+name,OBJPROP_XDISTANCE,Xdist); ObjectSetInteger(0,Symbol()+name,OBJPROP_YDISTANCE,Ydist); ObjectSetInteger(0,Symbol()+name,OBJPROP_XSIZE,Xsize); ObjectSetInteger(0,Symbol()+name,OBJPROP_YSIZE,Ysize); ObjectSetString(0,Symbol()+name,OBJPROP_FONT,"Sans Serif"); ObjectSetString(0,Symbol()+name,OBJPROP_TEXT,name); ObjectSetInteger(0,Symbol()+name,OBJPROP_FONTSIZE,FONTSIZE); ObjectSetInteger(0,Symbol()+name,OBJPROP_SELECTABLE,false); } //+------------------------------------------------------------------+
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
есть у меня проблема с нажатием клавиш с помощью .VBS файлом
что бы комбинация клавиш сработала, нужно переключать на русский.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Функция WebRequest() является синхронной, это означает, что она приостанавливает выполнение программы и ждет ответа от запрашиваемого сервера. Так как задержки при получении ответа на отправленный запрос могут быть большими, то функция запрещена для вызовов из индикаторов, поскольку индикаторы работают в едином потоке, общем для всех индикаторов и графиков на данном символе. Задержка выполнения индикатора на одном из графиков символа может привести к остановке обновления всех графиков по данному символу.
Функцию можно вызывать только из экспертов и скриптов, так как они работают в собственном потоке выполнения. При вызове из индикатора GetLastError() вернет ошибку 4014 – "Системная функция не разрешена для вызова".
Рабочая альтернатива есть?
В последнее время wininet не работает в мт5.
опробовал разные примеры из статей, перестала работать длл в терминале.