Rankia - Comunidad Financiera
Usuarios  |  Regístrate  |  Ayuda
 

3 de junio de 2008

Laboratorio de Inversión y Especulación 9 - Progreso hasta Junio (Segunda parte)

Aqui tenemos una explicacion de Juanmi de como esta todo por su lado, básicamente la mayoría de los cambios del core han sido suyos partiendo de mi pequeño esqueleto inicial:

La versión de desarrollo actual es la "alpha". Se encuentra en el repository svn: http://laboratoriodein.svn.sourceforge.net/viewvc/laboratoriodein/alpha/


¿que cambia?

Usa
Spring, log4j, quartz, Gridgain, aspectj y beanshell.

Los paquetes se han reestructurado, ahora todos cuelgan de org.laboratory.investment - Dentro de locations y locations.site siguen estando las abstracciones e implementaciones de descarga de quotas (Casi sin cambios, lo único que ahora bajan los históricos csv que sirven google y yahoo porque es mas flexible, rápido y cómodo).

¿Como funcionan ahora las cosas?
En org.aboratory.investment.start esta la Clase Boot que se encarga del arranque.
Lo que hace es descomprimir todos los archivos .
pack (compresión pack200) que encuentra. La aplicación de distribuye con las librerias comprimidas. Después crea un classloader con todos los .jar que están el lib y sus subdirectorios. Posteriormente en funcion del argumento recibido por Boot se lanza la aplicación(Main) o un nodo de computación(GridNode).

Desde el punto de vista del desarrollador:
1-Bajamos el proyecto,
src es la carpeta de fuentes. En el classpath del proyecto le metemos todos los paquetes que hay en lib y sus subdirectorios. Además añadimos al classpath del proyecto la carpeta /conf/aop/aspectj.

Si funcionamos en modo Grid:

En /conf/application.properties activamos el grid: org.lab.startup.embedded.Grid=true

A la hora de lanzar Boot tenemos que configurar las siguientes propiedades de

JVM: -ea "-javaagent:lib/aspectj/aspectjweaver.jar"


Si no pasamos ningún argumento mas al ejecutar Boot lanzaremos la aplicación, si le pasamos el argumento GridNode lanzaremos un nodo grid de apoyo.

Si no funcionamos en modo grid:

En /conf/application.properties desactivamos el grid: org.lab.startup.embedded.Grid=false

No hace falta pasar propiedades a la JVM.

Una vez invocado a Main desde Boot ocurre lo siguiente:
Se cargan las Beans (singletons) de Spring (conf/lab.xml) y el contexto se deja en org.laboratory.investment.config.LaboratoryContext para quien lo necesite (lo mejor seria inyectarlo en instanciacion pero por ahora así vale y es mas fácil de seguir). Hay una enumeración de las beans existentes actualmente para que sea mas cómodo y menos propenso a errores el uso.

Se usa la Bean STARTUPENGINES que es una instancia generada usando spring de la clase org.laboratory.investment.embeddedEngines.StartupEngines

Esta instancia se encarga de levantar los servicios en función de la configuración que se le ha puesto a través de lab.xml y application.properties (Por ahora asi es mas facil de seguir y controlar, si aumentan los servicios tendremos que ir a una arquitectura de microkernel). El main lo único que hace es recuperar esta instancia vía Spring y llamar a Start, cuando se termina llama a Stop.

Servicios en orden de arranque (todos se pueden activar o desactivar en la configuración):

Hsqldb embebido:
Arranca una base de datos
Hsqldb como persistencia.

HsqldbViewer:
Arranca el visor de base de datos de
Hsqldb

BeanShellConsole:
Arranca una ventana visual donde programar usando
BeanShell, desde ahí se pueden tocar las tripas de la aplicación en tiempo de ejecución.

Por ahora en cuanto a comodidad de script hay un comando en org.laboratory.investment.embeddedEngines.bsh que se inyecta al contexto de la consola: download("Sentencia de bajada ") lanzaría una descarga.

Iconified:No lo he puesto configurable por ahora, simplemente minimiza todas las ventanas visuales de la aplicación.

StartImport: Lee el directorio PlainQuotesImport y carga todos los .
data con quotes a la base de datos

StartTomcat: Arranca un tomcat embebido para poder hacer invocaciones desde Flex (jcampllonch esta desarrollando una capa visual).

StartBatch: Arranca el servicio de carga de scripts. Usa Quartz, cada minuto se comprueba el directorio batch buscando ficheros .
batch nuevos, Si hay alguno
se abre, se cargan las sentencias de descarga y se lanzan.

StartScript: Lo mismo que en el caso anterior pero se buscan scripts .
bsh de beanshell para ejecutar

StartWaitCommandLine: Para el hilo principal y se queda esperando por System.in comandos para realizar bajadas. Con Stop saldríamos del bucle infinito y del start por lo que se llamaría a close desde Main y terminaría la aplicación.

Close: Se realiza el servicio de startExport, si esta activado recopila todos los Quote de la base de datos y genera los respectivos ficheros .
data en PlainQuotesExport.

Por ahora la aplicación solo sabe importar y exportar .
data, bajar quotes (si esta en grid paraleliza y reparte las bajadas a los nodos) y servirlas vía tomcat.

La persistencia:
Esta basada en JDO y el motor de persistencia que se esta utilizando es JPOX.

