Stakesofts Steamerbot für Streamer und Drifter – 3 coole Features


Da ich von Stakesoft, ein auf Betfair Software speziallisierten Softwarehersteller, einige Produkte zur verfügung gestellt bekommen habe werde ich diese testen und euch meine Erfahrungen in den nächsten Tagen, Wochen oder Monaten hier vorstellen. Wer mehr über die Produkte erfahren möchte sollte einen Blick auf die Webseite von Stakesoft und dem Steamerbot, den ich hier vorstellen möchte, werfen:
Stakesoft / Steamerbot
Der Steamerbot übernimmt die Aufgabe auf Streamer und Drifter bei Pferderennen automatisch zu wetten. Streamer sind Pferde derren Quote gefallen und Drifter eben solche bei dennen gegenteilig die Quote gestiegen ist. Darauß lassen sich verschiedene Schlüsse ziehen. Steigt die Quote, dann glauben weniger Wetter an den Sieg, dafür gewinnt man mehr als hätte man seine Wette vor der Quotenänderung platziert. Der Streamerbot kann automatisch auf Drifter und Streamer wetten und ist für diese beiden Teile in zwei hälften gesplittet. Man kann also gleichzeitig Streamer und Drifter bearbeiten. Besonders sind die Einstellungen auf der rechten Seite. Hier kann man einstellen, zu welchen Zeiten die Software die Quoten abfragen und anhand der weiter links eingestellen Einstellungen vergleichen soll. Ein Bild von allen Einstellungen könnt ihr euch mit folgenden Screenshots machen (Der Software liegt auch eine englische Anleitung bei welche alle Features kurz erklärt.):
Sofort fallen einem ein paar sehr coole Features in der in Flex entwickelten Software auf:
1. Traningsmodus
Sich mit einer neuen Software sofort auf die “Straße” begeben zu müssen ist meist eine erstmal fatale Sache. Hier wird sie einem erspart und es wurde ein Trainingsmodus integriert mit dem man seine Strategien und die Software auf dem Trockenen auf Herz und Nieren testen kann. Erst wenn man weiß wie sich die Software und die vielen Einstellungen verhalten sollte man echtes Geld riskieren. Ein wenig schade ist, dass der Trainingsmodus nicht mit einem virtuellen Konto arbeitet auf welches die Gewinne und Verluste draufgerechnet werden. Dadurch verhält sich die Software bei einem prozentualen Einsatz im Trainingsmodus nicht ganz realistisch.
2. Strategieverwaltung
Mit einer Software wie den Steamerbot steht man vor endlos vielen Schaltern und Knöpfen und Sofort überschlagen sich im Kopf die Ideen und Möglichkeiten. Daher hat Stakesoft eine kleine Strategieverwaltung eingebaut über die man Einstellungen anhand eines Namens ablegen und wieder aufrufen kann. Das erspart viel Arbeit die Einstellungen abseits zu notieren.
3. Statistiken
Ach, es ist ein Traum jeder wettenden Person: Statistiken. Schon allein für diese lohnt sich die wetterei. Sehen wie die Kurve einen Berg besteigt ist genauso spannend wie darauf zu warten, dass es nach der Talfahrt eigentlich nur noch Bergauf gehen kann. Der Steamerbot zeigt die gespeicherten Ergebnisse aller aktivitäten (auch aus dem Trainingsmodus) als Gewinn- oder Verlustkurve an. Wer möchte kann sich die Ergebnisse auch in ein Excel kompatibles Format exportieren.
Bis jetzt habe ich diese Software nur wenige Tage getestet. Ich habe festgestellt, dass die Software (bis jetzt nur im Trainingsmodus) absolut stabil funktioniert. Stakesoft legt sehr großen Wert auf Qualität und scheint sehr gut zu wissen was sie tun. Tendenz: Daumen hoch
Betfair API mit Java und Netbeans (Teil3) – Anleitung/Tutorial – Alle Märkte auflisten
Hier im dritten Teil des Tutorials zur Betfair API Programmierung mit Java und Netbeans zeige ich euch wie ihr alle Märkte von Betfair auslesen und auflisten könnt. Voraussetzung für dieses Tutorial ist, dass ihr den Login zur Betfairseite bereits hergestellt habt. Wie das genau geht, hab ich bereits im zweiten Teil des Tutorials beschrieben.
Das Arbeiten mit der Betfair API läuft immer nach dem selben Schema ab. Wenn ihr das Konzept einmal raus habt, könnt ihr nach herzenslust verschiedene Funktionen ausprobieren. Zuerst wird immer eine Anfrage/Request erstellt, dem wir den Header unserer Loginsession übergeben. In diesem Header ist eine Zeichenkette (Session Token) die eine identifikation für unseren aktuellen Login darstellt. Diese Zeichenkette sollte wir immer aus der vorherigen Abfrage übernehmen. In der API Dokumentation können wir sehen, welche Daten wir dem Request noch anfügen müssen. Ist der Request erstellt senden wir diesen über den entsprechenden Webservice an die Betfairseite und erhalten eine Rückgabe/Respone die wir dann auswerden können.
Eine kleine Anmerkung vorweg. Der Array wird bei im Beispielcode am Anfang mit vorgegebener Größe erstellt. Das ist nicht gerade schön und sollte noch so verändert werden, dass dieser erst nach Ermittlung der notwendigen Größe erstellt wird. Es sind ca. 10.000 Märkte auf Betfair. Zum ausprobieren sollte es also auch mit meinem Codebeispiel klappen.
Hier also der Java Code mit dem wir alle Märkte auf Betfair erfragen:
// Ergebnisarray
String[][] output = new String[20000][20];
// Felder Beschriftung
final int MARKETID = 1;
final int MARKETNAME = 2;
final int MARKETTYPE = 3;
final int MARKETSTATUS = 4;
final int EVENTDATE = 5;
final int MENUPATH = 6;
final int EVENTHIERARCHY = 7;
final int BETDELAY = 8;
final int EXCHANGEID = 9;
final int ISO3COUNTRYCODE = 10;
final int LASTREFRESH = 11;
final int NUMMBEROFRUNNERS = 12;
final int NUMMBEROFWINNERS = 13;
final int TOTALAMOUNTMATCHED = 14;
final int BSPMARKET = 15;
final int TURNINGINPLAY = 16;
// Exchange Service
BFExchangeService_Service bFExchangeService_Service = new BFExchangeService_Service();
BFExchangeService bFExchangeService = bFExchangeService_Service.getBFExchangeService();
// Get Markets
GetAllMarketsReq getAllMarketsReq = new GetAllMarketsReq();
com.betfair.publicapi.types.exchange.v5.APIRequestHeader newHeader = new com.betfair.publicapi.types.exchange.v5.APIRequestHeader();
newHeader.setSessionToken(sessionToken);
getAllMarketsReq.setHeader(newHeader);
GetAllMarketsResp getAllMarketsResp = bFExchangeService.getAllMarkets(getAllMarketsReq);
if (getAllMarketsResp.getErrorCode().equals(GetAllMarketsErrorEnum.OK)) {
// Market Data
String marketData = getAllMarketsResp.getMarketData();
String[] splitMarkets = marketData.split(":");
int i = 0;
for (String part1 : splitMarkets) {
String[] splitMarket = part1.split("~");
int j = 1;
for (String part2 : splitMarket) {
output[i][j] = part2;
j++;
}
i++;
}
// Beispielanwendung
// Suchen nach Pferderennen im Menüpfad:
CharSequence suche = "Pferdergennen";
for (String[] test : output) {
if (test[MENUPATH] != null) {
if (test[MENUPATH].contains(suche)) {
System.out.println("Marktid: " + test[MARKETID]);
}
}
}
} else {
System.out.println("Get All Markets Error: " + getAllMarketsResp.getErrorCode());
}
Am Anfang lege ich finale Variabeln fest die mit ihrem Namen bestimmte Eigenschaften der Märkte repräsentieren. Dies dient einzig und alleine zur besseren Übersicht für den Programmierer. Seht euch dazu Table 13-3: marketData in der Betfair API Dokumentation an.
Als nächstes erstelle ich mir den entsprechenden Webservice über den ich die GetAllMarkets Anfrage an den Betfairserver senden werde. Dies geschiet auf die selbe weise wie beim Login, nur dass hier der Exchange Service und nicht der Global Service angesprochen wird. Bei einer komplexeren Anwendung könnt ihr die beiden Service an einem zentralen Punkt erstellen und immer wieder darauf zugreifen.
Danach erstelle ich eine GetAllMarkets Anfrage. Dieser muss nur der Header übergeben werden, der wie schon erwähnt den Session Token beinhaltet. Also erstell ich mir einen neuen Header und weise ihm den SessionToken zu. Den Session Token bekommt ihr von der letzten Antwort des Servers. Also zum Beispiel:
sessionToken = loginResp.getHeader().getSessionToken();
Ich erstelle hier im Beispiel einen neuen Header, da der Loginheader einen anderen Typ hat. Ansonsten müsste es auch gehen, den Header aus der Loginantwort zu übernehmen.
Es folgt die eigentlich Anfrage nach dem oben beschrieben Schema. Wie beim Login wird Antwort anhand des Error Codes geprüft.
War die Anfrage erfolgreich bekommen wir mit der Methode getMarketData() aus der Antwort einen elend langen String der alle Märkte mit Trennzeichen(Delimiter) getrennt enthält. Zuerst splitte ich im Beispiel die einzelnen Märkte auseinander und dann die einzelnen Informationen zu den Märkten und speichere das ganze in dem vorbereiteten Array. Jetzt hab ich einen Array bei dem der erste Wert als eine Art ID genutzt wird, und ein weiterer Zähler der die einzelnen Informationen zu den Märkten anspricht. Wir können nun also mit den einzelnen anfangs angelegten Variabeln bequem und gezielt die verschiedenen Eigenschaften der Märkte aufrufen.
Im Code findet ihr ein kleines Anwendungsbeispiel, das alle Märkte nach dem Wort Pferderennen im Menüpfad durchsucht und deren ID ausgibt:
// Beispielanwendung
// Suchen nach Pferderennen im Menüpfad:
CharSequence suche = "Pferdergennen";
for (String[] test : output) {
if (test[MENUPATH] != null) {
if (test[MENUPATH].contains(suche)) {
System.out.println("Marktid: " + test[MARKETID]);
}
}
}
Nun könnt ihr nach herzenslust die Märkte Filtern und mit der MarktID weiter auf den Markt eingehen, was ich in einem späteren Tutorial zur Betfair API Programmierung erläutern werde.
Betfair API mit Java und Netbeans (Teil2) – Anleitung/Tutorial – Bei Betfair Einloggen
Hier im zweiten Teil des Tutorials zeig ich euch, nachdem ihr Netbeans für die Betfair Programmierung scharf gemacht habt, wie ihr euch über die API bei Betfair einloggen könnt.
In der Theorie wird das ganze so aussehen: Wir stellen über einen Webservice eine Anfrage (Request), der wir Informationen wie Username und Passwort mitgeben, und erhalten dann eine Antwort (Response) vom Betfair Server.
Am Ende sieht der Code wie folgt aus, um einen einfachen Login auszuführen:
public static void main(String[] args) {
// Logindaten
String username = "derhetzge";
String password = "topsecret484";
int productId = 82;
// Webservice erstellen
BFGlobalService_Service bFGlobalService_Service = new BFGlobalService_Service();
BFGlobalService bFGlobalService = bFGlobalService_Service.getBFGlobalService();
// Anfrage/Request erstellen
LoginReq loginReq = new LoginReq();
loginReq.setPassword(password);
loginReq.setProductId(productId);
loginReq.setUsername(username);
// Anfrage über Webservice stellen, Antwort/Response entgegennehmen
LoginResp loginResp = bFGlobalService.login(loginReq);
// Antwort auswerten
if (loginResp.getErrorCode().equals(LoginErrorEnum.OK)){
System.out.println("Login erfolgreich");
} else {
System.out.println("Login fehlgeschlagen: "+loginResp.getErrorCode());
}
}
Der erste Block Logindaten sollte jedem der schon ein bisschen mit Java gearbeitet hat klar sein. Hier weisen wir die Logindaten verschiednen Variabeln zu. Die Produkt Id 82 brauchen wir um Betfair mitzuteilen, dass wir die kostenlose API verwenden möchten.
Im nächsten Schritt wir dann ein Webservice erstellt, über den wir unsere Anfragen an den Betfair Server senden.
BFGlobalService_Service bFGlobalService_Service = new BFGlobalService_Service(); BFGlobalService bFGlobalService = bFGlobalService_Service.getBFGlobalService();
Wir müssen zuerst wissen, welchen Webservice (Exchange oder Global) wir brauchen. Dazu reicht ein Blick in die offizielle API Dokumentation (Login). Hier finden wir auch die Information, was wir der Anfrage mitgeben müssen und was wir als mögliche Antwort bekommen.
Um den Service dann zu erstellen müssen wir erst einen Service_Service erstellen, der dann via Methode den eigentlichen Service erstellt. Klingt seltsam, ist aber so (keine Ahnung, fragt mich nicht).
Dann erstellen wir eine Anfrage und weisen mit den vorgegebenen Set-Methoden die notwendigen Informationen (siehe API Dokumentation) zu.
// Anfrage/Request erstellen LoginReq loginReq = new LoginReq(); loginReq.setPassword(password); loginReq.setProductId(productId); loginReq.setUsername(username);
Noch ist die Anfrage nicht an den Betfair Server gestellt worden. Deshalb tun wir das jetzt und nutzen hierzu die entsprechende Methode des Webservices. Die Rückgabe speichern wir uns in einer Variable um sie im nächsten Schritt auswerten zu können:
// Anfrage über Webservice stellen, Antwort/Response entgegennehmen LoginResp loginResp = bFGlobalService.login(loginReq);
und dann die Auswertung:
// Antwort auswerten
if (loginResp.getErrorCode().equals(LoginErrorEnum.OK)){
System.out.println("Login erfolgreich");
} else {
System.out.println("Login fehlgeschlagen: "+loginResp.getErrorCode());
}
Die Auswertung ist hier im Beispiel recht einfach gehalten. Wir schauen einfach ob der Fehlercode OK entspricht. Alle Fehlercodes können ebenfalls in der Dokumentation eingesehen werden.
Wenn ihr das Script nun ausführt, mit euren entsprechenden Logindaten, sollte die Meldung “Login Erfolgreich” in der Ausgabe von Netbeans erscheinen. Damit seit ihr dem eigenen Betfair Bot oder Software wieder ein kleinen Schritt näher.
Betfair API mit Java und Netbeans (Teil1) – Anleitung/Tutorial – Netbeans einrichten
Hier der wie angekündigt erste Teil zur Anleitung “Betfair API mit Java und Netbeans” in dem ich euch erklären werde wie ihr die Entwicklungsumgebung Netbeans für die Betfair API fit macht. Wenn ihr Netbeans noch nicht auf eurem Rechner installiert habt, könnt ihr es euch auf folgender Seite kostenlos herunterladen:
http://netbeans.org/downloads/ (Java, ca.214MB)
Nach der installation von Netbeans müsst ihr ein neues Projekt anlegen ( File -> New Project -> Categorys: Java, Projects: Java Application ) und diesem dann mittels WSDL Dateien mitteilen wie euer Java Programm mit der Betfair API kommunizieren soll. Dazu geht ihr wie folgt vor:
Ladet euch folgende WSDL Dateien herunter:
- https://api.betfair.com/exchange/v5/BFExchangeService.wsdl
- https://api.betfair.com/global/v3/BFGlobalService.wsdl
Geht wieder in das File Menü, diesmal aber New File. Wählt im sich öffnenten Menü die Kategory Web Services aus und als Datei Typ Web Service Client.
Nach einem Klick auf Next wählt ihr Local File aus und klickt auf Browse um einen Dateimanager zu öffnen in dem ihr zuerst die eine WSDL Datei und dann mit dem komplett selben Vorgang die andere in euer Projekt ladet.
- Achtung: Wenn ihr die Dateien in dem Dateimanager nicht findet, dann wählt eventuell als Dateityp “Alle Dateien” aus oder gebt in das Feld für den Dateinamen “*.xml” um nach den Dateien zu Filtern.
Sind beide Dateien in das Projekt geladen, müssen wir unser Programm, das wir schreiben wollen nur noch darauf hinweisen wo sich die geladenen Dateien, bzw. die daraus generierten Packages befinden.
Das machen wir jetzt mal ganz “dirty” indem wir einfach alles Importieren (folgenden Code zwischen dem Package Befehl und der Main Klasse):
import com.betfair.publicapi.types.exchange.v5.*; import com.betfair.publicapi.types.global.v3.*; import com.betfair.publicapi.v3.bfglobalservice.*; import com.betfair.publicapi.v5.bfexchangeservice.*;
Damit sind alle Vorbereitungen abgeschlossen und wir können im nächsten Tutorial zur Betfair API und Netbeans damit beginnen uns bei Betfair über die API einzuloggen.
Betfair, Java und Netbeans – Eigene Wettsoftware mit der Betfair API entwickeln.
Mit dem BfExplorer hab ich es schon versucht, möglichst frei, eigene Betfair Software zu entwickeln. Leider hat es da nicht so geklappt, wie ich es mir erhofft hatte, was verschiedene Gründe hat. Zum einen war es mir zu undurchsichtig, einfach zu wenig transparenz gegeben. Die fehlende Dokumentation und meine fehlenden Kenntnisse in den .Net Programmiersprachen machten es schwierig etwas auf die Beine zu bekommen. Auch wenn es für die Betfair Api Programmierung wenige Anleitungen gibt, so ist wenigstens die Schnittstelle dokumentiert und man unterliegt auch keinen Zeit und Kosten Druck wie beim BFExplorer.
Java kann ich zwar auch nicht perfekt, aber deutlich besser als C# oder VB. Ganz einfach fällt mir der Einstieg in die Java Betfair API Programmierung auch nicht, weshalb ich hier in nächster Zeit die ersten Schritte dokumentieren werde.
Schritte die ich bereits geschaft habe einigermassen funktionierend umzusetzen sind:
- Netbeans für die Betfair API einrichten, WSDLs* einbinden
- Über ein JAVA Programm bei Betfair einloggen
- Eine Wette platzieren
- Märkte auflisten
*WSDL beudeutet Web Services Description Language, was eine Sprache ist, die eine Schnittstelle Programmiersprachenunabhängig beschreibt. Viel mehr muss man dazu auch nicht wissen …
Wie das ganze gemacht werden muss, hab ich mir aus verschiedenen Seiten zusammengekratz. Zum einen gibt es ein recht nettes Tutorial zum Thema Betfair API mit Netbeans und Java im offiziellen Betfair Entwickler Forum (1)(2)(3)(4). Dann gibt es noch einen interessanten Blog wo die Beispiele sehr hilfreich aber nicht ganz schlüssig sind. Zuguter letzt lerne ich natürlich viel aus der offiziellen Dokumentation der Betfair API.
Ihr dürft also gespannt sein auf mehr oder weniger interessante Tutorials und Anleitungen die euch der Programmierung einer eigenen Wettsoftware oder eines Betfair Bots näher bringt.












