Данный пример робота служит демонстрацией реализации кастомных элементов на графике с помощью окна параметров робота.
В нем показано:
- Создание индикатора MACD на второй области графика.
- Добавление кнопок для различных действий с элементами графика (добавление точек, линий, сегментов, наклонных линий).
- Обработка событий нажатия кнопок и взаимодействие с элементами графика.
- Использование окна параметров робота для настройки элементов.
Где найти робота в проекте?

Для начала открываем папку с проектом и заходим в «project».

Далее открываем проект в Visual Studio.

Находим в проекте папку «Robots» и открываем ее.

И наконец-то находим папку «TechSamples» и в ней уже выбираем нашего робота «ElementsOnChartSampleBot».
Разбор робота построчно:
Строки 1-8:
Импортируются необходимые пространства имен:

Строки 11-14:
Определяется пространство имен OsEngine.Robots.TechSamples для организации кода и класс ElementsOnChartSampleBot наследует от BotPanel:
Строки 19-20:
Инициализируется панель бота:

Cоздается простая вкладка, сохраняется ссылка на вкладку в _tab для дальнейшего использования.
Строка 21:
Подписывается на событие CandleFinishedEvent:

Строки 24-26:
Создается индикатор MACD на второй области графика («MacdArea»).

Строки 29-45:
Создаются кнопки для добавления различных элементов графика:
Строки 49-57:
Переопределение методов GetNameStrategyType и ShowIndividualSettingsDialog.

Первый метод возвращает имя стратегии, второй — пустой предназначен для отображения индивидуальных настроек.
Строки 59-73:
Объявление полей класса для хранения вкладки, индикатора и кнопок:
Строки 75-90:
Обработчик события завершения свечи. Обновление времени конца линий на графике и их перерисовка:
Обработчики кнопок:
Строки 94-131:

Обработчик события нажатия кнопки для добавления точки на основной график. Проверка готовности вкладки и наличия достаточного количества свечей. Создание и добавление элемента точки на график.
Строки 133-172:

Обработчик события нажатия кнопки для добавления горизонтальной линии на основной график. Проверка готовности вкладки и наличия достаточного количества свечей. Создание и добавление горизонтальной линии на график.
Строки 174-209:

Обработчик события нажатия кнопки для добавления горизонтального сегмента на основной график. Проверка готовности вкладки и наличия достаточного количества свечей. Создание и добавление сегмента на график.
Строки 211-247:

Обработчик события нажатия кнопки для добавления линии на дополнительную область графика. Проверка готовности вкладки и наличия достаточного количества свечей. Создание и добавление линии на дополнительную область графика.
Строки 249-286:

Обработчик события нажатия кнопки для добавления наклонной линии на основной график. Проверка готовности вкладки и наличия достаточного количества свечей. Создание и добавление наклонной линии на график.
Строки 288-296:

Обработчик события нажатия кнопки для очистки всех элементов с графика. Вызов метода ClearChart для очистки графика.
Описание работы методов:
Заходим в тестер и запускаем нашего робота, открываем окно параметров.

Вид окна параметров робота:

1. Метод «Point on prime chart» обрабатывает нажатие кнопки пользователем и выполняет следующие действия:
- Проверяет, установлено ли соединение с источником данных. Если нет, метод завершает работу.
- Извлекает список завершённых свечей. Если свечей нет или их меньше 10, метод завершает работу.
- Удаляет предыдущую точку на графике, если она существует.
- Создаёт новую точку на основе данных предпоследней свечи, устанавливая её различные визуальные свойства (координаты, метки, цвета, стиль и размер).
- Добавляет созданную точку на график и сохраняет её для возможного удаления в будущем.
Пример:

