Синтаксис блоков Формула, Логическая формула и Строковая формула

Блоки Формула в TSLab

Формула - данные блоки предназначены для выполнения арифметических действий над входными данными.

Блоки Формула можно найти на панели Панели инструментов Редактора в группе Служебные элементы

Редактор формул

Чтобы открыть Редактор формул блоков Формула дважды кликните левой кнопкой мыши по блоку. В оконном режиме редактора формул поддерживается технология IntelliSense. При наборе имени блока в нижнем левом углу окна появляется список блоков, название которых подходят под набираемый текст.

Переход в список-подсказку возможен либо клавишей Down (стрелка вниз), либо кликом левой кнопки мыши на наименовании. Навигация по списку осуществляется либо клавишами Up и Down (стрелки на клавиатуре), либо мышью. Выбор интересующего блока из списка осуществляется либо клавишей Enter, либо двойным кликом мыши. После выбора блока из списка, выражение дополняется выбранным блоком, и с выбранным блоком устанавливается связь, если она ещё не установлена.

В редакторах формул можно использовать клавиши клавиатуры SHIFT+ENTER для перехода на следующую строку.

Комментирование в блоках Формула

Вы можете добавлять комментарии в блоках формула. Для этого необходимо использовать следующую запись:

/* часть формулы */
/* "текст" */

Обратите внимание!

  • Комментировать можно либо число, либо название блока, размещенного в рабочей области Редактора;

  • Используя символы комментария вы можете закомментировать часть формулы, записанной в Редакторе формул и выбранныя часть формулы не будет использована в расчетах при компиляции скрипта. Это может быть полезным, если вы хотите проверить внесенные в формулу изменения без удаления частей формулы.

  • Комментировать можно текстом. Например, /*"Привет мир!"*/

Синтаксис блоков Формула

Логическая формула

Блок Логическая формула используется для проверки истинности выражения. На выходе логической формулы всегда 0 (т.е. «ложь» или англ. вариант – «false») или 1 (соответственно «истина» или англ. вариант – «true»). На практике обычно применяется для записи условия входа/выхода из позиции. Рассмотрим синтаксис, который возможно использовать в блоке «Логическая формула». В блоке «Логическая формула» могут быть использованы следующие операции сравнения (для каждой операции приведен пример):

НаименованиеОбозначениеПример

Больше

>

Close>Open

Меньше

<

Open[i]<Open[i-1]

Больше или равно

>=

Close>=Open

Меньше или равно

<=

Close<=EMA

Равно

==

Close==High

Равно истина

==true

Логическая формула==true (Короткая запись: Логическая формула)

Равно ложь

==false

Логическая формула1==false (Короткая запись: !Логическая формула1)

Не равно

!=

Close!=High

Не равно истина

!=true

Логическая формула!=true (Короткая запись: !Логическая формула)

Не равно ложь

!=false

Логическая формула1!=false (Короткая запись: Логическая формула1)

Помимо операций сравнения в блоке «Логическая формула» можно производить одновременную проверку ряда условий. Эти условия должны быть объединены следующими операторами:

НаименованиеОбозначениеПример

Логическое "И"

&&

Close>Open && Open[i]<Open[i-1]

Логическое "ИЛИ"

||

EMA==EMA1 || Close<=EMA

  • При использовании «И», на выходе блока «Логическая формула» будет истина лишь в том случае, если все условия, записанные в блоке – истинны.

  • При использовании «ИЛИ», на выходе блока будет истина, если хотя бы одно из условий, записанное в блоке – истинно.

Примечание. В блоке «Логическая формула» возможно использование математических функций: Сложение, Вычитание, Умножение, Деление.

Формула

Блок Формула используется для вычисления значений выражений. На выходе всегда числовое значение. На практике обычно применяется для промежуточных расчетов, а также для вычисления уровней входа/выхода из позиции. В блоке «Формула» допустимо использование следующих операций:

НаименованиеОбозначениеПример

Сложение

+

Open+Close

Вычитание

-

EMA-EMA1

Умножение

*

Close*Константа

Деление

/

Close/Close[i-1]

Особенностью блока «Формула» является возможность использования логического условия If (Если). Результатом выполнения будет все равно являться число. Запись логического условия If в блоке «Формула» выглядит следующим образом:

Логическое_условие?Выражение,_если_истина:Выражение,_если_ложь

В результате проверки Логического условия, если оно истинно – на выходе блока «Формула» будет «Выражение,_если_истина», в противном случае – «Выражение,_если_ложь». Пример использования:

EMA>Close?((Close+Open)/2):Open

Общие возможности для блоков «Логическая формула» и «Формула»

