Re: Aprendiendo XML & API Betfair. Empezando desde 0.
Citar:
Originalmente publicado por
barroco
Buenas tardes,
En mi intento de programar con la API (java), quisiera saber si alguien tiene algo del tipo lanzar una consulta, y que te devuelva todas las cuotas, sin tener en cuenta los eventos, pero filtrando por 2-3-n (back-lay junto o individualizado)
Según vaya teniendo cosas claras, las iré publicando.
Un Cordial Saludo Parroquia
Buenas barroco, fijate en la función viewMarket() de la demo. Es la encargada de enseñarnos el mercado (previamente seleccionado) por consola.
De hecho, si entras dentro de la función viewMarket, verás el siguiente código:
private static void viewMarket() throws Exception {
if (isMarketSelected()) {
InflatedMarketPrices prices = ExchangeAPI.getMarketPrices(selectedExchange, apiContext, selectedMarket.getMarketId());
// Now show the inflated compressed market prices.
Display.showMarket(selectedExchange, selectedMarket, prices);
}
}
Si lo observas, verás que primero se aseguran de que algún mercado ha sido seleccionado (el if), luego, coje los precios de mercado de la función
ExchangeAPI.getMarketPrices(selectedExchange, apiContext, selectedMarket.getMarketId()); y finalmente lo muestra por pantalla en la función Display.showMarket(...);
La función pues a que haces referencia es ExchangeAPI.getMarketPrices(selectedExchange, apiContext, selectedMarket.getMarketId()); El primer parámetro (selectedExchange), sólo puede tener dos valores Exchange.AUS ó Exchange.UK, dependiendo de si el mercado es o no australiano respectivamente. Nota: Exchange.AUS creo toma el valor 2 y Exchange.UK tiene 1 como valor.
De la variable apiContext (variable de tipo APIContext) no sé mucho, sólo sé que casi todas las funciones "útiles" de la demo la introducen como parámetro así que alguna información importante almacenará. De todas formas, no es necesario que sepas mucho sobre ella, yo para lo único que la he necesitado es para volver a meterla en otras funciones de la API de Bf, pero para nada más. Con introducirla como parámetro en las diferentes funciones será suficiente (ya se peleará la Api "interna" de bf con esta variable, nosotros la dejamos tranquila).
La última variable selectedMarket.getMarketId() es un identificador de mercado, cada mercado de Bf tiene el suyo propio, y creo que es una variable de tipo long.
Pero aquí lo importante es lo que retorna la función, que es almacenado en la variable prices. (Fijaos que luego en la función showMarket, se le vuelve a meter los parámetros selectedExchange y selectedMarket, pero también el recién creado prices.
Si te metes dentro de la función showMarket (está en el archivo Display.java) encontrarás el siguiente código:
public static void showMarket(Exchange exch, Market m, InflatedMarketPrices prices) {
// Display a subset of the market information. More information is available
// in the object, but not output at this point
println("Market: "+m.getName()+"("+m.getMarketId()+") on the "+exch+" exchange:");
println(" Start time : "+m.getMarketTime().getTime());
println(" Status : "+m.getMarketStatus());
println(" Location : "+m.getCountryISO3());
println("");
println("Runners:");
for (InflatedRunner r: prices.getRunners()) {
Runner marketRunner = null;
for (Runner mr: m.getRunners().getRunner()) {
if (mr.getSelectionId() == r.getSelectionId()) {
marketRunner = mr;
break;
}
}
String bestLay = "";
if (r.getLayPrices().size() > 0) {
InflatedPrice p = r.getLayPrices().get(0);
bestLay = String.format("%,10.2f %s @ %,6.2f", p.getAmountAvailable(), prices.getCurrency(), p.getPrice());
}
String bestBack = "";
if (r.getBackPrices().size() > 0) {
InflatedPrice p = r.getBackPrices().get(0);
bestBack = String.format("%,10.2f %s @ %,6.2f", p.getAmountAvailable(), prices.getCurrency(), p.getPrice());
}
println(String.format("%20s (%7d): Matched Amount: %,10.2f, Last Matched: %,6.2f, Best Back %s, Best Lay:%s"
, marketRunner.getName(), r.getSelectionId(), r.getTotalAmountMatched(), r.getLastPriceMatched(), bestBack, bestLay));
}
println("");
}
En los primeros prints te dice toda la información de mercado:
println("Market: "+m.getName()+"("+m.getMarketId()+") on the "+exch+" exchange:");
println(" Start time : "+m.getMarketTime().getTime());
println(" Status : "+m.getMarketStatus());
println(" Location : "+m.getCountryISO3());
println("");
Nombre de mercado, Identificador, tipo de mercado (Australiano ó UK).
Hora de inicio, estado del mercado (activo, suspendido, ...) y localización.
Como ves, todo es bastante pedagógico y legible, donde viendo el nombre de cada variable ya te puedes imaginar lo que es. Luego tenemos dos bucles for que se encargan de recorrer los corredores del mercado (no entiendo porque son necesarios dos bucles for en lugar de uno para recorrer el mercado, si alguien lo explica estaré encantado de leerle), y luego por fin llega a las cuotas y cantidades ofertadas de cada uno de los "corredores" (lease también opciones) de mercado en:
String bestLay = "";
if (r.getLayPrices().size() > 0) {
InflatedPrice p = r.getLayPrices().get(0);
bestLay = String.format("%,10.2f %s @ %,6.2f", p.getAmountAvailable(), prices.getCurrency(), p.getPrice());
}
Empieza como veis con las cuotas a lay, observad que están dentro de un if, éste if es necesario pues antes de la toma de lays, nos hemos de asegurar de que al menos exista algún lay. Luego, en la siguiente línea:
InflatedPrice p = r.getLayPrices().get(0); se crea la variable p. Ésta variable toma los datos del lay menor (get(0)).
Una vez creado p, ya tenemos acceso a dos nuevos datos de tipo double:
p.getPrice() y p.getAmountAvailable(); (get currency creo recordar era la moneda, que alguien me lo confirme). El primer dato: getPrice nos dice la cuota de dicho lay, y el segundo dato getAmountAvailable es el monto disponible a esa cuota.
Nota: Si al crear p, en lugar de poner get(0) hubiésemos puesto get(1), habría dado el siguiente lay que existiera en el mercado (éste último lay de get(1) será más alto que el de get(0)), y si hubiésemos puesto get(2) habría dado el tercer lay (más alto que los anteriores) del mercado. De esta forma, se pueden saber los tres mejores lays existentes en el mercado con sus respectivas cantidades ofertadas. Si os da por poner get(3), que sepáis que peta, es decir, esto sólo sirve para los tres mejores lay's, el cuarto ó sucesivos no se puede saber de esta forma (agradecería si alguien sabe como obtener estos lays "superiores" nos lo dijera, yo estuve retocando el código para ver si lo conseguía pero no fuí capaz).
Nota2: Con los backs en lugar de los lays, se saben los tres mejores backs de forma análoga: get(0) para el back más alto, get(1) para el siguiente más bajo y get(2) para el tercero y más bajo que los anteriores.
Para acabar, el último print:
println(String.format("%20s (%7d): Matched Amount: %,10.2f, Last Matched: %,6.2f, Best Back %s, Best Lay:%s"
, marketRunner.getName(), r.getSelectionId(), r.getTotalAmountMatched(), r.getLastPriceMatched(), bestBack, bestLay));
Que sepáis que lo de String.format es una imitación del printf de C, esto lo comento para los que no esteis familiarizados con los %f, %d, ...
Volviendo a la Api de java, aquí lo importante es:marketRunner.getName() -> Nombre del corredor ó opción.
r.getSelectionId() -> Identificador del corredor ó opción.
r.getTotalAmountMatched() -> Total de dinero igualado para éste corredor
r.getLastPriceMatched() -> Última cuota igualada por éste corredor.
Y bueno, ésto es más o menos lo que sé. Aprovecho el momento para lanzar también una pregunta: Como acabamos de ver, la variable r.getTotalAmountMatched() nos dá el total igualado por cada corredor. A mi me gustaría saber desglosar éste total por cuotas. Es decir, si se han cruzado 100 € en total a la victoria de, por ejemplo, el Real Madrid, a mi me gustaría saber a que cuotas han sido igualados éstos 100 € (por ejemplo 40 € a cuota @3 y 60 € a cuota @3,05). Ésta misma info es la que sale en las tablas de las gráficas de bf., pero no sé como obtenerla.
Salu2!
Re: Aprendiendo XML & API Betfair. Empezando desde 0.
Si, me refería a la demo que indicais en el hilo ! ...
Galois ... estás hecho un fiera ya !! ;P ... me he intentado instalar el netbeans para correrlo en linux e intentar meterle un entorno mas visual ... pero aún sigo intentándolo ...
A ver si me puedo hacer un pseudocodigo de bot y empiezo a trastear de verdad ...
Lo dicho ... gracias por la ayuda !
Re: Aprendiendo XML & API Betfair. Empezando desde 0.
Eres la leche.... vaya explicacion... BUENISIMA¡¡
Ya tan sólo me falta una demo de un bot que funcione, al menos compile sin errores graves, para meterle mano tranquilamente.
Un Fuerte Abrazo Campeones¡
Re: Aprendiendo XML & API Betfair. Empezando desde 0.
Citar:
Originalmente publicado por
Galois
Supongo que se refiere a la demo que hablamos en este hilo, la de ApiDemo.java.
Yo la uso bajo Windows XP y también va bajo modo consola (creo que es lo normal). La verdad que gracias a esta demo y la ayuda de Algar ya he empezado a construir algún bot que empieza a tener buena pinta.
Lo de pasarlo a un entorno "de ventanas" estaría chulo, a ver si alguien te responde.
Salu2!
Ok, esa demo.... Alguien la tiene para pasarmela¿?
Re: Aprendiendo XML & API Betfair. Empezando desde 0.
Re: Aprendiendo XML & API Betfair. Empezando desde 0.
Citar:
Originalmente publicado por
Algar
Lee el hilo
Perdona,
El hilo me lo he leido, pero no veo ningun link que no sea foto. Lo mismo me estoy equivocando, y no hay nada que descargar.
Disculpa
Re: Aprendiendo XML & API Betfair. Empezando desde 0.
Citar:
Originalmente publicado por
barroco
Perdona,
El hilo me lo he leido, pero no veo ningun link que no sea foto. Lo mismo me estoy equivocando, y no hay nada que descargar.
Disculpa
Ahí tienes las demos en diferentes lenguajes de programación. Encontrarás el fichero apidemo en el ejemplo de java pero puedes consultar otros si te sientes más cómodo en otros entornos. Si mi post te ha parecido fuera de tono, no era la intención (lo digo por tu disculpa).
PD: Es el segundo post del hilo :p
Citar:
Originalmente publicado por
Algar
Hola Galois
te recomiendo que sigas alguno de los ejemplos que encontrarás aquí:
Betfair Developer Program - Web Links
Verás que el API soporta diferentes tipos de lenguajes, destacando php5, java, c#, etc.
Coge el que domines, bájate el ejemplo del link que te he puesto, e intenta entender todo paso a paso. Cómo se loguea, cómo se estructura la información, como se usan las llamadas al API en el código nativo, etc.
Verás que poco a poco todo va encontrando su sitio en tu cabeza y el puzzle final se va completando.
Si tienes alguna duda coméntame.
Un saludo y suerte!
Re: Aprendiendo XML & API Betfair. Empezando desde 0.
Citar:
Originalmente publicado por
Algar
Ahí tienes las demos en diferentes lenguajes de programación. Encontrarás el fichero apidemo en el ejemplo de java pero puedes consultar otros si te sientes más cómodo en otros entornos. Si mi post te ha parecido fuera de tono, no era la intención (lo digo por tu disculpa).
PD: Es el segundo post del hilo :p
Anda leches, ahora¡¡ Yo estaba buscando la demo que alguno de vosotros habia puesto, acabaaaaaaaaaaaaaaramos¡¡ jajaja
Nada, de tono sin problema, es lo malo que tiene un foro, que la entonacion la pone cada uno.. El dia que hagan los foros leidos, va a ser la leche.
Un Fuerte Abrazo.
Re: Aprendiendo XML & API Betfair. Empezando desde 0.
Ya nos contarás tus progresos ;)
Suerte
Re: Aprendiendo XML & API Betfair. Empezando desde 0.
Citar:
Originalmente publicado por
Algar
Ya nos contarás tus progresos ;)
Suerte
Je, si consigo compilar las clases java sin problema, y hacer que la demo en php cargue bien, dad por hecho que publico cualquier avance o mejora.
Un Saludo Cordial Parroquia.