2. Метод «Line on prime chart» обрабатывает нажатие кнопки пользователем и выполняет следующие действия:
- Проверяет, установлено ли соединение с источником данных. Если соединение не установлено, метод завершает свою работу.
- Получает список завершённых свечей. Если свечей нет или их меньше 10, метод завершает работу.
- Если существует предыдущая горизонтальная линия, она удаляется с графика.
- Создаётся новая горизонтальная линия с заданными свойствами:
- Значение линии устанавливается по цене закрытия последней свечи.
- Время начала и окончания линии устанавливается от первой до последней свечи.
- Линия настраивается для возможности изменения размера, задаются её цвет и толщина.
- Устанавливаются метка линии, шрифт метки, цвет текста и цвет фона метки.
- Новая горизонтальная линия добавляется на график.
- Сохраняется ссылка на созданную линию для возможного дальнейшего удаления или модификации.
Пример:
3. Метод «A segment on prime chart» обрабатывает событие нажатия пользователем кнопки для добавления сегмента (линии) на графике.
- Проверяет, установлено ли соединение с источником данных. Если соединение не установлено, метод прекращает выполнение.
- Получает список завершённых свечей. Если свечей нет или их меньше 10, метод завершает работу.
- Проверяет, существует ли уже сегмент на графике. Если сегмент существует, он удаляется с графика.
- Создаётся новый объект типа LineHorisontal с заданными параметрами:
- Значение линии устанавливается на основе цены закрытия пятой свечи с конца.
- Время начала устанавливается на основе времени начала десятой свечи с конца.
- Время окончания устанавливается на основе времени начала пятой свечи с конца.
- Задаются цвет линии и её толщина.
- Устанавливается метка для сегмента.
- Новый сегмент добавляется на график.
- Сохраняется ссылка на созданный сегмент для возможного дальнейшего удаления или модификации.
Пример:
4. Метод «The line to the extra area on the chart» обрабатывает нажатие кнопки пользователем для добавления горизонтальной линии на вторую область графика.
- Проверяет, установлено ли соединение с источником данных. Если соединение не установлено, метод завершает выполнение.
- Получает список завершённых свечей из источника данных.
- Проверяет, есть ли в списке свечей хотя бы 10 элементов. Если свечей меньше 10 или их нет вообще, метод завершает выполнение.
- Если на графике уже существует линия, она удаляется с графика.
- Создаётся новый объект типа LineHorisontal с именем «Some line on second area» и привязкой к области графика «MacdArea».
- Устанавливаются свойства новой линии:
- Value: Значение линии устанавливается на основе последнего значения из первой серии данных MACD.
- TimeStart: Время начала линии устанавливается по времени начала первой свечи.
- TimeEnd: Время окончания линии устанавливается по времени начала последней свечи.
- Color: Цвет линии устанавливается белым.
- LineWidth: Толщина линии устанавливается равной 5.
- Label: Устанавливается метка линии «Some label on second chart».
- Новая линия добавляется на график.
- Сохраняется ссылка на созданную линию для возможного дальнейшего удаления или модификации.
Пример:
5. Метод «The slanted line to the main chart» обрабатывает нажатие кнопки пользователем для добавления наклонной линии на графике.
- Проверяет, установлено ли соединение с источником данных. Если соединение не установлено, метод прекращает выполнение.
- Получает список завершённых свечей из источника данных.
- Проверяет, есть ли в списке хотя бы 12 свечей. Если свечей меньше 12 или их нет вообще, метод завершает выполнение.
- Если на графике уже существует наклонная линия, она удаляется с графика.
- Создаётся новый объект типа Line с меткой «Inclined line» и привязкой к области графика «Prime».
- Устанавливаются свойства новой линии:
- ValueYStart: Значение Y в начале линии устанавливается по цене закрытия 11-й свечи с конца.
- TimeStart: Время начала линии устанавливается по времени начала 11-й свечи с конца.
- ValueYEnd: Значение Y в конце линии устанавливается по цене закрытия последней свечи.
- TimeEnd: Время окончания линии устанавливается по времени начала последней свечи.
- Color: Цвет линии устанавливается Bisque.
- LineWidth: Толщина линии устанавливается равной 3.
- Label: Устанавливается метка линии «Some label on Line Inclined».
- Новая линия добавляется на график.
- Сохраняется ссылка на созданную линию для возможного дальнейшего удаления или модификации.
Пример:
6. Метод «Remove all elements» обрабатывает событие нажатия кнопки пользователем для удаления всех элементов с графика и обнуления переменных, хранящих ссылки на созданные элементы.
- Вызывается метод, который удаляет все вышепоказанные элементы с графика.
- Происходит присвоение null переменным, которые хранят ссылки на созданные элементы:
- _lineInclinedOnPrimeChart
- _lineOnSecondChart
- _lineSegment
- _lineOnPrimeChart
- _point
Вывод: пример «ElementsOnChartSampleBot» будет полезен для реализации ваших идей как готовый шаблон. Этот робот демонстрирует, как создавать и взаимодействовать с различными элементами на графике, используя окно параметров робота.

OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support
Регистрируйся в АЛОР и получай бонусы: https://www.alorbroker.ru/open
Сайт АЛОР БРОКЕР: https://www.alorbroker.ru
Раздел «Для клиентов»: https://www.alorbroker.ru/openinfo/for-clients
Программа лояльности от АЛОР БРОКЕР и OsEngine: https://smart-lab.ru/company/os_engine/blog/972745.php
