![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Тема 14.3: Инидикация опасных значений посредством мигания частей элементов (рамок, оснований, текста, ползунков и табло слайдера).
Мигание элементов - отличное дополнение к цветовой индикации сигнализирующей о переходе параметров в зону опасных значений. Реализация нового решения внешне похожа на предыдущую, но если цветовая индикация работает по принципу, чем ближе значение к критическому, тем ярче цвет, то мигание лишь увеличивает частоту смены исходного цвета с заданным для мигания цветом. Пользователь может программно регулировать задержку мигания, постепенно уменьшая до 25мс или увеличивая до 2.5 секунд. При этом, оба механизма могут работать одновременно. Цвет смещается от светло-зеленого к ярко красному и бардовому и, а мигание увеличивает скорость. Один механизм не мешает второму. Далее мы разберем практические примеры.
*Важно: мигание включается независимо от функций цветовой индикации. Оба механизма технически не связаны между собой и могут работать параллельно или порознь.
Для реализации мигания были добавлены новые свойства интерактивным элементам:
Для регуляции скорости и остановки мигания добавлены новые свойства:
Обобщим вышесказанное:
Завтра перейдем к практическим примерам.
Сегодня лишь небольшое демо для понимания о чем речь.
К сожалению при записи возникают лаги. Процессор грузится. Но, на демо видно что элементы мигают асинхронно и с разной скоростью. Мигают также разные части элементов. Все это задается программно. А вкладка на Таскбаре автоматически нашла самый быстромигающий элемент и стала синей. Потом, когда элемент стал мигать реже, она нашла другой самый быстромигающий и стала красной.
Завтра изучим все подробнее.
P.S. Также обсудим варианты применения этих, весьма полезных, фич.
В продолжение вчерашней темы...
Сегодня концептуально обобщим и закончим тему мигания элементов.
Вчера я рассмотрел мигание только в контексте сигнализации опасных значений, но применение может быть значительно шире. Приведу пример:
Представим мультивалютный советник анализирующий ситуацию нескольких рыночных площадок. Допустим он подбирает оптимальные точки входа/выхода по набору сложных критериев. Советник работает в полуавтоматическом режиме и трейдер не может, или не хочет программировать всю логику торговой стратегии. Его робот мониторит рыночные площадки, собирает данные и информирует о важных моментах. Работа эксперта ограничена проведением анализа и выводом результатов в таблицы и диаграммы. Окончательное решение о сделках принимает человек.
В этом варианте, трейдинговая деятельность заключается в наблюдении потоков real-time данных и упаковке рядов бегущих значений в кастомные параметры. Последние помогают масштабировать ситуативную осведомленность.
Однако живое участие требует своевременных решений. Проблема возникает когда результаты анализа выводятся в разные окна через несколько графических представлений. Объем информации требующей внимания растет и фокус внимания расщепляется. В итоге, рыночная перспектива мутнеет в сознании трейдера и эффективность его работы снижается. Приходит утомление.
В этом случае мигание элементов хороший помошник:
Приступим к практическому разбору нового функционала:
//----------------------------------------------------------------------------------------------------------
1. Порядок подготовительных действий:
Теперь найдем кейс кнопки "Start" в файле API и пропишем вызовы функций Blink_start() и Blink_stop() на событии нажатия и отжатия кнопки:
Перейдем к заполнению функций содержанием:
1. Нам нужно чтобы мигала рамка кнопки "Start". Пишем вызов мигания рамки как показано в коде ниже. Идентификатор свойства мигания рамки кнопки - p1_BLINK_frame. Указываем цвет мигания и объект мигания.
2. Теперь реализуем отключение мигания при отжатии кнопки. За отключение мигание отвечает идентификатор p1_BLINK_STOP. Кроме него в скобках ничего ставить не нужно.
Проверяем результат:
3. Включим мигание текста кнопки вместо рамки. За мигание текста отвечает идентификатор свойства pn_BLINK_text:
Результат: текст кнопки мигает синим цветом и перестает мигать при отжатии.
4. Включим мигание основания кнопки. За основание отвечает идентификатор свойства pn_BLINK_base:
Результат: основание кнопки мигает красным цветом и перестает мигать при отжатии.
Теперь совместим мигание рамки кнопки и ее текста:
Результат: Рамка и текст кнопки мигают синхронно разными цветами, как и задумано.
5. Подключим к миганию другие элементы в этом окне:
Также пропишем отключение мигания внутри функции Blink_stop():
Результат: новые элементы включены в функции Blink_start() и Blink_stop() и мигают как положено.
6. Вызовем мигание рамки окна при нажатии на кнопку. (Временно отключим мигание отстальных элементов.)
Результат: рамка окна мигает как положено.
*Важно: все рассмотренные элементы и рамка окна мигали на скорости установленной по умолчанию.
Далее мы будем регулировать скорость мигания элементов ручкой слайдера и полем с кнопками.
7. Привяжем скорость мигания к значению в поле с кнопками и слайдера. Мигать будут одновременно все элементы и рамка окна, а скорость мигания будет задаваться вручную этими элементами.
Напомню - скорость мигания зависит от задержки pn_BLINK_DELAY.
Для решения задачи сделаем следующее:
Добавили отключение мигания рамки окна внутрь функции Blink_stop():
Пишем функцию Blink_delay():
Вызываем функцию Blink_delay() на событии элементов слайдер и поле ввода, и передаем в нее текущее значение элементов:
*Важное замечание: оказалось что у элементов чекбокс и выпадающий список невозможно менять скорость мигания. Эта скорость постоянно равна 20-ти (полсекунды). Так было сделано намеренно, но вероятно в дальнейшем изменю это решение. Остальные элементы могут менять скорость мигания.
Пропишем вызов функции Blink_delay() из на событии элемента "Spin_the_value" (поле с кнопками). Поле соединено со слайдером, поэтому в кейсе слайдера вызов ставить не нужно. Связь будет работать и слайдер без прямого вызова будет через поле с кнопками менять скорость мигания:
Результат: поле с кнопками и слайдер меняют скорость мигания элементов в окне.
Итоги:
На этом тему считаю исчерпанной.
Далее по списку - отмена введенных значений нажатием на кнопку "Cancel".