#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")