Простой пример как вызвать из индикатора скрипт. ( РЕШЕНО https://www.mql5.com/ru/forum/388529/page4 ) - страница 4

 
Вообще склоняюсь тогда к открытию окна с шаблоном в котором советник делает скрин в файл, отсылает и закрывает окно. 
 
А если загнать в ресурс одного индикатора другой индикатор, и в том другом делать WebRequest, интересно эти индикаторы будут работать в одном потоке? 
 
Aleksei Stepanenko #:
А если загнать в ресурс одного индикатора другой индикатор, и в том другом делать WebRequest, интересно эти индикаторы будут работать в одном потоке? 

Нет, пишет урл не такой))) Сервис как бы выход. Но тоже костыльный. Получается легче два окна открыть с торгующим советником и отсылающим. 

 

Чуть выше ,  137 Matrix  очень подробно и понятно описывал решение , к сожалению оно было почему то удалено :(

Так же огромное спасибо  Дмитрию Федосееву  Dmitry Fedoseev

Зафиксирую технологическое решение для MQL5

По моей оценке оно оказалось самым простым, эффективным и лучшим.  Плата за решение включение разрешения импорта DLL. Не будет работать для  продуктов маркета.


Выбрать скрипт который должен вызываться из индикатора и назначить  вызов скрипта по клавише


Например Ctrl+E




Сам скрипт уже делает то что нужно

и вызов скрипта из индикатора выглядит так

//+------------------------------------------------------------------+
//|                                  YZ_TEST_FOR_Send_WebRequest.mq5 |
//|                                            Copyright 2022, YuraZ |
//|                              https://www.mql5.com/ru/users/yuraz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, YuraZ"
#property link      "https://www.mql5.com/ru/users/yuraz"
#property version   "1.00"
#property indicator_chart_window
#property indicator_plots   1
#property indicator_buffers 1


////////////
// #include <WinUser32.mqh> 
////////////
#import "user32.dll"
   void     keybd_event(int bVk,int bScan,int dwFlags,int dwExtraInfo); 
#import


#define PAUSE       10       // Pause 
#define VK_MENU     0x12     //ALT key
#define VK_CONTROL  0x11     //CTRL key
int     CtrlAlt     = 0    ; // 0 - Ctrl, 1 - Alt
string  Key         = "E"  ; // Key


// {{{
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Собственно вся магическая тайна происходит тут , вызов скрипта , который отправит данные по WebRequest из индикатора
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
void VK_XXXX(int ctrlalts,string keys)
  {
   int FirstKey=VK_CONTROL;
   if(ctrlalts==1)
      FirstKey=VK_MENU;
   int SecondKey=StringGetCharacter (keys,0); 
   keybd_event(FirstKey,0,0,0);
   Sleep(PAUSE);
   keybd_event(SecondKey,0,0,0);
   Sleep(PAUSE);
   keybd_event(SecondKey,0,2,0);
   Sleep(PAUSE);
   keybd_event(FirstKey,0,2,0);
  }
// }}}


int OnInit()
  {
   VK_XXXX(CtrlAlt,Key);  /// Нажимает Ctrl+E
   return(INIT_SUCCEEDED);
  }

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(rates_total);
  }
void OnTimer()
  {
  }
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
  }


Остается вставить в индикатор  для отправки сигналов  например в телеграмм канал.

 
Yuriy Zaytsev #:

Чуть выше ,  137 Matrix  очень подробно и понятно описывал решение , к сожалению оно было почему то удалено :(

Так же огромное спасибо  Дмитрию Федосееву  Dmitry Fedoseev

Зафиксирую технологическое решение для MQL5


Выбрать скрипт который должен вызываться из индикатора и назначить  вызов скрипта по клавише


Например Ctrl+E




Сам скрипт уже делает то что нужно

и вызов скрипта из индикатора выглядит так

Да вызывайте, сколько угодно, нет проблем. Проблема в том, что Вам нужно дождаться отклика прежде, чем возобновить работу индикатора, а это противоречит архитектуре системы. 

Умрёт либо Ваш индикатор, либо операционная среда МТ. Иначе никак. 

 

Если продолжение работы индикатора никак не зависит от результатов работы скрипта и не бывает ситуации, когда вызов из индикатора следующего скрипта происходит до завершения работы предыдущего, то можно попробовать. 

WebRequest - не тот случай. Отправка запроса подразумевает ожидание ответа на него, а ждать индикаторы не умеют. 

 
Алексей Тарабанов #:

Да вызывайте, сколько угодно, нет проблем. Проблема в том, что Вам нужно дождаться отклика прежде, чем возобновить работу индикатора, а это противоречит архитектуре системы. 

Умрёт либо Ваш индикатор, либо операционная среда МТ. Иначе никак. 

А почему индикатор умрет?  Сам индикатор никакого отклика ждать не будет и не ждет , индикатор в нужном месте нажал на кнопку  , вызвал скрипт и поехал работать дальше, без каких либо остановок. 

А уже скрипт , отправил по WebRequest  совсем в другом потоке.

В моем случае кстати мне нужно просто отправить в телеграмм канал некие данные  и сам скрипт при отправке ТОЖЕ ничего не ждет.

Задача , просто  отправить данные. В данном случае не стоит задача контроля!

       Типа:  - Але гараж , а получены ли вы данные? 

       По задаче НЕ нужно кричать  в гараж  фразу:   - Але , Гараж , вы там живы ? Я вам письмо принес ,  Але отвечайте  мерзавцы , получили или нет , иначе у меня тут сейчас винда зависнет и упадет МТ.

Ну это как письмо без уведомления , получил - молодец, не смог - ну не судьба. 

Кстати все оттестировано - ничего не виснет :))) не умирает.

 
Алексей Тарабанов #:
Если продолжение работы индикатора никак не зависит от результатов работы скрипта и не бывает ситуации, когда вызов из индикатора следующего скрипта происходит до завершения работы предыдущего, то можно попробовать. 

) Можно можно , все чудесно работает.

Да да по коду видно что индикатор ничего не ждет, индикатор вызвал скрипт и даже не собирается контролировать ответ от скрипта. 

Кстати скрипт тоже  не ждет.

Выше , не без юмора , описал :)

Все отрабатывает на событиях

 
Yuriy Zaytsev #:

А почему индикатор умрет?  Сам индикатор никакого отклика ждать не будет и не ждет , индикатор в нужном месте нажал на кнопку  , вызвал скрипт и поехал работать дальше, без каких либо остановок. 

А уже скрипт , отправил по WebRequest  совсем в другом потоке.

В моем случае кстати мне нужно просто отправить в телеграмм канал некие данные  и сам скрипт при отправке ТОЖЕ ничего не ждет.

Задача , просто  отправить данные. В данном случае не стоит задача контроля!

       Типа:  - Але гараж , а получены ли вы данные? 

       По задаче НЕ нужно кричать  в гараж  фразу:   - Але , Гараж , вы там живы ? Я вам письмо принес ,  Але отвечайте  мерзавцы , получили или нет , иначе у меня тут сейчас винда зависнет и упадет МТ.

Ну это как письмо без уведомления , получил - молодец, не смог - ну не судьба. 

Кстати все оттестировано - ничего не виснет :))) не умирает.

Если ответ не нужен, то без проблем. Запускаем, что угодно. 

 
Алексей Тарабанов #:

Если ответ не нужен, то без проблем. Запускаем, что угодно. 

Кстати если нужно ответ

то и его можно получить - ( по событию )  причем не создавая ожиданий.

Причина обращения: