#pine-script
Вопрос:
Я пытаюсь добавить DMI, RSI и RVI в один скрипт. Но столкнулся со следующим сообщением — Операция добавления в диаграмму не удалась, причина: строка 16: «len» уже определена. Добавить в диаграмму не удалось, причина: строка 22: «len» уже определена.
Мой код выглядит следующим образом —
//@version=5 indicator(title="Relative Strength Index", shorttitle="RSI", format=format.price, precision=2, timeframe="", timeframe_gaps=true) len = input.int(14, minval=1, title="Length") src = input(close, "Source") up = ta.rma(math.max(ta.change(src), 0), len) down = ta.rma(-math.min(ta.change(src), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 up / down)) plot(rsi, "RSI", color=#7E57C2) band1 = hline(70, "Upper Band", color=#787B86) bandm = hline(50, "Middle Band", color=color.new(#787B86, 50)) band0 = hline(30, "Lower Band", color=#787B86) fill(band1, band0, color=color.rgb(126, 87, 194, 90), title="Background") //@version=5 indicator(title="Directional Movement Index", shorttitle="DMI", format=format.price, precision=4, timeframe="", timeframe_gaps=true) lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50) len = input.int(14, minval=1, title="DI Length") up = ta.change(high) down = -ta.change(low) plusDM = na(up) ? na : (up gt; down and up gt; 0 ? up : 0) minusDM = na(down) ? na : (down gt; up and down gt; 0 ? down : 0) trur = ta.rma(ta.tr, len) plus = fixnan(100 * ta.rma(plusDM, len) / trur) minus = fixnan(100 * ta.rma(minusDM, len) / trur) sum = plus minus adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), lensig) plot(adx, color=#F50057, title="ADX") plot(plus, color=#2962FF, title=" DI") plot(minus, color=#FF6D00, title="-DI") //@version=5 indicator(title="Relative Volatility Index", shorttitle="RVI", format=format.price, precision=2, timeframe="", timeframe_gaps=true) length = input.int(10, minval=1), src = close len = 14 stddev = ta.stdev(src, length) upper = ta.ema(ta.change(src) lt;= 0 ? 0 : stddev, len) lower = ta.ema(ta.change(src) gt; 0 ? 0 : stddev, len) rvi = upper / (upper lower) * 100 h0 = hline(80, "Upper Band", color=#787B86) h1 = hline(20, "Lower Band", color=#787B86) fill(h0, h1, color=color.rgb(126, 87, 194, 90), title="Background") offset = input.int(0, "Offset", minval = -500, maxval = 500) plot(rvi, title="RVI", color=#7E57C2, offset = offset)
Пожалуйста, помогите мне решить эту проблему.
Спасибо и с уважением.
Ответ №1:
всякий раз, когда вы пытаетесь объединить два индикатора, вы должны иметь в виду, что имена переменных должны быть уникальными. Здесь, в вашем случае, источник и длина были определены несколько раз, поэтому я переименовал его соответствующим образом (убедитесь, что в коде нет двух переменных с одинаковым именем.
Я предоставил код без каких-либо ошибок ниже
//@version=5 indicator(title="Relative Strength Index", shorttitle="RSI", format=format.price, precision=2, timeframe="", timeframe_gaps=true) len = input.int(14, minval=1, title="Length",group="RSI setting") src = input(close, "Source",group="RSI setting") up = ta.rma(math.max(ta.change(src), 0), len) down = ta.rma(-math.min(ta.change(src), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 up / down)) plot(rsi, "RSI", color=#7E57C2) band1 = hline(70, "Upper Band", color=#787B86) bandm = hline(50, "Middle Band", color=color.new(#787B86, 50)) band0 = hline(30, "Lower Band", color=#787B86) fill(band1, band0, color=color.rgb(126, 87, 194, 90), title="Background") lensig_adx = input.int(14, title="ADX Smoothing", minval=1, maxval=50,group="ADX setting") len_adx = input.int(14, minval=1, title="DI Length",group="ADX setting") up_adx = ta.change(high) down_adx = -ta.change(low) plusDM_adx = na(up_adx) ? na : (up_adx gt; down_adx and up_adx gt; 0 ? up_adx : 0) minusDM_adx = na(down_adx) ? na : (down_adx gt; up_adx and down_adx gt; 0 ? down_adx : 0) trur_adx = ta.rma(ta.tr, len_adx) plus_adx = fixnan(100 * ta.rma(plusDM_adx, len_adx) / trur_adx) minus_adx = fixnan(100 * ta.rma(minusDM_adx, len_adx) / trur_adx) sum_adx = plus_adx minus_adx adx_adx = 100 * ta.rma(math.abs(plus_adx - minus_adx) / (sum_adx == 0 ? 1 : sum_adx), lensig_adx) plot(adx_adx, color=#F50057, title="ADX") plot(plus_adx, color=#2962FF, title=" DI") plot(minus_adx, color=#FF6D00, title="-DI") length_rvi = input.int(10, minval=1,group="RVI setting") src_rvi = close len_rvi = 14 stddev_rvi = ta.stdev(src_rvi, length_rvi) upper_rvi = ta.ema(ta.change(src_rvi) lt;= 0 ? 0 : stddev_rvi, len_rvi) lower_rvi = ta.ema(ta.change(src_rvi) gt; 0 ? 0 : stddev_rvi, len_rvi) rvi_rvi = upper_rvi / (upper_rvi lower_rvi) * 100 h0_rvi = hline(80, "Upper Band", color=#787B86) h1_rvi = hline(20, "Lower Band", color=#787B86) fill(h0_rvi, h1_rvi, color=color.rgb(126, 87, 194, 90), title="Background") offset = input.int(0, "Offset", minval = -500, maxval = 500) plot(rvi_rvi, title="RVI", color=#7E57C2, offset = offset)
Комментарии:
1. Ты мой спаситель. Возможно ли разместить эти индикаторы в разных панелях? Еще раз спасибо, вместе с моей скромной благодарностью. С уважением.
2. один индикатор означает одну панель, если вы хотите, чтобы он был в другой панели, вам нужно добавить все три индикатора отдельно
3. Спасибо за ваш ответ. Я понимаю. С уважением.
Ответ №2:
В этом скрипте, если вы собираетесь изменить значение существующей переменной, вам необходимо ввести
:=
Поэтому при первом создании переменной вы вводите»=», а при втором вводе»:=», когда присваиваете ей новое значение
пример:
len = 10 len := 30
Комментарии:
1. Большое спасибо за ваш ответ. Я внес изменения, но теперь он выдает мне следующую ошибку — «Не удалось добавить в диаграмму, причина: строка 7: Синтаксическая ошибка при вводе» («.» Строка 7 выглядит следующим образом — «(заголовок=»Индекс относительной силы», короткий заголовок=»RSI», формат=format.price, точность=2, таймфрейм=»», timeframe_gaps=true)». Помогите мне решить эту проблему. Спасибо и с уважением.
2. Я думаю, что вам нужно создать новый вопрос Stackoverflow для этой новой ошибки.