Пример: Использование блоков «Логическая формула» и «Формула». Синтаксис


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

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

Code:
Наименование	  Обозначение	  Пример
Больше	          >	          Close>Open
Меньше	          <	          Open[i]<Open[i-1]
Больше или равно  >=	          Close>=Open
Меньше или равно  <=	          Close<=EMA
Равно	          ==	          Close==High
Равно истина	  ==true	  Логическая формула==true
Равно ложь	  ==false	  Логическая формула1==false
Не равно	  !=	          Close!=High
Не равно истина	  !=true	  Логическая формула!=true
Не равно ложь	  !=false	  Логическая формула1!=false

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

Code:
Наименование	  Обозн.     Пример
Логическое «И»	  &&	     Close>Open && Open[i]<Open[i-1]
Логическое «ИЛИ»  ||	     EMA==EMA1 || Close<=EMA

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

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


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

Code:
Наименование	Обозначение	Пример
Сложение	+	        Open+Close
Вычитание	-	        EMA-EMA1
Умножение	*	        Close*Константа
Деление	        /	        Close/Close[i-1]

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

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

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

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



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

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

Code:
Close[i-k]

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

Пример. В логической формуле записано выражение:

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

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

Почему при обращении к предыдущим элементам надо менять значение в поле «Начинать с»? Все просто. Последовательность значений имеет начало или границу. За пределами начала ничего нет, там пусто. Все расчеты строятся относительно текущего значения i, поэтому, когда начинаем считать значение для i=0, т.е. для первого значения последовательности, и пытаемся сослаться, допустим, на предыдущее значение, программа скажет, что там пусто и вычислить она не сможет.

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


2. Возможность использования функций библиотеки Math. В выражениях, записываемых в блоках «Формула» и «Логическая формула» возможно использование функций из библиотеки Math. Список функций и описание приведено на сайте MSDN: http://msdn.microsoft.com/ru-ru/library/xaz41263.aspx

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

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

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

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

Code:
Math.Abs(EMA-EMA1)

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

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

Текущий бар в блоке формула или в логической формуле:
Если в блоке формула написать букву i и на эту формулу подать поток, например Закрытие бара от источника. Формула отдаст текущее количество баров.
Тоже касается логической формулы, например i>5
Если подать не закрытие от источника, а закрытие от сжатия, то формула отдаст текущий бар Сжатия.

Картинок не будет, но будут .xml файлы со всеми примерами из этого текста.


Attachments
Sample_logical_formula.xml (1905 downloads)
Sample_formula.xml (1153 downloads)
Sample_logical_formula_&_formula_basic.xml (1283 downloads)



Отредактировано ViL (Thu Feb 07 2019 08:29 PM)