1️⃣ Возможность работы с предыдущими значениями некой последовательности (цены, индикатора и прочее). В блоках возможно обращение к предыдущим значениям цен или индикаторов. Текущее значение всегда обозначается индексом i. Для того, чтобы обратиться, например, к предыдущему значению Цены закрытия, следует записать

Close[i-1]

В случае использования в расчетах и проверках обращения к предыдущим элементам, следует не забывать про параметр «Начинать с». Самым простым способом запомнить, что ставить в поле «Начинать с», посмотреть максимальное число, используемое в квадратных скобках и вычитаемое из индекса i. Пример. В логической формуле записано выражение:

Close[i-1]>Close[i-2] && Close[i-2]>Close[i-3] &&
Close[i-8]>Close[i-9] && Close[i-8]>Константа

Посмотрев на эту запись, видим что максимальное значение числа в квадратных скобках равно 9. Поэтому в поле «Начинать с» мы ставим 9. Почему при обращении к предыдущим элементам надо менять значение в поле «Начинать с»? Все просто. Последовательность значений имеет начало или границу. За пределами начала ничего нет, там пусто. Все расчеты строятся относительно текущего значения i, поэтому, когда начинаем считать значение для i=0, т.е. для первого значения последовательности, и пытаемся сослаться, допустим, на предыдущее значение, программа скажет, что там пусто и вычислить она не сможет. Однако, когда запись простая, например [i-9], «Начинать с» ставить не обязательно, программа определит автоматически. Когда используется запись EMA[i-Константа] или EMA[i-Формула], "Начинать С" ставить обязательно. Этот параметр должен быть заведомо больше, чем значение константы или формулы, но не более, чем загруженных баров в скрипт(или Агент). Это число поставьте в свойствах скрипта в настройке "Торговать с бар". Параметр «Начинать с» показывает, с какого бара начинать расчет.

Аксиома: • Запись Close[i] равноценна записи Close

В блоке Формула можно обратиться к своему собственному значению

Close+Формула

Вернет значение Close плюс предыдущее значение самой формулы.

2️⃣ Возможность использования функций библиотеки Math. В выражениях, записываемых в блоках «Формула» и «Логическая формула» возможно использование функций из библиотеки Math. Список функций и описание приведено на сайте:

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

  • Вычислить абсолютное значение

  • Возвести число в степень

  • Вычислить синус, косинус и т.д.

  • Округлить число

  • Вычислить квадратный корень из числа

  • И т.д.

Как использовать эти функции в блоках? Для вычисления значения с помощью функции необходимо записать:

Math.Название_функции(Выражение)

Пример. Необходимо вычислить абсолютное значение для выражения (EMA-EMA1).

Math.Abs(EMA-EMA1)

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

Есть ли в TSLab функция округления в большую/меньшую сторону?

В блоках Формула в меню добавлен выбор Math метода

Наведите курсор на кнопку Math. Переход в список-подсказку осуществляется кликом левой кнопки мыши на наименовании Math.

Навигация по списку Math методов осуществляется либо клавишами Up и Down, либо мышью. Выбор интересующего метода из списка осуществляется либо клавишей Enter, либо кликом левой кнопки мыши.

Особенность блока формулы, при работе в режиме калькулятора

Например, если в формуле записать

13/3

ожидается, что при выводе формулы на график получим 4,33, но формула будет показывать число 4 Целое число поделить на целое число, получим целое число. Лайфхак: числителю или к знаменателю дописать .0 Т.е. записать 13/3.0 , а не 13/3 Значение первого бара загруженной истории

Close[-i]

Формула вернет значение Закрытия бара первой свечи загруженной истории.

Строковая формула

"Строковая формула" - любые условия в рамках синтаксиса языка C# для выбора выводимого сообщения. Выход формулы на контрольную панель.

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

Close>Open ? "Растет" : "Падает"

Вывести формулу в контрольную панель. Таким образом, когда бар растущий, в контрольной панели будет надпись Растет.

Проверка формулы на NaN В блоке формула можно написать

Формула != Формула

Например, в блоке Формула2 проверить предыдущую формулу и присвоить значение

Формула1 != Формула1 ? 0 : Формула1

В случае, если Формула1 имеет неизвестное значение NaN, то Формула2 вернет 0.

Random в блоке логическая формула

В блоке логическая формула можно написать:

new Random().Next(0, 100) > 50

Что будет давать 50% вероятности появления сигнала в истории, при обновлении графика(при компиляции скрипта, если не стоит флаг "Обновлять в режиме реалтайм").

Приложение

Sample_logical_formula.xml Sample_formula.xml Sample_logical_formula_&_formula_basic.xml

Last updated