**
Cuidado!!! La persistencia esta "Trucada"**:
Se ha creado una clase llamado Universe. Un Universe seria un entorno de persistencia de objetos independiente dentro de JDO (tablas independientes, incluso puede que base de datos diferente).

Para recuperar o guardar cosas se necesita crear o recuperar un universe y dado ese universe registrado en el sistema pedir su PersistenceManager.

Los universe siguen un patrón de Node y pueden tener links a otros universe (para facilitar la navegación a la capa visual).

UniverseProvider
se encarga de gestionar los universos y los PersitenceManager correspondientes!!

Por ahora esto esta un poco oculto en JDOQuotesPersistenceService. Esta clase se encarga dado un Ticker de recuperar o crear el universe correspondiente y darte las Quote y también de guardarlas cuando has terminado (Todo esto se aclarara y mejorara en el futuro).

¿Como se descargan las cosas?
Las líneas de comando se envían a ServiceFactory (hay una instancia accesible vía LaboratoryContext, aun así por ahora es stateless). ServiceFactory crea un Objeto Command, configurado con un feeder y el servicio de persistencia correspondiente, que cuando se ejecute (execute()) lanzara la bajada. Por ahora el servicio de persistencia es JDOQuotesPersistenceService y los feeder son
BOLSAMADRID, YAHOO y GOOGLE.

Este servicio mejorara y cambiara en el futuro cuando tengamos mas cosas. Por ahora es solo lo básico para poner las cosas cómodas.

Los command se pueden agrupar dentro de un BatchService. Tanto el Command como el BatchService tienen etiquetas de grid para distribuir las bajadas en caso de tener varios nodos funcionando.

Los Feeder:
Simplemente se conectan a sus urls y bajan las quotes correspondientes apoyándose en el QuotesPersistenceService que se les pase para recuperar y guardar las Quote. La dependencia con QuotesPersistenceService desaparecera en el futuro.

Seguramente para probar y desarrollar necesiteis un entorno con los menos servicios posibles, muy ligero:

Quitar el tomcat:
org.lab.startup.embedded.Tomcat=false

Quitar importar quotes de un directorio:
org.lab.startup.Import.Quotes=false

Quitar lanzar Batch de un directorio:
org.lab.startup.batch=false

Quitar lanzar scripts:
org.lab.startup.script=false

Quitar exportar Quotes a un directorio:
org.lab.startup.Export.Quotes=false

Quitar el Grid y asi simplificar mucho la depuracion:
org.lab.startup.embedded.Grid=false

Quitar la ventana de BeanShell
org.lab.startup.beanshell.console=false

Quitar el visor de base de datos:
org.lab.startup.embedded.HSQLDB.DatabaseManagerSwing=false

Dejar la linea de comandos interactiva para hacer pruebas y para que se espere el hilo principal hasta que digas stop:
org.lab.startup.waitStop=true

Ademas en log4j.properties puedes quitar la ventana visual de lf5:
Comentas las siguientes lineas con #
#log visual
#log4j.appender.Visual=org.apache.log4j.lf5.LF5Appender
#log4j.appender.Visual.MaxNumberOfRecords=200

En el modo de Grid para quitar la verborrea de carga de aspectos:

En conf/aop/aspectj/meta-inf/aop.xml
se cambia la linea por .

Cosas que se van a ir abordando para mejorar:

  • Aclara la gestión de Universe y determinar la estructura de su árbol base para el crecimiento.
  • Aclarar la parte de descargas de futuros.
  • Mejorar la estructura de descargas en general (Disminuir su dependencia, aislarla, mejorar su rendimiento y focalizarla). Seguira con un patron de algoritmo.
  • Empezar a meter la parte matemática para los estudios.
  • Terminar de aclarar el enlace con la parte visual para tener una versión funcional para el usuario.
  • Plantear la descarga de cotizaciones de bonos
  • Plantear un arquitectura de flujos de datos y coordinación de ejes para las graficas y los estudios.


Pues básicamente esto es todo lo que hay. No se si es lo que esperabais. Por favor comentarme todos vuestros deseos y dudas para poder ir planificando el entorno que todos necesitamos.


Etiquetas:

Laboratorio de Inversión y Especulación 8 - Progreso hasta Junio (Primera parte)

Respecto al progreso con el laboratorio, esta siendo brutal, gracias a varios colaboradores y especialmente a Juanmi que esta haciendo un trabajo excelente, ha hecho una arquitectura muy buena para la aplicación y ha introducido muchísimas cosas, grid etc... Mas de 80.000 quotes de empresas descargados!

Es tanto lo que ha hecho Juanmi que lo voy a poner en otro post, ahora voy a comentar lo que lleva hecho el resto.

Javier Campllonch - Gráficos en Flex

Ya pinta los tickets y tenemos una escala lineal y otra logarítmica.


- Trae los tickets desde java (que lo hizo juanmi) y los recibe en flex.
- De momento pido un ticker y me da los quotes que hay. Gráfico de áreas con volumen justo debajo. Gráfico - HLOC (que también va a tener el vol umen debajo)


Cosas que estoy trabajando ahora: y quiero tener funcionando de aquí a final de semana:

