DMI, стохастический RSI и RSI складываются вместе

#pine-script

#сосна-сценарий

Вопрос:

У меня уже есть сценарий pine, в котором успешно работают DMI, стохастический RSI и RSI вместе. Но я нашел скрипт сообщества DMI, который дает лучший и сглаженный сигнал. Но пока я пытаюсь добавить новый DMI, он выдает следующую ошибку —

Операция добавления в диаграмму не удалась, причина: Переменная SmoothedTrueRange уже объявлена.

Мой код выглядит следующим образом —

 study("ADX and DI for v4") len = input(14) th = input(20)  TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1]))) DirectionalMovementPlus = high-nz(high[1]) gt; nz(low[1])-low ? max(high-nz(high[1]), 0): 0 DirectionalMovementMinus = nz(low[1])-low gt; high-nz(high[1]) ? max(nz(low[1])-low, 0): 0  SmoothedTrueRange = 0.0 SmoothedTrueRange = nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len)   TrueRange  SmoothedDirectionalMovementPlus = 0.0 SmoothedDirectionalMovementPlus = nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len)   DirectionalMovementPlus  SmoothedDirectionalMovementMinus = 0.0 SmoothedDirectionalMovementMinus = nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len)   DirectionalMovementMinus  DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 DX = abs(DIPlus-DIMinus) / (DIPlus DIMinus)*100 ADX = sma(DX, len)  plot(DIPlus, color=color.green, title="DI ") plot(DIMinus, color=color.red, title="DI-") plot(ADX, color=color.navy, title="ADX") hline(th, color=color.black)  //Stochastic RSI smoothK = input.int(3, "K", minval=1) smoothD = input.int(3, "D", minval=1) lengthRSI = input.int(14, "RSI Length", minval=1) lengthStoch = input.int(14, "Stochastic Length", minval=1) src = input(close, title="RSI Source") rsi1 = ta.rsi(src, lengthRSI) k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = ta.sma(k, smoothD) plot(k, "K", color=#2962FF) plot(d, "D", color=#FF6D00) h0 = hline(80, "Upper Band", color=#787B86) h2 = hline(70, "Upper Band", color=#787B86) h3 = hline(60, "Upper Band", color=#787B86) h4 = hline(50, "Upper Band", color=#787B86) h5 = hline(40, "Upper Band", color=#787B86) h6 = hline(30, "Upper Band", color=#787B86) h1 = hline(20, "Lower Band", color=#787B86) fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background")  //RSI len = input.int(14, minval=1, title="Length",group="RSI setting") src_rsi = 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")  

Пожалуйста, помогите мне решить эту проблему.

Спасибо и с уважением.

Ответ №1:

Вы должны использовать := оператор для присвоения значений переменным после инициализации.

Кроме того, это смесь v4 и v5. Лучше обновите его до v5.

Вот он:

 //@version=5 indicator("ADX and DI for v4") len = input(14) th = input(20)  TrueRange = math.max(math.max(high-low, math.abs(high-nz(close[1]))), math.abs(low-nz(close[1]))) DirectionalMovementPlus = high-nz(high[1]) gt; nz(low[1])-low ? math.max(high-nz(high[1]), 0): 0 DirectionalMovementMinus = nz(low[1])-low gt; high-nz(high[1]) ? math.max(nz(low[1])-low, 0): 0  SmoothedTrueRange = 0.0 SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len)   TrueRange  SmoothedDirectionalMovementPlus = 0.0 SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len)   DirectionalMovementPlus  SmoothedDirectionalMovementMinus = 0.0 SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len)   DirectionalMovementMinus  DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 DX = math.abs(DIPlus-DIMinus) / (DIPlus DIMinus)*100 ADX = ta.sma(DX, len)  plot(DIPlus, color=color.green, title="DI ") plot(DIMinus, color=color.red, title="DI-") plot(ADX, color=color.navy, title="ADX") hline(th, color=color.black)  //Stochastic RSI smoothK = input.int(3, "K", minval=1) smoothD = input.int(3, "D", minval=1) lengthRSI = input.int(14, "RSI Length", minval=1) lengthStoch = input.int(14, "Stochastic Length", minval=1) src = input(close, title="RSI Source") rsi1 = ta.rsi(src, lengthRSI) k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = ta.sma(k, smoothD) plot(k, "K", color=#2962FF) plot(d, "D", color=#FF6D00) h0 = hline(80, "Upper Band", color=#787B86) h2 = hline(70, "Upper Band", color=#787B86) h3 = hline(60, "Upper Band", color=#787B86) h4 = hline(50, "Upper Band", color=#787B86) h5 = hline(40, "Upper Band", color=#787B86) h6 = hline(30, "Upper Band", color=#787B86) h1 = hline(20, "Lower Band", color=#787B86) fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background")  //RSI rsi_len = input.int(14, minval=1, title="Length",group="RSI setting") src_rsi = input(close, "Source",group="RSI setting") up = ta.rma(math.max(ta.change(src), 0), rsi_len) down = ta.rma(-math.min(ta.change(src), 0), rsi_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")