| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- package tests;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.stream.Collectors;
- import objects.League;
- import objects.SoccerMatch;
- import objects.TeamSettings;
- public class AwayTeamWinTest extends TestClass {
- ArrayList<Integer> recalcTeamsList = new ArrayList<Integer>();
- private League leagueInfo;
- private ArrayList<SoccerMatch> matches;
- private ArrayList<SoccerMatch> trainMatches;
- @Override
- public void runTest() {
- matches = getMatches();
- trainMatches = getTrainMatches();
- leagueInfo = getLeagueInfoById();
- for (final SoccerMatch soccerMatch : matches) {
- final int homeTeamId = soccerMatch.getHomeTeam().getTeamId();
- final int awayTeamId = soccerMatch.getAwayTeam().getTeamId();
- TeamSettings awayTeamValues = getTeamValues(awayTeamId);
- if (awayTeamValues.getLookbackAway() <= 0 || awayTeamValues.getMarginAway() <= 0 ) {
- awayTeamValues = calculateTeamValues(awayTeamValues, false);
- }
- }
- System.out.println("Done with Away Team TEST");
- }
- private TeamSettings calculateTeamValues(TeamSettings teamSettings, boolean isHomeTeam) {
- final ArrayList<SoccerMatch> teamMatches;
- if (isHomeTeam) {
- teamMatches = (ArrayList<SoccerMatch>) trainMatches.stream().filter(p -> p.getHomeTeam().getTeamId() == teamSettings.getTeamId()).collect(Collectors.toList());
- } else {
- teamMatches = (ArrayList<SoccerMatch>) trainMatches.stream().filter(p -> p.getAwayTeam().getTeamId() == teamSettings.getTeamId()).collect(Collectors.toList());
- }
- float bestBankResult = startingBank;
- int bestBetMargin = 0;
- int bestLookBack = 0;
- final float betLevel = bettingLevel / 100f;
- float betAmount = startingBank * betLevel;
- for (int lookback = 4; lookback < 25; lookback++) {
- for (int margin = 1; margin < 25; margin++) {
- final float betMarginDecimal = 1 + (margin / 100f);
- float bank = startingBank;
- int betOnGameCount = 0;
- int wins = 0;
- for (final SoccerMatch soccerMatch : teamMatches) {
- final List<SoccerMatch> aktuellaMatcher = trainMatches.stream().filter(p -> p.getGameDate().isBefore(soccerMatch.getGameDate())).collect(Collectors.toList());
- if (soccerMatch.getHomeScore() < 0 || soccerMatch.getAwayScore() < 0) {
- continue;
- }
- // Hemma lagets resultat
- final List<SoccerMatch> hemmaMatcher = aktuellaMatcher.stream().filter(p -> p.getHomeTeam().getTeamId() == teamSettings.getTeamId()).limit(lookback).collect(Collectors.toList());
- final long hemmaForluster = hemmaMatcher.stream().filter(p -> p.getHomeScore() < p.getAwayScore()).count();
- // borta lagets resultat
- final List<SoccerMatch> bortaMatcher = aktuellaMatcher.stream().filter(p -> p.getAwayTeam().getTeamId() == soccerMatch.getAwayTeam().getTeamId()).limit(lookback).collect(Collectors.toList());
- final long bortaVinster = bortaMatcher.stream().filter(p -> p.getHomeScore() < p.getAwayScore()).count();
- final float awayWinPercent = (bortaVinster + hemmaForluster) / Float.valueOf(hemmaMatcher.size() + bortaMatcher.size()) * 100;
- final float awayOdds = 100 / awayWinPercent;
- betAmount = bank * betLevel;
- // Spela på borta vinst?
- if (awayOdds * betMarginDecimal <= soccerMatch.getOdds2()) {
- betOnGameCount++;
- bank = bank - betAmount;
- if (soccerMatch.getAwayScore() > soccerMatch.getHomeScore()) {
- wins++;
- bank = bank + betAmount * soccerMatch.getOdds2();
- }
- }
- if (bank != startingBank && bestBankResult < bank) {
- bestBetMargin = margin;
- bestLookBack = lookback;
- bestBankResult = bank;
- } else if (bestBankResult != startingBank && bestBankResult == bank) {
- bestBetMargin = margin;
- bestLookBack = lookback;
- bestBankResult = bank;
- }
- }
- }
- }
- if (bestLookBack > 0 && teamSettings.getLookbackAway() != bestLookBack) {
- System.out.println("Setting lookbackAway " + bestLookBack + " and margin " + bestBetMargin + " for team " + teamSettings.getTeamName() + " with a bank of " + bestBankResult);
- teamSettings.setLookbackAway(bestLookBack);
- teamSettings.setMarginAway(bestBetMargin);
- }
- return teamSettings;
- }
- private TeamSettings getTeamValues(int teamId) {
- final String sql = "SELECT * FROM Team WHERE id = ?";
- final TeamSettings ts = new TeamSettings();
- try {
- final PreparedStatement stmt = getConnection().prepareStatement(sql);
- stmt.setInt(1, teamId);
- final ResultSet rs = stmt.executeQuery();
- while (rs.next()) {
- ts.setTeamId(teamId);
- ts.setTeamName(rs.getString("name"));
- ts.setLookbackHome(rs.getInt("lookbackHome"));
- ts.setLookbackDraw(rs.getInt("lookbackDraw"));
- ts.setLookbackAway(rs.getInt("lookbackAway"));
- ts.setMarginHome(rs.getInt("marginHome"));
- ts.setMarginDraw(rs.getInt("marginDraw"));
- ts.setMarginAway(rs.getInt("marginAway"));
- }
- } catch (final SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return ts;
- }
- private ArrayList<SoccerMatch> getMatches() {
- final ArrayList<SoccerMatch> result = new ArrayList<>();
- final String sql = "SELECT res.*, "
- + "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
- + "FROM SoccerResults as res "
- + "Join Team as hTeam ON res.homeTeam = hTeam.id "
- + "Join Team as aTeam ON res.awayTeam = aTeam.id "
- + "WHERE "
- + "DATE(gameDate) > DATE_SUB(NOW(), INTERVAL 1 YEAR) AND "
- + "res.leagueId = ? "
- + "ORDER BY gameDate ASC";
- try {
- final PreparedStatement stmt = getConnection().prepareStatement(sql);
- stmt.setInt(1, leagueId);
- result.addAll(super.getMatches(stmt));
- } catch (final SQLException e) {
- e.printStackTrace();
- }
- return result;
- }
- private ArrayList<SoccerMatch> getTrainMatches() {
- final ArrayList<SoccerMatch> result = new ArrayList<>();
- final String sql = "SELECT res.*, "
- + "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
- + "FROM SoccerResults as res "
- + "Join Team as hTeam ON res.homeTeam = hTeam.id "
- + "Join Team as aTeam ON res.awayTeam = aTeam.id "
- + "WHERE "
- + "DATE(gameDate) < DATE_SUB(NOW(), INTERVAL 1 YEAR) AND "
- + "res.leagueId = ? "
- + "ORDER BY gameDate DESC";
- try {
- final PreparedStatement stmt = getConnection().prepareStatement(sql);
- stmt.setInt(1, leagueId);
- result.addAll(super.getMatches(stmt));
- } catch (final SQLException e) {
- e.printStackTrace();
- }
- return result;
- }
- }
|