Надо программно запретить советникам открывать новые позиции

 
Я хочу написать программу, которая бы запрещала каким-то образом остальным советникам открывать новые позиции (т.е. при определённых условиях, разумеется.... хотя это не принципиально). Какой командой можно запретить работающим советникам открывать новые позиции. При этом коды тех советников переписывать не хотелось бы. Спасибо.
 

Вот такой вариант- достаете WinSpy, ищите панель с кнопками.

Отслеживаете события, которые происходят при нажатии мышки.

Дальше- все то же самое, но уже программно :-).

Как по-другому не знаю.

 
Dmitrii >>:
Я хочу написать программу, которая бы запрещала каким-то образом остальным советникам открывать новые позиции (т.е. при определённых условиях, разумеется.... хотя это не принципиально). Какой командой можно запретить работающим советникам открывать новые позиции. При этом коды тех советников переписывать не хотелось бы. Спасибо.

Хотя нет. Обманул :-). Запускаете монитор файлов, настраиваете фильтр.

Смотрите, какой файл модифицируется при нажатии на кнопку разрешения- запрещения советников.

Делаете две копии- для разрешенных и запрещенных советников.

Возможно, потребуется перегрузить метатрейдер.

.

P.S.: как называется файл монитор сейчас не нашел - приложил тот который у меня.

Файлы:
ntfilmon.zip  84 kb
 
Dmitrii >>:
... Какой командой можно запретить работающим советникам открывать новые позиции. При этом коды тех советников переписывать не хотелось бы. Спасибо.

Как вариант по наступлению условия поднимайте флаг.

В качестве флага используйте глобальную переменную терминала. https://docs.mql4.com/ru/globals

Эту же переменную читайте в других советниках.


При этом небольшую модификацию советников сделать придётся:

в самом начале функции старт вставить анализ флага.

 
// ON/OFF "Expert Advisors" button

#import "user32.dll"
  int PostMessageA(int hWnd,int Msg,int wParam,int lParam);
  int GetAncestor(int hWnd, int gaFlags);
#import

#define WM_COMMAND 0x0111
#define GA_ROOT 2

void start()
{
  int hWnd;
	
  hWnd = GetAncestor(WindowHandle(Symbol(), Period()), GA_ROOT);

  if(hWnd != 0)
    PostMessageA(hWnd, WM_COMMAND, 33020, 0);
	
  return;
}
 
getch >>:

GA_ROOT- это классно! :-) Спасибо.

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

проще изменить советник

 
m_a_sim >>:

проще изменить советник


Если код советника есть - безусловно. А если нет?

 
Svinozavr >>:

Если код советника есть - безусловно. А если нет?


Dmitrii 05.10.2009 00:51

При этом коды тех советников переписывать не хотелось бы. Спасибо.

Что то мне подсказывает, что есть код
 
m_a_sim >>:


Что то мне подсказывает, что есть код



Возможно. Но я ведь с вашим мнением, что проще код переписать и не спорил, а напротив - безусловно согласился. ))) Я о конкретном случае, когда нет исходника.

 
Svinozavr >>:

Возможно. Но я ведь с вашим мнением, что проще код переписать и не спорил, а напротив - безусловно согласился. ))) Я о конкретном случае, когда нет исходника.


на нет и суда нет))

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