Как добавить код функции параметров для скрипта pine?

Как добавить выбор опций для этого кода для скрипта pine?

вместо этого кода:

distance = input.int(250, 'Time range', minval=5, step=10)

к :

distance = input.string(defval = '100', title = 'distance', options = ['100', '200', '300' , '500'], group = 'Settings')

Чтобы сделать поддержки и сопротивления, выбрав «Временной диапазон» «Чувствительность»

как вы видите это на картинке:

Я думаю, что индикатор уже есть на Tradingview, но я его не нахожу.

//@version=5
indicator('Classic_Levels', overlay=true)
// number of candles used
distance = input.int(250, 'Time range', minval=5, step=10)
// sensitivity when searching levels
sensitivity = input.float(1, 'Sensitivity', minval=0.1, step=0.1)
// weight coefficients
float wOpenClose = 1
float wHighLow = 0.5
float wCross = 0.5
// number of intervals
int n_intervals = 300
// block size (in intervals)
int block_size = 11


// minimum and maximum values
float min_value = barstate.islast ? low[-ta.lowestbars(distance)] : 0
float max_value = barstate.islast ? high[-ta.highestbars(distance)] : 0

// recalculate sensitivity according to the weights
float sens = barstate.islast ? 2 / (sensitivity * (wOpenClose + wHighLow + wCross)) : 0

// calculate everything on the last bar
if barstate.islast
    // number of "key points" falling into each interval
    // last element is stored but not used
    m = array.new_int(n_intervals + 1, 0)
    // sum of the "scores" of the points falling into each interval
    // last element is stored but not used
    r = array.new_float(n_intervals + 1, 0)
    // sums of the interval forming the block
    a = array.new_float(block_size, 0)

    // declaring variables
    int i_close = na
    int i_open = na
    int i_high = na
    int i_low = na
    int mn = na
    int mx = na
    float interval_size = (max_value - min_value) / float(n_intervals)

    // populate arrays r, m 
    for k = 1 to distance - 1 by 1
        i_close := math.floor((close[k] - min_value) / interval_size)
        i_open := math.floor((open[k] - min_value) / interval_size)
        i_high := math.floor((high[k] - min_value) / interval_size)
        i_low := math.floor((low[k] - min_value) / interval_size)
        array.set(r, i_close, array.get(r, i_close) + wOpenClose)
        array.set(r, i_open, array.get(r, i_open) + wOpenClose)
        array.set(r, i_high, array.get(r, i_high) + wHighLow)
        array.set(r, i_low, array.get(r, i_low) + wHighLow)
        array.set(m, i_close, array.get(m, i_close) + 1)
        array.set(m, i_open, array.get(m, i_open) + 1)
        array.set(m, i_high, array.get(m, i_high) + 1)
        array.set(m, i_low, array.get(m, i_low) + 1)
        // if current candle crosses the interval
        if math.abs(i_open - i_close) >= 2
            mn := math.min(i_open, i_close)
            mx := math.max(i_open, i_close)
            for i = mn + 1 to mx - 1 by 1
                array.set(r, i, array.get(r, i) - wCross)
                array.set(m, i, array.get(m, i) + 1)

    // current block sum
    float cur_block = 0
    // last extremum
    float extr_block = 0
    // number of the first interval of extremum block
    int extr_val = 0
    // level value
    float level_val = 0
    // initial state: level search
    bool state = false
    // current interval sum
    float cur_sum = 0
    // iterate intervals
    for i = 0 to n_intervals + block_size - 2 by 1
        // shift all the interval sums
        array.shift(a)
        if i < n_intervals
            array.push(a, array.get(r, i) / array.get(m, i))
        else
            array.push(a, 0)
        // current block sum
        cur_block := array.sum(a)
        // check state
        if not state
            // searching level: <extr_block> keeps the last maximum
            if i == 0 or cur_block > extr_block
                extr_block := cur_block
                extr_val := i - block_size + 1
                extr_val
            else
                // if we've gone far enough from the maximum downwards
                if extr_block - cur_block >= sens or i == n_intervals - 1
                    // draw level
                    level_val := min_value + interval_size * (extr_val + float(block_size) / 2)
                    line.new(bar_index - 1, level_val, bar_index, level_val, style=line.style_solid, extend=extend.both, color=color.blue, width=1)
                    extr_block := cur_block
                    extr_val := i - block_size + 1
                    state := true
                    state
        else
            // level is found: <extr_block> keeps the last minimum
            if cur_block < extr_block
                extr_block := cur_block
                extr_val := i - block_size + 1
                extr_val
            else
                // if we've gone far enough from the minimum upwards
                if cur_block - extr_block >= sens
                    extr_block := cur_block
                    extr_val := i - block_size + 1
                    state := false
                    state
plotshape(barstate.islast, style=shape.circle, color=color.new(color.navy, 0), size=size.tiny, offset=-distance)

Я не уверен, что вы спрашиваете. Похоже, вы уже знаете, как использовать input.string с аргументом options. Где именно вам нужна помощь?

vitruvius 01.11.2022 14:52

если вы попытаетесь запустить этот скрипт, придет неправильный месседж 16:59:11 — Ошибка компиляции. Строка 5: невозможно вызвать input.float с аргументом defval = 100. Был использован аргумент типа «литеральная строка», но ожидается «const float» в строке 5: невозможно вызвать «input.float» с аргументом «options» = «100,150,200,250,450,750,1000». Был использован аргумент типа «[строка-литерал, строка-литерал, строка-литерал, строка-литерал, строка-литерал, строка-литерал, строка-литерал]», но ожидается «[const float...]», строка 55: конечное значение цикл for должен быть числом.

salem A 01.11.2022 14:56
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

input.string вернет string, даже если вы используете только числа.

Итак, вам нужно преобразовать строку в числовой тип. Вы можете использовать str.tonumber() для этого. Он вернет float. Если вам нужен int, вам нужно преобразовать возвращаемое значение str.tonumber() в int.

in_distance = input.string(defval = '100', title = 'distance', options = ['100', '200', '300' , '500'], group = 'Settings')
distance_float = str.tonumber(in_distance)  // This will return a float
distance_int = int(distance_float)  // This will return an int

Просто удалите минвал и шаг.

Например

distance = input.int(250, 'Time range',  options=[250,500,1000])

Объяснение: Не нужно паас minval, maxval и step, если вы используете опции

Вы можете сделать то же самое с input.float()

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

salem A 01.11.2022 18:07

Другие вопросы по теме