Buenas,
He estado fuera y no he podido contestar hasta ahora.
Elvys escribió:bunder escribió:Entonces has formulado mal la consulta. No quieres decir que "necesitas datos intradía para testear los sistemas", sino que necesitas datos en tiempo real para probar los sistemas en tiempo real.
De todos modos, si un sistema está bien programado y se han incluido las comisiones y los slippages adecuados, los resultados sobre el histórico no tienen porqué diferir de los obtenidos en tiempo real sobre esos mismos datos.
lo pregunto por no saberlo,pero como podemos estar seguros de q un sistema esta bien programado??

Si una vez diseñado y programado un sistema queremos probarlo sobre los históricos disponibles, tenemos que tener una serie de precauciones. Llamo estar bien programado en este contexto a haberlo hecho con el enfoque de que se comporte sobre los históricos de la forma más parecida posible a como lo hubiera hecho en ese mismo periodo en tiempo real.
Para que esto sea así, es preciso conocer en detalle como funciona el sistema durante el proceso de un histórico. Como esa información no la proporciona VC (la información que poporcionan es tan escasa, mala y desactualizada que les debería dar vergüenza), uno aprende a base de leches. Hace tiempo abrí un hilo con la intención de contar algunas de estas cosas, pero ando fatal de tiempo.
Como ejemplo, puedo poner que si por un error en una fórmula utilizas un número de barra negativo (.Close(-2) p. ej.) el sistema en tiempo real devolverá el cierre de la barra actual, pero si estás probando sobre un histórico te devolverá el cierre de dos barras hacia adelante. Oséa, ¡te predecirá el futuro! Eso hace que las estadísticas te salgan cojonudas, pero que a la hora de la verdad el sistema no se comporte igual en pruebas que en real.
Otro caso muy parecido ocurre si abrimos una serie de datos desde un sistema. Por ejemplo: estamos en un gráfico de 5 minutos y queremos que el sistema compruebe el cierre de la última barra de 6 días de un gráfico que hemos abierto en memoria (p. ej. DD = .GetSymbolIdentifier("010015ED", 6, crDias, "31/10/2002", "31/10/2036")). Bueno, pues en tiempo real, al pedir el dato correspondiente usando una expresión como .Close(0, DD), el sistema nos devolverá el cierre de la última barra de ese gráfico virtual, que es lo que queremos. Sin embargo, si estamos insertando el sistema sobre un histórico, nos volverá a predecir el futuro, en esta ocasión con varios días de antelación, dependiendo del día en que estemos con respecto al gráfico virtual.
Gracias a esto, podemos conseguir un sistema que nos de unas estadísticas que nos hagan soñar con un futuro color de rosa

, pero que a la hora de funcionar en real nos pegue unas leches de narices

.
Si se tienen en cuenta este tipo de cosas, mi experiencia es que el sistema sobre el histórico obtiene los mismos resultados que en tiempo real. Y me refiero a mi experiencia práctica con pasta de verdad. Nada de teorías.
alquimista escribió:bunder escribió:De todos modos, si un sistema está bien programado y se han incluido las comisiones y los slippages adecuados, los resultados sobre el histórico no tienen porqué diferir de los obtenidos en tiempo real sobre esos mismos datos.
Error Bunder. Esa es la idea de la que partimos cuando no conecemos las trampas que tienen montadas en el mercado.
Ya veras con el tiempo la realidad y te aseguro que es muy distinta. Aunque no habitual si ocurre más de lo que podemos imaginar en un principio cosas como las que has mostrado de las barras fantasmas (y como te comenta X-Trader los datos que te grafica Visual solo depende de ellos y nadie más, que no sigan echando balones fuera como siempre), orden que se lance en el momento de una noticia donde el slipage pueden ser hasta 60 pipos de Bund (pues aunque la barra marque un precio de apertura te aseguro que en la realidad no hay quien consiga ese cruce sino mucho mas lejos), ya lo vereis y vivireis con los años. Y para los que ni han caido, contar con los deditos la diferencia que hay en un sistema aplicado al Bund que mantenga posiciones abiertas el dia de vencimiento (que seguro que ni os habeis fijado que la diferencia de precio entre un vencimiento y el otro lo aprovechais como ganancia y no como error de calculo).
Venga, ya teneis deberes para unos días y que no decaiga la ilusion, jejejeje.
Suerte y abrazos, no deseo molestar ni inquietar mas pero las reglas del juego las ponen ellos y se escudaran en que todo es legal.
Los de VC no han pretendido echar balones fuera. Lo que han dicho es que esas barras misteriosas sólo se producen con la demo de la TWS, que lleva un retardo de 15 minutos. Pero no han dicho que la culpa la tenga IB. Y que conste que no tengo participación en el negocio

.
Para evitar lo de las barras con mucha volatilidad, lo normal es instruir a tu sistema para que no entre al mercado en esas situaciones. Con decirle que, en caso de que la diferencia entre el máximo y el mínimo de la barra actual sea mayor de un valor X no haga ninguna operación, es bastante para ahorrarse sustos.
En cuanto a lo de los vencimientos, no tiene ninguna dificultad agregar las instrucciones precisas al sistema para que cierre posiciones el día anterior al vencimiento. Y si utiliza medias que se puedan distorsionar, se le puede decir que no opere tampoco al día siguiente.
En fin, mi experiencia es que teniendo a la vista siempre el funcionamiento del sistema de pruebas, es perfectamente posible diseñar sistemas que se comporten de manera idéntica en pruebas y en real (obviamente, si se nos cae el ordenata en plena faena o nos cortan la ADSL, entonces ya no coincidirán los resultados

).
Vaya tocho me ha salido. I´m sorry.
Saludos