- Añadir varios quotes para poder compararlos (esta ya casi funcionando)
- Zooms funcionando para poder hacer zoom por 1 d, 5 d .....
- Tener funcionando el link entre los dos gráficos (volumen y área o volumen y hloc) para que sean 1 solo gráfico
- Montar servicio de tickers para hacer un autocompletar en flex

Futuras cosas:

Montar una abstracción para que los gráficos pinten quotes, spreads o lo que sea.
Poder buscar por tickers, simbol , isin .....

Si alguien sabe flex o quiere empezar con el bienvenido sea!

Yo (Daniel) estoy con un RCP de Eclipse para:
- Poder lanzar las operaciones mediante un interfaz gráfico.
- No necesitar instalar java sino que ira incluido en el paquete.
- Que sea simplemente mediante un doble-click en windows.

Es un RCP de Eclipse, si alguien sabe del tema me puede ayudar, ya que ando muy, muy mal de tiempo libre!

Por otra parte necesitamos mucha ayuda con el tema de los descargadores (Feeders) de futuros, de momento tenemos a Carlos Suarez con el downloader de ICE Market.

Quien coje alguno de los otros?

Mi meta seria si pudiésemos tener toda la parte de descargar históricos de todo tipo para Septiembre que rankia tendrá nuevos servidores y será mas fácil subir toda la información, para empezar después a calcular pautas! Al ritmo va el proyecto es mas que factible.

Etiquetas:

8 de mayo de 2008

Laboratorio de Inversión y Especulación 7 - Colaborar No Programadores

Ya tenemos una carpeta en los servidores de Rankia donde colocar los históricos que descarguemos, tenemos tres descargadores funcionando, solo tenemos que crear los batch para descargar todo lo que queremos, podemos empezar con:

- Un batch para el IBEX 35
- Un batch para el Eurostoxx50
- Un batch para todo el mercado continuo
- Un batch de índices
- Un batch de ETFs
- Un batch de los valores del S&P500
- Un batch de los valores del NASDAQ
- Otros que se propongan

Estas son tareas para los no programadores, el que se anime que me lo diga y coja uno. Tenemos que coordinar quien descargara y subirá por FTP todos los días las actualizaciones, yo no puedo ahora mismo porque me estoy mudando de piso y tendré que pedir internet y esos líos, así que no me quiero comprometer hoy mismo, quizás dentro de 2 semanas si. Esta tarea debería de ser automática prácticamente y cuestión de unos clicks, esperar 10 min a que descargue y listo!

Como crear un batch?

Tenemos dos tipos de batch, uno para descargar la información por primera vez, entre dos fechas y otro para actualizar el archivo desde la fecha mas reciente.
Para seguir un formato común pondremos el nombre del tipo IBEX_RETRIEVE.batch para obtener los datos por primera vez y otro IBEX_UPDATE.batch para actualizarlos diariamente.
Tenemos ejemplos de batch para actualizar y para importar en el post lab 4.
Para crear un batch solo se necesita Notepad, ved los ejemplos:
Crear un batch desde BolsaMadrid





Seguid las flechas hasta llegar a los historicos, ver el codigo fuente y usar el isdn como dato necesario para los batch, el ticker sera el nombre.
En este caso seria:
name="nombre" value="ABENGOA"
name="isin" value="ES0105200416"
RETRIEVE VALUE ES0105200416 FROM BOLSAMADRID INITDATE 01/01/2006 ENDDATE 04/04/2006 TICKER ABENGOA
UPDATE VALUE ES0105200416 FROM BOLSAMADRID TICKER ABENGOA
Crear un batch desde Yahoo







Seguid las flechas hasta llegar a los historicos, presionar update, y obtener el dato para el batch de la URL.
RETRIEVE VALUE %5EIBEX FROM YAHOO INITDATE 01/01/2006 ENDDATE 04/04/2006 TICKER IBEX
UPDATE VALUE %5EIBEX FROM YAHOO TICKER IBEX

Crear un batch desde Google



Seguir las flechas hasta llegar a los historicos, presionar update, y obtener el dato para el batch de la URL.
RETRIEVE VALUE 99624 FROM GOOGLE INITDATE 01/01/2006 ENDDATE 04/03/2006 TICKER CISCO
UPDATE VALUE 99624 FROM GOOGLE TICKER CISCO
En todos los RETRIEVE tendremos que intentar buscar las fechas con mayores valores posibles.
Queda claro que este proyecto colaborativo tiene la finalidad de buscar pautas de inversión y especulación mediante estadísticas y todos los métodos que se nos ocurran, necesitando históricos para empezar a trabajar en ello, dado que ninguno de nosotros recibimos un sueldo por hacer este trabajo, sino que es un hobby, no hay obligación de hacer tareas ni de cumplir plazos de tiempo, cada cual tiene su propio trabajo, familia y quehaceres varios...
Si se cree que se va a tener tiempo se toma una tarea mas larga, sino una mas corta si se ha tomado una tarea y no se tiene mas tiempo se deja un mensaje diciéndolo y otra persona puede continuar con la tarea.

Yo personalmente he dedicado varias decenas de horas en las ultimas semanas al proyecto y probablemente pueda dedicar muchas menos en los próximos meses debido a las condiciones de mi trabajo, voy a gestionar usuarios de sourceforge y responder dudas, y si tengo tiempo escribiré código y si no, lo dejare para mas adelante.

Creo que colaborar en el proyecto es beneficioso para todos aparte de mostrar una iniciativa por parte de la persona que es muy valorada, colaborar en un proyecto Open Source es algo que yo pondría en mi CV, aparte del beneficio que pueda obtener de los resultados del propio proyecto en si.

Comentario para los programadores:

Yo creo que se podría considerar hacer las pautas mediante scripting:http://www.beanshell.org/manual/bshmanual.html
Da mucho juego con las funcionalidades remotas, consola etc... Y las pautas de cada uno serian importables como fichero de texto.
Mirad el manual y me decís que os parece!

Juanmi apuesta por poner varios lenguajes de scripting... A gusto del programador, al menos uno!

NOTA: Como entiendo que para la gente que no sabe programar y que tiene conocimientos muy básicos de informática, es complicado colaborar, estoy trabajando en un interfaz gráfico, que sea ejecutable con un .exe normal desde windows y no necesite instalar java sino que ya lo lleve incluido (por supuesto la aplicación a descargar será mas pesada.)

NOTA 2: Tengo pensado hacer un coloquio con Francisco Llinares dentro de unas semanas, cuando tengamos mas funcionalidad y lo haya probado mas gente, para poder hablar de que el lo que quiere cada uno, y de las tareas que quiere hacer cada uno, con estos últimos posts hay material mas que de sobra para colaborar y en dos o tres semanas anunciamos el coloquio, ya que tendremos mas gente colaborando activamente y el sistema estará probado y conocido por otros muchos, eso espero...

Etiquetas: ,

Laboratorio de Inversión y Especulación 6 - Colaborar Programadores

La gente con mas conocimientos de programación, puede colaborar en todo tipo de tareas, proponer ideas para la arquitectura etc...

Unos comentarios de Juanmi que ya ha estado colaborando activamente en el proyecto:

Me gustaría fijar el camino a donde vamos para que tengamos que hacer la mínima rearquitectura al cambiar las dimensiones del problema y poder ir paralelizando el desarrollo. Por supuesto no vamos a hacer esto de golpe, sino que iremos aproximándonos pero sin cerrarnos puertas.

Creo que deberíamos hacer dos sistemas:

El primero no visual interno:

1º Sistema de cubo de información
a- El cubo se va rellenando con quotes
b- El Sistema actualiza las quotes automáticamente
c- Otros Cálculos derivados de las quotes
d- Se guardan en el cubo tb estos cálculos
e- Se automatizan tb estos cálculos

2º Dimensionamiento:
a- Clusterizamos el cubo de información
b- Paralelizamos para reparto en hilos y máquinas la actualización y el calculo

3º Optimización:
Creación de cubos diarios. Basicamente entorno de persistencia y ejecución distribuido (que solo necesitemos poner mas nodos para ampliarlo).

Arquitectura+servicio global de persistencia
Gestor de tareas y distribución de carga.

En resumen: un poco de arquitectura, un par de gestores.

Lo demás es crear los feeders de screenscraping, algoritmos de calculo y sistemas para importar y exportar datos.

Parte visual:
Entorno independiente de gestión que administre y use la información.
a- Ver datos, sacar gráficos con los datos.
b- Crear, eliminar y gestionar tareas automatizadas del sistema.(pudiendo configurar elementos de calculo, crear líneas de comando o crear cálculos con scripting).
c- Poder pintar directamente en los gráficos, poder aplicar cálculos directos locales sobre los datos en pantalla o aplicar los resultados de cálculos automatizados. Poder guardar vistas del gráfico con sus cálculos asociados.

Deberíamos tb crear un sitio donde estén los datos descargados para todo el mundo y que sea el prioritario de descarga, así se bombardea lo menos posible a las webs de datos. Si empiezan a tener demasiada carga automatizada de peticiones van a cambiar las cosas para cortar de raíz (ya he estado en casos similares en el otro bando).

Digase, colgar los históricos y las actualizaciones diarias (por ejemplo últimos 30 días y el resto a históricos).

La gente sincroniza contra ahí y luego si quiere algo mas se lo baja.

Poco a poco iremos haciendo el sistema maestro lo mas rico posible, lo normal seria que todo el mundo terminase sincronizando contra este principal y no fuese a buscar datos a ningún otro sitio. Siempre que sea posible deberíamos indicar en la aplicación la fuente de los datos, ya que en realidad son datos que hacen públicos y nos los prestan. A la hora de implementar algoritmos hay que identificar al autor y asegurarse que el algoritmo es libre.

Muy importante se necesitan ficheros de configuración en plan, para hacer el sistema mas fácil de usar, mas inteligente y para ir haciendo la copia de datos

principal:ticker-value-proveedor de datos

Creo que habría que crear un modelo de información para acciones, otro para futuros, otro para opciones y si acaso otro para bonos. Con todos los campos posibles, de tal manera que si están los datos se meten y sino pues nada...Normalmente es mejor que sobren campos a que falten. Los campos que no se llenen ahora quizás en un futuro cuando se encuentre la información si se llenen (Por ejemplo el de acciones prestadas). Los campos que sea información que se pueda sacar a través de un calculo de otros datos que tengamos no los metería (por lo menos por ahora).

Creo que Llinares nos podría dar esa información, a nosotros seguro que se nos pasarían campos.

