Rankia - Comunidad Financiera
Usuarios  |  Regístrate  |  Ayuda
 

5 de mayo de 2008

Laboratorio de Inversión y Especulación 4 - Históricos arreglados y mas funciones

He actualizado el downloader para que sea configurable y podamos usar el formato descrito en el coloquio de voz.

También investigué el problema de las fechas que se corregía simplemente con especificar un Locale en ingles, pero ya no es necesario especificarlo dado que lo hago internamente en el código.

El código fuente lo dejo aquí de momento estará disponible en SourceForge dentro de poco. (Dos semanas a un mes...)



El código fuente son solamente 14 clases!

Tal como comentamos se pueden descargar históricos entre dos fechas:

RETRIEVE VALUE 694653 FROM GOOGLE INITDATE 01/01/2006 ENDDATE 04/03/2006 TICKER GOOGLE
RETRIEVE VALUE %5EIBEX FROM YAHOO INITDATE 01/01/2006 ENDDATE 04/04/2006 TICKER IBEX
RETRIEVE VALUE
ES0173516115 FROM BOLSAMADRID INITDATE 01/01/2006 ENDDATE 04/04/2006 TICKER REPSOL

Y también podemos actualizar un archivo que ya tenemos con históricos:

UPDATE VALUE 694653 FROM GOOGLE TICKER GOOGLE
UPDATE VALUE %5EIBEX FROM YAHOO TICKER IBEX
UPDATE VALUE ES0173516115 FROM BOLSAMADRID TICKER REPSOL


Si estamos bajo un proxy lo podemos configurar con un archivo llamado proxy.prop que será algo así:

# Proxy
proxyurl = proxy
proxyport = 8080
proxyuser = usuario
proxypassword = password


También podemos configurar los formatos de comas, puntos etc... Creando un config.prop pero de momento lo dejaremos con los valores por defecto.
Como necesitaremos actualizar muchos archivos simultáneamente podemos juntarlos todos en un archivo batch y hacerlo de una sola vez.

java -jar lab-v0.2.jar BATCH batch1.batch
java -jar lab-v0.2.jar BATCH batch2.batch


Tareas a realizar por programadores y que podemos repartirnos:
- Que funcione desde Windows y no sea necesario descargar java.
- Que el nombre usado para el ticker no dependa de la url.
- Que la gente no tenga que descargar la aplicación cada vez que se actualice sino que sea automático.
- Mostrar gráficas con los datos.
- Hacer Unit Tests.
- Comentar el código.
- Eliminar el uso de funciones "deprecated".
- Mejorar los errores presentados si los parámetros de entrada no son correctos.
- Gestionar una base de datos HSQL en memoria.
- Que las nuevas fuentes de datos se metan mediante configuraciones de Spring.
- Funcionalidad de Log con Log4j.

Principal tarea a repartir y que voy a explicar mas en detalle: (Me parece la mas prioritaria e importante)
- Descargar históricos de diferentes fuentes y en diferentes formatos.

Como podéis observar "un descargador" solo son unas pocas líneas de código, debería ser muy, muy fácil agregar mas, espero que me mandéis muchos!

Ahora mismo tenemos tres fuentes de las que descargar: (En el paquete jds.com.locations.sites)
- Google
- Yahoo
- BolsaMadrid

Podemos pedirle a Francisco Llinares que nos diga cuales serian las siguientes fuentes mas interesantes para continuar.

Voy a empezar con las dos primeras tareas, espero a los colaboradores que me digan en que parte quieren colaborar o si tienen otras tareas en mente que podamos hacer, se me ocurren muchísimas mas...

Quien quiera usar los datos de salida en un modulo aparte independiente en java u otro lenguaje lo puede hacer fácilmente. (Ya lo conectaremos luego.. con Webservices o lo que sea)

Tareas a realizar para los no programadores:
- Crear un batch con que descargue por primera vez todos los valores del mercado continuo, todos los índices, los valores del eurostoxx, del SP500 etc... (Cada uno se podría encargar de uno diferente, enviarme el batch terminado y yo o rankia lo ejecutaríamos a diario y actualizaríamos los históricos en los servidores de rankia)

Creo que es una tarea que lleva bastante trabajo, preguntadme cualquier duda al respecto.

Para los programadores, tened en cuenta que tenemos tiempo y recursos limitados, nos interesa ir al grano, obtener resultados con el menor esfuerzo posible, por tanto en lo que se refiere a gráficos etc, debemos de utilizar un paquete Open Source que sea mantenido por otro y sea de fácil integración.

En cuanto alguien se ponga manos a la obra con las gráficas podemos hablar con Francisco Llinares para ver que capacidades deben de tener estos gráficos, como mostrar los 40 gráficos de los vencimientos de los futuros... etc...

Creo que ya tenemos un inicio! En el próximo post explicare como funciona el código, como extenderlo y como ejecutarlo desde Eclipse.

Archivos:
Downloader.zip
batch1.batch - Batch de ejemplo para descargar estos 3
batch2.batch - Batch de ejemplo para actualizar estos 3
GOOGLE.data - Ejemplo de datos descargados de Google
IBEX.data - Ejemplo de datos descargados de Yahoo
REPSOL.data - Ejemplo de datos descargados de BolsaMadrid
lab-v0.2.jar - Segunda version del laboratorio

Nota: Yo calculo que en 3 o 4 semanas tendre la proxima version con mas cosas, si me mandais codigo, podre tener mucho mas y quizas antes! Comentad que es lo que quereis hacer cada uno!

