WebRequest индикаторы - страница 2

 
Alexandr Gavrilin:

Рабочая альтернатива есть?

https://www.mql5.com/ru/forum/288985

wininet в индикаторах так же плохо как и webrequest, т.к. тормозит выполнение не одного индикатора а всех инидикаторов запущенных на инструменте.

а падает потому что или вы брали примеры не для x64 или где-то накосячили.

Обсуждение статьи "Многопоточный асинхронный WebRequest на MQL5 своими руками"
Обсуждение статьи "Многопоточный асинхронный WebRequest на MQL5 своими руками"
  • 2018.11.08
  • www.mql5.com
Опубликована статья Многопоточный асинхронный WebRequest на MQL5 своими руками: Автор: Stanislav Korotky...
 
137 Matrix #:

вот такой способ - придумал. работает!

...

Ну как-бы... да, рабочий вариант но костыль...

 
Andrei Khlebnikov #:

Ну как-бы... да, рабочий вариант но костыль...

если-бы  найти способ нажатие клавиш от мкл. - было бы намного проще, без всяких .VBS

 
137 Matrix #:

если-бы  найти способ нажатие клавиш от мкл. - было бы намного проще, без всяких .VBS

Лучше бы MQL добавили функцию запуска скриптов по аналогии с iCustom.

 

Не знаю специфики задачи. В общих чертах решение было в статье - https://www.mql5.com/ru/articles/5337