Los temas de cluster y paralelizacion no son tan complicados. Metemos Sequoia para clusterizar y JPPF para GRID (si conocéis implementaciones que os parezcan mejores decírmelo). El tema es pensar que lo vamos a meter.

Para la persistencia usamos un motor de JDO (hibernate u otro) donde guardemos datos+metadada+nombre de forma independiente. Uno que automatice lo mas posible. A la hora de hacer persistencia simplemente tenemos que evitar al máximo la interdependencia de tablas (aquí hay que jugar un poco porque no es como le gusta a JDO).

En el tema de la bolsa y en sistemas grandes es mejor bajar la dependencia de datos. Por un lado tendremos los datos y por otro lado los cálculos basados en esos datos.

Cada uno guarda sus soluciones de forma independiente y solo hay que guardar la metadata de interdependencia.

Por ejemplo:
Se bajan las quotes de ibex y vía jdo se crea una tabla llamada ibex donde se guardan las quotes.

Se automatiza el calculo de media móvil para ibex a 30 días:

El algoritmo recupera su info anterior si quiere o tiene (datos de medias a 30 días de ibex realizados), recupera las quotes de ibex que le interesan, calcula el nuevo punto para el día y se guarda en jdo el nuevo valor. Por debajo lo que ocurriría es que se crease o reusase una "tabla" para ese estudio, algo así como MOV30_IBEX y los resultados de la media para ese día se guardarían en esa "tabla" (junto a los demás históricos).


Aparte cuando se crea esta tabla se añade la meta información de dependencia: que MOV30_IBEX tenia relación con ibex (La meta-info nos sirve para que los humanos asociemos la información).

De esta forma desde el entorno gráfico, si estamos en ibex podemos listar los estudios que se basan en el (Gracias a su meta-información) y decir que se pinten si queremos.

TB seria fácil hacer un motor de lo mismo hacia fichero. Pero finalmente creo que detrás habrá una base de datos y encima tendremos importadores y exportadores de info a formatos que nos interesen.

Es simplemente aprovechar un entorno de mucha lectura y calculo pero pocos cambio (casi todo inserciones), con casi nulas transacciones.

Mas adelante podemos meter sistemas de eventos para avisos o cálculos en cascada (por ejemplo que estén atentos a que 2 medias móviles se crucen o cosas así para que nos avisen).

Resumiendo:
1- Modelo de información abierto, dinámico pero independiente. Meta-Información para asociación humana.
2- Entorno de calculo y automatización por "tareas" escalable
3- Tareas de importación y exportación de datos (los feeders actuales y sus persistores).
4- Entorno visual que gestione y visualice esta información. Que permita crear nuevos cálculos, automatizarlos, graficarlos etc...

Si pasásemos de datos diarios a mensuales, minuto, ticker ...etc. Podríamos reutilizar todo esto, simplemente añadiríamos nuevas vistas al cubo, con info de quotes timeframe de minutos podríamos crear las vistas de timeframe de horas...etc.

En realidad lo que mas tiempo lleva es crear todos los feeders (importadores sobre todo), algoritmos de calculo y un entorno visual cómodo. Lo demás es un tema mas técnico que de muchas líneas de datos. Esto cumpliría con todo lo comentado en el mail anterior.

Además muchos usuarios podrían estar usando el grid en paralelo de forma bastante óptima (para esto ya abría que empezar a meter algo mas de arquitectura de gestión de usuarios).

Creo que si a esto luego le sumamos scripting y motor de reglas vamos muy bien.

NOTA: A partir de ahora este tipo de comentarios de tipo técnico irán en el foro de Sourceforge, en el próximo post explicare con detalle como puede colaborar la gente que no sabe programar.

Etiquetas: ,

7 de mayo de 2008

Laboratorio de Inversión y Especulación 5 - Sourceforge y Colaborar

El código fuente esta disponible en Sourceforge, ya tenemos un proyecto:

CVS Server: laboratoriodein.cvs.sourceforge.net
Shell Server: shell.sourceforge.net
Web Server: laboratoriodein.sourceforge.net

Todos los que vayan a colaborar que se registren en sourceforge y me den su usuario para que los agregue al proyecto. Los comentarios respecto a la parte técnica del proyecto, irán en el foro de sourceforge, los comentarios de la parte funcional irán en un foro de rankia.

Tareas para los que saben algo de programación:
-Importadores, de momento vamos a por estos, después cuando estén listos iremos a por otros.

He pedido unas URL a Francisco Llinares y las he mirado un poco por encima, principalmente las ha mirado Juanmi., aquí tenemos sus comentarios:

1-nymex posible: http://www.nymex.com/lsco_fut_condet.aspxproduct=CL&month=Feb&cmonth=G&year=9&currPrev=Ccmonth es una sequencia que llevan.

En esta tienes toda la energía del mercado de Londres

2-tb posible. Diarion tb los quitan https://www.theice.com/marketdata/settlementPrices/getDailySettlementsResults.do**los datos salen en esta dirección vía post con contractChoice=num

3-Sirven 10 días de datos, cvs muy comodo
En esta tienes todo lo del LIFFE - EURONEXT Euribor y todos los tipos de interés de la libra y el franco suizo http://www.liffe.com/reports/eoditem=Historieshttp://www.liffe.com/data/p_ds080430so.csv.csv
http://www.liffe.com/data/prefijo+año+mes+dia+sufijo+.csv para cada uno hay que tener la lista de prefijos y sufijosdigase mapear: Ticker=prefijo,sufijo

