This technical indicator draw Heikin-ashi candlesticks that shows possible points to enter and exit and to operate not too quickly, avoiding too frequent signals.
Averages and close line are also drawn under the candlesticks for easiness of reading.
//Reglas en Heikin-Ashi:
//1- Secuencia de cuerpos blancos = tendencia alcista.
// Secuencia de cuerpos negros = tendencia bajista.
//2- Tendencia alcista fuerte = Grandes cuerpos blancos y sin sombras inferiores.
// Tendencia bajista fuerte = Grandes cuerpos negros sin sombras superiores.
//3- Cuando la tendencia se debilita surgen cuerpos pequeños con posibles sombras superior y/o inferior.
//4- Una consolidación se da cuando aparecen cuerpos pequeños con ambas sombras tanto arriba como abajo.
//5- La reversión de una tendencia se puede sospechar con la aparición de pequeños cuerpos con sombras largas tanto superiores como inferiores, o un cambio repentino de color.
// parámetros
//ONCE SmoothPeriod=2 valor por defecto
//ONCE period=5 valor por defecto
ONCE flecha=0
ONCE Dflech=barindex
// ciclo normal
IF BarIndex=0 THEN
xClose = (open+high+low+close)/4
xOpen = open
xHigh = high
xLow = low
ELSE
xClose = (open+high+low+close)/4
xOpen = (xOpen[1]+xClose[1])/2
xHigh = Max(max(high, xOpen), xClose)
xLow = Min(min(Low, xOpen), xClose)
endif
// SUAVIZADO con la media de 2 en las velas
if barindex>=(period+SmoothPeriod) then
AvOpen=exponentialAverage[SmoothPeriod](xOpen)
AvHigh=exponentialAverage[SmoothPeriod](xHigh)
AvLow=exponentialAverage[SmoothPeriod](xLow)
Avclose=exponentialAverage[SmoothPeriod](xClose)
endif
// y ésta es la que uso
DRAWCANDLE(AvOpen, AvHigh, AvLow, AvClose)
//ha7 para indicar cruces
// los valores para barindex<2 son especiales
If Barindex < SmoothPeriod then
Opcl=Open[1]
else
Opcl=Open
ENDIF
// calculo dos medias de 7 y de 10
Media7 = Average[7](Opcl)
Media10 = Average[10](Opcl)
rango= Media7/10
// uso rango para el dibujo
Alcista = AvOPen<AvClose
Alcista1 = AvOpen[1]<AvClose[1]
Bajista = AvOpen>AvClose
Bajista1 = AvOpen[1]>AvClose[1]
//Doji = Range[1] > ABS(AvOpen[1]-AvClose[1])*5
//no puede haber dos operaciones en dos dias
//valor representa mi compra cuando estoy dentro
// y el precio de venta cuando me salgo
IF Dflech < barindex[2] then
IF (Opcl>Media7 or Opcl>Media10) and not (Bajista and Bajista1) and flecha<1 then
// uso Range para que salgan visibles las flechas
DRAWARROWUP (barindex, AvHigh+Range) COLOURED (0, 0, 255)
flecha=1
Dflech = barindex
valor = AvClose
ELSIF (Opcl<Media7 or Opcl<Media10) and not (Alcista and Alcista1) and flecha>=1 then
DRAWARROWDOWN (barindex, AvHigh+Range) COLOURED (255, 0, 0)
flecha=-1
Dflech = barindex
valor = AvClose
ENDIF
ENDIF
RETURN Media7 COLOURED (0,0,255), Opcl-rango COLOURED(0,0,0) as "op-cl", Media7-rango coloured (0,0,255) as "media7", Media10-rango coloured(250,0,250) as "media10", valor COLOURED (255,0,0) as "valor"
You must be logged in to post a comment.
Buenas, a ver si me puede ayudar por favor: yo uso el cierre del Heikin Ashi por encima de una media móvil o por debajo como señal de compra o venta con la siguiente vela. Hoy, a modo de ejemplo, entre las 10:55h a 11:35h el mercado cayó con 10 velas, hubiera entrado en corto una vez la vela de las 10:55h cierra a los 5 min. por debajo de una media móvil (coincide con tus flechas y da señal de entrada) a las 11:00h, si opero manual, 1 operación, hubiera esperado 10 velas y cierro en cuanto el mercado se da la vuelta, pero con el programa automatico, me ha hecho 10 entradas entra largo y corto, + 100€ y - 100€, ganancia 0€. Como puedo dejar "correr" el beneficio sin que el sistema con cada nueva vela me abra una nueva posición (no las acumula, vende y cierra y así lo hizo 10 veces) Gracias por la aclaración.
Muchas gracias RafadonI2. Estoy haciendo un screener utilizando su codigo que me parece muy interesante. Anadi un indicator "MACD" que me permite entrar or salir cuando el macd est alcista o bajista. Pero, tengo algunos problemas. Un saludo. (Soy francés y mi castillano no es muy bueno. Lo siento).
En el propio código del indicador, está el proceso de cálculo. es un heikin-ashi clásico pero con flechas añadidas que sugieren cuando entrar o salir del sistema. En cualquier caso, la decisión de entrar en o salir de un valor, no debería ser sólo en base a un indicador y por supuesto, como no hay un sistema perfecto, este indicador no garantiza que esa sea la decisión a tomar, siendo responsabilidad del inversor. No todos los indicadores funcionan igual en todos los valores. Enlazo con tu pregunta anterior, y sería posible utilizarlo en el sistema de screening del propio Prorealtime, pero la adaptación, no la he realizado ni la tengo en mente, dado que no uso la automatización de sistemas (se producen señales falsas y más en bolsa con los acontecimientos políticos). Un saludo.
Hola. Flecha es una variable que se usa para saber cuando se ha dibujado una señal de entrada/salida y no repetir a no ser que haya pasado un mínimo de tiempo. Se trata de evitar señales no necesarias y sobre todo que, a veces, se desatan señales contrarias en el plazo de dos o tres días, lo que supondría un enorme coste en comisiones. Espero haberte respondido.
Un saludo.
te adjunto el código. //Reglas en Heikin-Ashi: //1- Secuencia de cuerpos verdes = tendencia alcista. // Secuencia de cuerpos rojos = tendencia bajista. //2- Tendencia alcista fuerte = Grandes cuerpos verdes y sin sombras inferiores. // Tendencia bajista fuerte = Grandes cuerpos rojos sin sombras superiores. //3- Cuando la tendencia se debilita surgen cuerpos pequeños con posibles sombras superior y/o inferior. //4- Una consolidación se da cuando aparecen cuerpos pequeños con ambas sombras tanto arriba como abajo. //5- La reversión de una tendencia se puede sospechar con la aparición de pequeños cuerpos con sombras largas tanto superiores como inferiores, o un cambio repentino de color. // // Tener siempre en cuenta que las flechas salen a cierre del día ONCE flechaup = 1 ONCE flechadn = 1 ONCE salida=0 // para evitar entradas y salidas ONCE entrada=0 // seguidas. // //para la primera vez calculo valores iniciales ONCE xOpen = (open+close)/2 ONCE xClose = (open+high+low+close)/4 ONCE xHigh = MAX(high,MAX(xOpen,xClose)) ONCE xLow = MIN(low,MIN(xOpen,xClose)) ONCE comienzo=xopen // ciclo normal basado en los anteriores // cálculo de los valores de la vela Heikin-ashi IF BarIndex>0 THEN xOpen = (xOpen[1]+xClose[1])/2 xClose = (open+high+low+close)/4 xHigh = MAX(high, MAX(xOpen, xClose)) xLow = MIN(Low,MIN(xOpen, xClose)) ENDIF DRAWCANDLE(xOpen, xHigh, xLow, xClose) // Calculo el estocástico lineaK=100*((close-lowest[10](low))/(highest[10](high)-lowest[10](low))) K=exponentialaverage[3](lineaK) D=exponentialaverage[5](K) //Media retardo cero de las velas HA C1=exponentialaverage[media](xclose) C2=exponentialaverage[media](C1) MR0=c1+(c1-c2) // uso rango para el dibujo vAlcista = xOpen<xClose vAlcista1 = xOpen[1]xClose vBajista1 = xOpen[1]>xClose[1] doji=(ABS(((xopen-xclose)/(xhigh-xlow)))-margen)and(MLRxclose[1] and Xhigh>xhigh[1] //Tendbajf = xclose<xclose[1] and xhigh<xhigh[1] Debtendalc= (ATAN((xclose/xclose[1])-1)<0 or (ATAN((xhigh/xhigh[1])-1)<0)) debtendbaj= (ATAN((xclose[1]/xclose)-1)<0 or (ATAN((xlow[1]/xlow)-1) la vela alcista pierde fuerza y estoy largo condas1 = debtendalc and flechaup=1 if Condas1 then DRAWARROWDOWN(barindex, xHigh+distancia*1.1) COLOURED (252,246,0) // AMARILLO endif // Condiciones de salida // cambia de alcista a bajista y rompe la MR0 conds1= (vbajista and valcista1 and xclose<mr0 and K<D) and flechaup=1 // cambia a bajista y se habia debilitado conds2= (vbajista and (valcista1 or debtendalc[1]) and flechaup=1) // cambioa a bajista y continua conds3 = (vbajista and vbajista1 and xclose entrada) // primero por si fuese aviso IF (conds1 or conds2 or conds3) and conds4 and not doji THEN if not amorfo then DRAWARROWDOWN(barindex, xHigh+distancia*1.1) COLOURED (255, 0, 0) // ROJO flechadn=1 // me he salido flechaup=0 // puedo volver a entrar salida=barindex // cuando ha salido entrada=0 // dibujo la ganancia vendiendo al cierre. ganper=xclose-comienzo Porcen=(ganper/comienzo*100) TXTGAN = round(ganper*100)/100 TXTPor = Round(Porcen*100)/100 DRAWTEXT(TXTGAN, barindex, xlow-distancia*1.2) drawtext(TXTPor, barindex, xlow-distancia*1.4) DRAWsegment(barindex,xlow-distancia, barindex, Xlow-distancia*1.2) coloured (0,0,0) endif endif // ahora veo cuando entro // dos velas alcistas viniendo de una bajista es entrada en azul claro // condiciones de entrada a un valor: Condaent1 = (valcista or debtendbaj) and xclose>mr0 and flechadn=1 if Condaent1 then DRAWARROWUP(barindex, xlow-distancia) COLOURED (32,240,228) endif // vela alcista estocastico ok y cierre > mr0 Condent1 = (valcista and k>D and xclose>mr0) and flechadn=1 // Condent2 = valcista and valcista1 and flechadn=1 // Condent3 = barindex-diasidle >= salida // IF (Condent1 and Condent2) and Condent3 THEN If not doji then // no sea un doji DRAWARROWUP(barindex, xlow-distancia) COLOURED (0, 0, 255) // AZUL flechaup=1 flechadn=0 entrada=barindex salida=0 comienzo=xopen // (open+close)/2-->un precio medio endif endif // If Dayofweek =5 and day>= 15 and Day<=21 then DRAWVLINE(barindex) coloured(237,96,9) endif RETURN MR0 as "mr0"
prueba la nueva version que acabo de poner. Usa regresion lineal y elimina muchas señales en tendencia lateral. La estoy probando y en general parece que funciona. Sólo tienes que configurar el porcentaje que deseas según cada valor. está con otro nombre porque no quería eliminar la anterior. Si pones los dos indicadores juntos, se ve la diferencia muy clara.
Te sugiero que uses DRAWARROWUP (barindex, AvHigh+rango/2 ) COLOURED (127,255,0) siendo "rango" el valor que calcula el indicador: (Media7/10), si prefieres mantener las flechas por encima de las velas. Si quieres que aparezcan entre las velas y las medias, sería cuestión de poner (barindex, AvHigh-rango/2). La primera opción la he probado y queda mejor ya que rango es el valor que se usa para separar las velas de las medias y hacer más legible el indicador. Lo mismo sería aplicable al dibujo de la flecha hacia abajo. Lo único es que te puede obligar a redimensionar la escala; si usas rango/3 queda aún mejor y evita este último problema.
Un saludo.
Buenos días Nicolás, aquí la pregunta: Yo uso el cierre del Heikin Ashi por encima de una media móvil o por debajo, como señal de compra o venta y entrada con la apertura de la siguiente vela. Ayer miércoles, a modo de ejemplo, la vela de las 10:55 CET cerró a los 5 min por debajo de la media móvil y hubiera entrado en corto con la apertura de la vela a las 11:00h. Si opero manual, sigo la tendencia con una operación y en este caso la hubiera cerrado después de 10 velas, pero mi programa automático, me ha hecho 10 entradas en largo y en corto, en resumen: + 100€ y – 100€, ganancia 0€. Como puedo dejar “correr” el beneficio sin que el sistema con cada nueva vela me abra una nueva posición (no las acumula, vende y cierra y así lo hizo 10 veces), y cerrar por ejemplo con el cambio de color de una vela Necesitaría : 1: Añadir otra condición, el cambio de color de la/s vela/s anterior/es (a tu criterio y experiencia, una, dos o tres velas) 2. Añadir flechas de señal de compra/venta cuando se cumplan las condiciones 3: el problema de arriba, que deje correr el beneficio hasta cambio de criterio, por ejemplo color de vela. Mi código: // Definición de los parámetros del código DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada // El sistema anulará todas las órdenes pendientes y cerrará todas las posiciones a las 0:00. No se permitirá ninguna nueva orden ni posición después de la hora "FLATBEFORE". DEFPARAM FLATBEFORE = 090000 // Anular todas las órdenes pendientes y cerrar todas las posiciones a la hora "FLATAFTER" DEFPARAM FLATAFTER = 173000 // Impide al sistema crear nuevas órdenes para entrar al mercado a aumentar el tamaño de la posición antes de una hora precisa noEntryBeforeTime = 090000 timeEnterBefore = time >= noEntryBeforeTime // Impide al sistema lanzar nuevas órdenes para entrar al mercado o aumentar el tamaño de la posición después de una hora precisa noEntryAfterTime = 173000 timeEnterAfter = time indicator1) IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN BUY 10 CONTRACT AT MARKET ENDIF // Condiciones de entrada de posiciones cortas indicator2 = WilderAverage[5](low)[1] c2 = (close < indicator2) IF c2 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN SELLSHORT 10 CONTRACT AT MARKET ENDIF // Stops y objetivos SET STOP pTRAILING 2