3. Пользовательский индикатор - основа МТС.

3. Пользовательский индикатор - основа МТС.


3.1. Пользовательский индикатор и конструктор индикаторов.

Как правило, любая торговая стратегия за редким исключением начинается с того, что трейдер смотрит на график и замечает некоторые закономерности поведения цен и/или индикаторов. И у него возникает мысль: а что, если… Продолжение фразы может быть любым, но суть в том, что первым шагом на пути созданию любой стратегии является некоторая торговая идея, которая реализуется или уже реализована определенным техническим индикатором в составе некоторого программного средства.

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

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

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

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

Индикаторы, разработанные при помощи Indicator Builder, используются точно также как и встроенные индикаторы Метасток и ничем не отличаются в плане использования функций интерфейса программы. Они точно также могут быть “перетащены” с панели Indicator QuickList на нужные графики или же вызваны из диалога Indicators.

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

Если вы владеете написанием элементарных формул, не сложнее, чем в про¬граммах для EXEL, то вы легко освоите работу с Indicator Builder и сможете начинать разрабатывать новые индикаторы немедленно. Если же для вас это новая область, то, используя материалы учебника по формулам и пользуясь справочным разделом и кнопкой «Помощь», вы быстро во всем разберетесь.

3.2. Диалог конструктора индикаторов

3.2.1. Вызов окна диалога.

Диалог конструктора индикаторов “Indicator Builder” можно вызвать выбором в меню Инструменты команды «Indicator Builder» (в русификации очень коряво – «Индикатор создателя») или нажав кнопку  на главной панели инструментов (см. рис.3.1).



Рис.3.1. Расположение кнопки вызова диалога конструктора индикаторов на стандартной инструментальной панели

3.2.2. Описание окна диалога.

После действий по активированию диалога конструктора индикаторов на экране появляется следующее окно:



Рис.3.2. Диалоговое окно конструктора индикаторов

В левой части окна расположен список имеющихся пользовательских индикаторов. В правой части окна – кнопки для выполнения определенных действий в рамках диалога.

Close – просто закрывает окно.
New – создание нового индикатора - приводит к вызову диалога, во время которого можно присвоить имя и написать формулу нового пользовательского индикатора.
Edit – редактирование предварительно выбранного пользовательского индикатора.
Copy - при выборе этой кнопки делается копия выбранного индикатора в диалог Edit. После внесения изменений копию пользовательского индикатора нужно сохранить.
Delete - при помощи этой кнопки удаляется выбранный пользовательский индикатор.
Print - выбор этой кнопки распечатывает выбранный индикатор (название и формулу).
Кнопка «Help» – стандартная кнопка вызова диалога «Помощь», а кнопка «Organizer» управляет функциями экспорта и импорта инструментов в программе Местаток, и нами пока что рассматриваться не будет.

3.2.3. Создание и редактирование индикаторов

Создание и редактирование индикаторов производится в диалоге «Indicator Editor» (Редактор индикаторов), который вызывается кнопками «New» или «Edit» диалога конструктор (рис.3.2.).

При нажатии кнопки «New» на экране появляется пустое окно диалога «Indicator Editor» следующего вида:



Рис.3.3. Диалог создания нового индикатора

Name. В это поле можно ввести имя индикатора длиной до 50 символов. Это имя будет появляться в заголовке внутреннего окна, в котором отображается график индикатора при его вызове. Список индикаторов в диалогах сортируется по имени.

Display in QuickList. Опция выбирается, если нужно, чтобы имя нового индикатора было включено в «QuickList». Наличие индикатора в «QuickList» позволяет использовать метод «захвати и сбрось».

Formula. В этом поле вводится формула пользовательского индикатора. Формула может содержать до 250 символов на нескольких строках. Для перехода к другой строке необходимо нажимать клавишу ВВОД.

Functions. Нажатие этой кнопки вызывает диалог «Вставить функцию», о котором мы поговорим немного ниже.
Кнопка неактивна, пока курсор находится за пределами окна редактирования формулы.

Сохранение изменений.
Если во время редактирования пользовательского индикатора, теста системы и т.п. попытаться закрыть окно, то появится окно с запросом «желаете ли вы сохранить изменения». Выбор «Да» сохраняет изменения, выбор «Нет» не сохраняет изменений.



Рис.3.4. Диалог редактирования существующего индикатора.

Диалог ректирования существующего индикатора точно такой же, как и диалог создания нового индикатора.
Отличия в том, что перед нажатием команды Edit необходимо выбрать имя редактируемого индикатора в колонке слева (см. рис.3.2), а также в том, что поля с именем и с формулой уже будут заполнены данными, которые собственно и будут редактироваться.

3.2.4. Копирование, удаление и печать пользовательских индикаторов

При помощи кнопки «Copy» в диалоге конструктора индикаторов можно сделать копию выбранного пользовательского индикатора, что может быть полезным, если некоторый новый индикатор разрабатывается на базе уже существующего.
Например, если пользовательский индикатор «Tutorial» является прототипом вновь создаваемого, используя кнопку «Copy» делаем его копию, по умолчанию с именем «Tutorial(2)», а затем вносим все необходимые изменения и присваиваем индикатору новое имя (рис.3.5).



Рис.3.5. Копирование индикаторов.

Удалить пользовательский индикатор из списка конструктора индикаторов можно при помощи клавиши «Delete» (рис.3.2). Выбор этой кнопки приводит к появлению диалога “Delete Custom Indicator dialog”, требующего подтверждения операции.

