INDICADOR ECHO (TRADINGVIEW)

Forums ProRealTime foro Español Soporte ProBuilder INDICADOR ECHO (TRADINGVIEW)

Viewing 3 posts - 1 through 3 (of 3 total)
  • #207260

    Hola a todos, a ver si podéis transcribir este indicador de Tradingview que llevo probando un tiempo y que acompañado de otros da excelentes resultados.

    Descripción del creador:

    Este indicador utiliza un método de pronóstico de series de tiempo simple derivado de la similitud entre los precios recientes y los precios históricos similares/diferentes. Llamamos a este método “ECHO”.

    Este método asume originalmente que los precios futuros se pueden estimar a partir de una serie histórica de observaciones que son más similares a las variaciones de precios más recientes. Esta similitud se cuantifica mediante el coeficiente de correlación. Tal suposición puede resultar relativamente efectiva con el pronóstico de una serie de tiempo periódica. Más tarde introdujimos la capacidad de seleccionar series diferentes de observaciones para experimentación adicional.

    Esta técnica de pronóstico está muy inspirada en el método analógico introducido por Lorenz para la predicción de datos atmosféricos.
    Esta herramienta se puede utilizar para pronosticar tendencias futuras, pero también para indicar qué variaciones históricas tienen el mayor grado de similitud/desigualdad entre las observaciones en la zona naranja.

    La ventana de pronóstico determina el segmento de precios (en naranja) que se utilizará como referencia para la búsqueda del segmento de precios histórico más similar/diferente (en verde) dentro del área gris.
    La construcción del pronóstico se realiza a partir de los cambios de precio obtenidos en el área verde, denotados como w(t). Usando las opciones “Cumulativas” construimos el pronóstico a partir de la suma acumulativa de w(t). Finalmente, agregamos el valor de precio más reciente a esta serie acumulada.

    Código:

    study(“The Echo Forecast [LUX]”,”ECHO [LuxAlgo]”,overlay=true,max_bars_back=1000,max_lines_count=200)
    length = input(50,’Evaluation Window’,minval=0,maxval=200)
    fcast  = input(50,’Forecast Window’,minval=1,maxval=200)
    fmode  = input(‘Similarity’,’Forecast Mode’,options=[‘Similarity’,’Dissimilarity’])
    cmode  = input(‘Cumulative’,’Forecast Construction’,options=[‘Cumulative’,’Mean’,’Linreg’])
    src    = input(close)
    fcast_col   = input(#2157f3,’Forecast Style’,inline=’fcast_style’,group=’Style’)
    fcast_style = input(‘· · ·’,”,options=[‘──’,’- – -‘,’· · ·’],inline=’fcast_style’,group=’Style’)
    show_area   = input(true,’Show Area’,inline=’areas’,group=’Style’)
    fcast_area  = input(color.new(#ff5d00,50),”,inline=’areas’,group=’Style’)
    corr_area   = input(color.new(#0cb51a,50),”,inline=’areas’,group=’Style’)
    eval_area   = input(color.new(color.gray,50),”,inline=’areas’,group=’Style’)
    //—-
    var lines = array.new_line(0)
    if barstate.isfirst
        for i = 0 to fcast-1
            array.push(lines,line.new(na,na,na,na))
    //—-
    n = bar_index
    d = change(src)
    top = highest(src,length+fcast*2)
    btm = lowest(src,length+fcast*2)
    if barstate.islast
        float val = na
        k = 0
        A = array.new_float(0)
        X = array.new_int(0)
        for i = 0 to fcast*2+length
            array.push(A,src[i])
            if cmode == ‘Linreg’
                array.push(X,n[i])
        a = array.slice(A,0,fcast-1)
        for i = 0 to length-1
            b = array.slice(A,fcast+i,fcast*2+i-1)
            r = array.covariance(a,b)/(array.stdev(a)*array.stdev(b))
            if fmode == ‘Similarity’
                val := r >= nz(val,r) ? r : val
            else
                val := r <= nz(val,r) ? r : val
            k := val == r ? i : k
        prev = src
        current = src
        for i = 0 to fcast-1
            e = d[fcast+k+(fcast-i-1)]
            if cmode == ‘Mean’
                current := array.avg(a) + e
            else if cmode == ‘Linreg’
                a = array.slice(A,0,fcast)
                x = array.slice(X,0,fcast)
                alpha = array.covariance(a,x)/array.variance(x)
                beta = array.avg(a) – alpha*array.avg(x)
                current := alpha*(n+i+1) + beta + e
            else
                current += e
            l = array.get(lines,i)
            line.set_xy1(l,n+i,prev)
            line.set_xy2(l,n+i+1,current)
            line.set_color(l,fcast_col)
            if fcast_style == ‘- – -‘
                line.set_style(l,line.style_dashed)
            else if fcast_style == ‘· · ·’
                line.set_style(l,line.style_dotted)
            prev := current
        if show_area
            box.delete(box.new(n-length-fcast*2+1,top,n-fcast+1,btm,
              border_color=na,
              bgcolor=eval_area)[1])
            box.delete(box.new(n-fcast+1,top,n,btm,
              border_color=na,
              bgcolor=fcast_area)[1])
            box.delete(box.new(n-k-fcast*2+1,btm,n-k-fcast,top,
              border_color=na,
              bgcolor=corr_area)[1])

     

    #207269

    Lo sentimos, pero hay muchas funcionalidades para manipular matrices (varianza/covarianza/rebanada/desviación estándar…) que tendrían que ser completamente recreadas a mano y sin ninguna certeza de los resultados (porque no están disponibles en el lenguaje de programación). También implicaría mucho tiempo investigar las posibilidades de cómo hacerlo posible con el estado actual del idioma.

    1 user thanked author for this post.
    #207281

    Muchas gracias Nicolás de todos modos.

Viewing 3 posts - 1 through 3 (of 3 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login