Backtesting con Prorealtime

El espacio de los traders quant: sistemas de trading, gestión monetaria, automatización de sistemas.
Responder
Elena23
Mensajes: 1
Registrado: 03 Jun 2015 19:14

Backtesting con Prorealtime

Mensaje por Elena23 »

Estoy intentando pasar un sistema en mi cabeza a prorealtime y no hay manera de conseguirlo.

Mi primer problema es que quiero que la orden de compra o de venta se compruebe en el grafico diario y que si la condicion que le pongo se cumple pase a la siguiente condicion esta seria en graficos de 3 horas y si esta segunda tambien se cumple entonces entramos al mercado.

Le estoy dando vueltas y no se como combinar los dos graficos diario y 3 horas.

Alguien me ayuda por favor
Avatar de Usuario
Rafa7
Mensajes: 4923
Registrado: 17 Dic 2009 21:36
Contactar:

Re: Backtesting con Prorealtime

Mensaje por Rafa7 »

Elena23 escribió: Le estoy dando vueltas y no se como combinar los dos graficos diario y 3 horas.
Hola Elena23,



Creo que no se puede diseñar, con PRT, estrategias con varios timeframes simultáneos.

Lo que podrías hacer es programar en gráficos de 3 horas y jugar con los parámetros para aproximar los indicadores de timeframe diario.
Por ejemplo, si quieres considerar la media móvil de 20 días en un gráfico de velas de 3 horas, multiplicar el periodo por 24 / 3 = 8. O sea, que una media móvil de 20 * 8 = 160 velas de 3 horas serían como la media móvil de 20 días.



Saludos.
¡Jesús es el Rey de Reyes y el Señor de Señores!
https://loquepermanece.blogspot.com
Avatar de Usuario
agmageton
Mensajes: 3580
Registrado: 30 Ene 2008 11:32

Re: Backtesting con Prorealtime

Mensaje por agmageton »

Hay un problema históricamente asociado a generar gráficos intradía (horas) con conceptos diarios, y es que las barras no suelen coincidir si el gráfico histórico es amplio, de algún modo se pierden varias barras intradiarias o cambian los horarios históricamente y se suelen incrementar las barras o disminuir.

Por lo que tendrás que hacer un poco de programación para una mejor aproximación a la realidad.

1º contar barras por día (continuo)
2º una media simple de 2 días, con la media de barras que hay esos 2 días (continuo)
3º una formula sencilla, x días * la media de barras actual por día, ejemplo matemático;

10 días * 5 barras de media diaria de 3 horas= la media de 10 se consigue con 50 barras de 3 horas.

espero haber ayudado, es importante porque imagina que el activo que vas a componer ha cambiado de horario y en vez 5 barras de 3 horas ahora tiene 8...de igual modo hay días que se cierra antes el mercado, o que la base de datos que extrae las barras ha hecho algunas agrupaciones malas, esto suele pasar, sobretodo con históricos amplios...

De este modo, por lo menos te aseguras que la media de 10 días será con las barras reales que hayan realizado esos 10 días en tu base de datos (este mal o bien), es preferible esto, a poner barras de más o de menos, y que se aleje mucho de la realidad de tu base de datos.

saludos.
La entrada te da la probabilidad y la salida la rentabilidad...
Rango Starr
Mensajes: 3842
Registrado: 22 Dic 2014 10:49

Re: Backtesting con Prorealtime

Mensaje por Rango Starr »

.
Última edición por Rango Starr el 17 May 2021 10:09, editado 1 vez en total.
un ciclo y otro ciclo, son un biciclo...
si añadimos otro ciclo, entonces tendremos "un triciclo"... famoso trio catalan de humor de los 90....

..y nada mas...
Trollputero
Mensajes: 143
Registrado: 16 Jul 2010 13:56
Ubicación: from hell

Re: Backtesting con Prorealtime

Mensaje por Trollputero »

También lo puedes hacer de forma manual, es un verdadero coñazo.
Duplicas el gráfico y vas apuntando los resultados en una hoja de calculo.

Si no lo quieres hacer manual la idea que propone Rafa7 me parece interesante.

Yo hice este backtesting, compra si ambos momentums parametros 100 y 8 están en positivo, la salida se hace solo con el momentum de 8 dias.

La idea de este sistema me lo comentaron en un blog, los parámetros originales eran 20 y 5, cambiando las variables por 100 y 8 los resultados en teoría son mejores, seria interesante tener los resultados reales ;)

Código: Seleccionar todo

// Definición de los parámetros del código
DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
a=100
b=8
// Condiciones para entrada de posiciones largas
indicator1 = Momentum[a](close)
indicator11=momentum[b](close)
c1 = (indicator1 > 0) and (indicator11 > 0)

IF c1 THEN
BUY 1 SHARES AT MARKET
ENDIF

// Condiciones de salida de posiciones largas
indicator2 = Momentum[b](close)
c2 = (indicator2 < 0)

IF c2 THEN
SELL  AT MARKET
ENDIF

// Condiciones de entrada de posiciones cortas
indicator22 = Momentum[a](close)
indicator3 = Momentum[b](close)
c3 = (indicator3 < 0) and (indicator22 < 0)

IF c3 THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF

// Condiciones de salida de posiciones cortas
indicator4 = Momentum[b](close)
c4 = (indicator4 > 0)

IF c4 THEN
EXITSHORT  AT MARKET
ENDIF

pd: luego al grafico de liquidez se le ponen dos medias, si están cruzadas al alza, se puede operar, si están cruzadas a la baja es mejor esperar a que termine el horroroso, espantoso, drawdown, es solo una idea.
Imagen

Avatar de Usuario
Rafa7
Mensajes: 4923
Registrado: 17 Dic 2009 21:36
Contactar:

Re: Backtesting con Prorealtime

Mensaje por Rafa7 »

Rango Starr escribió:
Elena23 escribió:Estoy intentando pasar un sistema en mi cabeza a prorealtime y no hay manera de conseguirlo.

Mi primer problema es que quiero que la orden de compra o de venta se compruebe en el grafico diario y que si la condicion que le pongo se cumple pase a la siguiente condicion esta seria en graficos de 3 horas y si esta segunda tambien se cumple entonces entramos al mercado.

Le estoy dando vueltas y no se como combinar los dos graficos diario y 3 horas.

Alguien me ayuda por favor

Hola Elena23, en prorealtime, tienes las ordenes Dopen(n), Dclose(n), DHigh(n), DLow(n), para poder utilizarlas en timeframe inferiores. Son el máximo, minimo, apertura y cierre del dia enésimo.

Claro que es un curre impresionante (sobre todo en cuanto a tiempo de calculo), ya que si quieres por ejemplo una media al close de 20 días, tendras que hacer un bucle for --- next de 20 periodos, asignar la suma a una variable, para luego dividirla por 20... se hechan en falta arrays, o matrices de asignacion. No te digo nada si lo que quieres es calcular un Rsi, estocástico o algo mas complejo, y que por ejemplo sea para 200 periodos ( para implementarlo en time frame inferior), vamos fundes el procesador....

Saludos!
Gracias, Rango Starr.



No conocía las funciones que mencionas. Son muy interesantes.

No tengo PRT en intradiario y por eso voy a preguntar (si tuviera PRT intradiario haría una prueba e lugar de preguntar).
¿No se puede hacer lo siguiente?

smaDiario(n) = average[n] (dClose)

o

smaDiario(n) = average[n] (dClose(0))

o

smaDiario(n) = average[n] (dClose [1])

Por ejemplo, si uno quiere en un timeframe intradiario la media móvil de 20 días podría definir así:

smaDiario(20) = average[20] (dClose)

Y si uno quiere el promedio exponencial de 20 días:
emaDiario(20) = exponentialAverage[20] (dClose)

Y el rsiDiario:

rsiDiario(14) = rsi[14] (dClose)

Si lo que digo es correcto, no es tán difícil. No hace falta FOR NEXT. Tal vez no se funda el procesador ...

Si tuviera PRT intradiario lo probaría, ...

¿Alguien podría probar lo que propongo y nos comenta?



Gracias.
¡Jesús es el Rey de Reyes y el Señor de Señores!
https://loquepermanece.blogspot.com
Rango Starr
Mensajes: 3842
Registrado: 22 Dic 2014 10:49

Re: Backtesting con Prorealtime

Mensaje por Rango Starr »

.
Última edición por Rango Starr el 17 May 2021 10:09, editado 1 vez en total.
un ciclo y otro ciclo, son un biciclo...
si añadimos otro ciclo, entonces tendremos "un triciclo"... famoso trio catalan de humor de los 90....

..y nada mas...
Avatar de Usuario
Rafa7
Mensajes: 4923
Registrado: 17 Dic 2009 21:36
Contactar:

Re: Backtesting con Prorealtime

Mensaje por Rafa7 »

Me temo que lo que propuse no es buena idea porque seguramente el PRT en cada vela del intradiario tomará como dClose el mismo valor, y, entonces el promedio del mismo valor es el mismo valor.

Si uno quiere, en un timeframe intradiario, una media móvil diaria de 20 periodos y quiere evitar un for next, se podría hacer esto:

smaDiaria = (dClose(0) + dClose(1) + dClose(2) + dClose(3) + dClose(4) + dClose(5) + dClose(6) + dClose(7) + dClose(8) + dClose(9) + dClose(10) + dClose(11) + dClose(12) + dClose(13) + dClose(14) + dClose(15) + dClose(16) + dClose(17) + dClose(18) + dClose(19)) / 20

He sugerido empezar por 0, pero se podría empezar por 1.

Es aberrante pero no funde el procesador.



Saludos.
¡Jesús es el Rey de Reyes y el Señor de Señores!
https://loquepermanece.blogspot.com
Avatar de Usuario
Rafa7
Mensajes: 4923
Registrado: 17 Dic 2009 21:36
Contactar:

Re: Backtesting con Prorealtime

Mensaje por Rafa7 »

Lo que sugerí de que 8 velas de 3 horas equivalen a 1 diaria, es valido solo para Forex (y otros mercados de 24 horas) y para determinados indicadores (medias móviles, momentum, MACD, etc ...), pero no para el RSI, ni Parabolic SAR.

En cuanto al RSI, sí sería váldido si comparamos el rsi con 50.
rsi(14, diario) = rsi(14 * 8; 3 horas) = rsi(112; 3 horas).
Esto sería válido si comparamos con 50 (> 50, < 50). Pero no sería válido para sobrecomprado (> 70), ni para sobrevendido (< 30).

En cuanto a Bolsa: Una sesión diaria tiene 8,5 horas. Si queremos una media móvil diaria en un timeframe de 15 minutos, siguiendo la idea de agmageton, entonces:
8,5 horas = 8,5 * 60 minutos = 510 minutos.
510 / 15 = 34.
O sea una sesión diaria contiene 34 velas de 15 minutos.

Por lo tanto, en timeframe de 15 minutos:
smaDiario(n) = sma(n * 34).

Si n = 20, entonces:
smaDiario(20) = sma(20 * 34) = sma(680).


El problema estaría en algunos indicadores como RSI, Parabolic SAR, ADX, etc ...



Saludos.
¡Jesús es el Rey de Reyes y el Señor de Señores!
https://loquepermanece.blogspot.com
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Sistemas de Trading”