Функция CompoundValue в ThinkScript

Синтаксис функции CompoundValue

CompoundValue (int length, IDataHolder visible data, IDataHolder historical data);

length — длина, с которой будем сравнивать номер строки. По умолчанию равен 1.

visible data — это значение будет возвращаться из функций в том случае, если номер строки больше чем значение length.

historical data — это значение будет возвращаться из функции в том случае, если номер строки меньше либо равен значению length.

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

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

Представьте что на прошлой свече у нас переменная data имела значение 5, значит на текущей свечи мы берем значение 5 и прибавляем к нему 1, то есть на текущий свече значение data становится 6. Далее, на следующей свече мы берём предыдущее значение переменной data, оно равняется 6 и прибавляем к нему снова 1, значит на следующей свече переменная data будет иметь значение 7 и так далее. Но тут возникает вопрос. Когда предыдущей свечи просто не существует, какое предыдущее значение можно взять если его нет. Для этого нам может пригодиться функция CompoundValue.

Ну а теперь собственно будем разбираться с самой функцией. Ничего сложного в ней нет. Если length имеет значение 1, тогда происходит следующее. На первой свече функция CompoundValue вернет значение historical data, так как номер свечей равен 1, а 1 не превышает указанное нами значение length, так как они равны. А вот на 2 свече, функция CompoundValue вернет значение visible data, так как номер свечей 2, а length у нас указан 1, то есть 2 больше 1. И дальше по всему графику у нас будет возвращаться значение visible data. Соответственно если мы укажем значение length 5, то на первых 5 свечках функция будет возвращать значение historical data, а с 6 и дальше будет возвращать значение visible data. А теперь разберем пример с использованием функции CompoundValue.

Для того чтобы разобраться с работой данной функции необходимо двигаться последовательно. Итак, определимся с тем что в данный момент расчёт у нас выполняется на 1 свечи на графике. Мы объявляем переменную X и запишем в неё значение которое вернет нам функция CompoundValue, а значит нам необходимо определить какое именно значение вернет функция CompoundValue. Так как в первом параметре функции указано число 2, а расчёт выполняется на первой свече, то есть один не больше чем два, то из функции возвращается значение historical data, это третий параметр в функции то есть 1. Значит на первой свече переменная X равно 1.

Теперь расчёт выполняем на 2 свече. Опять необходимо определить какое именно значение вернет нам функция CompoundValue. Так как указано 2 и свеча на которой выполняется расчёт тоже 2, то есть равны, то функция нам возвращает снова historical data, так как в описании указано «меньше либо равен». Следовательно на 2 свечи X тоже равен 1.

Теперь выполняем расчёт на 3 свече. Номер свечи на который идёт расчёт 3, а в функции указано значение 2, значит уже превышает, следовательно из функции вернётся значение visible data, это второй параметр в функции. А там у нас написано: предыдущее значение переменной X прибавить пред предыдущее значение переменной X. Мы посчитали что на первой и на второй свече переменная X равна единице, Значит на 3 свече X будет равен как 1 + 1, то есть 2.

Ну и произведем расчет на 4 свече. Понимаем что дальше по графику функции будет возвращать значение visible data. А там у нас написано предыдущее значение переменной X прибавить пред предыдущее значение переменной X. Так как значение на 3 свече равно 2, а на второй свече 1, то 2 + 1 = 3. То есть переменная X на четвёртой свече равняется 3.

И так далее выполняется расчёт на всех остальных свечках. Таким образом мы получили набор следующих значений 1, 1, 2, 3, 5, 8 … То есть это последовательность Фибоначчи.

Постоянная ссылка на это сообщение: https://k-pavel.ru/funkcija-compoundvalue-v-thinkscript/

avatar

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Subscribe  
Подписаться на