Скачать MetaTrader 5

Какой сигнал послать терминалу, чтобы оповестить его что нужно перегрузить индикатор/советник?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
diabolo
13
diabolo  

Собственно все просто, работаю во-внешнем редакторе, собираю из коммандной строки.

Какой надо послать сигнал работающему терминалу о том, что индикатор или советник перекомпелированы и их надо перезагрузить (так как это делает metaeditor).

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

LRA
382
LRA  

Терминал запускается из командного файла (в папке терминала, 3 строки, сюда же добавить командную строку компиляции) пусть будет Term.cmd:

start terminal.exe /wait
pause 123
term

В терминале советник создает на графике кнопку, при нажатии на которую терминал прекращает работу. Или просто закрыть терминал, он тут же запустится... Можно еще сюда же включить команду принудительного закрытия терминала, что-то видел такое.


создание кнопки смотри тему Программирование функциональных кнопок  Вот текст скрипта, закрывающего терминал - нашел где-то здесь. Переделать в советник.

//+------------------------------------------------------------------+
//| Находит дескриптор главного окна и закрывает терминал            |
//+------------------------------------------------------------------+
//#property copyright "Copyright © 2006, MetaQuotes Software Corp."
//#property link      "http://www.metaquotes.net"
#include <WinUser32.mqh>
#property strict
 
//+------------------------------------------------------------------+
//| Функция выполняется при запуске скрипта                          |
//+------------------------------------------------------------------+
void OnStart()
{
   // Дескриптор окна графика, на который брошен скрипт
   int hwnd=WindowHandle(Symbol(),Period());
   int hwnd_parent=0;

   while(!IsStopped())      // Поиск главного окна
   {
      hwnd=GetParent(hwnd); // Дескриптор предыдущего окна
      if(hwnd==0) break;    // Если предыдущий отсутствует
      hwnd_parent=hwnd;     // Запомнить
   }

//   if(hwnd_parent!=0)       
      PostMessageA(hwnd_parent,WM_CLOSE,0,0);
} 
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий