Documentación

Referencia de Deepwick Script

Deepwick Script es el lenguaje de los gráficos y backtests de Deepwick. Lee código de Pine Script v5, así que la mayoría de indicadores y estrategias escritos para TradingView funcionan sin cambios. Esta página recoge todo lo que el motor admite hoy y lo que no.

¿Primera vez en Deepwick? Empieza por la guía paso a paso: Cómo hacer backtesting de una estrategia de Pine Script gratis.

Actualizado:

Lenguaje

Deepwick Script lee la sintaxis de Pine Script v5. Un script se ejecuta una vez por vela, de la más antigua a la más reciente, y cada variable guarda su historial.

SintaxisQué hace
x = expr / x := exprDeclara una variable y reasígnala con :=. Puede llevar delante un tipo opcional (int, float, bool, string, color, series, simple, const, line, label).
var / varipInicializa una sola vez en la primera vela y conserva el valor entre velas. varip se comporta como var, porque los scripts se ejecutan sobre velas cerradas.
x[n]Operador de historial: el valor de x hace n velas (na antes de la primera vela).
if / elseBloques condicionales, con sangría de cuatro espacios. if también puede usarse como expresión.
cond ? a : bOperador ternario.
switchSelección múltiple, con o sin un valor que comparar.
for i = a to b [by step]Bucle con contador. Admite break y continue.
while condBucle mientras se cumpla una condición.
f(x, y) => exprFunción definida por el usuario, en una línea o como bloque con sangría cuya última expresión se devuelve. Cada llamada mantiene su propio estado de ta.*, como en Pine.
[a, b] = f()Tuplas: una función puede devolver varios valores, como hacen ta.macd() y ta.bb().
and / or / notOperadores lógicos. Aritméticos: + - * / %; comparación: == != < <= > >=.

Declaraciones

SintaxisQué hace
indicator(title, shorttitle, overlay, precision)Declara un indicador: dibuja en el gráfico y no tiene nada que testear. study() se acepta como alias.
strategy(title, overlay, initial_capital, default_qty_type, default_qty_value, commission_type, commission_value, slippage, pyramiding)Declara una estrategia. Valores por defecto: initial_capital 100000, 1 contrato por orden, comisión 0, slippage 0 ticks, pyramiding 1. Otros argumentos, como process_orders_on_close, se ignoran.

Inputs

Los inputs aparecen junto al editor y en los ajustes del indicador, para cambiarlos sin tocar el código.

SintaxisQué hace
input.int(defval, title, minval, maxval, step)Número entero.
input.float(defval, title, minval, maxval, step)Número decimal.
input.bool(defval, title)Casilla de verificación.
input.string(defval, title, options)Texto, o una lista de opciones.
input.source(defval, title)Una fuente de precio: open, high, low, close, hl2, hlc3, ohlc4 o hlcc4.
input.color(defval, title)Selector de color.
input(defval, title)Input genérico; el tipo sale del valor por defecto.

Datos de la vela y tiempo

Los tiempos van en milisegundos UTC. hour() y las demás funciones de tiempo aceptan un tiempo opcional; hour() acepta además una zona horaria de una lista de desfases fijos, sin horario de verano.

SintaxisQué hace
open, high, low, close, volumePrecios y volumen de la vela actual.
hl2, hlc3, ohlc4, hlcc4Promedios de precio habituales.
bar_index, last_bar_indexÍndice de la vela actual (0 es la más antigua) y de la última.
time, time_closeHora de apertura y de cierre de la vela.
year, month, weekofyear, dayofmonth, dayofweek, hour, minute, secondPartes de la fecha de la vela; también se pueden llamar con un tiempo, p. ej. hour(time, "America/New_York"). dayofweek: 1 = domingo … 7 = sábado.
barstate.isfirst, islast, isnew, isconfirmed, ishistory, isrealtimeEn qué punto del historial está el script.
timeframe.period, multiplier, isintraday, isdaily, isweekly, ismonthlyLa temporalidad del gráfico.
syminfo.ticker, tickerid, mintick, pointvalueEl símbolo del gráfico, su paso de precio y el valor del punto.

Análisis técnico (ta.*)

Cada llamada mantiene su propio estado, como en Pine: dos ta.ema() en líneas distintas son dos medias independientes. El resultado es na hasta que hay velas suficientes.

SintaxisQué hace
ta.sma(source, length)Media móvil simple.
ta.ema(source, length)Media móvil exponencial.
ta.rma(source, length)Media de Wilder, la que usan el RSI y el ATR.
ta.wma(source, length)Media móvil ponderada.
ta.vwma(source, length)Media móvil ponderada por volumen.
ta.hma(source, length)Media móvil de Hull.
ta.linreg(source, length, offset)Valor de la recta de regresión lineal.
ta.vwap(source)Precio medio ponderado por volumen, que se reinicia cada día a las 00:00 UTC.
ta.rsi(source, length)Índice de fuerza relativa, de 0 a 100.
ta.macd(source, fastlen, slowlen, siglen)Devuelve [macd, señal, histograma].
ta.stoch(source, high, low, length)Estocástico %K, de 0 a 100.
ta.cci(source, length)Commodity Channel Index.
ta.mfi(series, length)Money Flow Index.
ta.wpr(length)Williams %R, de -100 a 0.
ta.dmi(diLength, adxSmoothing)Devuelve [+DI, -DI, ADX].
ta.supertrend(factor, atrPeriod)Devuelve [supertrend, dirección]; la dirección es -1 en tendencia alcista y 1 en bajista.
ta.sar(start, inc, max)SAR parabólico.
ta.mom(source, length)Momento: source menos source de hace length velas.
ta.roc(source, length)Tasa de variación, en porcentaje.
ta.change(source, length)Diferencia con hace length velas (1 por defecto).
ta.tr / ta.tr(handle_na)Rango verdadero.
ta.atr(length)Rango verdadero medio (Wilder).
ta.bb(series, length, mult)Bandas de Bollinger: devuelve [media, superior, inferior].
ta.bbw(series, length, mult)Anchura de las Bandas de Bollinger: (superior - inferior) / media.
ta.kc(series, length, mult)Canales de Keltner: devuelve [media, superior, inferior], con una EMA del rango verdadero.
ta.stdev(source, length, biased)Desviación típica.
ta.variance(source, length, biased)Varianza.
ta.dev(source, length)Desviación media absoluta.
ta.median(source, length)Mediana.
ta.highest(source, length) / ta.highest(length)Valor más alto de las últimas length velas (el máximo por defecto).
ta.lowest(source, length) / ta.lowest(length)Valor más bajo de las últimas length velas (el mínimo por defecto).
ta.highestbars(source, length)Desplazamiento hasta el valor más alto: 0 o negativo.
ta.lowestbars(source, length)Desplazamiento hasta el valor más bajo: 0 o negativo.
ta.rising(source, length)Verdadero si source supera cada uno de sus length valores anteriores.
ta.falling(source, length)Verdadero si source está por debajo de cada uno de sus length valores anteriores.
ta.crossover(source1, source2)Verdadero en la vela en la que source1 cruza por encima de source2.
ta.crossunder(source1, source2)Verdadero en la vela en la que source1 cruza por debajo de source2.
ta.cross(source1, source2)Verdadero con un cruce en cualquier sentido.
ta.pivothigh(source, leftbars, rightbars)El precio del pivote alto, conocido rightbars velas después del pivote; na en otro caso. source es opcional (el máximo por defecto).
ta.pivotlow(source, leftbars, rightbars)El precio del pivote bajo, conocido rightbars velas después del pivote; na en otro caso. source es opcional (el mínimo por defecto).
ta.valuewhen(condition, source, occurrence)Valor de source en la ocurrencia número occurrence, contando hacia atrás, en que condition fue verdadera.
ta.barssince(condition)Velas desde la última vez que condition fue verdadera.
ta.cum(source)Suma acumulada desde la primera vela.

Estrategias (strategy.*)

Las órdenes a mercado se ejecutan en la apertura de la vela siguiente. Las stop y limit se ejecutan a lo largo de la vela: apertura, el extremo más cercano a la apertura, el otro extremo y el cierre. Si el precio salta por encima de una orden (gap), se ejecuta en la apertura. La comisión se cobra en cada ejecución; el slippage se aplica a las órdenes a mercado y stop.

SintaxisQué hace
strategy.entry(id, direction, qty, limit, stop, comment)Abre una posición o añade a ella; a mercado salvo que se indique limit o stop.
strategy.order(id, direction, qty, limit, stop, comment)Mismos argumentos que strategy.entry().
strategy.exit(id, from_entry, qty_percent, profit, limit, loss, stop, comment)Take profit y stop loss de una entrada: profit y loss en ticks, limit y stop como precios.
strategy.close(id, comment, qty_percent)Cierra una entrada a mercado en la vela siguiente.
strategy.close_all(comment)Cierra todas las posiciones abiertas.
strategy.cancel(id) / strategy.cancel_all()Cancela órdenes pendientes.
strategy.position_size, position_avg_pricePosición actual (positiva larga, negativa corta) y su precio medio.
strategy.equity, netprofit, openprofit, grossprofit, grossloss, initial_capitalCifras de la cuenta.
strategy.closedtrades, opentrades, wintrades, losstradesNúmero de operaciones.
strategy.long, strategy.shortDirecciones.
strategy.fixed, strategy.cash, strategy.percent_of_equityValores para default_qty_type.
strategy.commission.percent, cash_per_order, cash_per_contractValores para commission_type.

Gráficos y alertas

SintaxisQué hace
plot(series, title, color, linewidth, style)Dibuja una serie en el gráfico o en un panel.
plotshape(series, title, style, location, color, text)Dibuja una forma en las velas donde series es verdadero.
plotchar(series, title, char, location, color)Dibuja un carácter en las velas donde series es verdadero.
hline(price, title, color, linestyle)Línea horizontal en un nivel fijo.
fill(plot1, plot2, color)Rellena entre dos plots o dos hlines.
bgcolor(color)Colorea el fondo de la vela.
barcolor(color)Colorea la propia vela.
alertcondition(condition, title, message)Declara una condición que puedes convertir en una alerta por email, Telegram, Discord o webhook.
plot.style_*line, linebr, stepline, histogram, columns, circles, cross, area.
hline.style_*solid, dashed, dotted.
shape.*triangleup, triangledown, arrowup, arrowdown, circle, xcross, cross, diamond, square, flag, labelup, labeldown.
location.*abovebar, belowbar, top, bottom, absolute.
size.*auto, tiny, small, normal, large, huge. Se aceptan, pero las formas se dibujan a un solo tamaño.

Líneas y cajas

SintaxisQué hace
line.new(x1, y1, x2, y2, extend, color, style, width)Dibuja una línea entre dos índices de vela y dos precios; devuelve su id.
line.set_x1, set_y1, set_x2, set_y2, set_xy1, set_xy2, set_color, set_style, set_widthModifican una línea.
line.delete(id)Elimina una línea.
box.new(left, top, right, bottom, border_color, bgcolor, extend)Dibuja un rectángulo; devuelve su id.
box.set_left, set_top, set_right, set_bottom, set_bgcolor, set_border_color, set_extendModifican una caja.
box.delete(id)Elimina una caja.
line.style_*, box.style_*solid, dashed, dotted.
extend.*none, left, right, both.

Matemáticas, textos y colores

SintaxisQué hace
math.abs, ceil, floor, round(number, precision), sign, sqrt, exp, log, log10, pow(base, exponent)Aritmética.
math.max(...), math.min(...), math.avg(...)De cualquier número de valores.
math.sum(source, length)Suma de las últimas length velas.
math.pi, math.eConstantes.
na, na(x), nz(x, replacement), fixnan(x)El valor ausente, la prueba de si lo es, su sustituto y el último valor que no es na.
int(x), float(x), bool(x)Conversiones.
str.tostring(value, format), str.format(text, ...), str.length(s), str.contains(s, part)Textos. str.format sustituye {0}, {1}… por los argumentos.
color.new(color, transp), color.rgb(red, green, blue, transp)Construye un color; transparencia de 0 a 100.
color.*red, green, blue, orange, yellow, purple, aqua, lime, fuchsia, teal, maroon, navy, olive, gray, silver, white, black.

Arrays (array.*)

SintaxisQué hace
array.new_float, new_int, new_bool, new_string, new_color, new_line, new_box, new_label, new_table(size)Crea un array.
array.get, set, insert, push, pop, shift, unshiftLeen y modifican elementos.
array.size, first, last, sum, avg, min, max, stdevTamaño y estadísticas.

Todavía no disponible

Una función que el motor no conoce detiene el script con «Unknown function» y la línea y la columna.

SintaxisQué hace
request.security()Compila, pero devuelve na: los datos de otros símbolos o temporalidades todavía no están disponibles dentro de los scripts.
label.new(), table.new()Todavía no. Las líneas y las cajas sí.
type, method, import, map.*, matrix.*No hay tipos definidos por el usuario, métodos propios, librerías, maps ni matrices.
strategy.risk.*, trailing stopsNo hay reglas de riesgo ni stops dinámicos (trailing) en strategy.exit().

Preguntas

¿Deepwick Script es lo mismo que Pine Script?

No. Es el motor propio de Deepwick, que lee la sintaxis de Pine Script v5 e implementa las funciones de esta página. La mayoría de indicadores y estrategias de v5 funcionan sin cambios. Deepwick no tiene relación con TradingView; Pine Script es una marca de TradingView, Inc.

¿Puedo ejecutar código de Pine Script v6?

La línea //@version no se comprueba, así que un script de v6 funciona si solo usa lo que aparece en esta página. Lo que solo existe en v6 no está implementado.

¿Deepwick admite request.security()?

Todavía no. La llamada compila, pero devuelve na, así que todo lo que dependa de otro símbolo o temporalidad queda vacío.

¿Cómo se ejecutan las órdenes de una estrategia en el backtest?

Las órdenes a mercado se ejecutan en la apertura de la vela siguiente. Las stop y limit, a lo largo de la vela (apertura, extremo más cercano, extremo más lejano, cierre), y una orden que el precio salta con un gap se ejecuta en la apertura. La comisión se cobra en cada ejecución y el slippage en las órdenes a mercado y stop, según strategy(); ambos son cero por defecto.

¿Dónde se ejecutan los scripts?

En el gráfico, en tu navegador, sobre las velas cargadas en el gráfico. Los backtests guardados se ejecutan en los servidores de Deepwick sobre un máximo de 5.000 velas.