![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Как получить состояние включения/выключения кнопки?
Это следующая тема. Мы ее сегодня рассмотрим.
Добавлю, что элементы этого GUI рисованные, поэтому стандартный метод получения состояния ObjectGetInteger(0, "button1", OBJPROP_STATE); работать не будет.
Также, напомню что события элементов, в том числе кнопок, приходят в API файл.
Общий список тем для рассмотрения:
1. Ориентирование в списке интеллисенс и выбор функции нужного окна.
2. Программное открытие и закрытие окон.
3. Ориентирование в списке интеллисенс и выбор нужного элемента в нужном окне.
4. Ориентирование в списках индивидуальных свойств элементов.
5. Разбор названия функции обертки элемента и окна.
6. Возврат значения параметра выбранного элемента в переменную его типа. Рассмотрим три типа нескольких разных элементов.
7. Установка значений в параметры разных типов элементов. Посмотрим как значения будут появляться в окнах интерфейса этих элементов.
8. Возврат значений параметра одного элемента, изменение и пересылка этого значения в другой элемент. Рассмотрим разные типы элементов и значений, и проведем тест на пересылку между разными типами элементов в разных окнах.
9. Возврат предыдущего значения (_V_LAST). Когда и для каких случаев требуется последнее значение (не путать с текущим).
10. Протестируем устновку состояний ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK для различных типов элементов.
11. Попробуем связать и синхронизировать изменения значений элементов разных типов: например поля ввода с кнопками и слайдера. Допустим, чтобы при изменении значения одного элемента (ручного или программного), значение во втором элементе менялось соответствующе.
12. Попробуем программно переустановить границы диапазона слайдера и поля ввода с кнопками через функции обертки. Я не успел это протестировать, но что то подсказывает, что это получится. Впрочем, посмотрим.
13. Попробуем вернуть состояния элементов через функции обертки. Это заложено в функционал, но также, не успел протестировать. Поэтому посмотрим... Результат неизвестен.
14. Получим и установим цвета для текста и оснований элементов. Можно попытаться связать эти цвета с какими то незамысловатыми событиями или границами значений.
15. Расскажу подробнее как ориентироваться и читать новую распечатку файла API.
//------------------------------------------
Желтым цветом выделены темы которые уже рассмотрели.
Сегодня рассмотрим:
11. Синхронизация (связывание) изменения значений элементов разных типов: например поля ввода с кнопками и слайдера. Чтобы при изменении значения одного элемента (ручного или программного), значение во втором элементе менялось соответствующе.
12. Попробуем программно переустановить границы диапазона слайдера и поля ввода с кнопками через функции обертки. Я не успел это протестировать, но что то подсказывает, что это получится. Впрочем, посмотрим.
13. Попробуем вернуть состояния элементов через функции обертки. Это заложено в функционал, но также, не успел протестировать. Поэтому посмотрим... Результат неизвестен.
11. Связывание параметров элементов разных типов.
Наблюдательный человек замечал, что во многооконном графическом интерфейсе разные элементы часто связаны значениями параметров, свойствами и состояниями. Например:
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------
Можно подумать, где то проходит невидимая связь элементов. И она действительно есть. Но невидима она только для стороннего наблюдателя. Для разработчика она вполне очевидна и сегодня рассмотрим ее подробно.
1. Связь элементов имеет две стороны:
Техническая реализация связей упрощается благодаря наличию графического движка.
Поясню:
В обычном советнике каждый параметр придумывает, называет, хранит и обрабатывает пользователь. Это рутинная работа которую нельзя обойти. Однако в случае использования графического движка, элементы созданные в конструкторе автоматически получают параметр вместе с местом хранения и функцией обработки/возврата. В довесок, пользователь получает их свойства, как тип, диапазон, прошлое значение и т.д. Это значительно упрощает труд. Теоретически, можно использовать готовые параметры элементов GUI как остальные пользовательские параметры, связав их напрямую с торговой логикой. Например лот, трейлинг стоп, тейк профит и другие, брать не из собственных переменных, а у полей настроек отвечающих за их значения.
Некоторые общие выводы:
1. Наличие графического элемента управления в программе = наличие готового программного параметра + его свойств + функции возврата/установки значения.
2. Чем больше элементов управления помещены в окна интерфейсной программы, тем больше параметров потециально участвуют в торговой логике и в вводе/выводе торговой информации.
3. Чем больше настроек и окон - тем выше контроль и шире полоса вывода рыночных данных (без ущерба автоматизации).
4. Чем выше контроль и шире полоса вывода рыночных данных - тем лучше осведомленность трейдера.
5. Осведомленность помноженная на автоматизацию и контроль = масштабирование трейдерских возможностей.
Добавлю, что часто автоматизацию противопостовляют мануальному контролю. Мол, наличие графического интерфейса означает ручную торговлю. Но это не так. Программный интерфейс не исключает, а расширяет автоматизацию, добавляя к ней "градиент" - открывает три варианта: ручное управление, полуавтоматическую торговлю и автономный режим.
Все что нужно трейдеру - выбрать опцию.
Благо, для этого легко создать окно.
//---------------------------------------------------------------------------------------------------
2. Перейдем к технической реализации связывания параметров элементов управления.
Рассмотрим несколько практических примеров:
1. Откроем знакомое окно настроек:
2. Откроем файл API и найдем элементы открытого окна внутри функции On_Gui_Event():
Напомню: Все события элементов управления приходят в функцию On_Gui_Event();
В связи с этим, часть связей параметров пропишем внутри этой функциии, а часть вне ее тела.
1. Установим связь между полем с кнопками (S_EDIT) "Spin the value" и слайдером (H_SLIDER) "Roll the value":
Результат: меняем значение в поле с кнопками, а слайдер двигается сам.
(*Важно - слайдер может двигаться только в своем диапазоне (в данном случае, от 0 до 100). В случае выхода за пределы, значение не меняется но выводится ошибка в журнал.)
//----------------------------------------------------------------------------------------------------------------
3. Сделаем реверс ролей. Слайдер будет управлять значением в поле ввода:
Результат: При перемещении ручки слайдера, поле с кнопками меняет значение синхронно.
//----------------------------------------------------------------------------------------------------------------
4. Пропишем взаимное управление слайдера и поля с кнопками друг другом:
Результат: Слайдер и поля ввода одновременно управляют друг другом.
//---------------------------------------------------------------------------------------------------
Завтра опубликую вторую часть этой темы с другими элементами.
Это потрясающий материал! Я планирую изучить эту тему более подробно, когда появится время. Я думал, что моя работа расширяет границы графического интерфейса mt4, но ваша работа - это новый уровень.
Это потрясающий материал! Я планирую изучить эту тему более подробно, когда появится время. Я думал, что моя работа расширяет границы графического интерфейса mt4, но ваша работа - это новый уровень.
Большое спасибо за добрые слова!