При помощи кнопки «Print» можете распечатать имена и/или формулы пользовательских индикаторов на принтер, определенный по умолчанию. Этот диалог можно вызвать, щелкнув по кнопке «Print» в диалоге, представленном на рис.3.2.
Print What. Выбор того, что необходимо печатать, только имя или вместе имя и формулы.
Copies. Количество копий.
Print Range. Печатать тольк выбранные или все пользовательские индикаторы.
Printer. Выбор и настройка принтера и параметров печати.

3.2.5. Вставка функций в формулы

Используя кнопку «Functions» диалога «Indicator Editor», можно вставлять функции непосредственно в редактируемую формулу. Это экономит время и освобождает от необходимости запоминать синтаксис функций и их параметров.
Диалог «Рaste Functions» (см. рис.3.6) подразделяет функции на категории, которые собраны в список категорий, расположенный в левой стороне окна диалога. Функции, входящие в выбранную категорию, располагаются в правой стороне окна в виде списка имен.



Рис.3.6. Вставка функций

Во время прокрутки списка функций в нижней части окна диалога отображается строка, описывающая синтаксис выбранной функции. Вставить в функцию аргументы можно выбрав опцию «Paste Arguments checkbox».
Щелчок по клавише «ОК» или двойной щелчок по имени функции вставляет ее в формулу в позицию курсора.

Чтобы вставить функцию необходимо:
• В сеансе редактирования формулы щелкнуть по кнопке «Functions».
• Щелкнуть по необходимой категории в списке «Functions Category list».
• Выполнить двойной щелчок по имени функции.

3.3. Учебник по формулам

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

Формула - математическое выражение того, что хочет получить пользователь.
Формулы используются, чтобы задавать пользовательские индикаторы, тесты систем (торговых стратегий), алгоритмы работы советников и т.д.
Метасток предлагает мощную коллекцию инструментов, которую можно использовать при разработке и использовании собственных индикаторов наряду с предопределенными встроенными в Indicator QuickList индикаторами. В этом разделе описываются математические правила и инструменты, с помощью которых можно создавать “пользовательские индикаторы”.

В Местаток можно разработать свыше 2000 различных “пользовательских” индикаторов, которые автоматически сохраняются и всегда готовы к использованию наряду с предопределенными встроенными индикаторами программы.
Формулы, создаваемые при помощи меню конструктора индикаторов, и формулы, используемые для расчетов во встроенных индикаторах, совершенно независимы друг от друга. Поэтому любые изменения в формулах пользовательских индикаторов никак не отразятся на встроенных индикаторах.

3.3.2. Объекты вычислений

Объектами вычислений (идентификаторами массива цен) в Местаток являются цены открытия (open), максимальная (high), минимальная (low), закрытия (close), а также объем сделок (volume), количество открытых позиций (open interest).
Кроме того, объектом вычислений может являться индикатор P и некоторая, которая может быть обозначена, например, буквой F или любым другим символом.
Вместо полного имени идентификаторов массива цен могут использоваться аббревиатуры, как показано ниже.



Рис. 3.7. Объекты вычислений и их обозначения

3.3.3. Действия над объектами вычислений

3.3.3.1. Арифметические операции и знаки приоритета

Формулы могут содержать следующие математические операторы и знаки приоритета:



Рис.3.8. Математические операции и знаки приоритета

Полукруглые скобки используются в качестве знаков приоритета.
Фигурные скобки обозначают текст комментариев.

3.3.3.2. Логические операции и функции

Формулы могут содержать следующие логические операторы и функции:



Рис.3.9. Перечень логических операций

Кроме того в состав выражений может входит функция IF(F, a, b), обзначающая оператор перехода по выполнению условия F (если F истинно, то оператор принимает значение a, если ложно, то b).

3.3.3.3. Уровень приоритета операторов

Наиболее прозрачным сопособом контроля уровня приоритета операций являются скобки (операции во внутренних скобках выполняются в первую очередь).
Если скобки не расставлены, то порядок приоритета операций следующий:



Рис.3.10. Уровень приоритета операторов.

Выражение “H+L/2” (без скобок) будет считаться Метастоком как “L/2” плюс “Н”, поскольку деление имеет более высокий приоритет. Этот результат будет отличен от значения получаемого в случае "(H + L) / 2."
Для простоты контроля приоритета рекомендуется всегда использовать скобки.

3.3.3.4. Операторы присваивания и сдвига

Оператор присваивания:

:=

Оператор присваивания значений параметру индикатора для ввода с клавиатуры:

N1:=Input(“Имя переменной”, Min, Max, По умолчанию).

Так, например, запись M:=Input(“Период”, 10, 120, 24) обеспечит возможность задания с клавиатуры значений параметра индикатора, который будем обозначаться во внутренних формулах индикатора буквой M, а во внешнем интерфейсе будет иметь имя "Период". Диапазон изменения значений от 10 до 120, по умолчанию параметру M присваивается значение 24.

Оператор присваивания вида внутренней функции индикатора:

F:= формула функции

Например, определив M:=(h+l)/2, в дальнейшем можно пользоваться обозначением M для медианной цены, а не переписывать формулу каждый раз.

Оператор сдвига (ссылка):

Ref(C,-n).

