JMFParticipant
New
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
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.
JMFParticipant
New
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.
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?
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 THEN
DrawSegment(Bar1,HH1,Bar2,HH2)
DrawText("Bar #Bar1#",Bar1,HH1+Disp)
DrawText("Bar #Bar2#",Bar2,HH2+Disp)
ENDIF
RETURN
JMFParticipant
New
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
No se puede hacer con la máxima precisión, porque son escalas diferentes.
JMFParticipant
New
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.
Si publica el cálculo, puede ser útil para otros usuarios.
Gracias 🙂
JMFParticipant
New
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