Ajustes y renderizado
1Ajustes y renderizado
Ajustes input.* en la ventana del indicador, líneas plot y sus estilos, niveles hline, rellenos fill, fondo y color de velas, marcadores, etiquetas, segmentos, rectángulos, tablas, colores y transparencia. Límites: tres plot dibujables y 500 objetos de cada tipo.
Esta página trata sobre lo que el usuario ve y puede cambiar. Aquí se describen los ajustes que el script expone en la ventana del indicador, las líneas y sus estilos, los niveles y rellenos, el fondo y el color de las velas, los marcadores, las etiquetas, los segmentos, los rectángulos y las tablas, así como los colores y la transparencia. Al final hay una sección sobre los límites que conviene conocer de antemano.
Ajustes: input.*
Cada llamada a input.* se convierte en una fila de la pestaña Entradas en la ventana de ajustes del indicador. Las filas aparecen en el orden en que están escritas las llamadas en el script. El primer argumento establece el valor por defecto; el segundo, la etiqueta de la fila.
| Llamada | Qué aparece en la ventana de ajustes |
|---|---|
input.int |
Campo para un número entero |
input.float |
Campo para un número decimal |
input.bool |
Casilla de verificación |
input.color |
Selector de color |
input.string |
Lista desplegable si se define options; sin ella, campo de texto |
input.source |
Lista desplegable de series: open, high, low, close, hl2, hlc3, ohlc4, hlcc4, volume |
input.enum |
Lista desplegable con las etiquetas del enum |
input.timeframe |
Campo de texto; con options, lista desplegable |
input.symbol |
Campo de texto |
El ejemplo siguiente reúne cinco tipos de ajustes en un solo script:
indicator("Средняя на выбор", overlay = true)
enum Basis {
sma = "Простая"
ema = "Экспоненциальная"
wma = "Взвешенная"
}
basis = input.enum(Basis.ema, "Тип средней")
length = input.int(50, "Период", minval = 1, maxval = 500)
src = input.source(close, "Источник")
lineColor = input.color(color.orange, "Цвет линии")
showBg = input.bool(false, "Подсвечивать фон")
avg = switch basis {
Basis.sma => ta.sma(src, length)
Basis.ema => ta.ema(src, length)
=> ta.wma(src, length)
}
plot(avg, "Средняя", color = lineColor, linewidth = 2)
bgcolor(showBg and close > avg ? color.new(color.teal, 40) : na, title = "Фон")En la ventana de ajustes aparecerá la lista desplegable «Тип средней» con los elementos «Простая», «Экспоненциальная» y «Взвешенная». Debajo estarán el campo del período, la lista de fuentes, el selector de color y la casilla de verificación. Cómo declarar enums se explica en la sección Свои типы и перечисления.
Parámetros de números y cadenas
minvalymaxvalestablecen los límites: el campo no aceptará un período menor queminvalni mayor quemaxval.stepeninput.floatdefine cuántos decimales muestra el campo: constep = 0.1se ve un decimal. El campo no tiene flechas; el valor se escribe con el teclado.optionseninput.stringyinput.timeframeconvierte el campo en una lista desplegable. El valor por defecto debe ser uno de los elementos; de lo contrario, el compilador dará un error.tooltip,groupeinlineson aceptados por el compilador, pero por ahora no afectan el aspecto de la ventana de ajustes.
indicator("Цена для расчёта")
mode = input.string("Закрытие", "Считать по", options = ["Закрытие", "Середина свечи"])
price = mode == "Закрытие" ? close : hl2
plot(ta.rsi(price, 14), "RSI", color = color.purple)En input.source, el valor por defecto también puede ser una serie de datos de mercado, como delta.cum. Esa serie aparecerá como primer elemento de la lista, antes de las series de precios. Si el valor por defecto es una expresión como (high + low) / 2, no habrá fila en la ventana de ajustes: no hay nada que elegir.
Todavía no existen ajustes separados para la hora, la sesión de trading ni para el precio que se elige con un clic en el gráfico.
Dónde se guardan los valores elegidos
Los valores se recuerdan por separado para cada indicador en cada gráfico: dos copias del mismo script en paneles distintos pueden tener períodos diferentes. El botón Por defecto en la ventana de ajustes restaura los valores escritos en el código.
El valor está vinculado al nombre de la variable en la que se guarda la llamada a input.*. La etiqueta de la fila se puede cambiar libremente y el valor elegido se conserva. Las filas también se pueden reordenar. Pero si se renombra la variable (length por period), el ajuste volverá al valor del código.
La ventana de ajustes se abre con doble clic en la fila del indicador en la leyenda del gráfico o con el icono de ajustes de esa fila. Además de la pestaña Entradas, contiene Estilo y Visibilidad, de las que se habla más adelante.
Líneas: plot
plot dibuja una serie, un valor por cada vela. Solo el primer argumento (la propia serie) es obligatorio. Los demás parámetros se indican por nombre:
title: nombre de la línea en la leyenda y en la ventana de ajustes;color: color, constante o calculado en cada vela;linewidth: grosor;style: modo de renderizado, véase la tabla;offset: desplazamiento de un número determinado de velas: positivo a la derecha, negativo a la izquierda;show_last: dibujar solo las últimas N velas;join = true: unir con una línea los puntos de los estiloscirclesycross;editable = false: quitar la línea de la ventana de ajustes;display = display.none: ocultar la línea al añadirla; se puede activar en la pestaña Visibilidad.
| Estilo | Aspecto |
|---|---|
plot.style_line |
Línea quebrada, estilo por defecto |
plot.style_linebr |
Igual que line |
plot.style_stepline |
Escalones |
plot.style_stepline_diamond |
Escalones con rombos |
plot.style_histogram |
Columnas finas desde cero, con grosor de línea |
plot.style_columns |
Columnas desde cero, con ancho de vela |
plot.style_area |
Área rellena hasta cero |
plot.style_areabr |
Igual que area |
plot.style_circles |
Puntos |
plot.style_cross |
Cruces |
La línea siempre se interrumpe donde la serie no tiene valor (na) y no salta el hueco con un segmento recto. Por eso los pares line/linebr y area/areabr se dibujan igual.
indicator("Стили линий")
d = close - open
plot(d, "Тело свечи", style = plot.style_histogram, color = d >= 0 ? color.teal : color.red)
plot(ta.sma(d, 10), "Средняя 10", style = plot.style_stepline, color = color.orange, linewidth = 2)
plot(ta.sma(d, 30), "Средняя 30", style = plot.style_circles, color = color.gray)Color por velas
El color puede ser una expresión: en ese caso se calcula de nuevo en cada vela. El color na significa que en esa vela no hay línea:
indicator("Средняя только над ценой", overlay = true)
m = ta.sma(close, 50)
plot(m, "Средняя", color = close > m ? color.teal : na)Qué obtiene la línea en la ventana de ajustes
- En la pestaña Estilo se ajusta el grosor de cada línea. La fila de color aparece solo en las líneas con color constante: si el script elige el color en cada vela, no hay nada que cambiar en la ventana.
- En la pestaña Visibilidad, cada línea tiene una casilla para mostrarla u ocultarla. Aparece si hay más de una línea o si la línea está oculta mediante
display. - Una línea con
editable = falseno recibe filas en ninguna pestaña.
Niveles y rellenos
hline dibuja una línea horizontal a un precio constante, por ejemplo, los límites de las zonas del RSI. El precio debe ser un número o un ajuste input.*: una serie que cambia vela a vela no sirve aquí. Para una línea así se necesita plot. El estilo de la línea se define con hline.style_solid, hline.style_dashed y hline.style_dotted.
fill rellena el área entre dos fronteras. Para obtener una frontera, el resultado de hline o plot se guarda en una variable:
indicator("RSI с зонами")
length = input.int(14, "Период", minval = 1)
r = ta.rsi(close, length)
top = hline(70, "Перекупленность", color = color.gray, linestyle = hline.style_dashed)
bottom = hline(30, "Перепроданность", color = color.gray, linestyle = hline.style_dashed)
fill(top, bottom, color = color.new(color.purple, 30), title = "Зона")
plot(r, "RSI", color = r > 70 ? color.red : r < 30 ? color.teal : color.purple)Las dos fronteras deben ser del mismo tipo: dos niveles hline o dos líneas plot. El compilador no acepta un relleno entre una línea y un nivel.
El color de relleno entre dos líneas puede cambiar vela a vela. Así se obtiene una «nube» a partir de dos medias móviles:
indicator("Облако", overlay = true)
fast = ta.ema(close, 9)
slow = ta.ema(close, 21)
pf = plot(fast, "Быстрая", color = color.teal)
ps = plot(slow, "Медленная", color = color.orange)
fill(pf, ps, color = fast > slow ? color.new(color.teal, 50) : color.new(color.red, 50), title = "Облако")También hay relleno con degradado. Defina top_value y bottom_value para indicar las alturas donde el color es igual a top_color y bottom_color; entre ellas, el color transita suavemente. Esas alturas deben ser números constantes. Si se necesita un relleno hasta un nivel constante, conviértalo en una línea: plot(50). Pero recuerde que cuenta como una de las tres líneas dibujables.
indicator("RSI с градиентом")
r = ta.rsi(close, 14)
pr = plot(r, "RSI", color = color.purple)
pm = plot(50, "Середина", color = color.gray)
fill(pr, pm, top_value = 80, bottom_value = 50,
top_color = color.new(color.teal, 160), bottom_color = color.new(color.teal, 0))Fondo y color de velas
bgcolor pinta el fondo debajo de la vela; barcolor cambia el color de la propia vela. Ambos aceptan un color calculado en cada vela; en las velas con color na no cambia nada.
indicator("Подсветка объёма", overlay = true)
avgVol = ta.sma(volume, 20)
spike = volume > avgVol * 2
bgcolor(spike ? color.new(color.orange, 40) : na, title = "Всплеск объёма")
barcolor(close > open ? color.teal : color.red, title = "Цвет свечей")Marcadores: plotshape y plotchar
plotshape coloca un icono en las velas donde la condición es verdadera. plotchar hace lo mismo con cualquier símbolo.
indicator("Пересечения", overlay = true)
fast = ta.ema(close, 9)
slow = ta.ema(close, 21)
plotshape(ta.crossover(fast, slow), "Вверх", style = shape.triangleup,
location = location.belowbar, color = color.teal, size = size.small)
plotshape(ta.crossunder(fast, slow), "Вниз", style = shape.triangledown,
location = location.abovebar, color = color.red, size = size.small)
plotchar(volume > ta.sma(volume, 20) * 3, "Объём", char = "●", location = location.top, color = color.orange)- Forma,
shape.*:triangleup,triangledown,arrowup,arrowdown,circle,square,diamond,cross,xcross,flag,labelup,labeldown. - Ubicación,
location.*:abovebar— encima de la vela,belowbar— debajo de la vela,topybottom— en los bordes superior e inferior del panel. En un panel separado debajo del gráfico, «encima de la vela» y «debajo de la vela» también significan el borde superior y el inferior: ese panel tiene su propia escala y los precios de las velas no están marcados en ella. - Tamaño,
size.*:auto,tiny,small,normal,large,huge. textañade una etiqueta corta al icono. Cuando el gráfico está muy alejado y las velas son estrechas, las etiquetas se ocultan y los iconos permanecen.
Objetos gráficos
Además de las series, el script puede dibujar objetos individuales: etiquetas label.new, segmentos line.new, rectángulos box.new y tablas table.new. Cada llamada a *.new devuelve un objeto. Se puede mover con las funciones set_* (label.set_xy, line.set_x2, box.set_top, etc.), leer con get_*, copiar con copy o eliminar con delete.
En horizontal, el objeto está vinculado por defecto al número de vela, bar_index. Con el parámetro xloc = xloc.bar_time, la coordenada se define por el tiempo de la vela. El parámetro extend (extend.right, extend.left, extend.both) prolonga el borde de un segmento o rectángulo hasta el límite del gráfico.
El objeto permanece en el gráfico hasta que se elimina. El script se ejecuta en cada vela, por lo que label.new sin condición creará una etiqueta por cada vela. Para mantener un solo objeto y moverlo, guárdelo en una variable var y elimine el anterior:
indicator("Последний пивот", overlay = true, maxLabelsCount = 50)
ph = ta.pivothigh(high, 10, 10)
var line level = na
if not na(ph) {
label.new(bar_index - 10, ph, str.tostring(ph), style = label.style_label_down,
color = color.orange, textcolor = color.white, size = size.small)
line.delete(level)
level := line.new(bar_index - 10, ph, bar_index, ph, extend = extend.right,
color = color.orange, style = line.style_dashed)
}El script etiqueta cada máximo encontrado y traza una línea punteada desde el último hacia la derecha. Al mismo tiempo elimina la línea punteada anterior.
No puede haber más de 500 objetos vivos de cada tipo a la vez. Cuando aparece el número 501, el más antiguo desaparece. Los parámetros maxLinesCount, maxLabelsCount y maxBoxesCount en indicator() reducen este límite. Un valor mayor que 500 se recorta a 500.
Tablas
La tabla no está vinculada a las velas, sino a una esquina o borde del panel, y no se mueve al desplazar el gráfico. La posición se define con position.*: top_left, top_center, top_right, middle_left, middle_center, middle_right, bottom_left, bottom_center, bottom_right. Las celdas se rellenan con table.cell. Conviene hacerlo solo en la última vela, para no reescribir la tabla en todo el historial:
indicator("Сводка", overlay = true)
var t = table.new(position.top_right, 2, 2, bgcolor = color.new(color.black, 160))
if barstate.islast {
table.cell(t, 0, 0, "RSI", text_color = color.white)
table.cell(t, 1, 0, str.tostring(math.round(ta.rsi(close, 14), 1)), text_color = color.white)
table.cell(t, 0, 1, "ATR", text_color = color.white)
table.cell(t, 1, 1, str.tostring(math.round(ta.atr(14), 2)), text_color = color.white)
}Una tabla no puede tener más de 200 columnas ni 200 filas. No se crea una tabla con más de 2000 celdas.
Colores
Colores con nombre: color.red, color.green, color.blue, color.teal, color.orange, color.purple, color.yellow, color.white, color.black, color.gray, color.silver, color.maroon, color.navy, color.olive, color.lime, color.aqua, color.fuchsia.
El color también se puede escribir con código: #FF8800 es opaco, #FF880040 tiene transparencia. El último par de dígitos define la opacidad: 00 es completamente transparente, FF es sólido.
color.rgb(r, g, b)compone un color a partir de componentes de 0 a 255. El cuarto argumento es la opacidad; por defecto, 255.color.from_gradient(value, bottomValue, topValue, bottomColor, topColor)devuelve un color intermedio entre los dos extremos según la posición devalueen el rango. Es útil para colorear un oscilador de frío a caliente.naen lugar de un color significa «no dibujar».
indicator("RSI в цвете")
r = ta.rsi(close, 14)
heat = color.from_gradient(r, 30, 70, color.rgb(0, 150, 136), color.rgb(244, 67, 54))
plot(r, "RSI", color = heat, linewidth = 2)
bgcolor(r > 70 ? color.new(color.red, 30) : r < 30 ? color.new(color.teal, 30) : na, title = "Зоны")Siguiente
https://docs.lootx.trade/es/loot/inputs-drawing