Упрощенный вариант - в обсуждении (https://www.mql5.com/ru/forum/288985/page3#comment_9362458),но все равно требуется чтение статьи.

Многопоточный асинхронный WebRequest на MQL5 своими руками
Многопоточный асинхронный WebRequest на MQL5 своими руками
  • www.mql5.com
В статье рассмотрена библиотека, позволяющая повысить эффективность работы с HTTP-запросами в MQL5. Выполнение WebRequest в неблокирующем режиме реализовано в дополнительных потоках с использованием вспомогательных графиков и экспертов, обмена пользовательскими событиями и чтения разделяемых ресурсов. Исходные коды прилагаются.
 
137 Matrix #:

если-бы  найти способ нажатие клавиш от мкл. - было бы намного проще, без всяких .VBS

вот нашёл https://www.mql5.com/ru/code/8567 - немного переделал на мт5 

//+------------------------------------------------------------------+
//|                                              Dmitry Fedoseev.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"
//----
#include <WinAPI\winuser.mqh>
#include <VirtualKeys.mqh>
#define PAUSE      10
//----
#property indicator_chart_window
#property indicator_plots   0
//----
input   int     CtrlAlt=0;   // 0 - Ctrl, 1 - Alt
input   string  Key="I";     //
input   int     CtrlAlt2=1;  // 0 - Ctrl, 1 - Alt
input   string  Key2="B";    //
//----
string m_name[]= {Key,Key2};
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
//--- 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)
  {
//---
   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[])
  {
//---
   if(ObjectGetInteger(0,Symbol()+Key,OBJPROP_STATE)!=0)
     {
      ObjectSetInteger(0,Symbol()+Key,OBJPROP_STATE,0);
      VK_XXXX(CtrlAlt,Key);
     }
   if(ObjectGetInteger(0,Symbol()+Key2,OBJPROP_STATE)!=0)
     {
      ObjectSetInteger(0,Symbol()+Key2,OBJPROP_STATE,0);
      VK_XXXX(CtrlAlt2,Key2);
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void VK_XXXX(int ctrlalts,string keys)
  {
   uchar FirstKey=VK_CONTROL;
   if(ctrlalts==1)
      FirstKey=VK_MENU;
   ushort  SecondKey= StringGetCharacter(keys,0); //uchar SecondKey=VK_F1;
   keybd_event(FirstKey,0,0,0);
   Sleep(PAUSE);
   keybd_event((uchar)SecondKey,0,0,0);
   Sleep(PAUSE);
   keybd_event((uchar)SecondKey,0,2,0);
   Sleep(PAUSE);
   keybd_event(FirstKey,0,2,0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
ind_HotKeys_v1
ind_HotKeys_v1
  • www.mql5.com
Пример автоматического запуска скрипта при смене таймфрейма или символа
 
Осилил, жесть =), Программист самоотверженно борется со средой разработки. Решение рабочее конечно, но как же это криво... Пока останусь на своем варианте, отдельная маленькая программа, занимающаяся веб запросами и базой данных по результатам этих запросов. Индикатор берет данные из БД и строит буфера, советник читает буфера, ищет сигнал, совершает сделки. Жаль что про VPS придется забыть. ни dll ни exe нельзя.
 

Andrei Khlebnikov #:

Жаль что про VPS придется забыть. ни dll ни exe нельзя.

а вот с таким вложением проходит код ???

//----
#include <WinAPI\winapi.mqh>
#include <VirtualKeys.mqh>

правда в старом терминале который 32 а не 64 - работает только когда вот так

//+------------------------------------------------------------------+
//---- импорт функции из внешней DLL
//#import "user32.dll"
//void     keybd_event(int bVk,int bScan,int dwFlags,int dwExtraInfo);
//#import
//+------------------------------------------------------------------+

тут слепил пример для мт4 и мт5 ----------- Это имитация клавиш

//+------------------------------------------------------------------+
//|                                                  keybd_event.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
#define   PAUSE      10
//----
#include <WinAPI\winapi.mqh>
#include <VirtualKeys.mqh>

//---- ДЛЯ МТ4 -----------------------
//#include <WinUser32.mqh>
//#define PAUSE      10
//#define VK_MENU    0x12 //ALT key
//#define VK_CONTROL 0x11 //CTRL key
//+------------------------------------------------------------------+
//---- импорт функции из внешней DLL
//#import "user32.dll"
//void     keybd_event(int bVk,int bScan,int dwFlags,int dwExtraInfo);
//#import
//+------------------------------------------------------------------+
//---- импорт функции из внешней DLL
//#import "shell32.dll"
//int ShellExecuteW(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
//#import
//ShellExecuteW(NULL, NULL, "D:\\SendKeys\\WebRequest.vbs", NULL, NULL, 1);
//    Key   | Code
//    ----  | ----
//    SHIFT | +
//    CTRL  | ^
//    ALT   | %
//+------------------------------------------------------------------+
input int     CtrlAlt  = 1;   // 0 - Ctrl, 1 - Alt
input string  Key      = "T"; //
input int     CtrlAlt2 = 1;   // 0 - Ctrl, 1 - Alt
input string  Key2     = "B"; //
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   VK_XXXX(CtrlAlt2, Key2);
   Sleep(PAUSE);
   VK_XXXX(CtrlAlt, Key);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void VK_XXXX(int ctrlalts, string keys)
  {
   int FirstKey = VK_CONTROL;
   if(ctrlalts == 1)
      FirstKey = VK_MENU;
   int SecondKey = StringGetCharacter(keys, 0); // (MT4 - int SecondKey=StringGetChar(keys,0);)    int SecondKey=VK_F1;
   keybd_event((uchar)FirstKey, 0, 0, 0);
   Sleep(PAUSE);
   keybd_event((uchar)SecondKey, 0, 0, 0);      // (MT4 - keybd_event(SecondKey, 0, 0, 0);)
   Sleep(PAUSE);
   keybd_event((uchar)SecondKey, 0, 2, 0);
   Sleep(PAUSE);
   keybd_event((uchar)FirstKey, 0, 2, 0);
  }
//+------------------------------------------------------------------+
саму функцию взял отсюда https://www.mql5.com/ru/code/8567
ind_HotKeys_v1
ind_HotKeys_v1
  • www.mql5.com
Пример автоматического запуска скрипта при смене таймфрейма или символа
 
Пока не пробовал, но с эмуляцией клавиш должно на МЗЫ работать.
 

Тут ещё одну функцию добавил для примера -  нажать на кнопку по координатам  (нашёл в этой теме https://www.mql5.com/ru/forum/171949#comment_4162387)

получилось открыть скриптом позицию -- пишет установлен вручную

Снимок экрана 2022-02-11 192723 

//+------------------------------------------------------------------+
//|                                                  keybd_event.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
#define   PAUSE      10
//----
#include <WinAPI\winapi.mqh>
#include <VirtualKeys.mqh>
//----
#define   MOUSEEVENTF_ABSOLUTE 0x8000
#define   MOUSEEVENTF_LEFTDOWN 0x0002
#define   MOUSEEVENTF_LEFTUP   0x0004
#define   MOUSEEVENTF_MOVE     0x0001

//---- ДЛЯ МТ4 -----------------------
//#include <WinUser32.mqh>
//#define PAUSE      10
//#define VK_MENU    0x12 //ALT key
//#define VK_CONTROL 0x11 //CTRL key
//------------------------------------

//---- импорт функции из внешней DLL
//#import "shell32.dll"
//int ShellExecuteW(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
//#import
//ShellExecuteW(NULL, NULL, "D:\\SendKeys\\WebRequest.vbs", NULL, NULL, 1);
//    Key   | Code
//    ----  | ----
//    SHIFT | +
//    CTRL  | ^
//    ALT   | %
//+------------------------------------------------------------------+
input group   "keybd_event"
input int     CtrlAlt  = 1;     // 0 - Ctrl, 1 - Alt
input string  Key      = "T";   //
input int     CtrlAlt2 = 1;     // 0 - Ctrl, 1 - Alt
input string  Key2     = "B";   //
input group   "mouse_event"
input int     dx       = 25000; //
input int     dy       = 35000; //
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   VK_XXXX(CtrlAlt2, Key2);
   Sleep(PAUSE);
   VK_XXXX(CtrlAlt, Key);
   Sleep(PAUSE);
   MOUSE_XXXX(dx,dy);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void VK_XXXX(int ctrlalts, string keys)
  {
   int FirstKey = VK_CONTROL;
   if(ctrlalts == 1)
      FirstKey = VK_MENU;
   int SecondKey = StringGetCharacter(keys, 0); // (MT4 - int SecondKey=StringGetChar(keys,0);)    int SecondKey=VK_F1;
   keybd_event((uchar)FirstKey, 0, 0, 0);
   Sleep(PAUSE);
   keybd_event((uchar)SecondKey, 0, 0, 0);      // (MT4 - keybd_event(SecondKey, 0, 0, 0);)
   Sleep(PAUSE);
   keybd_event((uchar)SecondKey, 0, 2, 0);
   Sleep(PAUSE);
   keybd_event((uchar)FirstKey, 0, 2, 0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void MOUSE_XXXX(int dxs,int dys)
  {
   mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, dxs, dys, 0, 0);
   Sleep(PAUSE);
   mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN, dxs, dys, 0, 0);
   Sleep(PAUSE);
   mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, dxs, dys, 0, 0);
   Sleep(PAUSE);
  }
//+------------------------------------------------------------------+
Помогите нажать на кнопку ...
Помогите нажать на кнопку ...
  • 2017.03.07
  • www.mql5.com
имеется диалоговое окно, в окне кнопка О‌К, хочу нажать ее из программы, но, никак, хоть ты тресни...
Файлы: