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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
//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" |
Share this
No information on this site is investment advice or a solicitation to buy or sell any financial instrument. Past performance is not indicative of future results. Trading may expose you to risk of loss greater than your deposits and is only suitable for experienced investors who have sufficient financial means to bear such risk.
ProRealTime ITF files and other attachments :
Filename : download the ITF files
How to import ITF files into ProRealTime platform?
PRC is also on YouTube, subscribe to our channel for exclusive content and tutorials
Hola rafa
Si cambiamos esa linea por : DRAWARROWUP (barindex, AvHigh-range[0] ) COLOURED (127,255,0)
tenemos la flecha verde debajo del HA, lo veo muy apretada, como se puede alejarla mas bajo el HA para tener un señal mas visible ?
Un codigo muy interesante
un saludo
Muchas gracias por la sugerencia. Y si encuentras algún fallo, agradezco los comentarios. Que en ésto soy novato…
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.
Buenas tardes Rafa
con esa linea no me sale bien las flechas : DRAWARROWUP (barindex, AvHigh-range/3 ) COLOURED (127,255,0)
estan pegadas al Heikin Ashi ?!
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.
asi me gusta !
DRAWARROWUP (barindex, AvHigh-(range+2) ) COLOURED (127,255,0)
asi mejor con +1
DRAWARROWUP (barindex, AvHigh-(range+1) ) COLOURED (127,255,0)
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"
Por favor : que significa “flecha” (flecha < 1 or flecha >=1). Gracias.
Por favor : que significa “flecha” (flecha < 1 or flecha >=1). Gracias.
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.
rafadonl2 : muchas gracias. Seria possible de automatizar el código ?
Disculpa. ¿a qué te refieres con automatizar el código?. Yo lo tengo incorporado a la plataforma y cuando abro un valor, me sale la gráfica sin hacer nada.
Un saludo.
Es posible a partir de las señales de entrada/salida de comprar o de vender un contracto automáticamente (con un sistema automático). Gracias.
Buenos dias, en este código, hay una curva que aparece y que se llama “heikin ashi smooth and signal” . Quisiera saber como esta calculado?
Gracias.
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.
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).
pas de probleme. je peux comprend francais.
Prueba la nueva version que acabo que poner. Incluye regresion lineal y elimina señales en tendencia lateral.
Gracias Rafadonl2.
Una pregunta : la formula de “RANGO” es : media7/10 o media7/media10 ? Gracias.
es media7/10. se trata de hacer que la representación gráfica sea razonablemente visible.
Bonsoir, je reviens sur ma question du début : est-ce que quelqu’un pourrait transformer cet indicateur en screener ? merci. Car moi je n’y arrive pas. Bonne soirée.
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.
haga su pregunta en el foro, ¡obtendrá más ayuda!
Hola. Yo sólo la uso en cierre diario. lamento no poder ayudarte en la parte de envío de órdenes.
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