Ultima version del codigo actualizada por Juan Albisu: srcRankia0.3.0.3.rar (La actualizare aqui hasta tener la cuenta de sourceforge o hasta que escriba otro post)

Etiquetas: ,

14 de abril de 2008

Laboratorio de Inversión y Especulación 3 - Históricos y Coloquio

Este post lo escribo, con la idea de comunicar el coloquio que tendremos el jueves, para hablar sobre la aplicación de simulación, será este jueves a las 20:00, el coloquio es idea de Francisco Llinares, que estoy seguro puede aportar muchas mas ideas desde el punto de vista del análisis técnico que yo, y entre unos cuentos llevarlas a los circuitos.

Tenéis tiempo para pensar ideas para aportar, preguntas y sugerencias, yo me incluyo en ello!

Por tanto voy a dar una primerisima versión del descargador de históricos, que no debería de dar hoy porque todavía apenas lo he probado y esta con pinzas, pero que como descargar, descarga y es la base para realizar estudios de pautas, lo voy a publicar, aunque de aquí al jueves lo habré mejorado bastante.

Lo primero que necesitamos es tener java instalado, para ello, podemos comprobarlo en la siguiente URL: http://javatester.org/version.html

Necesitamos un mínimo de java 5, si no lo tenemos instalado necesitaremos descargarlo de sun, es gratuito.

Una vez que lo tengamos si habrimos una línea de comandos (Inicio - Ejecutar - cmd), pantallita negra del dos, aquello tan antiguo que desde que hay windows ya no se usa...

Podemos ver la versión de java que tenemos tecleando java -version y debería aparecer algo así:


Si tenemos instalado java 5, tenemos que descargar el archivo lab-v0.1.jar en cualquier directorio, ir a dicho directorio usando la línea de comandos osea cd directorio y allí probarlo, por ejemplo:

java -jar lab-v0.1.jar RETRIEVE VALUE 694653 FROM GOOGLE INITDATE 01/01/2006 ENDDATE 04/04/2006 FILENAME goog.data TICKER GOOGLE

Deberíamos de obtener algo así en pantalla: (Al que le parezca arcaico en linea de comandos ya sabe lo que hacer si se aburre....)

Y un archivo de texto generado que podemos abrir con notepad y debe de ser algo como esto:


Ahora paso a explicar el funcionamiento de la aplicación:

RETRIEVE VALUE value FROM url FILENAME filename TICKER ticker INITDATE initdate ENDDATE enddate

Con RETRIEVE le indicamos que queremos descargar históricos, en la próxima entrega tendremos UPDATE que simplemente sin darle fechas ni nada mas, solo el nombre del archivo nos actualizara con los nuevos históricos disponibles, también pondré STUDY para realizar un estudio sobre los históricos de un archivo.

Otra cosa que esta casi lista es BATCH para tener varios comandos seguidos en un archivo, como por ejemplo varios UPDATE seguidos de STUDY.

VALUE es un valor que depende de la pagina que estamos descargando los históricos, lo mas fácil es ir a la propia pagina y de la URL obtener ese valor que se puede apreciar en GOOGLE es para los históricos de GOOGLE, en YAHOO es para los históricos del IBEX35, en BOLSAMADRID es para REPSOL, en otra entrega lo pondré mas fácil de usar, pero de momento con esto nos arreglamos.

FROM hasta ahora se puede especificar bolsamadrid, google o yahoo, los VALUE son diferentes para cada uno y hay que sacarlos de la url de cada una de las paginas, si hay dudas con esto lo explicare en los comentarios, pongo un par de ejemplos:


http://finance.google.com/finance/historical?cid=694653&startdate=Apr+16%2C+2007&enddate=Apr+14%2C+2008

http://finance.yahoo.com/q/hp?s=%5EIBEX&a=01&b=15&c=1993&d=03&e=14&f=2008&g=d

http://www.bolsamadrid.es/comun/empresas/infhist.asp?id=esp&nombre=REPSOL+YPF&isin=ES0173516115&bolsa=0&scontrata=02&tipo=htm&dia1=01&mes1=01&anyo1=2005&dia2=30&mes2=03&anyo2=2006&Buscar=Aceptar

TICKER simplemente es el nombre que queramos que ponga en el archivo, así que pondremos GOOGLE, REPSOL o IBEX35 en cada caso.

FILENAME es el nombre del archivo que queremos que genere, si ya existe tomara los datos que contenga y agregara los nuevos que encuentre.

INITDATE es la fecha de inicio para la recuperación de históricos, ENDDATE la final.

Con esto terminamos por ahora, es una versión muy de pruebas pero suficiente para obtener un archivo con históricos que se pueda utilizar desde otro programa que puede ser un modulo totalmente diferente que use los históricos para hacer simulaciones y no tiene porque ser Java, puede ser C++ o cualquier otra cosa, creo que leer esos históricos y por ejemplo hacer un cruce de medias móviles y calcular la rentabilidad no es complicado para nada, de ahí podemos seguir en adelante.

El que lo pruebe y le funcione bien que me lo diga, el que tenga algún tipo de problema que también me lo diga ya que apenas lo he probado hoy mismo, pero como quería anunciar el coloquio, me he decidido a ponerlo aquí, el código fuente lo pondré después cuando lo ponga mas aceptable, pero ello no impide que alguien empiece otro módulo por su cuenta para hacer test y simulaciones de pautas.

Espero que os guste!

Esto lo escribo a posteriori, aqui esta el archivo de voz del coloquio.

NOTA: El problema de las fechas se arregla con java -Duser.language=en -Duser.country=EN

Etiquetas: , ,