из скрипта изменить период графика?

 
Здравствуйте.

Вопрос такой вот - можно-ли средствами MQL пройтись по открытым окнам (графикам) и установить им другой период? А применить какой-то шаблон? Я заметил что можно посылать окнам WM_COMMAND с "магическими" параметрами - есть-ли для таких задач соответствующие значения параметров?

Спасибо.
 
"средствами MQL" такое сделать конечно же невозможно. А посыл окну команды WM_COMMAND - это уже средство WinAPI, а не MQL. Тут конечно возможно решить вопрос. Я сам не занимался именно данной проблемой, но в общем виде нужно действовать так:
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 с определёнными параметрами. ..
 
passerby183:
Вопрос такой вот - можно-ли средствами MQL пройтись по открытым окнам (графикам) и установить им другой период? А применить какой-то шаблон? Я заметил что можно посылать окнам WM_COMMAND с "магическими" параметрами - есть-ли для таких задач соответствующие значения параметров?


//+------------------------------------------------------------------+
//| 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.
Вот рабочий скрипт для программного переключения ТФ с М1, на котором  он запускается,  на М30 и тут же обратно на М1. Возьмите из него код переключения ТФ и используйте для своих целей.
Пробовал раньше и вариант Meat, тоже работает, но зависает чаще.
 
Скажите, пожалуйста, где взять описание параметров для WM_Command? Интересует вообще программное управление терминалом, а в частности - наложение серий одного индикатора с различными параметрами с целью исследования его поведения.
 
AlexanderD:
Скажите, пожалуйста, где взять описание параметров для 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.

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


Секретов ни каких ни кто не держит (все инструменты и методы озвучены), но и заниматься весьма объемной работой просто так мало кто может себе позволить.

 
Следуя логике поста, я могу из советника через API изменить таймфрейм графика. А разве при этом не будет советник переинициализирован?
 
eugene_k писал(а) >>
Следуя логике поста, я могу из советника через API изменить таймфрейм графика. А разве при этом не будет советник переинициализирован?

1. правильнее - WinAPI.

2. будет

 
Shu >>:

1. правильнее - WinAPI.

2. будет

А смысл?

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