4-PDF hay que hacer pruebas para destriparlo

5-http://www.cbot.com/cbot/pub/page/0,3181,759,00.html

Se puede hacer, hay que mapear sus códigos de números a los ticker.

Si algo parece un poco confuso se aclara en los comentarios y lo que indague cada uno también debe de aparecer en los comentarios.

El que quiera colaborar en algo mas, que me lo diga, tareas hay muchas pendientes, puedo hacer una lista muy larga y la voy a hacer y ponerla en sourceforge para que la gente pueda pedirme tareas.

No hay prisa en hacer las tareas, pero hay que hacerlas y es mejor coger cosas pequeñas e ir haciéndolas poco a poco, no hay mucha gente con tiempo para colaborar, pero entre todos podemos hacer que avance a buen ritmo, para después del verano podríamos tener una plataforma muy interesante.

También podéis proponer ideas de donde descargar mas información útil.

Necesito que todo el que quiera colaborar se registre en sourceforge y me pase su usuario para que lo agregue al proyecto.

Como funciona un importador?

Los importadores están localizados en el paquete jds.com.locations.sites

Un importador tiene un constructor, una función download y otra getUrl, el constructor siempre es igual, solo hay que ver el formato de los que ya tenemos, la función getUrl construye la URL para descargar los valores de un mes en concreto, lo único que nos interesa es que debemos de pasarle el día de inicio, el día de fin, el mes y el año:

A continuación vemos el getUrl de Google:

public String getUrl(int dayMin, int dayMax, int month, int year) {
return ("http://finance.google.com/finance/historical?cid=" + name
+ "&startdate=" + months[month] + "+" + dayMin + "%2C+" + year
+ "&enddate=" + months[month] + "+" + dayMax + "%2C+" + year);
}


A continuación vemos el getUrl de Yahoo:

public String getUrl(int dayMin, int dayMax, int month, int year) {
return ("http://finance.yahoo.com/q/hp?s=" + name + "&a="
+ df.format(month) + "&b=" + df2.format(dayMin) + "&c=" + year
+ "&d=" + df2.format(month) + "&e=" + df2.format(dayMax)
+ "&f=" + year + "&g=d");
}


A continuación vemos el getUrl de BolsaMadrid:

public String getUrl(int dayMin, int dayMax, int month, int year) {
return ("http://www.bolsamadrid.es/comun/empresas/infhist.asp?id=esp&isin="
+ name
+ "&bolsa=0&scontrata=02&tipo=htm&dia1="
+ df2.format(dayMin)
+ "&mes1="
+ df2.format(month + 1)
+ "&anyo1="
+ (year)
+ "&dia2="
+ df2.format(dayMax)
+ "&mes2="
+ df2.format(month + 1) + "&anyo2=" + year + "&Buscar=Aceptar");
}


Lo siguiente será la función download que descarga la información usando HttpUnit para la url que le pasamos al método, voy a poner como ejemplo el download de BolsaMadrid:

