Если вы пишете индикаторы и стратегии на Pine, то у нас хорошая новость — теперь в перечисленные ниже функции в качестве аргумента length теперь можно передавать переменные типа series integer:
alma() change() highest() highestbars() linreg() lowest() lowestbars() mom() sma() sum() vwma() wma()
Это упрощает создание адаптивных индикаторов, самостоятельно меняющих свои параметры в зависимости от результатов вычисления. В данном примере период Скользящей средней Арно Легу (ALMA), которая показана толстой линией, увеличивается или уменьшается в зависимости от волатильности в процессе расчета индикатора. Для сравнения тонкой линией показана ALMA, период которой остается постоянным:
//@version=4 study("Adaptive ALMA", "AALMA", true) i_minLen = input(10, minval = 1) i_maxLen = input(60, minval = 1) i_adaptPct = input(3., minval = 0, maxval = 100) / 100.0 startingLen = avg(i_minLen, i_maxLen) var float dynamicLen = startingLen highVolatility = atr(10) > atr(40) if highVolatility dynamicLen := max(i_minLen, dynamicLen * (1 - i_adaptPct)) else dynamicLen := min(i_maxLen, dynamicLen * (1 + i_adaptPct)) dynamicAlma = alma(close, int(dynamicLen), 0.85, 6) staticAlma = alma(close, int(startingLen), 0.85, 6) maColor(_ma) => close > _ma ? highVolatility ? #40FF00ff : #40FF0060 : highVolatility ? #FF0080ff : #FF008060 plot(dynamicAlma, "Dynamic Alma", maColor(dynamicAlma), 3) plot(staticAlma, "Static Alma", maColor(staticAlma), 1) // Follow the calculated Length in the Data Window. plotchar(dynamicLen, "dynamicLength", "")
Хотя для расчета динамической длины использование плавающих значений может быть весьма удобно, не забывайте преобразовать в int перед использованием в вызове функции (как это показано в нашем примере). Помните, что эти функции должны вызываться на каждом баре, и поэтому их следует использовать вне циклов for и блоков if, исполняющихся не на каждом баре.
Надеемся вам понравится новая функция. Продолжайте присылать нам свои пожелания. Мы создаем платформу для вас. Спасибо, что остаетесь с TradingView.