Rankia - Comunidad Financiera
Usuarios  |  Regístrate  |  Ayuda
 

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

3 comentarios:

Blogger El mister. said...

Francisco qué le parece barchart.com para ciertas materias primas.

En cuanto me tengas agregado me meto.

8 de mayo de 2008 13:40  
Anonymous Carlos Suarez said...

Le he estado echando un vistazo a theice.com... por lo que veo, a diferencia de google o yahoo, no se tienen datos históricos, sino que datos de cierre diario de los distintos contratos... ¿Cual es la idea en este caso, ir descargando los datos día a día?

Un saludo,
Carlos

8 de mayo de 2008 20:34  
Blogger Dalamar said...

Si para algunos tendremos que ignorar las fechas y solo implementar update o hacer que retrieve y update hagan lo mismo, descargar los datos del dia y parsearlos, habria que hacerlo cada dia.

8 de mayo de 2008 22:26  

Publicar un comentario en la entrada

Enlaces a este post:

Crear un vínculo

<< Volver a inicio