Например, Ref(C,-1) равно значению цены закрытия на один интервал назад. Ref(H,+1) равно значению максимальной цены на один интервал вперед, т.е. будущей цены.

Оператором Ref() нужно пользоваться крайне осторожно при положительных сдвигах, так как можно создать очень эффективную, но неработоспособную торговую стратегию, которая «подсматривает» в будущее.

3.3.4. Формулы и параметры функций

Кроме арифметических и логических операторов Метасток имеет более 160 функций, которые выполняют математические операции.

Например, функция sqrt() рассчитывает квадратный корень числа.
Формула sqrt( CLOSE ) в индикаторе будет вычислять график квадратных корней цен закрытия.

В конце имени каждой функции должны стоять две круглые скобки. Если первый символ после имени функции не “(“, то будет выдано сообщение об ошибке.

Большой, но не полный перечень функций приведен в справочном разделе.
Исчерпывающие сведения о функциях для любой используемой версии Метасток приведены в разделе программы, вызываемой диалогом «Помощь».

Функция sqrt() требует задание параметра, находящегося внутри скобок (например, “CLOSE” как в предыдущей формуле).
Другие функции, такие как macd(), вообще не требуют никаких параметров.
Так, например, следующая формула суммирует квадратный корень максимальной цены со значением индикатора MACD:

sqrt(HIGH ) + macd().

Некоторые функции требуют нескольких параметров внутри скобок. Например, для функции “Price Oscillator” необходимо 4 параметра:

oscp( 10, 20, EXPONENTIAL, % ).

В приведенной выше формуле Метасток рассчитывает 10-20 экспоненциальный Ценовой осциллятор при процентном методе калькуляции.
Если Вы забыли вставить необходимый параметр, Метасток выдаст окно с напоминанием о требуемом параметре.

3.3.5. Контроль ошибок в формулах

Метасток отслеживает ошибки в формулах.
Фактически невозможно ввести неправильную формулу. Однако это не означает, что введенные формулы всегда будут работать, как запланировано, потому что программа не знает ваших намерений. Но синтаксис формул всегда будет правильным.
Метасток проверяет синтаксис при вводе формулы. Если обнаруживается ошибка, формула будет отображена заново, курсор будет позиционирован в области ошибки и появится сообщение, объясняющее суть ошибки.

Предположим, что индикатор содержит график формулы содержащей экспоненциальную скользящую среднюю цены закрытия с периодом 10.

Именем функции скользящей средней является "mov".

Вводим mov и нажимаем ОК.
Курсор будет позиционирован после имени “mov” и появится сообщение “символ “(“ должен стоять непосредственно за именем функции”.

Добавляем “(“, т.е. в поле будет mov(, и нажимаем ОК.
Курсор будет позиционирован после “(” и появится сообщение “Цена или функция предполагается”.

Вводим ценовой идентификатор “CLOSE”, т.е. mov(CLOSE, и опять нажимаем ОК, и т.д.

Если продолжить этот процесс, то Метасток будет выдавать посдсказки до тех пор, пока синтаксис формулы не будет правильным, т.е. mov(CLOSE, 10, EXPONENTIAL).

Таким образом, если есть сомнения в правильности синтаксиса формулы или функции, достаточно нажать ОК.

3.3.6. Подстановка функций в качестве аргумента другой функции

В предыдущих примерах в качестве переменных использовались ценовые идентификаторы (см. 3.3.2). В качестве переменных в формулах могут быть и другие функции, которые рассмотрены в следующих примерах.

Пример 1.

stdev( stoch(5,3) 10 )

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

Пример 2.

mov( rsi(15), 10, SIMPLE)

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

Пример 3.

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

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

3.3.7. Функция if()

Функция if() используется для создания общепринятой конструкции (если ... то). Функция включает пять параметров как показано в следующем примере.

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

Эта формула возвращает +V, если цена закрытия больше чем средняя цена, и -V, если условие не выполняется.

3.3.8. Использование операторов «And» и «Or»

Если формула требует выполнения нескольких условий, эти условия можно комбинировать при помощи операторов «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 имеет более высокий приоритет и связанное с ним условие в противном случае было бы выполнено первым, что не соответствует нашей задаче. (См. 3.3.3.3. Уровень приоритета операторов.)

3.3.9. Ссылка на другие пользовательские индикаторы

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

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

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

3.3.10. Р-идентификатор массива данных

Специальный ценовой идентификатор (переменная “Р”) используется, чтобы ссылаться на какой либо график индикатора или цены.
При применении Р-переменной в пользовательских индикаторах ей присваиваются значения индикатора, на график которого «сбрасывается» пользовательский индикатор.
Если «сбросить» пользовательский индикатор, содержащий Р-переменную, на график цены, то значениями для Р-переменной служит цена закрытия (CLOSE).
Например, следующий «пользовательский» индикатор отображает график типа MACD:

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

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

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

Однако эту формулу нужно будет модифицировать каждый раз, когда мы захотим вместо MACD Аккумуляции/Дистрибуции рассчитать MACD какого-либо другого индикатора.
При использовании Р-переменных формула становиться более гибкой и универсальной для применения.

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

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

3.3.11. Советы по работе с формулами

Общие сведения.
Два наиболее важных момента работы с формулами уже упоминались:
- использование «Paste Formula dialog»;
- щелчок по клавише «ОК» при вводе формулы для проверки ее синтаксиса.

Использование разбивки на строки.
Длинную формулу лучше разбить на несколько строк для облегчения ее чтения.
Пример, исходная формула

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)))

Заглавные и прописные символы.
При вводе формул регистр (верхний или нижний) не имеет значения («с» и «С» идентичны).

Комментарии.
Комментарии в формулах в Метасток заключаются в фигурные скобки "{" и "}". Следующая формула содержит два комментария.

macd() {the MACD times} * ((H+L+C) / 3) {средняя цена}

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

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

После тестирования можно убрать скобки и проверить всю формулу.

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

3.4. Начинаем строить свои индикаторы.

Сейчас мы убедимся, насколько просто строить и применять индикаторы в Метасток.

3.4.1. Цена закрытия.

Откроем в Метасток график какого либо инструмента, для определенности EURUSD часового масштаба, и настроим отображение злементов графика в виде японских свечей (рис.3.11).



Рис.3.11. График EURUSD с отображением в виде японских свечей

Построим для примера индикатор, показывающий изменение цены закрытия, и назовем этот индикатор «Учимся – Close».

Вызываем диалог конструктора индикаторов (рис.3.12) и нажимаем кнопку «New», т.е. мы будем строить новый индикатор.



Рис.3.12. Диалог конструктора индикаторов

В появившемся окне редактора набираем в графе «Name» (Имя) имя нашего индикатора, а в графе для формулы – формулу. Ставим «птичку» в окошке отображения в быстром списке (Display In QuickList) и пишем формулу для индикатора.



Рис.3.13. Диалог редактора

Какая будет формула, если нам надо отображать цену закрытия?
Да такая и будет, просто

Close

Можно даже еще короче

C

В конце формулы ставится знак «;», но если в формуле все вычисления проводятся в одной строке, то этот знак ставить необязательно.
Нажимаем клавишу «ОК».

Теперь наш индикатор готов и отображается в быстром списке индикаторов под заданным нами именем «Учимся – Close» (рис.3.14).



Рис.3.14. Отображение построенного индикатора в бытром списке (список раскрыт).

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



Рис.3.15. Отображение построенного индикатора на графике цен.

3.4.2. Chikou Span из Ishimoku

Теперь построим более сложный индикатор, например элемент Chikou Span входящий в состав известного индикатора Ishimoku Kinko Hyo.
Chikou Span представляет собой просто график цены закрытия, сдвинутый на 26 периодов назад от текущего момента.
Чтобы его построить вызываем меню диалога конструктора индикаторов, показанное на рисунке 3.12.
Далее мы могли бы просто написать формулу нового индикатора, но мы поступим по-другому. Мы построим новый индикатор на основе предыдущего, т.е. на основе разработанного нами индикатора под именем «Учимся – Close». Для этого находим индикатор «Учимся – Close» в колонке слева, выделяем его и нажимаем клавишк «Copy». Получим следующий результат (рис.3.16).



Рис.3.16. Результат копирования индикатора «Учимся – Close».

Теперь осталось отредактировать имя (пишем имя «Учимся – Chikou Span») и формулу.
Поскольку создаваемый индикатор представяет собой график цены закрытия, сдвинутый на 26 периодов назад, то воспользуемся оператором сдвига (см.справочный раздел) и запишем

Ref(C,26)

И всё.
Редактирование закончено, индикатор создан (мы сократили написание «Close» до одной буквы «C»).



Рис.3.17. Результат редактирования.

Нажимаем клавишу «ОК» и можем приступать к работе с индикатором.

Захватываем индикатор из быстрого списка и сбрасываем на график цены. Получаем результат, показанный на рисунке 3.18.



Рис.3.18. Применение пользовательского аналога индикатора Chikou Span.

3.4.3. Медианная цена

Медианная цена - это средняя цена между минимумом и максимумом на интервале.
Формула индикатора - простое алгебраическое выражение:

(H+L)/2;

Здесь мы использовали скобки, как способ задания порядка операций - сначала сложение H и L, затем деление полученной суммы на 2.



Рис.3.19.

3.4.4. Истинная цена.

Т.н. истинная цена - это среднее трех величин: H, L и C.
Формулу для этого индикатора будем писать с помощью оператора присваивания (см. выше), которым определим внутреннюю функцию индикатора:

RP:= (H+L+C)/3;

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

RP;

Получаем результат



Рис.3.20

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

Теперь нанесем все три построенных нами индикатора на график EURUSD дневного масштаба, просто так, для примера и без обсуждения, потому что у каждого варианта цены есть свои области применения. А попутно освоим еще один способ вывода графиков в виде HTML-файлов.
Для того чтобы вывести график как HTML-файл, нужно выбрать в меню «Файл» команду «Сохранить как HTML» (см. рис.3.21).



Рис.3.21.

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



Рис.3.22.

Задаем имя MS_3_23, формат графика PNG и нажимаем кнопку «Save».
Файл сохранен. Теперь можно вызвать его с помощью броузера полностью, либо с помощью любого графического редактора или программы просмотра графических файлов и изображений просмотреть отдельно графическую часть, показанную на рисунке 3.23.



Рис.3.23.

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

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

3.4.5. Разворотные точки 1.

Есть масса эмпирических способов построения ожидаемых уровней, на которых могут быть расположены точки вращения или разворота рынка (pivot points). Некоторые из этих способов основаны на понятии истинной цены.
В частности, первый из таких способов, предполагает построение уровней разворота завтрашнего дня по данным закрытия дня текущего в следующем виде (за давностию лет я уже не помню, откуда взято это выражение):

2*(H+L+C)/3 -L;
2*(H+L+C)/3 –H.

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

RP:=(H+L+C)/3;
HL:= 2*RP-L;
LL:= 2*RP-H;
Ref(HL,-1);
Ref(LL,-1);

Где RP – истинная цена, а HL и LL уровни верхнего и нижнего разворота соотвественно, внутрении функции для которых строятся с помощью оператора присваивания, а две последних строки – это и есть собственно формулы индикатора, для которых строится график.
Отместим, что мы иогли бы записать просто

Ref((2*(H+L+C)/3 –L), -1);
Ref((2*(H+L+C)/3 –H), -1);

Результат в обоих случаях будет совершенно идентичен.
Строим индикатор



Рис.3.24.

И наносим построенный индикатор на график (рис.3.25)



Рис.3.25.

Из представленной зависимости можно видеть, что на участках с боковым трендом уровни разворотных точек достаточно хорошо задают границы канала движения цен на завтрашний день. Но на тренде индикатор не работает. Так, например, на закрытии рынка в пятницу 30 сентября (последняя свеча графика) рынок вышел далеко вниз за границу канала.
В принципе пробой канала ценой закрытия может быть показателем того, что начался тренд. Чем не гипотеза для построения и исследования торговой стратегии?

3.4.6. Разворотные точки 2.

Еще один индикатор для построения разворотных точек на основе истинной цены имеет следующую формулу:

RP:=(H+L+C)/3;
HL1:= RP+H-L;
LL1:= RP-H+L;
Ref(HL1,-1);
Ref(LL1,-1);

Строим и наносим на график в дополнение к индикатору «Разворотные точки 1», только линии для этого индикатора делаем шире (рис.3.26).



Рис.3.26.

Лучше? Вряд ли…
С одной стороны цена почти все время в канале и это хорошо.
Но с другой стороны неясно, где входить в рынок на основе индикатора, если цена все время в канале.
Тем не менее, внимательный взгляд на индикатор «Разворотные точки 2» позволяет и для него найти область применения. В частности, если рынок находится в тренде, то этот индикатор даёт хорошие (визуально) уровни для промежуточной фиксации прибыли, или, по крайней мере, уровни, от которых можно ожидать откатов.

3.4.7. Разворотные точки 3.

Ну и для комплекта еще один индикатор из этой же серии с формулой вида:

RP:=(H+L+C)/3;
HL2:= 2*(RP - L) + H;
LL2:= L – 2*(H - RP);
Ref(HL2,-1);
Ref(LL2,-1);

Строим и по этой формуле индикатор и наносим на график в дополнение к двум предыдущим, линии делаем еще немного шире (рис.3.27).



Рис.3.27.

Нужен ли вам этот третий индикатор, и что с ним можно сделать не знаю. Думайте сами.

P.S. Не знаю, заметили ли вы, как легко и непринужденно, практически не задумываясь, мы начали строить индикаторы. Все наше внимание занимает не техника процесса построения индикаторов, а творческий анализ возможностей применения этих индикаторов для анализа рынка и торговых операций.
В Интернете на сегодняшний день накопились громадные залежи готовых формул для различного рода индикаторов, есть они и в специальной литературе, например в книге Р. Колби «Энциклопедия технических индикаторов рынка» и многих других. Но, как вы уже заметили, и еще больше убедитесь в этом в дальнейшем, если у вас есть какая-либо идея, то не составляет особого труда запрограммировать ее для соответствующих инструментов Метасток, а именно:
- построить необходимые индикаторы;
- протестировать основанные на них торговые стратегии;
- реализовать результаты исследований в советнике, предназначенном помогать вам в практической торговле.

Однако пойдем дальше.

3.4.8. Скользящая средняя

Теперь построим пользовательский индикатор экспоненциальной скользящей средней от цены закрытия с периодом 21.
Вызываем диалог конструктора, задаем режим построения нового индикатора, вводим в поле появившего окна редактора название нашего индикатора «Учимся - МА» и активируем поле формулы, поместив туда указатель мышки (рис.3.28).



Рис.3.28.

Далее у нас два пути.
Первый путь – мы идем в справочный раздел и смотрим написание и синтаксис формулы в 1.60 Moving Average (Скользящая средняя), пишем нужную формулу и нажимаем «ОК». Этот путь нам уже знаком.

Второй путь – щелкаем по клавише «Functions», в появившемся окне (рис.3.29) выбираем в колонке справа Moving Average и щелкаем по клавише «ОК».



Рис.3.29.

В результате получаем окошко, представленное на рис.3.30.



Рис.3.30.

Осталось подтставить вид массиса данных (в нашем случае это Close или C), значение периода 21, и выбрать вид метода вычислений, для экспоненциального алгоритма это будет E.
Получим



Рис.3.31.

Нажимаем «ОК» и готово.

Сбрасываем готовый индикатор из быстрого списка на график (рис.3.32).



Рис.3.32.

Готово.
Только вот одна проблема, если нам нужно будет изменить период скользящей средней, нам придется редактировать формулу пользовательского индикатора. Это нетрудно сделать, щелкнув по индикатору правой кнопкой мышки и вызвав диалог «Свойства индикатора». Но это немного громоздкая процедура. Кроме того, возможно мы захотим применять пользовательский индикатор с разными параметрами на разных графиках.
Чтобы устранить указанный недостаток, можно построить скользящую среднюю с изменяемым параметром, как это показано ниже.

3.4.9. Скользящая средняя с изменяемым параметром

Параметр необходимо вводить с клавиатуры, поэтому воспользуемся оператором присваивания (см.справочный раздел) и запишем

N1:=Input(“Период”, 2, 500, 21);
Mov(C,N1,E);

Где
– «Период» - имя параметра при вводе;
- 2 - задаваемая нами нижняя граница диапазона возможных изменений параметра «Период»;
- 500 - задаваемая нами верхняя граница диапазона возможных изменений параметра «Период»;
- 21 – значение параметра «Период», принимаемое по умолчанию.

Вызываем диалог создания нового индикатора и записываем формулу в окно диалога редактора



Рис. 3.33

Нажимаем клавишу «ОК» - индикатор готов.

Захватываем название созданного индикатора из быстрого списка и сбрасываем на график.
В отличие от случая предыдущего индикатора, в котором не было задаваемых параметров, на экране появляется меню задания диалога параметра с заданным нами именем «Период» (см. рис.3.34), которое предлагает нам ввести значение этого параметра для анализируемого графика. Мы моженм ввести любое значение из заданного нами диапазона от 2 до 500, или оставить значение 21, предлагаемое по умолчанию.



Рис.3.34.

Сохраняем значение 21 и нажимаем «ОК».

В результате на экране появляется график вида, показанного на рис. 3.35.



Рис.3.35.

Если мы захотим изменить период скользящей средней или вид ее отображения на графике, то двойным щелчком левой кнопкой мышки по графику индикатора, или щелчком правой и выбором соответствующего пункта меню, можно вызвать диалог «Свойства индикатора», показанный на рисунке 3.36.



Рис.3.36.

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



Рис.3.37.

Отметим, что в диалоге рис.3.36 можно изменить и формулу индикатора, но эти изменения затронут ВСЕ графики, на которых используется данный индикатор.

3.4.10. Канал цены

Понятие канала цены используется во многих индикаторах, например таких, как широко известные стохастик или Ишимоку, так и в других, менее знакомых широкой аудитории.
Кроме того, канал цены нам понадобится в дальнейшем, при построении и тестировании некоторых торговых стратегий. Поэтому рассмотрим потроение каналов средствами Метасток несколько подробнее.
Как и все в Метасток, каналы строятся очень просто.
Что такое канал? Это диапазон цен от минимума до максимума за определенный период времени..
В таблице справочного раздела необходимые нам функции, которые определяют минимум и максимум параметра некоторого массива данных рынка за определенный период, находятся под номерами 1.41 и 1.48 и имеют вид

1.41. Highest High Value (Наиболее высокое значение) - hhv( DATA ARRAY, PERIODS )

и

1.48. Lowest Low Value (Значение минимального донышка) - llv( DATA ARRAY, PERIODS )

Поскольку нас интересует максимум HIGH и минимум LOW, то соотвествующая сокращенная запись формулы индикатора для периода, например, 22, будет иметь вид

HHV(H,22);
LLV(L,22);

где первая строка определяет верхнюю границу канала, а вторая - нижнюю.
Вызываем диалог конструктора и создаем новый индикатор с именем «Учимся – канал цен» (рис.3.38).



Рис.3.38.

Нажимаем «ОК» - индикатор готов.


Сбрасываем индикатор на график и получаем отображение текущих границ канала с изменением времени (рис.3.39).



Рис.3.39. Канал цен.

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

N1:=Input ("N1", 5, 50, 22);
HHV(H,N1);
LLV(L,N1);

В приведенном примере обозначения переменного параметра в формуле и во внешнем интерфейсе индикатора совпадают, и там и там обозначение одинаковое - «N1».
Построим индикатор канала с изменяемым временным интервалом под с именем «Учимся – канал цен N1», но график для него отображать не будем, ничего нового, по сравнению с рис.3.39, мы не увидим.

3.4.11. И еще несколько примеров пользовательских индикаторов

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

3.4.11.1. Накопление /Распределение (Accumulation/Distribution)

В этой формуле используется функция cum() (см. «Cumulate» в справочном разделе), которая накапливает изменение показателей агрумента:

cum( (((C-L) - (H-C)) / (H-L)) * V)

График индикатора располагаем в отдельном окне, так как он не привязан к масштабу графика цен (рис.3.40).



Рис.3.40.

3.4.11.2. Полосы Боллинжера (Bollinger Bands)

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

Верхняя границы полосы рассчитывается, как:

mov( C, 21, E ) + ( 2 * stdev( C, 21 ))

Нижняя границы полосы рассчитывается, как:

mov( C, 21, E ) - ( 2 * stdev( C, 21 ))



Рис.3.41.


3.4.11.3. Осциллятор A/D Чайкина

Формула индикатора со ссылкой на встроенный индикатор «Accumulation/Distribution indicator» (см. справочный раздел):

mov( ad(), 3, E) - mov( ad(), 10, E)

И та же формула, записанная в явном виде, используя данные п. 3.4.11.1:

mov(cum((((C-L)-(H-C))/(H-L)) * V),3,E)-mov(cum((((C-L)-(H-C))/(H-L)) * V),10,E)

Без разницы, какое выражение использовать, результат получим один и тот же:



Рис.3.42.


3.4.11.4. Баланс Объема (On Balance Volume)

Следующая формула предназначена для расчета индикатора баланс объема («On Balance Volume» - см. справочный раздел):

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

Во внутренних скобках встроенной функции кумуляции (Cumulate) (см. справочный раздел) стоит многоступенчатое логическое выражение с использованием функций if.
Поясним логику расчетов.
Функция cum просто рассчитывает сумму массива в скобках. Рассмотрим, чему равны элементы этого массива, предварительно вспомнив логику функции if. Функция If(F,A,B) принимает значение A при истинном F (F=1), и принимает значение B при F=0.

В качестве F у нас используется выражение C > ref(C,-1), т.е. проверяется условие, что текущая цена закрытия больше цены закрытия предыдущего интервала.

В качестве A у нас используется +V, т.е. объем сделок, взятый со знаком +.
Таким образом, если текущая цена закрытия больше предыдущей, то внутренний аргумент функции кумуляции принимает значение +V и предыдущему значению суммы прибавляется объем сделок текущего интервала.
Если же условие C > ref(C,-1) не выполняется, то внутренний аргумент функции кумуляции принимает значение

if( C < ref(C,-1),-V, 0)
т.е. это тоже функция, которая принимает значения –V, если C < ref(C,-1), т.е. текущая цена закрытия меньше цены закрытия предыдущего интервала , и 0, если условие C < ref(C,-1) не выполняется.
В результате функция кумуляции выполняет следующие действия:
- прибавляет к предыдущему значению объем текущего интервала, если цена закрытия больше предыдущей;
- вычитает из предыдущего значения объем текущего интервала, если цена закрытия меньше предыдущей;
- ничего не делает, если цены закрытия совпадают.

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

Cum( V*((C>Ref(C,-1)) - (C<Ref(C,-1))) )

Логику этой формулы можете проследить самостоятельно.

График индикатора представлен на рисунке 3.43.



Рис.3.43.


3.4.11.6. Коэффициент изменения цены (Price Rate-Of-Change)

Следующая формула рассчитывает 12-дневную степень изменения цены (“Price Rate-Of-Change”):
(( C - ref(C,-12)) / ref(C,-12)) * 100
Можно также использовать функцию roc():
roc( close, 12, % )



Рис.3.44.


3.4.11.7. Объемно-ценовой тренд (Price Volume Trend)

Следующая формула использует функцию cum() для расчета объемно-ценового тренда
cum( ((C - ref(C,-1)) / ref(C,-1)) * V)
Эту формулу также можно написать при помощи функции roc(), как показано ниже:
cum( roc(close, 1, %) * volume )



Рис.3.45.

3.4.11.8.Волатильность Чайкина (Volatility, Chaikin)

Формула волатильности показанная ниже использует 10-дневную скользящую среднюю и 12-дневный rate-of-change:
roc( mov( high-low, 10, E), 12, %)



Рис.3.46.

На этом с примерами закончим.
При желании вы сами сможете построить сотни самых различных индикаторов, основываясь на собственных идеях и/или литературных источниках.

3.5. Термины и определения

Знание (или запоминание) этих терминов для работы с Конструктором индикаторов не обязательно, но при чтении литературных источников может облегчить понимание того, что хотели сказать другие авторы, использующие Метасток.

КОММЕНТАРИЙ (COMMENT): Текст, записанный внутри формулы, но не являющийся ее частью. Комментарий должен быть заключен в фигурные скобки {комментарий}.

КОНСТАНТА (CONSTANT): Специфический тип параметра, который требует функция. Константы можно подразделить на следующие группы:

- КОНСТАНТА МЕТОДОВ РАСЧЕТА (CALCULATION METHOD CONSTANT): Используются, чтобы определить способ расчета. Имеются процентный и абсолютный способы (PERCENT и POINTS их аббревиатуры, соответственно, % и $);
- СРАВНИТЕЛЬНЫЕ КОНСТАНТЫ (COMPARISON CONSTANT): используются с функцией if(), для определения операции сравнения. К ним относятся: >, >=, <, <=, <>, =;
- ФОРМУЛЬНАЯ КОНСТАНТА (FORMULA CONSTANT) : используется с функцией fml() для ссылки на другую формулу. Формульная константа специфицируется как имя другой формулы заключенное в двойные кавычки (например, fml( "My Formula" ) );
- КОНСТАНТЫ СКОЛЬЗЯЩИХ СРЕДНИХ (MOVING AVERAGE TYPE CONSTANT): Используются для определения метода расчета скользящей средней. Имеются следующие методы : ЭКСПОНЕНЦИАЛЬНЫЙ (EXPONENTIAL), ПРОСТОЙ (SIMPLE), ВРЕМЕННОЙ (TIME SERIES), ТРИАНГУЛЯРНЫЙ (TRIANGULAR) , ПЕРЕМЕННЫЙ (VARIABLE), или ВЗВЕШЕННЫЙ (WEIGHTED). Могут использоваться аббревиатуры, соответственно E, S, T, TRI, VAR, или W;
- ЧИСЛОВЫЕ КОНСТАНТЫ (NUMERIC CONSTANT): Одиночное числовое значение. Функции требующие числовую константу не могут воспринимать массивы данных, так как массивы данных скорее всего содержат множественные, а не одиночные числовые значения. Например "10" является числовой константой в формуле "mov(C, 10, E)."

МАССИВ ДАННЫХ (DATA ARRAY): массив данных определяет специфическим образом организованную информацию (данные), которые используются в формуле. Массивы данных могут быть следующего вида:

- МАССИВ ЗНАЧЕНИЙ ФУНКЦИЙ (FUNCTION RESULT ARRAY): массивы, которые создаются в результате выполнения функции;
- ЛИТЕРАЛЬНЫЙ МАССИВ (LITERAL ARRAY): массив данных определяющий использование одиночных числовых констант;
- МАССИВ ЦЕН (PRICE ARRAY) : Массив содержащий информацию о максимальных (high), минимальных (low) ценах , ценах закрытия (сlose) и т.д.

ФОРМУЛА (FORMULA): комбинация комментариев, констант, функций, математических операторов и/или идентификаторов массива цен.

ФУНКЦИЯ (FUNCTION): предопределенные математические операции, в которые могут подставляться параметры, в результате которых создается необходимый массив данных.

МАТЕМАТИЧЕСКИЙ ОПЕРАТОР (OPERATOR, MATHEMATICAL) : “+”, “-” , “*”, “/”.

ПАРАМЕТР (PARAMETER): идентификатор значений подставляемых в функцию, если функция имеет несколько параметров, они отделяются запятой.

ПРИОРИТЕТ (PRECEDENCE): порядок в котором выполняются операции в формуле (см. “Operator Precedence”).

ИДЕНТИФИКАТОРЫ МАССИВА ЦЕН (PRICE ARRAY IDENTIFIERS): символы или слова используемые для ссылки на массив цен (Open, High, Low, Close, Volume, Open Interest, и выбранный график “Plot”).

3.6. Сообщения об ошибках

Если пользовательский индикатор содержит математические ошибки (не синтаксические), то при попытке его применить может появиться следующий диалог, указывающий на место и тип каждой ошибки.

3.6.1. Математические ошибки в индикаторах.

Деление на ноль (Division by zero). В формулу какое либо значение делиться на ноль. Например, в формуле "(ref(close, -1)-open)/(high - low)" деление на ноль может возникнуть, если “high” будет равно “low”.

Ошибочная экспонента (Invalid exponentiation). Ошибка возникает при неправильном использовании экспонент.

Неправильный логарифм (Invalid log). Возникает при попытке рассчитать десятичный логарифм 0 или отрицательного числа. Например, формула "log(high - low)" генерирует ошибку, если “high” и “low” будут равны.

Неправильная степень (Invalid power). Возникает при попытке возвести в степень отрицательное число, если значение степени меньше 1.
Modulus by zero. Возникает, если второй параметр в функции mod() [определение остатка от деления] равен 0. Например, формула "mod(close, high - low)" будет генерировать ошибку, если “high” равно “low”.

Отрицательный квадратный корень (Negative square root). Возникает при попытке извлечь квадратный корень из отрицательного числа. Например, формула "sqrt(open - close)" возвратит ошибку, если “close” больше, чем “open”.

3.6.2. Сообщения об ошибках

Чаще всего встречаются сообщения об ошибках при попытке отобразить график индикатора с “неполной” формулой. В этом разделе приведены пояснения по наиболее общим случаям сообщений об ошибках.

A reference to a formula name is no longer valid. (Ссылка на имя формулы непригодна)
Сообщение появляется при попытке ссылки на несуществующую формулу.

Does not contain an executable formula. (Не содержит исполнимой формулы)
Попытка выполнить пользовательский индикатор, в котором нет действительных (“валидных”) формул.

Formula too complex. (Формула слишком сложная)
Эта ошибка появляется в случае слишком глубокого вложения функций (не формул) или, когда сложное математическое выражение, использующее множество математических операторов, не сгруппировано при помощи круглых скобок.
Эту проблему может устранить группирование операторов при помощи круглых скобок, однако, лучшее решение - это разбиение сложной формулы на несколько небольших формул с помощью использования оператора присваивания, а затем монтирование их в главную формулу.
Другой вариант решения проблемы, когда небольшие формулы записываются в виде индикаторов и монтируются с помощью функции fml().

Insufficient memory to continue formula execution.(Недостаточно памяти для продолжения выполнения формулы)

MetaStock ran out of memory to store temporary values. (Метасток выгрузился из памяти, чтобы сохранить временные значения)

Overflow in function. (Переполнение в функции)
Результат расчета в формуле слишком большой для запоминания.
Формулу в этом случае нужно модифицировать, чтобы результат стал меньше. Например, разделить определенные массивы данных или результаты функций на 100.

Too many numeric constants defined in formula.(Слишком много числовых констант определено в формуле)
Максимум 20 различных числовых констант может быть использовано в каждой формуле. Эта ошибка может быть устранена разделением формулы на несколько небольших формул и затем соединением их при помощи функции fml().

Value out of valid range in function.(Значение выходит за диапазон)
Имеется ошибочный параметр в функции.
Например, следующие формулы будут генерировать эту ошибку:
Формула mov(C, -5, E), потому что “-5” является некорректным значением для временного периода скользящей средней.
Формула mov(C, 200, E), если загруженных данных меньше чем 200 периодов.
Формула mov(macd(), 74, E), если было загружено данных меньше, чем 100 периодов. Дело в том, что MACD выводится на экран, начиная с 26 дня (периода) и естественно, что скользящая средняяя MACD с периодом 74, начнет выводиться на экран начиная с 100 дня (периода).


Комментариев нет:

Отправить комментарий