Программно завершить работу MT4, выгрузить терминал из памяти

 

День добрый!


Возникла следующая технология

1-в определенное время с указанным квантом времени программа написанная на C++ проверяет в памяти наличие терминала и если его нет грузит его

2-СОВЕТНИК НА MQL4 проеряет наличие открытых позиций - открыть позиции может другой советник или трейдер

и если позиций нет советник должен выгрузить терминал из памяти - если есть выгружать уже не будет


просто сходу не могу вспонить - сам механизм завершения MT4 и выгрузки его

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

подскажите кто знает

СПАСИБО!

 

'MetaTrader and ExitProcess' :

//+------------------------------------------------------------------+
//|                                                CloseTerminal.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#property show_inputs
#include <WinUser32.mqh>
 
#import "user32.dll"
  int GetParent( int hWnd );
#import
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
   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);
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Спасибо !

творчески переработал! можно сказать код в библиотеку можно положить!


#import "user32.dll"
int GetParent(int hWnd);  // вызов API
#import
 
 
int start()
{
 
// проверил что нет открытых позиций MyOpen() - функция проверяет есть ли позы для эксперта
 
if ( MyOpen() == 0 )
    ExitMT4()
 
//--- позиции есть продолжаем работу
 
/*
...
 
...
*/
   return(0);
}
 

void ExitMT4() // выгрузить MT4 из памяти
{
   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);
}


программу пуска переписал на VISUAL BASIC

1 программа по шедулеру запсукается с указанным периодом ( НАПИСАННО ДЛЯ переработанного СОВЕТНИКА метод Вакены ) вход у него в 20 часов

2 затем если не находит в памяти нужный терминал запсукает его

всего на машине запускает несколько терминалов - можно сколько потянет

советник если не нашел свои позы выгружает MT4 - но если советник стартовал за час до входа и поз нет то он не выгружается до 21 часа

если позы есть то выход не производим

таким образом немного экономятся ресурсы - и трафик

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