public int download(String url) throws Exception {

int results = 0;

// Separa los miles con puntos
DecimalFormat dfLocal = new DecimalFormat();
DecimalFormatSymbols dfsLocal = new DecimalFormatSymbols();
dfsLocal.setDecimalSeparator(',');
dfsLocal.setGroupingSeparator('.');
dfLocal.setDecimalFormatSymbols(dfsLocal);

WebConversation webConversation = new WebConversation();
this.configProxy(webConversation);

WebRequest webRequest = new GetMethodWebRequest(url);
WebResponse webResponse = webConversation.getResponse(webRequest);

WebTable webTable = webResponse.getTableStartingWith("Fecha");
if (webTable == null)
return 0;
int rows = webTable.getRowCount();

for (int row = 1; row < date =" webTable.getCellAsText(row," cierre =" webTable.getCellAsText(row," anterior =" webTable.getCellAsText(row," volumen =" webTable.getCellAsText(row," max =" webTable.getCellAsText(row," min =" webTable.getCellAsText(row," quote =" new">

Voy a poner el código del importador de Google y me comentáis lo que no entendáis en los comentarios y lo voy explicando, si es necesario, explicare en otro post como funcionan los otros dos importadores y como crear mas.

package jds.com.locations.sites;

import jds.com.locations.AbstractFeeder;
import jds.com.model.Quote;
import jds.com.service.QuotesPersistanceService;


import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.HttpUnitOptions;
import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
import com.meterware.httpunit.WebTable;


public class Google extends AbstractFeeder {
//private static Logger logger = Logger.getLogger(Google.class);

private String[] months = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };

public Google(String name, String tickerName,
QuotesPersistanceService persistance) {
super(name, tickerName, persistance);
}

public int download(String url) throws Exception {

int results = 0;

HttpUnitOptions.setScriptingEnabled(false);

WebConversation webConversation = new WebConversation();
this.configProxy(webConversation);
WebRequest webRequest = new GetMethodWebRequest(url);

WebResponse webResponse = webConversation.getResponse(webRequest);

WebTable webTable = webResponse.getTableStartingWith("Date");
if (webTable == null)
return 0;
int rows = webTable.getRowCount();


for (int row = 1; row < date =" webTable.getCellAsText(row," cierre =" webTable.getCellAsText(row," anterior =" webTable.getCellAsText(row," volumen =" webTable.getCellAsText(row," max =" webTable.getCellAsText(row," min =" webTable.getCellAsText(row," quote =" new">(getUrl(int dayMin, int dayMax, int month, int year) {
return ("http://finance.google.com/finance/historical?cid=" + name
+ "&startdate=" + months[month] + "+" + dayMin + "%2C+" + year
+ "&enddate=" + months[month] + "+" + dayMax + "%2C+" + year);
}

}


Estoy seguro que pueden salir muchas dudas, las resolveremos en los comentarios entre todos y si hay algo que realmente hay que explicar mas en profundidad, haré otro post para explicarlo.

Etiquetas: , ,

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: , ,

8 de abril de 2008

Laboratorio de Inversión y Especulación 2 - Links utiles

Dado que hay bastante gente interesada en colaborar con el proyecto, voy a intentar gestionar con rankia un servidor de Versionado de código para que todos podamos gestionarlo de una forma ordenada.

Mi idea inicial no es una gran aplicación con grandes expectativas, algo impresionante etc... Solamente quiero poner números a mis inquietudes, si los años terminados en 8 suelen ser alcistas a partir de Abril quiero ver esos resultados, en diferentes índices, etc... Si los efectos de los cambios en tipos de interés tardan 6 a 9 meses en materializarse, quiero ver una estadística sobre eso en el pasado, lo mismo para los ciclos de PI*1000 y sinceramente siendo informatico ponerme con lápiz y papel como que no!

Aquí nace el proyecto, lo que quiero es, en el menor tiempo posible, empezar a tener unos resultados visibles y de una forma fácil poder analizar pautas y estadísticas, y que cualquiera pueda reproducirlo y ver si hay algún error en el razonamiento en los datos o en la estadística o hacer estadísticas adicionales.

Si a esto le ponemos que los resultados aparezcan en un pdf o excel de una forma muy bonita, genial!! Si ademas genera graficas mucho mejor y todo lo que queramos ponerle, pero mi tiempo es limitado y depende de lo que la gente quiera colaborar, a mi me sirve con obtener los números de la forma mas tosca posible y si a partir de ahí tengo mas tiempo y ganas, pues haré mas, básicamente es un hobbye!

Tampoco soy partidario de reinventar la rueda, hay multitud de proyectos open-source por ahí que son muy interesantes, estoy mirando varios, y si se puede reutilizar parte de ellos no veo problema en hacerlo, yo quiero resultados y quiero poder hacerlos a mi medida, no con las limitaciones que los demás proyectos imponen, pero si esos proyectos tienen una licencia de reutilización libre del código no hay problema en coger pedazos de aquí y de allí, implementar una gráfica lleva bastante tiempo, y no me aporta mucho a mi estudio, si puedo reutilizar la de otro y centrarme en otras cosas mejor!

Siempre he tenido un interés especial en las redes neuronales y el paquete Joone que es freeware hace mucho trabajo, y lo conozco, las redes neuronales son muy muy buenas para identificar patrones pero lo realmente difícil es saber configurarlas y enseñarles como aprender, es otra forma de sacar estadísticas y de ver cosas donde el ojo humano no las ve.

Hay mucha gente por ahí con gran experiencia en hacer estadísticas que estoy seguro puede ser de gran ayuda, como Francisco Llinares, Trader007, OptInver etc.. Tendrán muchos consejos y experiencias que compartir en esto, no me cabe duda!

Empecemos por lo básico, como guardarías los históricos? Un archivo de texto separado por tabuladores con nombre del stock, fecha, apertura, cierre, máximo, mínimo y volumen? Eso es lo que he hecho yo de momento.

Otra pregunta cuales son los mejores sitios para obtener históricos gratis aparte de yahoo y google? Principalmente que tengan históricos realmente antiguos, para poder ver las grandes tendencias, los valores actuales se consiguen fácilmente.

La opción de XML me parece que generaría archivos muy grandes, no es compatible con aplicaciones estándar (mstastock, tradestation etc...), pero es lo que utilizo para poner las configuraciones a falta de un interfaz gráfico.

También estoy interesado en el mercado inmobiliario, ya que no hay realmente información buena sobre esto, por ejemplo yo leo que la vivienda en Londres cuesta de media 350.000 libras, pero teniendo en cuenta que hay dos grandesd barrios (Kensington y Chelsea) que tiene unos precios medios superiores a las 850.000 libras, esto distorsiona todo, y esos barrios han subido mientras los demás bajaban lo que lo distorsiona mas todavía ya que esos barrios son la predilección de la expeculacion inmobiliaria de los grandes inversores a nivel mundial. Pero a mi me interesa un área determinada con una franja de precios determinada etc.. ademas me interesa saber por cuanto se alquilan esos mismos pisos para saber en caso de abandonar el país lo rentable de alquilarlo etc... Lo mismo se aplica para cualquier sitio. Para esos análisis lo mejor es tener una aplicación que capture tada la información disponible en los portales inmobiliarios y te de tu propia estadística a medida.

Respecto a mi personalmente, tan pronto tengo épocas en las que tengo que trabajar 14 horas al día, como en las que no tengo nada que hacer la mitad del tiempo que estoy en el trabajo, va por picos, así que es posible que algunas semanas dedique muchas horas y otras ninguna, se puede ver por mis post que he tenido semanas de post al día y después dos semanas seguidas sin escribir ni uno solo, ahora estoy en mis últimos días en este trabajo por tanto no me mandan demasiado así que he tenido oportunidad de hacer algo, pero todo dependerá de como empiece el siguiente si empiezan de forma matadora o relajada, me han pasado ambos casos, mas bien el primero en UK y el segundo en España, pero se ve todo en todos los sitios.

Aqui muestro algunos proyectos Open-Source relacionados que pueden servir para hacernos una idea:

http://groups.google.com/group/JavaTraders
http://sourceforge.net/projects/sfljtse
http://eclipsetrader.sourceforge.net/ (Este me gusta mucho)
http://matrex.sourceforge.net/
http://sourceforge.net/projects/humaitrader
http://blogtrader.org/
http://mov.sourceforge.net/ (Este tambien)
http://eiffel-mas.sourceforge.net/
http://ojts.sourceforge.net/
http://dataviews.sourceforge.net/ (Graficas?)
http://www.activestocks.eu/
http://www.marketcetera.com/
http://www.oropuro.org
http://code.google.com/p/truetrade/

Happy coding!

NOTA: A mi me gusta aplicar siempre el principio KISS cuando programo (Keep It Simple, Stupid)

Etiquetas: ,

6 de abril de 2008

Laboratorio de Inversión y Especulación 1 - Introducción

Escuchando el coloquio entre José Maria y Francisco Llinares sobre si el análisis técnico funciona o no, me ha hecho reflexionar, Francisco hablaba de figuras H-C-H que tienen un 85% de probabilidades de acierto y del famoso sistema de las tortugas que asegura todavía funciona, y José Maria no se creía nada de esto.

Yo no me creo ni dejo de creer las cosas, debido a mi naturaleza empírica creo que las cosas son o no son, y como no hablamos de nada abstracto sino de ganar dinero o no ganarlo, creo que la mejor forma de demostrar todo esto es simularlo.


Lo primero que se necesita para simularlo es unos históricos, por tanto me he puesto manos a la obra y he escrito una aplicación que descarga automáticamente históricos de bolsamadrid, yahoo y google pasándole los parámetros adecuados y se puede configurar para que te descargue los nuevos datos cada día y de esta forma tener los históricos actualizados.


Otra funcionalidad de esta aplicación será de forma diaria dar señales de compra o de venta aplicando diversas pautas, por ejemplo las pautas de las tortugas, los hombro-cabeza-hombro (Si Francisco o alguien me da una definición exacta de esta figura) y todas las demás pautas que vaya leyendo en libros, que se me ocurran o que la gente quiera probar.

Seria interesante usar los históricos para obtener una simulación de que es lo que hubiese pasado aplicando este sistema a lo largo del tiempo, en cuanto a beneficios, etc... Ya se que existen multitud de programas estilo wealth-lab, tradestation, metastock... Pero yo quiero uno propio en el que pueda configurar lo que yo quiera, si quiero ver como afecta algo externo como noticias de un tipo, pues le meto un archivo de fechas y noticias y le doy a ver.. O si quiero hacer lo mismo con tipos de interés, el precio del petróleo la inflación etc.. En un futuro seria muy interesante meter formulas estadísticas complejas y redes neuronales que detectasen patrones.

Otra idea es ampliar la sección de históricos para recuperar precios de viviendas, alquileres, plazas de garajes, alquires de las mismas y elaborar estadísticas a media de franjas de precios, tipos de vivienda relación precio/alquiler etc... Haré publico el código fuente para que la gente que sepa programar colabore, o me dejáis a mi todo el curro? Los que no sepan programar que aporten ideas e implementare las mejores ideas! (Osea la mayoria..)

En un principio voy a publicar la aplicación que descarga históricos en el próximo post, aprox una semana con un sistema muy básico basado en dos medias móviles que es lo que asegura Mark Shipman, en su ultimo libro que funciona y es suficiente para dar beneficios, me parece muy bien que venda libros diciendo eso, pero a partir de ahora veremos realmente lo que hubiésemos conseguido en el pasado con su sistema, y día a día las nuevas señales que el sistema aporta, la aplicación con instrucciones la pondré en el próximo blog, va a ser algo sencillo solo darle parámetros de configuración y nos devolverá texto con los resultados, nada de gráficas de momento, pero suficiente para ver lo que queremos.

El que no quiera usar la aplicación, pero quiera ver los resultados, podrá verlos publicados en algún otro sitio, donde los actualizare cada poco tiempo.

Lo mas importante para mi es tener algo funcionando y tenerlo ya, escribo este post porque la primera versión esta al 90%, y la quiero publicar en breve! (No a la procrastinación!)

NOTA 1: La tercera parte de ser mileurista vendrá en el momento que firme un nuevo contrato (en una o dos semanas ya esta la cosa a puntito) y de esta forma explicare como esta el mercado laboral y cual ha sido mi enfoque para conseguir esto.

NOTA 2: El curso de banca de inversiones esta un poco parado, pero en realidad he escrito un montón de capítulos en borrador a la vez que me preparaba para las entrevistas, pero no he querido perder tiempo en pulirlos para el blog, en cuanto firme van a llegar todos juntos!

Etiquetas: , ,