Обсуждение статьи "Готовые шаблоны для подключения индикаторов в экспертах (Часть 1): Осцилляторы"

 

Опубликована статья Готовые шаблоны для подключения индикаторов в экспертах (Часть 1): Осцилляторы:

В статье рассмотрим стандартные индикаторы из категории осцилляторов. Создадим готовые к применению шаблоны их использования в советниках — объявление и установка параметров, инициализация, деинициализация индикаторов и получение данных и сигналов из индикаторных буферов в советниках.

Подключение индикаторов к советнику и использование данных индикаторного буфера в советнике является достаточно простой задачей, но требующей каждый раз обращаться к справочным материалам. Нужно помнить все параметры, передаваемые в функцию создания индикатора, оформить какие-то из них в виде входных параметров советника, организовать проверку их корректности, и т.д. Для получения данных нужно написать функции, возвращающие нужные данные с нужного бара. Всё это требует каждый раз тратить время на обращение к справке, ввод в советник требуемых переменных, написание функций получения и контроля данных на предмет определения сигналов и т.п.

Целью данной статьи является создание шаблонов для подключения индикаторов к советникам. Рассмотрим индикаторы из категории осцилляторов, их входные переменные, создание хэндла индикатора и получение от него требуемых данных.


Автор: Artyom Trishkin

 
Зачем из уинт в инт и зачем вообще такая конструкция? 
//--- Устанавливаем и корректируем при необходимости период расчёта
   period=int(InpPeriod<1 ? 14 : InpPeriod);

Понятно что инпут константа. Просто не представляю задачу. 

Ну только как защита от дурака, поставившего минус, но тогда лучше алерт еще, что чел ошибся знаком.

 
Valeriy Yastremskiy #:
Зачем из уинт в инт и зачем вообще такая конструкция? 

Понятно что инпут константа. Просто не представляю задачу. 

Ну только как защита от дурака, поставившего минус, но тогда лучше алерт еще, что чел ошибся знаком.

InpPeriod - входная переменная input. Минус там никак не поставить. Ноль можно. Такие проверки (на меньше единицы) - привычка не сравнивать напрямую числа с нулём - если вдруг в другой подобной конструкции будет входная переменная с типом double, то это мне позволит избежать прямого сравнения двух double-чисел. Да, это "защита от дурака". В первую очередь от себя самого - чтобы делать меньше ошибок при переносе кода в другие места.

 
Artyom Trishkin #:

InpPeriod - входная переменная input. Минус там никак не поставить. Ноль можно. Такие проверки (на меньше единицы) - привычка не сравнивать напрямую числа с нулём - если вдруг в другой подобной конструкции будет входная переменная с типом double, то это мне позволит избежать прямого сравнения двух double-чисел. Да, это "защита от дурака". В первую очередь от себя самого - чтобы делать меньше ошибок при переносе кода в другие места.

Ну да, уинт же))) Минус не поставить)))

 
Valeriy Yastremskiy #:

Ну да, уинт же))) Минус не поставить)))

А ноль?

 
Alexey Viktorov #:

А ноль?

А ноль можно. Но для индикатора будет установлено значение по умолчанию в этом случае.

Только вот смысл вопроса твоего был в чём-то ином - ты это и так знаешь про ноль.

Но гадать не буду

 
Artyom Trishkin #:

А ноль можно. Но для индикатора будет установлено значение по умолчанию в этом случае.

Только вот смысл вопроса твоего был в чём-то ином - ты это и так знаешь про ноль.

Но гадать не буду

Правильно. Гадать не нужно. Просто был вопрос Валерию. Минус не поставить, а ноль?

 
Alexey Viktorov #:

А ноль?

Так ноль это текущий))) Как защита от дурака нормальная конструкция)))

А можно маску на клаву наложить, что бы нажимались только цифры, а остальные клавиши не нажимались))) Для солдат в 90х делал))) И при нажатии на другие клавиши, появлялось предупреждение большими буквами)

 
Artyom Trishkin #:

Приветствую!

Как можно выровнять текст по центру ячейки?


 
Vitaly Muzichenko #:

Приветствую!

Как можно выровнять текст по центру ячейки?


Привет. По-моему, я не делал вывод текста в ячейки с разными точками привязки.

Но если взять за основу, что column_width - это ширина ячейки, column_height - это её высота,
а text_w и text_h - это соответствующие размеры выводимого в ячейку текста, 
то координаты левого верхнего угла текста нужно рассчитывать по таким формулам:

Anchor text_x text_y
LEFT_UPPER 0 0
LEFT 0 (column_height - text_h)/2
LEFT_LOWER 0 column_height - text_h
LOWER (column_width - text_w)/2 column_height - text_h
RIGHT_LOWER column_width - text_w column_height - text_h
RIGHT column_width - text_w (column_height - text_h)/2
RIGHT_UPPER column_width - text_w 0
UPPER (column_width - text_w)/2 0
CENTER (column_width - text_w)/2 (column_height - text_h)/2

Здест привязка текста - по умолчанию - начальные координаты текста в левом верхнем углу, а чтобы вывести текст в зависимости от точки привязки (anchor в заголовке таблицы), нужно рассчитать по приведённым формулам координаты текста.

 
Artyom Trishkin #:

Привет. По-моему, я не делал вывод текста в ячейки с разными точками привязки.

Но если взять за основу, что column_width - это ширина ячейки, column_height - это её высота,
а text_w и text_h - это соответствующие размеры выводимого в ячейку текста, 
то координаты левого верхнего угла текста нужно рассчитывать по таким формулам:

Anchor text_x text_y
LEFT_UPPER 0 0
LEFT 0 (column_height - text_h)/2
LEFT_LOWER 0 column_height - text_h
LOWER (column_width - text_w)/2 column_height - text_h
RIGHT_LOWER column_width - text_w column_height - text_h
RIGHT column_width - text_w (column_height - text_h)/2
RIGHT_UPPER column_width - text_w 0
UPPER (column_width - text_w)/2 0
CENTER (column_width - text_w)/2 (column_height - text_h)/2

Здест привязка текста - по умолчанию - начальные координаты текста в левом верхнем углу, а чтобы вывести текст в зависимости от точки привязки (anchor в заголовке таблицы), нужно рассчитать по приведённым формулам координаты текста.

Примерно так и подумал, но считал, что есть решение проще.

Спасибо!