Laboratorio de Inversión y Especulación 3 - Históricos y Coloquio
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.yahoo.com/q/hp?s=%5EIBEX&a=01&b=15&c=1993&d=03&e=14&f=2008&g=d
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: coloquio, historicos, laboratorio



Hola Dalamar,
Me da rabia decirte que no voy a poder asistir al coloquio.
Estaré atento a posteriori para ver qué puedo aportar.
Sigo esto con interés, sigue así.
No funciona, pruebalo de nuevo :
>java -jar lab-v0.1.jar RETRIEVE VALUE 694653 FROM GOOGLE INITDATE 01/
01/2006 ENDDATE 04/04/2006 FILENAME goog.data TICKER C
Error
java.text.ParseException: Unparseable date: "31-Jan-06"
at java.text.DateFormat.parse(Unknown Source)
at jds.com.locations.Google.start(Google.java:140)
at jds.com.locations.Google.retrieve(Google.java:82)
at MainHelper.process(MainHelper.java:88)
at Main.main(Main.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.simontuffs.onejar.Boot.run(Boot.java:306)
at com.simontuffs.onejar.Boot.main(Boot.java:159)
No results on: http://finance.google.com/finance/historical?cid=694653&startdate
=Jan+2%2C+2006&enddate=Jan+31%2C+2006
Eso tiene pinta de que las fechas estan configuradas en diferentes idiomas, tu debes de tenerlo configurado en espanol y yo en ingles o algo asi, voy a Espana hoy mismo, asi que lo probare alli en algun otro ordenador y actualizare el post!
Gracias por testearlo.
A mi tb me peta... no se pq no puede cojer la fecha 31/01/06
E:\java>java -jar lab-v0.1.jar retrieve value 694653 from google initdate 01/01/
2006 enddate 04/04/2006 filename goog.txt ticker google
Error
java.text.ParseException: Unparseable date: "31-Jan-06"
at java.text.DateFormat.parse(Unknown Source)
at jds.com.locations.Google.start(Google.java:140)
at jds.com.locations.Google.retrieve(Google.java:82)
at MainHelper.process(MainHelper.java:88)
at Main.main(Main.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.simontuffs.onejar.Boot.run(Boot.java:306)
at com.simontuffs.onejar.Boot.main(Boot.java:159)
No results on: http://finance.google.com/finance/historical?cid=694653&startdate
=Jan+2%2C+2006&enddate=Jan+31%2C+2006
Se agradecería el código fuente, para echarle un ojo más en profundidad.
Ok esta semana lo pongo, ahora mismo estoy apunto de coger un avion para ir a la madre patria por una semanita!
Que suerte!!! Aprovecha el sol que ya sabes que aquí de eso no tenemos.
Seguiré atento al blog para pillar el código. Es más por curiosidad que otra cosa, metiendo el jar en cualquier proyecto ya debería funcionar.
Hola Dalamar,
Para los que tenemos un mac, con version de Java (1.5 ) . En mi caso utilizo el sistema Tiger 10.4.11 ¿ podemos hacer algo ?
Muchas gracias por tus aportaciones.
Saludos,
Puertotriana
El programa deberia de funcionar sea Mac, Linux, PC o lo que sea, mientras tenga java minimo 1.5 o 5 que es lo mismo (cambiaron el nombre por motivos de marketing) funcionaria de todas formas, es una de las ventajas de usar java.
Parece que tengo un problemilla con las fechas que intentare arreglar estos dias con mi portatil desde España si puedo sino sera la semana que viene viene cuando regrese a Londres.
Respecto al codigo fuente esta sin comentar y sin "pulir" le pego un buen repaso y lo pongo en el blog, es muy simple una decena de clases usando httpUnit para parsear las webs.
No hace falta que lo pulas mucho. Y los comentarios tampoco es que sean imprescindibles.
Gracias por el aporte.
Hola Dalamar, una simple corrección ortográfica:
"Una vez que lo tengamos si habrimos una línea de comandos"
Se nota que es un despiste :) a mi me suele dar bastante rabia meter faltas en los post, así que te lo comento de forma constructiva :).
Saludos,
JMSlay.
Muchas gracias por la correccion! En cuanto regrese lo corrijo, ahora solo miro el email en plan 5 min, que tengo miles de personas por visitar!
Es lo que tiene venir 2 o 3 veces al año!
Hola Dalamar,
Escuche el coloquio con F.Llinares y me pareció muy interesante. En lo que pueda intentaré colaborar.
Tengo una duda que tal vez tu puedas ayudarme o darme alguna pista. He intentado extraer datos de una web en la que se miran cotizaciones de renta fija.
http://boerse-frankfurt.com/pip/dispatch/de/pip/private_investors/home?module=M_Search&wptyp=Bond&search=solvay&lang=de&navpath=http://boerse-frankfurt.com/pip/dispatch/de/pip/private_investors/home&navpath=http://boerse-frankfurt.com/pip/dispatch/de/pip/private_investors/home
Pero no obtengo las cotizaciones. En cambio pruebo con la pagina de google finance y si que me salen.
De momento pruebo con un programa que he encontrado (Httpdemo.exe).
De hecho acabo de mirar el codigo fuente de la pagina, desde mozilla, y no salen las cotizaciones y en google finance si que salen.
¿crees que puede ser debido al javascrip o algun otra cosa particular de esta página?
¿Podrias probar con tu programa, a ver si obtienes mejores resultados?
Saludos y gracias
Juan
Hola Dani, llego justo a tiempo para tu interesante aportación, veré si puedo acudir esta tarde al coloquio. Si no puedo, es que morí en el intento pues bien sabes que se de mercados más que de informática y viendo el lenguaje ya miedo me estais dando. Venga, nos vemos, y si no por email.
Miguel Angel, el coloquio fue la semana pasada, acabo de llegar de mis vacaciones y yo tambien me estoy poniendo al dia. No se si la grabacion esta por ahi, ya voy ver.
Un saludo,
Dani
Creo que antes no ha quedado bien el link a la web de Renta Fija que te comentaba
Bolsa Franckfurt
saludos
Juan
Acabo de probar el programa descargado desde el post y me ha funcionado.
Por tanto debe de ser cosa del idioma:
http://java.sun.com/developer/technicalArticles/J2SE/locale/
Lo he probado de la siguiente forma y me da el mismo error que a vosotros:
java -Duser.language=es -Duser.country=ES -jar lab-v0.1.jar RETRIEVE VALUE 694653 FROM GOOGLE INITDATE 01/01/2006 ENDDATE 04/04/2006 FILENAME goog.data TICKER C
Por lo tanto para que os funcione a vosotros seria asi:
java -Duser.language=en -Duser.country=EN -jar lab-v0.1.jar RETRIEVE VALUE 694653 FROM GOOGLE INITDATE 01/01/2006 ENDDATE 04/04/2006 FILENAME goog.data TICKER C
Un par de comentarios a lrespecto:
He utilizado eclipse para escribir el codigo, que es gratuito:
http://www.eclipse.org/downloads/
He utilizado Big Fat Jar para empaquetar las librerias necesarias en un solo jar:
http://sourceforge.net/projects/fjep
Para parsear he usado httpUnit:
http://httpunit.sourceforge.net/
Todo es gratuito! Asi que para desarrollar no necesitais nada mas que una conexion a internet.
En unos dias actulizare la aplicacion con el formato que me dijo Francisco y pondre el codigo fuente para que podais colaborar.
Un saludo,
Dani
Juan, no deberia de haber problemas en descargar de esa pagina, pero cada pagina requiere un pequeno desarrollo y me tendria que poner, yo no he tenido problemas con el javascript usando httpUnit, pero en ese caso concreto no te sabria decir!
En cuanto tenga tiempo me pongo con ello.
Dalamar,
Gracias por la respuesta.
Solo te comentaba esto de la página de RF porque puede que pase en otras páginas de las que queramos extraer datos.
Decia lo del javascript, pero sin tener mucha idea. A mi me da la impresión de que en las tres páginas que tu pones (yahoo, google y BM) en el código fuente de cada una de las páginas(->Ver->Codigo fuente de la pagina [en el navegador Firefox]), se pueden buscar y encontrar los mismos datos que se pueden ver con el navegador. En cambio en la página que te pongo, utilizando el navegador se ve todo correctamente, pero al ver el código fuente, los datos interesantes, cotizaciones, dividendos, fechas, etc no estan. Es como si la página formada no la enviara (totalmente) el servidor WEB, sino que se ejecutara en mi ordenador algo (java? php?) que solicitara esos datos y rellenara los campos.
Tal vez me estoy liando un poco y es mas sencillo de lo que me parece. No pretendo en absoluto que intentes extraer datos de esa página, porque ya se que todo tiene su trabajo específico.
Solo quería saber si tu, o algún otro lector, sabe por donde van los tiros para extraer datos de este tipo de páginas.
Te agradezco cualquier aportación por tu parte, un saludo
El que quiera probar a descargar desde yahoo:
java -Duser.language=en -Duser.country=EN -jar lab-v0.1.jar RETRIEVE VALUE %5EIBEX FROM YAHOO INITDATE 01/01/2006 ENDDATE 04/04/2006 FILENAME yahoo.data TICKER IBEX
Me he dado cuenta que para BolsaMadrid necesito meter una libreria js.jar en el paquete para que gestione el javascript, esto para el siguiente post.