
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
12. Программное получение/установка границ значений слайдера и поля с кнопками (_V_MIN, _V_MAX, _V_STEP, _DIGITS).
1. Откроем окно с элементами обладающими вышеперечислеными параметрами:
2. Пропишем получение значений _V_MIN, _V_MAX, _V_STEP, _DIGITS и выведем их в журнал:
Результат: значения свойств параметра слайдера выведены в журнал.
//---------------------------------------------------------------------------------------------------------------------------------------
3. Повторим операцию с полем с кнопками. В отличии от слайдера, полю установлены другие границы чисел, а также тип его значения double.
Результат: значения свойств параметра поля с кнопками выведены в журнал.
//---------------------------------------------------------------------------------------------------------------------------------------
4. Установим другие границы диапазона слайдера (тестируется впервые, результат неизвестен).
Результат: *найдена проблема с диапазоном в отрицательных числах (исправление в след.версии).
Проверим с границами в положительных числах:
Результат: границы диапазона успешно изменены.
Главное: диапазон слайдера можно менять с помощью его функции.
**Важно: Нельзя ретроактивно менять тип значения параметра с int на double или наоборот.
//-------------------------------------------------------------------------------------------------
Проведем похожий опыт с полем ввода:
Результат: Работает как задумано. Поле с кнопками принимает заданный диапазон и шаг. При выходе за границы сообщает об ошибке в журнал.
//--------------------------------------------------------------------------------------------------
5. Напоследок, установим значение_DIGITS полю с кнопками (у слайдера не получится, так как тип его параметра int):
Результат:
Итоги:
На этом, данная тема завершена.
13. Запрос состояния элементов _GET_STATE.
Часто возникают ситуации когда необходимо программно получить состояние того или иного элемента интерфейса. Для решения этой задачи создан идентификатор _GET_STATE.
//--------------------------------------------------------------------------------------------------------------------
*Важно: На запрос_GET_STATE, функция возвращает индекс текущего состояния элемента.
//--------------------------------------------------------------------------------------------------------------------
Ниже на картинке показан список состояний элементов.
1. Идентификаторы состояний:
(*в следующем релизе, префикс v_ будет заменен на префикс s_)
Индексы выводимые в журнал:
Протестируем запрос и получение состояний элементов:
1. Откроем окно и получим исходное состояние кнопки "Start":
Результат: получено значение 15, соответствующее состоянию v_NEUTRAL_STATE.
2. Выведем в журнал состояния кнопки на нажатии и отжатии:
Для этого:
Результат: на событии нажатия/отжатия в журнал печатается индекс текущего состояния.
Напомню:
//----------------------------------------------------------------------------------------------------------------
3. Повторим запрос с чекбоксом.
1. Получим состояние чекбокса на событии открытия окна:
Результат: получено значение 15, соответствующее нейтральному состоянию v_NEUTRAL_STATE (в котором чекбокс и находится).
2. Далее, запросим состояния чекбокса на событии нажатия и отжатия.
Для этого:
Результат: получены значения 66 (v_NEUTRAL_HIGHLIGHTED) и 67 (v_ACTIVATED_HIGHLIGHTED), что означает подсвеченное нейтральное и подсвеченное нажатое состояние.
//-----------------------------------------------------------------------------------------------
На этом, первая часть темы завершена.
Во второй части, вернем состояния выпадающего списка D_LIST, слайдера H_SLIDER, и полей ввода S_EDIT и EDIT.
13. Запрос состояния _GET_STATE.
Часть 2: Получение состояний элементов D_LIST, H_SLIDER, EDIT, S_EDIT.
В прошлой части мы рассмотрели программный возврат состояний кнопки BUTTON и чекбокса CHECKBOX. Использовался запрос _GET_STATE и был показан список названий состояний возвращаемых функциями. Всего шесть названий, где каждое начинается префиксом v_. (Сокращение от value, которое далее будет заменено на s_ - сокращение от state).
Напомню индексы состояний:
В данном случае, конкретные числа индексов не важны. Когда пользователю необходимо вписать то или иное состояние в условие, он использует идентификатор.
Пример 1:
Пример 2:
//-----------------------------------------------------------------------------------------------------------------
*Очень важно:
Поясню существенную разницу между состояниями v_NEUTRAL_STATE и v_NEUTRAL_HIGHLIGHTED, а также между v_ACTIVATED_STATE и v_ACTIVATED_HIGHLIGHTED:
v_NEUTRAL_STATE - это нейтральное состояние в котором элемент находится неопределенное время. v_NEUTRAL_HIGHLIGHTED - это нейтральное состояние в которое элемент перешел ТОЛЬКО ЧТО, после отжатия пользователя. Поэтому элемент подсвечен - HIGHLIGHTED.
тоже самое касается активированного состояния:
v_ACTIVATED_STATE - это активированное состояние в котором элемент находится неопределенное время. v_ACTIVATED_HIGHLIGHTED - это активированное состояние в которое элемент перешел ТОЛЬКО ЧТО, после нажатия пользователя. Поэтому элемент подсвечен - HIGHLIGHTED.
Эта разница имеет большое значение.
На данный момент, кнопка и некоторые другие элементы, возвращают только v_NEUTRAL_STATE и v_ACTIVATED_STATE, и не возвращают состояния HIGHLIGHTED, как чекбокс. Это означает, что пользователь не может знать, были ли элементы нажаты/отжаты только что, или когда то, неопределенное время назад. Однако, пользователь может поймать момент их нажатия в файле API. Да, но в остальных частях программы эта возможность пока недоступна. В следующей версии, возврат состояния HIGHLIGHTED будет добавлен всем интерактивным элементам. Таким образом, из любой точки программы пользователь сможет узнать, был ли элемент нажат/отжат только что, или давно находится в своем состоянии.
//----------------------------------------------------------------------------------------------------------
Перейдем к практической части:
1. Откроем окна:
2. Получим состояния элементов:
Результат: у всех элементов кноме D_LIST индекс состояния 15 (нейтральное состояние v_NEUTRAL_STATE). У D_LIST возвращена ошибка (-1).
Причина: не прописан возврат состояний данного элемента в центральной функции. Техническая недоработка. В следующей версии будет исправлено.
В связи с тем, что функция D_LIST пока не возвращает индекс состояния, сосредоточимся на трех элементах, состояния которых были успешно получены: EDIT, S_EDIT и H_SLIDER.
Что нужно проверить:
Мы только что убедились, что функции элементов EDIT, S_EDIT и H_SLIDER возвращают индекс нейтрального состояния при открытии окна. Остается проверить остальные состояния. Поскольку данные типы элементов, теоретически, могут находится только в нейтральном, блокированном и подсвеченном состоянии, (в отличии от кнопок и чекбоксов, у которых состояний больше), нам остается проверить следующие два возможных состояния: блокированное и подсвеченное. Существуют также группа состояний "под курсором", которые пока не хочу добавлять во избежания путаницы. В следующих версиях создам специальный префикс, открывающий индивидуальный список возможных состояний каждого типа элемента. Это облегчит программную работу.
Как мы проверим возврат блокированного и подсвеченного состояния EDIT, S_EDIT и H_SLIDER:
1. Находим чекбокс "Set an option" в файле API и прописываем запирание/отпирание элементов EDIT, S_EDIT и H_SLIDER внутри его кейса. Затем, выводим состояния через Print().
Результат:
//--------------------------------------------------------------------------------------------------
2. Вторая задача:
Приступим:
Результат:
//-----------------------------------------------------------------------------------------------------
Итоги:
В общем, итоги можно оценить как удовлетворительные. Элементы возвращают индексы нейтрально и блокированного состояния как было задумано. Однако, есть недоработки:
Выводы:
Потенциально, есть возможность добавить новые состояния элементов. Например, Neutral pointed и Activated pointed (нейтрален под курсором и активирован под курсором), но встает вопрос практической целесообразности и реальной необходимости пользователя в наличия этих возможностей. Пока такие требования не поступят, добавлять новые состояния не стану.
На этом, данную тему считаю изложенной.
Далее, к следующим темам.
Последнюю неделю я потратил на изучение того, как написать интерфейс с помощью WinForm и встроить его в графики MT5. Сегодня я наконец-то понял, как это сделать.
Общий список тем для рассмотрения:
1. Ориентирование в списке интеллисенс и выбор функции нужного окна.
2. Программное открытие и закрытие окон.
3. Открытие списка программно доступных элементов окна.
4. Открытие списка индивидуальных свойств элемента.
5. Разбор названия функции обертки элемента и окна.
6. Возврат значения параметра элемента в переменную его типа.
7. Установка значений в параметры элементов разных типов.
8. Возврат, изменение и пересылка значений между параметрами разных элементов. Рассмотрим разные типы элементов и значений, и проведем тест на пересылку между разными типами элементов в разных окнах.
9. Возврат предыдущего значения (_V_LAST). Когда и для каких случаев требуется последнее значение (не путать с текущим).
10. Тест на установку состояний ON, OFF, LOCK_ON, LOCK_OFF, LOCK, UNLOCK для различных типов элементов.
11. Тест связывания и синхронизации изменения значений элементов: например поля ввода с кнопками и слайдера. Чтобы при изменении значения одного элемента (ручного или программного), значение во втором элементе менялось соответствующе.
12. Тестирование программного получения/установки границ диапазона слайдера и поля с кнопками (свойства _V_MIN, _V_MAX, _V_STEP, _DIGITS).
13. Проверка работы запроса состояния элемента (_GET_STATE).
14. Связывание цвета текста и рамок с расставленными границами значений.
15. Ориентирование в файле API.
16. Реализация простой программной логики появления окон сообщений и предупреждений.
//------------------------------------------
Желтым цветом выделены темы которые были рассмотрены.
На текущий момент остается рассмотреть:
14. Связывание цвета текста и рамок с расставленными границами значений.
15. Ориентирование в файле API.
16. Реализация простой программной логики появления окон сообщений и предупреждений.
//------------------------------------------
Предлагаю связать тему 14 с темой 16. Выход за установленные границы значений параметров сначала будет вызывать сигналы в виде изменения цвета частей элементов (текст, основание, рамка, полоса и т.д.), затем открытие диалогового окна, и потом окна предупреждения. При этом, окно предупреждения заблокирует изменения значений в элементах до своего ручного закрытия пользователем.
Также, я бы хотел добавить в список тему:
17. Отмена введенных настроек при нажатии на кнопку "Сancel".
Когда то давно, технология отмены пользовательских настроек нажатием на кнопку "Сancel", была разработана, и в некоторой степени проверена. На данный момент неизвестно, насколько прежний функционал работоспособен. Поэтому, необходим тест.
В итоге совмещения тем, порядок рассмотрения будет следующим:
14. Реализация ступенчатой защиты границ параметров:
15. Рассмотрим новую распечатку файла API подробнее.
//----------------------------------------------------------------------------------------------------
Далее, соберу воедино все найденные баги или недоработки и состовлю список задач для следующего релиза.
После следующего релиза с исправлениями и добавлениями, сосредоточу внимание на таблицах, в которых вижу одно из главных направлений дальнейшего развития движка.
Последнюю неделю я потратил на изучение того, как написать интерфейс с помощью WinForm и встроить его в графики MT5. Сегодня я наконец-то понял, как это сделать.
А как вы наладите связь интерфейса с вашим программным кодом?
А как вы наладите связь интерфейса с вашим программным кодом?
Еще несколько вопросов:
В принципе, каждый может использовать тот инструмент, который ему удобен. Мне удобен мой интерфейс и потому его развиваю. Иначе говоря, я собираюсь применять его в собственной алгоритмической торговле. Публикация решений на форуме прибавляет мотивации. Если мой интерфейс окажется кому то нужным - прекрасно, если нет - меня это не заденет.
В интерфейсе я вижу мощный инструмент, который в сочетании с алгоритмическими возможностями МТ5 позволит крупно масштабировать результаты правильной торговли. Да, таким долгим путем, я "иду на рынок". Это занимает годы, но в любом случае, мне требуется время на интеллектуальное развитие. Нет смысла торговать на рынке с деньгами, но без мозгов, не так ли?
Решение использовать WinForms, или нечто подобное, на мой взгляд, неполноценно по сути. Это ведет к техническому отпочковыванию от МТ5 и построению самостоятельного многооконного виндоус приложения. На первом этапе оно будет связано с платформой каналом передачи данных, как пуповиной. Пользователь будет изголятся с опросами DLL и может даже успешно. При желании, сумеет создать контекстное меню, и использовать какие то шаблоны для быстрого создания окон... Но в итоге..., он будет работать сразу в двух-трех IDE, и на разных языках программирования. Так чем это лучше? А главное - чем это легче?
К тому же, имея многооконное виндоус приложение, пользователь может напрямую подключить его к API другой торговой платформы. Так ему будет проще, чем работать через таймер. Ну и про маркет следует упомянуть. Его продукт туда не пропустят. В общем, каждому свое.