es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cancelar trama si la barra la atraviesa

Estoy tratando de trazar algunas líneas con el código a continuación, sin embargo, no logro hacer que dejen de trazar si, (o una vez) otra vela las cruza, ya que actualmente simplemente atraviesan directamente. También estoy teniendo problemas para extender todas las líneas de manera igual a 30 barras hacia adelante, sin importar dónde estén en el gráfico, para poder luego agregar etiquetas de precio a ellas.

Notará que está trazando los máximos de las velas bajistas, pero también quiero trazar / no trazar los mínimos de las velas alcistas de la misma manera.

Quiero poder controlar cuántas velas se trazarán para lo cual creo que tendrá algo que ver con una función de entrada.

He estado dando vueltas y vueltas tratando de averiguar si todo esto tendrá que hacerse a través de matrices o bucles, o incluso ambos, pero sigo chocando contra un muro cuando intento investigarlo.

Cualquier ayuda sería muy apreciada.

Imagen de problema
Imagen

//@version=5
indicator('123456', overlay=true)

bars_back = input(-30, 'Barras hacia adelante')
n = input(1, 'atrás')

//Líneas
bear = open > close
highestHigh = if bear
    ta.highest(high, n)
bullline = line.new(bar_index - bars_back, highestHigh, bar_index, highestHigh, extend=extend.none, color=color.red)
Tags:  

Answer

  1. Avatar for davy.ai

    Solución para trazar líneas con Pine-Script

    Para evitar que las líneas trazadas se extiendan más allá de un cierto punto, puedes utilizar las funciones crossover y crossunder. Estas funciones devuelven un valor verdadero (1) cuando se cumple una cierta condición, y falso (0) en caso contrario.

    En tu caso, puedes utilizar la función crossover para comprobar si la vela actual ha cruzado por encima de la línea trazada previamente. De manera similar, puedes utilizar la función crossunder para comprobar si la vela actual ha cruzado por debajo de la línea trazada previamente.

    Para extender todas las líneas por igual hasta 30 barras por delante, puedes utilizar un bucle for que itere a través de las últimas 30 barras del gráfico y trazar las líneas correspondientes. Puedes utilizar la instrucción if para comprobar si una barra se encuentra dentro del rango especificado y luego trazar la línea correspondiente.

    Aquí tienes un código actualizado para tu referencia:

    //@version=5
    indicator('123456', overlay=true)
    
    bars_back = input(-30, 'Barras hacia adelante')
    n = input(1, 'atrás')
    
    //Líneas
    bear = open > close
    highestHigh = if bear
        ta.highest(high, n)
    lowestLow = if not bear
        ta.lowest(low, n)
    
    for i = 0 to bars_back do
        if barstate.islast and i == bars_back
            break
        last_candle = bar_index - i == bar_index
        if last_candle
            break
        if bear
            if not crossover(high, highestHigh[i]) 
                bearline = line.new(bar_index - i, highestHigh[i], bar_index, highestHigh[i], extend=extend.none, color=color.red)
            else
                break
        else
            if not crossunder(low, lowestLow[i]) 
                bullline = line.new(bar_index - i, lowestLow[i], bar_index, lowestLow[i], extend=extend.none, color=color.green)
            else
                break
    

    Este código debería trazar las líneas y evitar que se extiendan más allá de un cierto punto. Además, debería trazar los mínimos de las velas alcistas de la misma manera que los máximos de las velas bajistas.

    Puedes ajustar la entrada bars_back para determinar cuántas velas se trazarán las líneas. ¡Espero que esto te ayude!

Comments are closed.