1. Узнаёшь хэндл окна графика (h)
2. Посылаешь ему PostMessageA(h,WM_KEYDOWN,13,0); //нажатие клавиши enter
Внизу должно появиться окошечко быстрой навигации.
3. Дальше нужно в это окошечко вписать период, например 15. Тут я точно не знаю как правильно сделать... Есть 2 варианта:
- либо просто послать окну графика команды нажатия клавиш 1, 5, а затем Enter (команды такие же как и приведённая выше, только для "1" и "5" нужно вместо 13 указать коды этих клавиш)
- либо если так не получится, то надо попробовать найти хэндл этого маленького окошечка... И если он есть, то послать ему эти нажатия клавиш, или попробовать послать команду WM_SETTEXT,0,"15"
Короче тут надо пробовать... Впрочем разработчики наверное точнее ответят как это у них работает. Может быть действительно достаточно всего лишь послать WM_COMMAND с определёнными параметрами. ..
Вопрос такой вот - можно-ли средствами MQL пройтись по открытым окнам (графикам) и установить им другой период? А применить какой-то шаблон? Я заметил что можно посылать окнам WM_COMMAND с "магическими" параметрами - есть-ли для таких задач соответствующие значения параметров?
//+------------------------------------------------------------------+Вот рабочий скрипт для программного переключения ТФ с М1, на котором он запускается, на М30 и тут же обратно на М1. Возьмите из него код переключения ТФ и используйте для своих целей.
//| TF_proba_v1.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp. |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|Подключение библиотек |
//+------------------------------------------------------------------+
#include <WinUser32.mqh>
//+------------------------------------------------------------------+
//| Ф-ция недокументированных команд терминала |
//+------------------------------------------------------------------+
void KeyScript()
{
int hwnd;
//---переход на М30
hwnd=WindowHandle(Symbol(),Period());
PostMessageA(hwnd,WM_COMMAND,33140,0);
Sleep(10000);
//---возврат на М1
hwnd=WindowHandle(Symbol(),Period());
PostMessageA(hwnd,WM_COMMAND,33137,0);
}
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
//if(Period()==1 && Volume[0]<2)
KeyScript();
return(0);
}
// the end.
Пробовал раньше и вариант Meat, тоже работает, но зависает чаще.
Скажите, пожалуйста, где взять описание параметров для WM_Command? Интересует вообще программное управление терминалом, а в частности - наложение серий одного индикатора с различными параметрами с целью исследования его поведения.
33137 - M1
33138 - M5
33139 - M15
33140 - M30
35400 - H1
33136 - H4
33134 - D1
33141 - W1
33334 - MN
Это все, что я смог найти.
Для Ваших целей придется отлавливать WM_Command с помощью Spy, Winspector и пр.
Разработчики "хакерства" не поощряют и информацией не делятся.
Эти коды и варианты сообщений выдираются с помощью шпионов. Например вот такой: http://www.windows-spy.com/
Принцип простой - ловите окно, производите операции, смотрите лог сообщений окну во время операции (после должной фильтрации).
Вот и провели бы небольшое исследование, раз Вы овладели этой техникой. Насколько я слышал, на форуме многих интересуют WM_Command для переинициализации индикатора,
запуска тестера и прочих действий. Например, тогда стала бы возможной автоматически запускаемая оптимизация без прерывания работы эксперта на том же терминале.
Я не внимательно, наверное, прочитал предыдущий Ваш пост, по сути дубликат получился последних 2-х строк, только чуть более детализированный.
Но тем не мене, вопрос добычи WM_COMMAND это несколько творческая задача. Весь спектр управления терминалом все-равно не описать.
Например, . Во-первых по логике нам нужно открыть окно тестера. Уже на этом этапе варианта как минимум 2. Первое это послать главному окну Ctrl+R. Второе - посмотреть WM_COMMAND для главного окна для пункта меню "Вид -> Тестер стратегии" (в данном случае это 33315)
У нас нет гарантии, что запуск тестера стратегии происходит через какой-нибудь WM_COMMAND для главного окна, собственно в том и творчество, что бы оценить так это или нет и если нет, то придумать workaround.
Как я вижу (я, не такой уж и спец в ловле мессаджей, на самом деле) для запуска тестера нету WM_COMMAND главному окну. Значит ловим окно тестера и смотрим что у него:
Окну тестера в момент нажатия на "Старт" приходит WM_COMMAND (Code: BN_CLICKED; ControlID: 1034; Control HWND: 0x504b2). Это вполне вариант запуска. Нужно в начале разобраться с тем, что это за Control HWND - скорее всего хендл кнопки. Если так, нужно его достать с окна тестера. Когда все нужные id-шники получены (путем просмотра дерева окон) используя их формируем WM_COMMAND.
И не факт что получится, ведь это все извращения поверх mql, работа которых не гарантирована разработчиками. Если так, то нужно опять включить творчество и придумать другой workaround.
А ведь еще понадобится менять значения настроек и т.д. - что бы все это добросовестно описать и протестить, потребуется около одного рабочего дня.
Секретов ни каких ни кто не держит (все инструменты и методы озвучены), но и заниматься весьма объемной работой просто так мало кто может себе позволить.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вопрос такой вот - можно-ли средствами MQL пройтись по открытым окнам (графикам) и установить им другой период? А применить какой-то шаблон? Я заметил что можно посылать окнам WM_COMMAND с "магическими" параметрами - есть-ли для таких задач соответствующие значения параметров?
Спасибо.