Distancia a una recta

Forums ProRealTime foro Español Soporte ProBuilder Distancia a una recta

Viewing 9 posts - 1 through 9 (of 9 total)
  • #228464
    JMF

    Buenas, soy nuevo en el foro y quería hacer una consulta. Si ya se hubiese planteado, por favor redirigirme.

    Necesito calcular la distancia de un punto (ej close) a una recta (ej la recta entre dos máximos). Si dibujo la recta con drawline, ¿se puede calcular esa distancia?

    Si la respuesta es no, otra opción es intentar meter  la ecuación de una recta del tipo y=p*x+ b , donde si los puntos que definen la recta son (barindex[x],close[x]) y (barindex[y], close[y])    entonces la pendiente sería : p= (close[y]-close[x])/(barindex[y]-barindex[x]).    y el coeficiente sería: b=close[y]-p*barindex[y].

    Pero como se mete en el código del indicador para que aparezca la recta pintada como una función y a partir de ahí poder calcular cortes con otras funciones, distancias, etc..?

    Muchas gracias

    #228525

    Si dibujas una línea con DrawLine, DrawHline o DrawVline no es posible saber dónde comienza o termina.
    Sin embargo, si usa DRAWSEGMENT, entonces usted decide el principio y el final, por lo que ya conoce los dos puntos.
    Pero no estoy seguro de entender completamente lo que quieres. Si desea calcular la pendiente, ni parece que su código sea correcto.

     

     

    #228529
    JMF

    Muchas gracias por tu respuesta.

    Lo que pretendo es poder utilizar soportes y resistencias dentro del código. Como no se pueden utilizar las lineas de ProRealtrend, quiero calcular mis propios soportes/resistencias a partir de determinados máximos y mínimos y cuando el precio toque dichas líneas o las cruce, generar señales de compra o venta.

    Si no puedo utilizar drawline para calcular cuando un precio esta a menos de un x% de la línea o la cruza, la única opción que queda es meter la ecuación de la recta que pasa por dos puntos y a partir de ahí calcularlo. La pregunta es como se puede meter la ecuación de una recta que pasa por dos puntos en el código para utilizarla como soporte o resistencia y hacer los cálculos de cercanía o cruce para generar las señales de compra/venta.

    Espero haberme explicado mejor ahora.

    #228542

    Este indicador imprime una línea entre los dos valores MÁXIMOS de las últimas 100 barras.
    Usando el bucle FOR…NEXT se obtienen los valores BarIndex de las dos velas.
    Con ellos podrás saber el precio de los dos puntos y la distancia entre los dos puntos.
    ¿Era esto lo que querías?

     

     

    #228554
    JMF

    Muchas gracias de nuevo.

    Lo que estoy buscando es mas parecido a esto, pero solo funciona cuando el eje de cotizaciones está en escala Lineal. No se como hacerlo para escala Logarítmica. (perdón pero no se como copiarlo con estilos):

    DefParam DrawOnLastBarOnly = True
    N = 50
    HH1 = highest[N](high[N])
    HH2 = highest[N](high)
    Disp = average[N*2,0](range) //Displacement
    Bar1 = 0
    Bar2 = 0
    FOR i = 0 TO (N * 2)
    IF Bar2 = 0 THEN
    IF high[i] = HH2 THEN
    Bar2 = BarIndex[i] //Bar2 = ending point
    ENDIF
    ELSE
    IF high[i] = HH1 THEN //Bar1 = starting point
    Bar1 = BarIndex[i]
    break
    ENDIF
    ENDIF
    NEXT
    IF Bar1 <> 0 AND Bar2 <> 0 AND Date=Today THEN
    // Calculo de la recta entre el maximo1 y el maximo2
    Pend=(HH2-HH1)/(Bar2-Bar1)
    B=HH2-Pend*Bar2

    // Condición para dibujar la recta que pase a menos de un 5% del último cierre
    Dist= abs(Close-(Pend*BarIndex+B))*100/min(Close, Pend*BarIndex+B)

    DrawLine(Bar1,HH1,Bar2,HH2)
    DrawPoint (barindex, Pend*BarIndex+B, 3) coloured(255,0,255)
    Drawsegment (BarIndex, Close, BarIndex, Pend*BarIndex+B) Style(DottedLine,1) Coloured (“Red”)
    Drawtext (“Distancia #Dist#”, BarIndex, Pend*BarIndex+B+Disp)
    DrawText(“Bar #Bar1#”,Bar1,HH1+Disp)
    DrawText(“Bar #Bar2#”,Bar2,HH2+Disp)

    ENDIF
    RETURN

    #228595

    No se puede hacer con la máxima precisión, porque son escalas diferentes.

     

    #228624
    JMF

    Lo he conseguido, se puede calcular exactamente tanto en escala lineal como en escala logarítmica.

    Os paso gráfico del mismo valor con las dos escalas.

    Gracias por tu ayuda robertogozzi.

    #228627

    Si publica el cálculo, puede ser útil para otros usuarios.

    Gracias 🙂

     

     

    #228628
    JMF

    Perdón, estaba tan emocionado que se me pasó.

    Ahí va por si le sirve a alguien

    DefParam DrawOnLastBarOnly = True
    N = 50
    HH1 = highest[N](high[N])
    HH2 = highest[N](high)
    Disp = average[N*2,0](range) //Displacement
    Bar1 = 0
    Bar2 = 0
    FOR i = 0 TO (N * 2)
    IF Bar2 = 0 THEN
    IF high[i] = HH2 THEN
    Bar2 = BarIndex[i] //Bar2 = ending point
    ENDIF
    ELSE
    IF high[i] = HH1 THEN //Bar1 = starting point
    Bar1 = BarIndex[i]
    break
    ENDIF
    ENDIF
    NEXT
    IF Bar1 <> 0 AND Bar2 <> 0 AND Date=Today THEN
    // Calculo de la recta entre el maximo1 y el maximo2 y=Pend*x+B
    Pend=(HH2-HH1)/(Bar2-Bar1)
    B=HH2-Pend*Bar2

    // Calculo de la recta en escala SemiLogaritmica entre el maximo1 y el maximo2 y=B2*e^(Pend2*x)
    Pend2=(log(HH2)-log(HH1))/(Bar2-Bar1)
    B2=exp(log(HH2)-Pend2*Bar2)

    // Condición para dibujar la recta que pase a menos de un 5% del último cierre
    Dist= abs(Close-(Pend*BarIndex+B))*100/min(Close, Pend*BarIndex+B)
    Dist2= abs(Close-B2*exp(Pend2*BarIndex))*100/min(Close, B2*exp(Pend2*BarIndex))
    DrawLine(Bar1,HH1,Bar2,HH2)
    DrawPoint (barindex, Pend*BarIndex+B, 3) coloured(255,0,255)
    DrawPoint (barindex, B2*exp(Pend2*BarIndex), 3) coloured(0,255,255)
    Drawsegment (BarIndex, Close, BarIndex, Pend*BarIndex+B) Style(DottedLine,1) Coloured (“Red”)
    Drawtext (“Distancia Esc Lineal #Dist#”, BarIndex, Pend*BarIndex+B+Disp)
    Drawtext (“Distancia Esc Log #Dist2#”, BarIndex, B2*exp(Pend2*BarIndex)+Disp)
    DrawText(“Bar #Bar1#”,Bar1,HH1+Disp)
    DrawText(“Bar #Bar2#”,Bar2,HH2+Disp)

    ENDIF
    RETURN

    1 user thanked author for this post.
Viewing 9 posts - 1 through 9 (of 9 total)

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