• 1.11 Подстановка функций [функция в качестве аргумента другой функции] (Nesting Functions)
  • 1.12 Функция if() в Метасток (The if() function)
  • 1.13 Использование операторов "And" и "Or" в Метасток (Using "And" and "Or" Operators)
  • 1.14 Ссылка на другие Пользовательские Индикаторы (Referencing Other Custom Indicators)
  • 1.15 Р-идентификатор массива данных в Метасток (The "P" Data Array Identifier)
  • 1.16 Советы по работе с формулами в Метасток (Formula Tips)

 

 

1.11 Подстановка функций [функция в качестве аргумента другой функции] (Nesting Functions)

Предыдущие примеры используют ценовые идентификаторы (см. Price Array Identifiers) в качестве параметров. Вы также в качестве параметров можете использовать и другие функции, как это показано в следующих трех примерах.

stdev( stoch(5,3) 10 )

mov( rsi(15), 10, SIMPLE)

mov( mov( rsi(15), 20, W), 10, SIMPLE)

В первом примере рассчитывается значение стохастического осциллятора, а затем калькулируется стандартное отклонение значений этого осциллятора за 10-дневный период.

Во втором примере рассчитывается 10-дневная простая скользящая средняя  15-дневного Индекса относительной силы (RSI).

Третий пример показывает расчет 20-дневной взвешенной скользящей средней 15-дневного RSI, а затем рассчитывает 10-дневную простую скользящую среднюю первой скользящей средней.

Этот метод (вставка функции в другую функцию) называется "nesting of functions"

1.12 Функция if() (The if() function)

Функция if() используется для создания общепринятой конструкции (если ... то). Функция включает пять параметров как показано в следующем примере. Эта формула рисует “положительный Объем “ если цена закрытия больше чем средняя цена. В противном случае рисуется “негативный Объем”.

if( CLOSE > (HIGH+LOW)/2, +V, -V )

Хороший пример использования этой функции можно найти в примерах по индикатору On Balance Volume(см. “On Balance Volume”).

1.13 Использование операторов (Using "And" and "Or" Operators)

Если формула требует нескольких условий Вы можете комбинировать эти условия при помощи операторов "and" и "or". Например Вы хотите, чтобы Метасток генерировал +1, если MACD больше 0 и RSI больше 70.

Формула будет выглядеть следующим образом.

If( macd() > 0 AND rsi(14) > 70, +1, 0 )

Вы можете использовать столько условий в формуле сколько позволяет размер. Например:

If(macd() > 0 AND rsi(14) > 70 AND CCI(14) > 100 AND close > mov(close, 10, e), +1, 0)

Вы также можете сочетать AND и OR операторы внутри одной формулы. Например:

If((macd() > 0 OR close > mov(close, 10, e)) AND rsi(14) > 70, +1, 0)

Формула представленная выше возвращает “+1”, если MACD больше 0 или если цена закрытия больше ее скользящей средней и при этом RSI больше 70.

Заметим, что вокруг условия OR были поставлены круглые скобки, это связано с тем, что оператор AND имеет более высокий приоритет и связанное с ним условие в противном случае  было бы  выполнено первым (см. Operator Precedence), что не соответствует нашей задумке.

Операторы  AND и OR почти всегда используются только в функции If( ).

1.14 Ссылка на другие Пользовательские Индикаторы (Referencing Other Custom Indicators)

Пользовательские индикаторы могут ссылаться на другие пользовательские индикаторы при помощи функции fml(). Например, функция "fml( "My MACD")"  возвращает значение формулы которая имеет имя "My MACD". Полного имени не требуется, достаточно той части, которая делает имя уникальным.

Следующая формула отображает значение формулы с именем "Down Day", если цена закрытия меньше или равна 10-дневной скользящей средней цены закрытия. В противном случае, отображается значение формулы "Up Day".

if( close <= mov(close, 10, E), fml("Down Day"), fml("Up Day") )

Этот метод (ссылка на формулу из другой формулы) подобен методу "nesting of formulas".

Ссылка на формулы путь позволяющий упростить разработку и восприятие сложных формул. Формула включенная в другую формулу в качестве параметра ,также может включать в качестве параметра другую  формулу и т.д. Циркулярные ссылки (т.е. например, когда формула "My MACD" вызывает формулу "My RSI", а последняя в свою очередь опять вызывает формулу "My MACD") приводят к ошибке, о которой появляется сообщение при попытке отображения графика формулы.

 

1.15 Р-идентификатор массива данных (The "P" Data Array Identifier)

