Я пытался создать аналогичный индикатор этому
У меня есть код для RSI, Stochastic RSI, MACD и 50/100/200 MA (с крестами), но я не мог найти информацию о том, как создать визуализацию, как в справочнике, хотя я довольно долго изучал
Вот код этих индикаторов:
50/100/200 МА с крестами (кодировал сам)
indicator(title = "3 EMA with Cross", shorttitle = "3EMA Cross", overlay=true)
fast = 50
mid = 100
slow = 200
fastEMA = ta.ema(close, fast)
midEMA = ta.ema(close, mid)
slowEMA = ta.ema(close, slow)
bullishCross = ta.crossover(fastEMA, slowEMA)
bearishCross = ta.crossunder(fastEMA, slowEMA)
if (bullishCross)
lbl = label.new(bar_index, low, "Golden Cross")
label.set_color(lbl, color.green)
label.set_yloc(lbl, yloc.belowbar)
label.set_style(lbl, label.style_label_up)
if (bearishCross)
lbl = label.new(bar_index, low, "Death Cross")
label.set_color(lbl, color.red)
label.set_yloc(lbl, yloc.abovebar)
label.set_style(lbl, label.style_label_down)
plot(fastEMA, color=color.green, linewidth=2)
plot(midEMA, color=color.yellow, linewidth=2)
plot(slowEMA, color=color.red, linewidth=2)
Индекс относительной силы
indicator(title = "Relative Strength Index", shorttitle = "RSI", format=format.price, precision=2,
timeframe = "", timeframe_gaps=true)
ma(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"Bollinger Bands" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
rsiLengthInput = input.int(14, minval=1, title = "RSI Length", group = "RSI Settings")
rsiSourceInput = input.source(close, "Source", group = "RSI Settings")
maTypeInput = input.string("SMA", title = "MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group = "MA Settings")
maLengthInput = input.int(14, title = "MA Length", group = "MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title = "BB StdDev", group = "MA Settings")
up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"
plot(rsi, "RSI", color=#7E57C2)
plot(rsiMA, "RSI-based MA", color=color.yellow)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title = "RSI Background Fill")
bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Upper Bollinger Band", color=color.green)
bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Lower Bollinger Band", color=color.green)
fill(bbUpperBand, bbLowerBand, color= isBB ? color.new(color.green, 90) : na, title = "Bollinger Bands Background Fill")
MACD
indicator(title = "Moving Average Convergence Divergence", shorttitle = "MACD", timeframe = "",
timeframe_gaps=true)
// Getting inputs
fast_length = input(title = "Fast Length", defval=12)
slow_length = input(title = "Slow Length", defval=26)
src = input(title = "Source", defval=close)
signal_length = input.int(title = "Signal Smoothing", minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title = "Oscillator MA Type", defval = "EMA", options=["SMA", "EMA"])
sma_signal = input.string(title = "Signal Line MA Type", defval = "EMA", options=["SMA", "EMA"])
// Plot colors
col_macd = input(#2962FF, "MACD Line ", group = "Color Settings", inline = "MACD")
col_signal = input(#FF6D00, "Signal Line ", group = "Color Settings", inline = "Signal")
col_grow_above = input(#26A69A, "Above Grow", group = "Histogram", inline = "Above")
col_fall_above = input(#B2DFDB, "Fall", group = "Histogram", inline = "Above")
col_grow_below = input(#FFCDD2, "Below Grow", group = "Histogram", inline = "Below")
col_fall_below = input(#FF5252, "Fall", group = "Histogram", inline = "Below")
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
plot(hist, title = "Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ?
col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
plot(macd, title = "MACD", color=col_macd)
plot(signal, title = "Signal", color=col_signal)
Стохастический 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)
h1 = hline(20, "Lower Band", color=#787B86)
fill(h0, h1, color=color.rgb(33, 150, 243, 90), title = "Background")```
//MACD
indicator(title = "Moving Average Convergence Divergence", shorttitle = "MACD", timeframe = "", timeframe_gaps=true)
// Getting inputs
fast_length = input(title = "Fast Length", defval=12)
slow_length = input(title = "Slow Length", defval=26)
src = input(title = "Source", defval=close)
signal_length = input.int(title = "Signal Smoothing", minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title = "Oscillator MA Type", defval = "EMA", options=["SMA", "EMA"])
sma_signal = input.string(title = "Signal Line MA Type", defval = "EMA", options=["SMA", "EMA"])
// Plot colors
col_macd = input(#2962FF, "MACD Line ", group = "Color Settings", inline = "MACD")
col_signal = input(#FF6D00, "Signal Line ", group = "Color Settings", inline = "Signal")
col_grow_above = input(#26A69A, "Above Grow", group = "Histogram", inline = "Above")
col_fall_above = input(#B2DFDB, "Fall", group = "Histogram", inline = "Above")
col_grow_below = input(#FFCDD2, "Below Grow", group = "Histogram", inline = "Below")
col_fall_below = input(#FF5252, "Fall", group = "Histogram", inline = "Below")
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
plot(hist, title = "Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
plot(macd, title = "MACD", color=col_macd)
plot(signal, title = "Signal", color=col_signal)
Для этого вы можете использовать label
s со смещением. Offset поможет вам с размещением.
Обновите метки для каждого бара и удалите старые бары.
Простой пример:
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © vitruvius
//@version=5
indicator("My script")
rsi = ta.rsi(close, 14)
ema50 = ta.ema(close, 50)
rsi_off = 50
ema50_off = 25
rsi_up_trend = rsi < 30
ema_up_trend = close > ema50
var label l_rsi = na
var label l_ema50 = na
if barstate.islast
l_rsi := label.new(bar_index - rsi_off, 1, "RSI", color=rsi_up_trend ? color.green : color.red, style=label.style_triangleup, textcolor=color.white)
l_ema50 := label.new(bar_index - ema50_off, 1, "EMA50", color=ema_up_trend ? color.green : color.red, style=label.style_triangleup, textcolor=color.white)
label.delete(l_rsi[1])
label.delete(l_ema50[1])
Большое спасибо! Я действительно помог мне, я не мог найти ничего, связанного с этим