Acceder

Codigos Proscreener (Prorealtime)

46 respuestas
Codigos Proscreener (Prorealtime)
7 suscriptores
Codigos Proscreener (Prorealtime)
Página
2 / 4
#16

Re: Codigos Proscreener (Prorealtime)

Comparto otro Screener para detectar divergencias entre precio y MACD en los últimos 30 periodos (mes):

Las condiciones para la bajista son que la media de precio de los ultimos 10 días sea mayor que el los 10 días precendetes y esta a su vez mayor que los 10 días anteriores y la media de los ultimos 10 días del Macdline sea menor que que el los 10 días precendetes y esta a su vez menor que los 10 días anteriores. Lo contrario para la divergencia alcista.

Ya sé que las divergencias en principio se calculan con los maximos que marcan precio e indicador, pero a mi me vale.

El Codigo:

// Divergencia Bajista

c1 = (Average [10] (close) > average [10] (close)[10])
c2 = (Average [10] (close)[10] > average [10] (close)[20])
c3 = (average [10](MACDline[12,26,9](close)) < average [10](MACDline[12,26,9](close)[10]))
c4 = (average [10](MACDline[12,26,9](close)[10]) < average [10](MACDline[12,26,9](close)[20]))

// Divergencia Alcista

c5 = (average [10] (close) < average [10] (close)[10])
c6 = (average [10] (close)[10] < average [10] (close)[20])
c7 = (average [10](MACDline[12,26,9](close)) > average [10](MACDline[12,26,9](close)[10]))
c8 = (average [10](MACDline[12,26,9](close)[10]) > average [10](MACDline[12,26,9](close)[20]))

// Filtro

c20 = (ExponentialAverage[15](Volume) >= 50000)
c21 = (Dclose(0) > 0.2)

criteria = ExponentialAverage[15](Volume)

SCREENER[(c1 AND c2 AND c3 AND c4 AND c20) or (c5 AND c6 AND c7 AND c8 AND c21)] (criteria AS "MM")

#17

ProBackTest sobre índices - ProRealTime

Saludos a todos!!

Estoy buscando, sin mucho éxito, una instrucción para ProBackTest que haga que las operaciones de compra sobre índices se realicen con TODO el capital disponible en ese momento (inicial + beneficios/perdidas). En versiones anteriores uno introducía algo tipo "BUY 100 %Capital AT MARKET", pero ahora ProRealTime ya no acepta una instrucción así...¿alguien podría indicarme cómo hacerlo?

Muchas gracias por adelantado!!

#18

Re: ProBackTest sobre índices - ProRealTime

Hola, te muevo este hilo aquí para ver si encuentras algo de interés. Así tenemos la programación de Proreal en un mismo hilo... Saludos. 

#19

Re: Codigos Proscreener (Prorealtime)

Hola Onpots, acabo de ver ahora mismo este mensaje tuyo. Andaba yo pensando en hacer algo parecido, pero mis conocimientos de programación son los que son y la programación simplificada del PRT es realmente simplificada, en fin, que no me da... :(

Muchísimas gracias, el fin de semana lo copio y lo pruebo.

#20

Re: Codigos Proscreener (Prorealtime)

Hola Cuchox,
Prueba este, lo he hecho con máximos y mínimos, como debe ser en teórica, y "rastreando" rangos de 5, 10 y 15 periodos.
Las condiciones son en las divergencias alcistas que el MACD haga máximos crecientes y precio mínimos decrecientes y en las bajistas que el MACD haga mínimos decrecientes y el precio máximos crecientes.

Hay opiniones que dicen que para las alcistas hay que fijarse solo en mínimos, es decir que el precio haga mínimos decrecientes y el MACD mínimos crecientes y el las bajistas solo en máximos. He leído las dos opiniones. No sé cual es más correcta.

El codigo:

// Divergencia Bajista 5 periodos

c1 = (highest [5] (Close) > highest [5] (close)[5])
c2 = (highest [5] (close)[5] > highest [5] (close)[10])
c3 = (Lowest [5](MACDline[12,26,9](close)) < Lowest [5](MACDline[12,26,9](close)[5]))
c4 = (Lowest [5](MACDline[12,26,9](close)[5])

// Divergencia Bajista 10 periodos

c5 = (highest [10] (Close) > highest [10] (close)[10])
c6 = (highest [10] (close)[10] > highest [10] (close)[20])
c7 = (Lowest [10](MACDline[12,26,9](close)) < Lowest [10](MACDline[12,26,9](close)[10]))
c8 = (Lowest [10](MACDline[12,26,9](close)[10])

// Divergencia Bajista 15 periodos

c9 = (highest [15] (Close) > highest [15] (close)[15])
c10 = (highest [15] (close)[15] > highest [15] (close)[30])
c11 = (Lowest [15](MACDline[12,26,9](close)) < Lowest [15](MACDline[12,26,9](close)[15]))
c12 = (Lowest [15](MACDline[12,26,9](close)[15])

// Divergencia Alcista 5 periodos

c13 = (Lowest [5] (close) < Lowest [5] (close)[5])
c14 = (Lowest [5] (close)[5] < Lowest [5] (close)[10])
c15 = (highest [5](MACDline[12,26,9](close)) > highest [5](MACDline[12,26,9](close)[5]))
c16 = (highest [5](MACDline[12,26,9](close)[5]) > highest [5](MACDline[12,26,9](close)[10]))

// Divergencia Alcista 10 periodos

c17 = (Lowest [10] (close) < Lowest [10] (close)[10])
c18 = (Lowest [10] (close)[10] < Lowest [10] (close)[20])
c19 = (highest [10](MACDline[12,26,9](close)) > highest [10](MACDline[12,26,9](close)[10]))
c20 = (highest [10](MACDline[12,26,9](close)[10]) > highest [10](MACDline[12,26,9](close)[20]))

// Divergencia Alcista 15 periodos

c21 = (Lowest [15] (close) < Lowest [15] (close)[15])
c22 = (Lowest [15] (close)[15] < Lowest [15] (close)[30])
c23 = (highest [15](MACDline[12,26,9](close)) > highest [15](MACDline[12,26,9](close)[10]))
c24 = (highest [15](MACDline[12,26,9](close)[10]) > highest [15](MACDline[12,26,9](close)[30]))
// Filtro

c30 = (ExponentialAverage[15](Volume) >= 50000)
c31 = (Dclose(0) > 0.2)

criteria = ExponentialAverage[15](Volume)

SCREENER[(c1 AND c2 AND c3 AND c4 AND c30 AND c31) or (c5 AND c6 AND c7 AND c8 AND c30 AND c31) or (c9 AND c10 AND c11 AND c12 AND c30 AND c31) or (c13 AND c14 AND c15 AND c16 AND c30 AND c31) or (c17 AND c18 AND c19 AND c20 AND c30 AND c31) or (c21 AND c22 AND c23 AND c24 AND c30 AND c31)] (criteria AS "MM")

#21

Re: Codigos Proscreener (Prorealtime)

Gracias, el finde lo pruebo. Las divergencias yo siempre las he mirado como dices: en tendencia alcista (divergencias bajistas) se miran en máximos relativos; y al revés, en tendencia bajista (divergencias alcistas) se miran mínimos. Lo que he leído alguna vez es que para trazar canales en tendencia alcista el canal lo marcan los mínimos (y viceversa), pero no para divergencias. Slds.

#22

Re: Codigos Proscreener (Prorealtime)

Pues ya lo estoy probando y me parece que funciona estupendamente. Ahora mismo en los mercados españoles no me detecta nada, pero por ejemplo en el Nasdaq levanta la liebre de un montón de valores de esos que dan ganas de comprarlos todos. Eres un crack.

Pa arriba este hilo, es una pena que la gente no aproveche esta magnífica herramienta

Edito: no obstante estoy trasteando y creo que las div bajistas no las pilla bien

#23

Re: Codigos Proscreener (Prorealtime)

Si, a mí tampoco me dio la sensación de que funcionara muy bien y revisé a mano algunas acciones, efectivamente había varias que no pillaba. El código tenía un error de criterio detectaba los cierres (Close) más altos o bajos y no los máximos o mínimos. El código de las medias tenía un error de formulación. “Average [10]” es la media móvil de 10 periodos y no la media de los últimos 10 periodos como yo creía. Para sacar la media de los últimos diez periodos hay que usar "timeseriesaverage[N]".
Dejo la versión 3.0, esta sí parece que funciona bien. Prueba distintos periodos es curioso, en semanal por ejemplo sale una cantada de Jazztel y en diario OHL (alcista a pesar del batacazo del otro día) y en 15min te saldrán otras distintas.
En cualquier caso hay que tener en cuenta que en MACD no detecta un máximo o un mínimo, si no el valor más alto o más bajo de un periodo, así que en una div bajista por ejemplo si el MACD está en recorrido creciente la aparente divergencia que detecta el screener puede anularse en unos días si sigue subiendo. Hay que revisar los valores, pero viene bien como filtro.
Por otro lado lo he simplificado y solo rastrea los últimos 12 días comparados con los anteriores 12 (por aquello que el MACD también tiene en cuenta 12 y 26, más o menos los mismos días.

// Divergencia Bajista 12 periodos

MiMacd = (MACDline[12,26,9](close))

c0 = highest [12] (high) > highest [12] (high)[12]
c1 = Lowest[12](MiMacd) < Lowest[12](MiMacd)[6]

// Divergencia Alcista 12 periodos

c10 = lowest [12] (low) < lowest [12] (low)[12]
c11 = highest[12](MiMacd) > highest[12](MiMacd)[12]

// Filtro

c100 = (ExponentialAverage[15](Volume) >= 50000)
c101 = (Dclose(1) > 0.2)

criteria = ExponentialAverage[15](Volume)

SCREENER[(c0 AND c1 AND c100 AND c101) or (c10 AND c11 AND c100 AND c101)] (criteria AS "MM")

#24

Re: Codigos Proscreener (Prorealtime)

Cuelgo un código simple para localizar huecos sin cerrar en los últimos 5 días (periodos).

// Dia 0
c1 = (Dlow(0) > Dhigh(1)*1.003)
c2 = (DHigh(0)*1.003 < DLow(1))

// Dia -1 Alza
c10 = (Dlow(1) > Dhigh(2)*1.003)
c11 = (Dlow(0) > Dhigh(2)*1.003)

// Dia -1 Baja
c12 = (DHigh(1)*1.003 < DLow(2))
c13 = (DHigh(0)*1.003 < DLow(2))

// Dia -2 Alza
c20 = (Dlow(2) > Dhigh(3)*1.003)
c21 = (Dlow(1) > Dhigh(3)*1.003)
c22 = (Dlow(0) > Dhigh(3)*1.003)

// Dia -2 Baja
c23 = (DHigh(2)*1.003 < DLow(3))
c24 = (DHigh(1)*1.003 < DLow(3))
c25 = (DHigh(0)*1.003 < DLow(3))

// Dia -3 Alza
c30 = (Dlow(3) > Dhigh(4)*1.003)
c31 = (Dlow(2) > Dhigh(4)*1.003)
c32 = (Dlow(1) > Dhigh(4)*1.003)
c33 = (Dlow(0) > Dhigh(4)*1.003)

// Dia -3 Baja
c34 = (DHigh(3)*1.003 < DLow(4))
c35 = (DHigh(2)*1.003 < DLow(4))
c36 = (DHigh(1)*1.003 < DLow(4))
c37 = (DHigh(0)*1.003 < DLow(4))

// Dia -4 Alza
c40 = (Dlow(4) > Dhigh(5)*1.003)
c41 = (Dlow(3) > Dhigh(5)*1.003)
c42 = (Dlow(2) > Dhigh(5)*1.003)
c43 = (Dlow(1) > Dhigh(5)*1.003)
c44 = (Dlow(0) > Dhigh(5)*1.003)

// Dia -5 Baja
c45 = (DHigh(4)*1.003 < DLow(5))
c46 = (DHigh(3)*1.003 < DLow(5))
c47 = (DHigh(2)*1.003 < DLow(5))
c48 = (DHigh(1)*1.003 < DLow(5))
c49 = (DHigh(0)*1.003 < DLow(5))

c100 = (ExponentialAverage[15](Volume) >= 60000)
c101 = (DClose(1) > 0.2)

criteria = ExponentialAverage[15](Volume)

SCREENER[(c1 and c100 and c101) or (c2 and c100 and c101) or (c10 and c11 and c100 and c101) or (c12 and c13 and c100 and c101) or (c20 and c21 and c22 and c100 and c101) or (c23 and c24 and c25 and c100 and c101) or (c30 and c31 and c32 and c33 and c100 and c101) or (c34 and c35 and c36 and c37 and c100 and c101) or (c40 and c41 and c42 and c43 and c44 and c100 and c101) or (c45 and c46 and c47 and c48 and c49 and c100 and c101)] (criteria AS "MM")

#25

Re: Codigos Proscreener (Prorealtime)

He estado dandole vueltas con un compañero del foro al codigo de divergencias y me he dado cuenta de que aparentemente mi código anterior funcionaba, pero me he dado cuenta que es casi de casualidad... Este amigo del foro me dio la idea de un bucle y creo que puede funcionar, con esta estructura para divergencias bajistas (que en teoría sería : el MACD mínimos decrecientes y el precio máximos crecientes.

For i = 0 to XXX do
if "cruce de macd a la baja" then
a = i
endif
next

For i = a+1 to XXX do
if "cruce de macd a la baja" then
b = a
endif
next

For i = b+1 to XXX do
if "cruce de macd a la baja" then
c = i
endif
next

Con esto conseguimos recuperar los periodos (de 0 a "a", de "a" a "b" y de "b" a "c" en los que el macd hace un recorrido a la baja y después sube otra vez hasta que vuelve a cortar a la baja para volver a empezar.

Con esto ya podemos hacer tres búsquedas:
For i = 0 to a do
Busca mínimo MACD y Máximo precio en ese periodo y les adjudica una variable macd1 y precio1
next
For i = a to b do
Busca mínimo MACD y Máximo precio en ese periodo y les adjudica una variable macd2 y precio2
next
For i = b to c do
Busca mínimo MACD y Máximo precio en ese periodo y les adjudica una variable macd4 y precio3
next

Y ya solo queda compararlos

C1 = Macd1 < macd2 < macd3
C2 = precio1 > precio2 > precio 3

Que os parece? se puede hacer con tres, dos o cuatro periodos en días o minutos según estilo de cada cual. Tambien se puede poner una condicion por la que la diferencia en % del valor de MACD del inicio del periodo y el minimo sea de XX para descartar el tipico cruce de MACD de uno o dos días en una tendencia a la baja con poca volatilidad que no marcaría minimos reales.

Las condiciones para cruces a la baja de MACD son:

c1 = (MACDline[12,26,9](close) < ExponentialAverage[9](MACDline[12,26,9](close)))
c2 = (MACDline[12,26,9](close)[1] > ExponentialAverage[9](MACDline[12,26,9](close))[1])

No sé si funcionara esto:
if
(MACDline[12,26,9](close) < ExponentialAverage[9](MACDline[12,26,9](close)))
and
(MACDline[12,26,9](close)[1] > ExponentialAverage[9](MACDline[12,26,9](close))[1])
then

Lo posteo por si algun experto lo ve y quire dar alguna idea antes de meterme a programar el detalle.

Gracias!!

#26

Re: Codigos Proscreener (Prorealtime)

Alguien ha notado incongruencias en el resultado del drawdown en los backtest de proreal? Tanto el valor absoluto como el relativo.
Ya os anticipo que yo ese valor lo calculo manualmente.

#27

Re: Codigos Proscreener (Prorealtime)

Ya está! Creo que esta es la versión definitiva de divergencias, seguramente se puede perfeccionar pero esta sí que funciona. El criterio es que para buscar divergencias bajistas rastree los máximos en precio y MACD que se producen tras un cruce al alza de MACD hasta el siguiente, a ese tiempo lo denomino rangos. La condición es que los precios hagan máximos crecientes y MACD mínimos decrecientes. He incluido un indicador de “fuerza” que básicamente es la suma de las diferencia en % entre los dos últimos MACD + el cuadrado de la diferencia en % de los dos últimos precios. Cuanto más alto el valor más pronunciada es la divergencia. Recomiendo configurar por defecto diario, y después cambiar el “time frame” según lo que os interese en cada momento. Cuelgo la versión para divergencias bajistas en 3 rangos (tres precios crecientes y tres MACDs decrecientes), tengo también la versión dos rangos bajistas y tres y dos rangos divergencias alcistas. Si alguien las quiere que me las pida. Gracias a Jack113 por pedirme que le echara una mano y darme la idea del bucle.

i = 0 d = 0 e = 0 f = 0 crucealza = (MACDline[12,26,9](close)[i] > ExponentialAverage[9](MACDline[12,26,9](close))[i]) AND (MACDline[12,26,9](close)[i+1] < ExponentialAverage[9](MACDline[12,26,9](close))[i+1]) // Busqueda de periodos tras cruce al alza hasta siguiente cruce al alza de Macd adjudica maximos MACD a variables For i = 0 to 1000 do If not crucealza[i] THEN d = d+1 precioH1 = highest[d](close) MacdH1 = highest[d](MACDline[12,26,9](close)) continue endif break next For i = d+1 to 1000 do If not crucealza[i] THEN e = e+1 precioH2 = highest[e](close)[d+1] MacdH2 = highest[e](MACDline[12,26,9](close))[d+1] continue endif break next For i = e+d+2 to 1000 do If not crucealza[i] THEN f = f+1 precioH3 = highest[f](close)[e+d+2] MacdH3 = highest[f](MACDline[12,26,9](close))[e+d+2] continue endif break next c1 = precioH1 > precioH2 AND precioH2 > precioH3 c2 = MacdH1 < MacdH2 AND MacdH2 < MacdH3 Fuerza = (((precioH1/precioH2)-1)*((precioH1/precioH2)-1))+((macdH2/macdH1)-1) SCREENER[c1 AND c2] (fuerza AS "Fuerza")

#28

Re: Codigos Proscreener (Prorealtime)

Buen9s dias Onpots,

He puesto el codigo en el proscreener como sigue...

i = 0 
d = 0 
e = 0 
f = 0

crucealza = (MACDline[12,26,9](close)[i] > ExponentialAverage[9](MACDline[12,26,9](close))[i]) AND (MACDline[12,26,9](close)[i+1] < ExponentialAverage[9](MACDline[12,26,9](close))[i+1])

// Busqueda de periodos tras cruce al alza hasta siguiente cruce al alza de Macd adjudica maximos MACD a variables 
For i = 0 to 1000 do 
If not crucealza[i] THEN 
d = d+1 
precioH1 = highest[d](close) 
MacdH1 = highest[d](MACDline[12,26,9](close)) 
continue 
endif 
break 
next 
For i = d+1 to 1000 do 
If not crucealza[i] THEN 
e = e+1 
precioH2 = highest[e](close)[d+1] 
MacdH2 = highest[e](MACDline[12,26,9](close))[d+1] 
continue 
endif 
break 
next 
For i = e+d+2 to 1000 do 
If not crucealza[i] THEN 
f = f+1 
precioH3 = highest[f](close)[e+d+2] 
MacdH3 = highest[f](MACDline[12,26,9](close))[e+d+2] 
continue 
endif 
break 
next

c1 = precioH1 > precioH2 AND precioH2 > precioH3 
c2 = MacdH1 < MacdH2 AND MacdH2 < MacdH3 
Fuerza = (((precioH1/precioH2)-1)*((precioH1/precioH2)-1))+((macdH2/macdH1)-1) 
SCREENER[c1 AND c2] (fuerza AS "Fuerza")

Una vez busca valores, despues de econtrarlos o no...me da un error el proscreener que pone algo asi como "... error de bucle infinito en proscreener..."...es normal???

Saludos!!!!

#30

Re: Codigos Proscreener (Prorealtime)

¡¡Eres un Crack Onpots!!

Gracias porque has demostrado saber programar, plasmar ideas y mejorarlas ;)