ОГЛАВЛЕНИЕ

Создание индикаторов пользователя
Для создания нового индикатора необходимо выполнить команду системного меню [Сервис(Tools) >> Построитель индикаторов(Indicator Builder)], либо нажать кнопку на стандартной панели, после чего вы получите доступ к окну менеджера индикаторов пользователя. В этом окне уже имеется список демонстрационных индикаторов. Нажмите кнопку Создать(New) и вы попадете в диалог описания индикатора.
В поле Имя(Name): введите имя будущего индикатора.
Поле Формула(Formula): должно содержать формулу или алгоритм расчета индикатора, записанную в виде конструкций макроязыка пакета MetaStock 7.0.
Нажмите кнопку Функции(Functions), которая поможет вам быстро отыскать любую встроенную формулу оператора, функции или индикатора, и вставить ее в формульную часть. Все функции разбиты на категории, что позволяет легко ориентироваться в списке.
Основы макроязыка MetaStock 7.0
Макроязык MetaStock - специализированный язык программирования, который используется для определения и создания индикаторов пользователя, торговых стратегий, исследований и экспертов. Этот язык был создан по образцу популярных языков электронных таблиц.
Простейшие формулы в MetaStock 7.0 состоят из функций высокого уровня (например, mov (), rsi (), abs ()), математических операторов (например, +, -, /, *) и параметров (Close, High, Low, Open и т.д.).
Для правильного написания функций используйте диалог Вставки функции.
Выравнивание нескольких строк
При записи длинных формул, Вы можете попробовать использовать несколько строк и выравнивание для простоты чтения. Можно выравнивать строку формулы, нажимая CTRL+TAB. Например, формулу
cum(if(close > ref(close,-1),+V, if(close < ref(close,-1),-V,0)))
легче прочитать в виде нескольких строк с выравниванием следующим образом:
cum(
if(close > ref(close,-1),
+v,
if(close < ref(close,-1),
-v,
0))
)
Регистр
Регистр, используемый при вводе формул, не имеет значения (например, "с" и "C" интерпретируются одинаково). Когда MetaStock делает проверку синтаксических ошибок, он автоматически изменяет регистр для придания формуле формы более легкой для чтения. Регистр внутри комментариев не изменяется.
Комментарии
Разумное использование комментариев делает формулы более легкими для чтения. (Помните что комментарий – это любой текст, заключенный в фигурные скобки, то есть, {}.)
Вы можете использовать комментарии при разработке формул, чтобы "закомментировать" части формулы. Например, вторая половина следующей формулы была закомментирована, а первая половина подлежит проверке. После того, как первая половина формулы была проверена, Вы можете удалить комментарии и проверить полную формулу.
( mov(fml("MA1"),10,S) / fml("MA2") ) { * stoch(5,3) }
Пробелы
Наличие пустых пространств внутри формул необязательно. Однако, разумное использование пробелов может сделать формулы более легкими для чтения. Не допускаются пробелы между именами функций и скобками аргументов.
Команды Буфера обмена
Вы можете использовать стандартные акселераторы команд буфера обмена при редактировании своих индикаторов для передачи формул от одного индикатора к другому. Чтобы скопировать высвеченный текст, нажмите CTRL+C; вырезать, нажмите CTRL+X; вставить, нажмите CTRL+V.
Идентификаторы ценовых массивов
Один из основных элементов формулы называется ценовым идентификатором. Ценовой идентификатор определяет отдельные ценовые поля, которыми должна оперировать формула. Применяются следующие ценовые идентификаторы open, high, low, close, volume, open interest и indicator.
Ценовые идентификаторы могут быть сокращены, как показано в следующей таблице. Обратите внимание на то, что они не чувствительны к регистру.
Длинное имя
Сокращение
Open
O
High
H
Low
L
Close
C
Volume
V
Open Interest
OI
Indicator
P
Previous value
PREV
Примеры использования ценовых идентификаторов массива в формулах показаны ниже. Ценовой идентификатор в формулах выделен полужирным шрифтом.
Mov(close, 10, simple) – скользящее среднее
if(h > ref(h,-1), mov(h,20,s), mov(c,20,s) ) – функция условия
Stdev(volume, 20) – стандартное отклонение
Ссылка на себя, используя идентификатор PREV
Константа PREV позволяет Вам создавать формулы, ссылающиеся на свои же значения в предыдущий период. Например:
( (H+L+C)/3) + PREV
Эта простая формула делит сумму максимальной, минимальной и цены закрытия на 3 и затем прибавляет это значение к вчерашнему значению ((H+L+C)/3).
Вычисление популярного индикатора Балансовый объем иллюстрирует использование функции PREV.
(if(c>ref(c,-1),1,-1)*volume)+PREV
Хотя Балансовый объем может быть рассчитан и без использования функции PREV, экспоненциальное скользящее среднее значение не может быть вычислено другим способом (если не использовать функцию mov()). Следующая формула показывает, как вычисляется 18%-ое экспоненциальное скользящее среднее (приблизительно 10 периодов) с использованием функции PREV: (Close*0.18) + (PREV*0.82)
"P" Идентификатор
Специальный идентификатор массива данных (переменная "P") используется для ссылки на произвольный индикатор или ценовой график. В индикаторах пользователя "P" переменная представляет график, на который переносится индикатор пользователя.
Если Вы переносите индикатор, содержащий переменную "P" на столбиковый график, то будут использованы цены закрытия для подстановки в переменную "P". Например, следующий индикатор строит график индикатора "типа MACD" (разность между 12- и 26 дневными экспоненциальными скользящими средними) графика, на который он перенесен.
Mov(P, 12, E) - mov(P, 26, E)
Переменные
Используйте переменные для ускорения вычисления формул. Гораздо быстрее, чем повторять выражение или формулу много раз, назначьте ее переменной, и затем просто ссылайтесь на эту переменную.
Синтаксис определения переменной примерно такой var:= (h+l+c)/3;. Имя состоит из букв и цифр (в этом случае должна присутствовать первая буква), затем ставится знак присваивания, затем выражение, в конце ставится точка с запятой. Не допускается определение переменной внутри какой-либо формулы. Также не допускается использовать в качестве имен переменных имена встроенных функций и параметров.
Построение нескольких графиков
Некоторые индикаторы требуют двух или более графиков для их правильной интерпретации. Например, индикатор MACD. MACD использует скользящее среднее (называемое сигнальной линией) для генерации сигналов пересечения.
Каждое выражение не являющееся операцией присваивания (то есть, выражение, которое не определяет значение переменной) в индикаторе пользователя приведет к построению отдельного графика на диаграмме. Например, следующая формула, введенная как индикатор приведет к построению двух графиков:
DiffOfAvg: = mov(C, 39, s) - mov(C, 200, s);
DiffOfAvg;
Mov(DiffOfAvg, 9, s);
Первая инструкция назначает выражение "mov(C, 39, s)-mov(C, 200, s)" переменной "DiffOfAvg". Вторая инструкция приводит к построению графика DiffOfAvg. Третья инструкция приводит к построению графика скользящего среднего с 9 периодами для DiffOfAvg. Обратите внимание на то, что каждое выражение должно заканчиваться точкой с запятой.
Индикаторы, которые требуют ввода параметров
Большинство встроенных индикаторов MetaStock используют диалог параметров для их ввода и использования в процессе вычисления (например, периоды времени, проценты, пункты и т.д.). Вы можете также проинструктировать ваши индикаторы запрашивать ввод параметров, используя специальную функцию под именем Input().
Функция Input() использует следующий синтаксис:
Input ("текст подсказки", минимальное значение, максимальное значение, значение по умолчанию);
Текст подсказки. Определяет текст, который будет отображен в окне диалога. Он используется для описания того, что должно быть введено.
Минимальное значение. Это самое маленькое значение, которое может быть введено. Если Вы попытаетесь ввести значение меньшее, чем это значение, MetaStock выдаст сообщение.
Максимальное значение. Это - самое большое значение, которое может быть введено. Если Вы попытаетесь ввести значение больше чем это значение, MetaStock выдаст сообщение.
Значение по умолчанию. Это - значение по умолчанию (то есть, значение, которое будет появляться в поле, когда диалог отображается впервые).
Следующий индикатор запросит у Вас число периодов времени, используемое для скользящего среднего (то есть, окно сглаживания) индикатора RSI:
SmoothingPeriods:= Input(" Введите число периодов сглаживания RSI ", 1,9,3);
Mov(rsi(14), SmoothingPeriods, s);
Функция Input() всегда используется вместе с переменными, как в этом примере.
Единственное потенциально возможное использование функции Input() в виде автономного выражения должно строить график горизонтальной линии в указанном значении:
Input("Построить график горизонтальной линии в ", 1,10000,5);
Глоссарий
Этот глоссарий определяет термины, используемые в языке формул MetaStock.
КОММЕНТАРИЙ: Текст внутри формулы, который не является частью формулы. Комментарий должен быть окружен знаками { и }.
КОНСТАНТА: специальный тип параметра, который требуется для функции. Константы могут быть подразделены на следующие группы:
КОНСТАНТА МЕТОДА ВЫЧИСЛЕНИЯ: Используется для определения режимов вычисления. Определяется как PERCENT или POINTS. (PERCENT и POINTS можно сокращать знаками % или $.)
КОНСТАНТА СРАВНЕНИЯ: Используется функцией If() для определения операции сравнения. Определяется знаками >, >=, <, <= <> или =.
КОНСТАНТА ФОРМУЛЫ: Используется функцией fml() для ссылки на другую формулу. Константа формулы определяется именем другой формулы, заключенной в кавычки (например, fml("Моя Формула")).
КОНСТАНТА ТИПА СКОЛЬЗЯЩЕГО СРЕДНЕГО: Используется для определения метода вычисления скользящего среднего. Определяется как EXPONENTIAL, SIMPLE, TIME SERIES, TRIANGULAR, VARIABLE или WEIGHTED. (Они могут быть сокращены знаками E, S, T, TRI, VAR, и W.)
ЧИСЛОВАЯ КОНСТАНТА: отдельное числовое значение. Функция, требующая числовую константу не может принимать массив данных, так как массив данных может содержать много числовых значений. Пример числовой константы - "10" в формуле " mov(C, 10, E). "
МАССИВ ДАННЫХ: массив данных определяет отдельный набор информации (данных), который используется внутри формулы. Массивы данных могут быть подразделены на следующие группы:
ФУНКЦИОНАЛЬНЫЙ МАССИВ РЕЗУЛЬТАТОВ: массив данных, который был создан как результат выполнения функции.
ЛИТЕРАЛЬНЫЙ МАССИВ: массив данных определенный использованием единственной числовой константы.
ЦЕНОВОЙ МАССИВ: массив, содержащий информацию, сохраненную в массивах данных high, low, close и т.д.
ФОРМУЛА: комбинация комментариев, констант, функций, математических операторов и/или ценовых идентификаторов.
ФУНКЦИЯ: предопределенная математическая операция, которая может быть выполнена на наборе параметров для получения желаемого массива данных.
ОПЕРАТОР МАТЕМАТИЧЕСКИЙ: операторы +, -, *, и /.
ОПЕРАТОР ЛОГИЧЕСКИЙ: операторы <,>, <=, >=, =, < >, AND и OR.
ПАРАМЕТР: элемент, содержащийся внутри функции. Когда функция имеет несколько параметров, они отделяются запятыми.
ПРИОРИТЕТ: порядок, в котором вычисляется формула.
ЦЕНОВЫЕ ИДЕНТИФИКАТОРЫ: символы или слова ссылающиеся на ценовые массивы (Open, High, Low, Close, Volume, Open Interests, PREV и P (отобранный график).).
Задание
Создайте и постройте на данных EESR сигнальный индикатор, который определяет тенденцию на основе одной экспоненциальной скользящей средней, параметр которой запрашивается при построении. При бычьем тренде возвращать 1, при медвежьем –1. (используйте функции: If(), Input(), mov())
Подсчитайте общее количество смен знака индикатора для значения окна ЭСС 28. Затем подсчитайте количество правильно определенных периодов нахождения в тренде длинной более месяца (на периоде есть соответствующий сигналу тренд). Найдите соотношение (количество правильно определенных тенденций) / (количество срабатываний) для оценки уровня доверия индикатору.
Постройте аналогичный индикатор для системы с тремя ЭСС 5, 13, 28 дней.
If(
Mov(C,5,E)<Mov(C,13,E)
AND Mov(C,13,E)<Mov(C,28,E)
,-1,
If(
Mov(C,28,E)<Mov(C,13,E)
AND Mov(C,13,E)<Mov(C,5,E)
,1,0)
)
Подсчитайте общее количество раз, когда индикатор меняет значения 1 и –1. Подсчитайте количество периодов, когда индикатор сохраняет значение 1 или –1 более месяца. Найдите отношение этих чисел.
Сравните рискованность обеих систем.
Вопросы
Основные элементы формулы макроязыка MetaStock 7.0
Идентификаторы ценовых массивов. Сокращения. Чувствительность к регистру.
Определение переменных. Общие правила.
Р идентификатор, его предназначение.
Схема построения нескольких графиков.
Синтаксис функции скользящего среднего mov(Data Array, Time Periods, Type), допустимые значения параметров
Синтаксис условной функции if(Condition, If Condition is True, Else)



ОГЛАВЛЕНИЕ