Данный пример робота служит демонстрацией реализации кастомных элементов параметров.
В нем показано:
· Создание индикатора ATR на второй области графика.
· Создание двух индикаторов SMA на основном чарте.
· Добавление таблицы для вывода в окно параметров значение индикаторов.
· Использование окна параметров робота для настройки элементов.
2. Где найти робота в проекте?

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

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

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

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

Строки 12-15:
Определяется пространство имен OsEngine.Robots.TechSamples для организации кода и класс ElementsOnChartSampleBot наследует от BotPanel:

Строки 19-20:
Инициализируется панель бота:

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

Строки 43-56:
Создание индикаторов:
Создание и настройка индикаторов: быстрая и медленная скользящие средние, (SMA) и ATR.
Строка 58:
Подписываемся на событие ParametrChangeByUser:
![]()
При изменениях параметров индикаторов пользователем вызывается данный метод и обновляет их значения.
Строка 60:
Подписывается на событие CandleFinishedEvent:
![]()
Строки 64-66:
Настройка интерфейса параметров:

Строки 69-74:
Создание пользовательской вкладки для значений индикаторов:

Строки 79-136:
Метод, отвечающий за создание таблицы значений индикаторов:


Строки 138-161:
Метод, отвечающий за обновление значений таблицы:

Строки 163-187:
Метод, который создает ячейки в таблице уже для готовых значений:

Строки 191-200:
Метод обновления значений параметров индикаторов:

Строки 202-226:
Этот блок отвечает за набор переменных робота:

Строки 228-236:
Переопределение методов GetNameStrategyType и ShowIndividualSettingsDialog.

Первый метод возвращает имя стратегии, второй - пустой предназначен для отображения индивидуальных настроек.
Строки 240-273:
Этот метод, вызываемый при каждом формировании новой свечи на графике, отвечает за обработку торговых сигналов робота:

Строки 275-296:
Метод, отвечающий за открытие позиции:

Строки 298-320:
Метод, отвечающий за закрытие позиции:

4. Описание работы методов:
Заходим в тестер и запускаем нашего робота, открываем окно параметров.

1. «Base»:

В ней находятся базовые настройки робота.
2. «Indicators»:

Здесь мы настраиваем наши индикаторы.
3. «Exit settings»:

Настройка значений для логики выхода из позиции.
4. «Indicators values»:

В этой вкладке параметров находится таблица значений индикаторов.
Для создания такой таблицы нам требуется три следующих метода:
1. CreateTable
2. PaintTable
3. GetRow
Метод CreateTable:
1. Метод "Название" создаёт таблицу (DataGridView) внутри элемента WindowsFormsHost.
2. Создаётся новый объект типа WindowsFormsHost и присваивается переменной.
3. Создаётся новый объект DataGridView с режимом выбора всей строки(DataGridViewSelectionMode.FullRowSelect) и режимом автоматического изменения размера строк, используя метод DataGridFactory.GetDataGridView.
4. Устанавливается режим автоматического изменения размера заголовков столбцов (ColumnHeadersHeightSizeMode.AutoSize).
5. Создаётся объект DataGridViewTextBoxCell (cell0) и его стиль задаётся равным стилю по умолчанию для newGrid.
6. Создаются и настраиваются пять столбцов (DataGridViewColumn):
1. Time: Столбец для отображения времени.
2. Slow Sma: Столбец для отображения медленной скользящей средней (SMA).
3. Fast Sma: Столбец для отображения быстрой скользящей средней (SMA).
4. Atr: Столбец для отображения значения ATR (Average True Range).
5. Len in Atr: Столбец для отображения длины в ATR.
7. Для каждого столбца устанавливаются следующие свойства:
1. CellTemplate: Устанавливается ячейка шаблона (cell0).
2. HeaderText: Устанавливается текст заголовка столбца.
3. ReadOnly: Устанавливается свойство, чтобы столбец был только для чтения.
4. AutoSizeMode: Устанавливается режим автоматического изменения размера столбца.
8. Все созданные и настроенные столбцы добавляются в DataGridView (newGrid.Columns.Add).
9. Свойство Child объекта _host устанавливается равным созданному DataGridView (newGrid).
10. Ссылка на созданный DataGridView сохраняется в переменную.
Метод PaintTable:
1. Обновляет таблицу с использованием данных свечей и индикаторов.
2. Очищает все строки в таблице для подготовки к добавлению новых данных.
3. Извлекает значения быстрой скользящей средней, медленной скользящей средней и ATR из соответствующих серий данных индикаторов.
4. Проходит по всем свечам в списке.
5. Для каждой свечи вызывает метод GetRow, который возвращает строку данных для добавления в таблицу. В метод передаются текущая свеча, соответствующие значения медленной скользящей средней, быстрой скользящей средней и ATR.
6. Добавляет полученную строку в таблицу (_grid.Rows.Add).
Метод GetRow:
1. Создаёт и возвращает строку для таблицы на основе данных свечи и значений индикаторов (медленная и быстрая скользящие средние, ATR).
2. Создаётся новый объект типа DataGridViewRow.
Первая ячейка:
1. Создаётся новый объект DataGridViewTextBoxCell.
2. В ячейку добавляется значение времени начала свечи.
Вторая ячейка:
1. Создаётся новый объект DataGridViewTextBoxCell.
2. В ячейку добавляется значение медленной скользящей средней.
Третья ячейка:
1. Создаётся новый объект DataGridViewTextBoxCell.
2. В ячейку добавляется значение быстрой скользящей средней.
Четвёртая ячейка:
1. Создаётся новый объект DataGridViewTextBoxCell.
2. В ячейку добавляется значение ATR.
Пятая ячейка:
1. Создаётся новый объект DataGridViewTextBoxCell.
2. Если значение ATR не равно нулю, в ячейку добавляется вычисленное значение разницы между быстрой и медленной скользящими средними, делённой на ATR.
3. Возвращает заполненную строку для добавления в таблицу DataGridView.
Вывод: этот пример робота будет полезен для демонстрации, как создавать и настраивать кастомные элементы в окне параметров робота. Он показывает, как добавлять и настраивать индикаторы на графике, а также как создавать таблицу для вывода значений индикаторов, что может служить готовым шаблоном для реализации подобных задач.
Удачных алгоритмов!
Поддержка OsEngine: https://t.me/osengine_official_support
Комментарии