Как получить stdev подмножества близких данных в скрипте pine

#pine-script

Вопрос:

Я новичок в скрипте Tradingview Pine и, похоже, не могу найти ответ, погуглив. Предположим, я хочу вычислить стандартное отклонение, скажем, последних 60 значений цены закрытия акции, но пропустить последние 20 цен закрытия. Другими словами, я хочу вычислить stdev (или какую-либо другую функцию) в общей сложности из 40 точек данных, начиная с 60 точек данных назад и не используя самые последние 20 точек. Я предполагаю, что есть какой-то способ «нарезать» близкие ряды, чтобы получить эти 40 точек данных, но я не смог этого найти. Как бы я это сделал?

Ответ №1:

 //@version=4
study("Subset StdDev", overlay=true)

src                         = input(close, type=input.source)
var int         total_bars  = input(60)                             // Starting point, number of bars back
var int         datapoints  = input(40)                             // Number of datapoints from starting point to perform stddev calculation on

var float[]     a_values    = array.new_float()
var float       stddev      = na

array.push(a_values, src)                                           // add value for current bar to the end of the array

if array.size(a_values) > total_bars                                // array size > 60 ?
    array.shift(a_values)                                           // remove first element to keep array size at 60
    stddev := array.stdev(array.slice(a_values, 0, datapoints))     // calculate stddev for first 40 datapoints in the array

// plot a stddev band on the current candle, using 40 datapoints (from 60 bars ago to 20 bars ago)
plot(src   stddev)
plot(src - stddev)