Специальный ценовой идентификатор (переменная “Р”) используется, чтобы ссылаться на какой либо график индикатора или цены. При применении Р-переменной в пользовательских индикаторах ей присваиваются значения индикатора на график которого «сбрасывается»  пользовательский индикатор. При ее применении в тестах систем и исследованиях ...........................Это может быть использовано если Вы хотите рассчитать индикатор, тест системы или исследование для данных которые не относятся к основным ценовым данным (chart's base security). Если Вы «сбрасываете»  пользовательский индикатор содержащий Р-переменную на штриховой график (high/low/close price bars),  то значениями для Р-переменной служит цена закрытия (CLOSE).

Например, следующий «пользовательский» индикатор отображает график типа MACD

mov( P, 12, E) - mov( P, 26, E)

Если Вы предварительно нарисуете индикатор Аккумуляции/Дистрибуции а затем «сбросите»  на него приведенный выше индикатор (захватив его в КвикЛисте), то в результате Вы получите MACD Конвергенции/Дистрибуции.

Конечно, Вы можете написать предыдущую формулу  без использования «Р»-переменной как показано ниже, однако Вы будете вынуждены ее модифицировать каждый раз, если захотите вместо Аккумуляции/Дистрибуции использовать какой либо другой индикатор. При использовании Р-переменных формула становиться более гибкой.

mov( ad(), 12, E) - mov( ad(), 26, E)

В пользовательских индикаторах значения HIGH, LOW, CLOSE, VOLUME, OPEN и

OPEN INTEREST всегда берутся из базового массива данных по ЦБ. Например, если Вы «сбросите» индикатор с формулой "HIGH - LOW / P" на ценовой график, который не является графиком базовых  данных , то HIGH и LOW будут однако взяты из массива базовых данных. Значение Р-переменной будет представлено ценой закрытия (CLOSE) той ЦБ на график которой произошел сброс.

Также, заметим, что только значения (но не даты) запоминаются Р-идентификатором. Поэтому необходимо, чтобы данные присваиваемые Р-переменной совпадали по времени ч другими данными представленными в Вашей формуле.

Чтобы отобразить пользовательский индикатор с Р-переменной, необходимо

  • Написать формулу пользовательского индикатора, вставив Р-переменную на место идентификатора массива данных. (например, mov(P, 10, E), sum(P,25), stdev(P,12), etc.).
  • Захватить этот индикатор из КвикЛиста и сбросить на  нужный Вам график.

Чтобы запустить тест системы или исследование которые содержат Р-переменную, надо:

  • Написать формулы теста системы или исследования, вставив Р-переменные на место идентификаторов массива данных. Например, mov(P,10,E), sum(P,25), stdev(P,12), и т.д.
  • Выбрать график (индикатора или ценовой график) для использования Р-переменной при помощи щелчка непосредственно на графике. График считается выбранным, когда на нем появится небольшой квадратик «рукоятка» .
  • Запустить тест системы или исследование.

1.16 Советы по работе с формулами (Formula Tips)

Общие сведения.

Два наиболее важных момента работы с формулами уже упоминались: (1) использование “Paste Formula dialog” и (2) щелчок по клавише “ОК”, при вводе формулы для проверки ее синтаксиса.

Дублирующие линии.

Если Вы пишете длинную формулу, то можете попытаться использовать представление формулы на нескольких строках для облегчения ее чтения. Вы можете отобразить формулу на строках нажав на клавиши CTRL+TAB. Например, формула

cum(if(close > ref(close, -1),+V, if(close < ref(close,  -1),-V,0)))

намного легче читается, если ее расположить на нескольких строках, как:

cum(

if(close > ref(close, -1),

if(close < ref(close, -1),

)

)

Заглавные символы в сравнении с прописными.

При вводе формул регистр (верхний или нижний) не имеет значения («с» и «С»  идентичны). При проверке синтаксических ошибок Метасток автоматически модифицирует написание, для того чтобы сделать формулу более читабельной. Этот раздел не нуждается в примерах.

Комментарии.

Благоразумное использование комментариев облегчает чтение формулы. (Помните, текст комментариев должен находиться в фигурных скобках {} ).

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

( mov(fml("MA1"),10,S) / fml("MA2") ) { * stoch(5,3) }

Пространство (пробелы).

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

 

Клавиатурные команды.

Во время редактирования формулы вы можете использовать клавиатурные команды, чтобы переносить формулы из одного индикатора в другой.

 

Копирование выделенного текста  -   CTRL+C

Перемещение                                     -   CTRL+X

Вставка из буфера                             -   CTRL+V

 

Размер файла.

Размер файла пользовательского индикатора (MS50FORM.DTA) зависит от числа этих индикаторов. Его размер  увеличивается приблизительно на 3К на каждый новый индикатор. (Размер файла никогда не уменьшается, даже если Вы удаляете индикатор его размер остается неизменным.) Размер этого файла может быть ограничен установкой на максимальное количество присутствующих пользовательских индикаторов. Например, если используется только 30 первых позиций, файл может вырасти приблизительно только до 90К.


Добавить комментарий


Защитный код
Обновить

Комментарии