image title
image body
Speichern bei...
Mister Wong Favoriten.de del.icio.us LinkARENA Digg! Ma.gnolia Technorati oneview bonitrust.de
StumbleUpon seekXL Webnews Webnews blinklist Google Yahoo Furl folkd.com
Facebook MySpace Infopirat.com L* Lieblnk Klickts netselektor weblinkr twitter friendfeed

Sonntag, 25. Oktober 2009

Pokertracker 3 weiß mehr als ihr denkt

SQL GeekObwohl sicherlich jeder Pokerspieler eine eigene, mehr oder weniger konkrete Vorstellung von seinem A-Game hat, ist es unwahrscheinlich, dass man sich tatsächlich immer an diesen Plan hält. Verschiedenste Faktoren beeinflussen unsere Art und Weise zu spielen: Z.B. führt Müdigkeit häufig zu looserem Spiel als optimal. Und nach einer Reihe von Beats (oder was manche dafür halten) spielen viele Leute ängstlicher, d.h. passiver und oft auch tighter. Umgekehrt putscht eine sehr gut laufende Session dermaßen auf, dass der glückliche Spieler sich infolgedessen wie Superman fühlt und wesentlich mehr Hände deutlich aggressiver spielt.

In welchem Maße diese unterschiedlichen Gemütszustände unser Spiel beeinflussen hängt sicherlich von der Disziplin des jeweiligen Spielers ab, aber dass sie uns beeinflussen, ist eine unumstößliche Tatsache. Demzufolge müsste jeder von uns, der seine Hände trackt, Zeiträume ausmachen können in denen er mal etwas looser spielte und mal etwas tighter. Mal etwas aggressiver, mal etwas passiver. Wäre es nicht interessant, diese Zeiträume zu identifizieren und zu untersuchen, was uns dazu bewogen hat von unserem A-Game abzuweichen? Und wäre es nicht auch interessant, zu sehen welche verschiedenen Spielstile wir im Repertoir haben und wie erfolgreich wir mit diesen sind?

Ich denke schon, aber leider ist eine solche Analyse mit den Bordmitteln von Pokertracker derzeit nicht machbar. Zwar kann man sich VPIP und PFR über einen bestimmten Zeitraum anzeigen lassen, aber wenn man mehrere Zeiträume miteiander vergleichen will, muss man jedesmal den Filter manuell auf den gewünschten Zeitraum einstellen und sich die Ergebnisse handschriftlich oder in einem externen Editor notieren - nicht gerade komfortabel.

Natürlich heißt das nicht, dass es unmöglich ist, die gewünschten Informationen aus der Datenbank zu extrahieren, sondern nur dass man dazu ein wenig Know-How benötigt ;). Da ich dieses Know-How besitze, möchte ich euch im Folgenden zeigen wie es geht. Ihr werdet dazu (wenn ihr denn wollt) eine Abfrage direkt auf der Pokertracker 3 Datenbank ausführen und auf diese Weise an Informationen gelangen, an die man normalerweise nicht herankommt.

Also dann ans Werk: Öffnet zunächst das pgAdminIII Programm eurer PostgreSQL Datenbank. Ihr findet dieses Programm entweder im Startmenü oder direkt im Installationsverzeichnis von PostgreSQL:
C:\Program Files\PostgreSQL\8.3\bin\pgAdmin3.exe
Wenn ihr das Programm gestartet habt, seht ihr auf der linken Seite eine kleine Baumstruktur (screenshot), deren oberstes Element euer lokaler Server ist. Darunter liegt der PostgreSQL Datenbank Server, dessen Icon aber mit einem roten X gekennzeichnet ist. Das bedeutet, ihr seid noch nicht mit dem Server verbunden. Um das zu ändern, doppelklickt ihr auf das Symbol. Ihr werdet anschließend nach einem Passwort gefragt (screenshot) - es handelt sich dabei um das Passwort, das ihr damals bei der Installation des PostgreSQL-Servers bzw. des Pokertracker Tools definiert habt.

Wenn ihr nun mit dem Server verbunden seid, verschwindet das rote X und die Baumstruktur wird um einige Elemente erweitert. Eines dieser Elemente ist "Datenbanken (2)" (screenshot). Dieses Element erweitert ihr durch einen Klick auf das Plus-Symbol. Es erscheinen zwei weitere Elemente und eines davon ist eure Pokertracker Datenbank. Bei mir heißt sie "PT3 DB", bei euch kann sie aber auch anders heißen. Das Symbol der PT3-Datenbank hat wieder ein rotes X auf dem Icon (screenshot), aber diesmal braucht ihr kein Passwort - doppelklickt einfach darauf, um euch mit der Datenbank zu verbinden.

Ein eventuell aufpoppendes Fenster könnt ihr durch Klick auf Abbrechen wieder schließen. Selektiert nun den Eintrag der Pokertracker Datenbank auf der linken Seite. In der Toolbox direkt unter der Menüleiste wird nun ein Icon, das vorher ausgegraut war, verfügbar (screenshot). Es steht direkt rechts neben dem Mülleimersymbol und wenn man mit der Maus darüberfährt erscheint der Tooltip "Beliebige SQL-Abfragen ausführen". Klickt auf dieses Symbol - es öffnet sich ein neues Fenster, das ungefähr so aussieht. In dieses Fenster (oberer linker Abschnitt) kopiert ihr nun den folgenden Code:

select
  grpstat.player_name as Player,
  sum(grpstat.cnt_hands) as Hands,
  grpstat.vpip as VPIP,
  grpstat.pfr as PFR,
  floor(
    sum(
      grpstat.bb_won
    )
  ) /
  sum(
    grpstat.cnt_hands
  ) * 100
  as BB_100
from
  (
    select
      grp24h.player_name,
      grp24h.cnt_hands,
      case grp24h.vpip < 5
        when true then '0 - 5'
        else  
          case grp24h.vpip >= 5 and
               grp24h.vpip < 10
          when true then '5 - 10'
          else
            case grp24h.vpip >= 10 and
                 grp24h.vpip < 15
            when true then '10 - 15'
            else
              case grp24h.vpip >= 15 and
                   grp24h.vpip < 20
              when true then '15 - 20'
              else
                case grp24h.vpip >= 20 and
                     grp24h.vpip < 25
                when true then '20 - 25'
                else
                  case grp24h.vpip >= 25 and
                       grp24h.vpip < 30
                  when true then '25 - 30'
                  else
                    case grp24h.vpip >= 30 and
                         grp24h.vpip < 35
                    when true then '30 - 35'
                    else
                      case grp24h.vpip >= 35 and
                           grp24h.vpip < 40
                      when true then '35 - 40'
                      else '>= 40'
                    end
                  end
                end
              end
            end
          end
        end
      end as vpip,
      case grp24h.pfr < 5
        when true then '0 - 5'
        else
          case grp24h.pfr >= 5 and
               grp24h.pfr < 10
          when true then '5 - 10'
          else
            case grp24h.pfr >= 10 and
                 grp24h.pfr < 15
            when true then '10 - 15'
            else
              case grp24h.pfr >= 15 and
                   grp24h.pfr < 20
              when true then '15 - 20'
              else
                case grp24h.pfr >= 20 and
                     grp24h.pfr < 25
                when true then '20 - 25'
                else
                  case grp24h.pfr >= 25 and
                       grp24h.pfr < 30
                  when true then '25 - 30'
                  else
                    case grp24h.pfr >= 30 and
                         grp24h.pfr < 35
                    when true then '30 - 35'
                    else
                      case grp24h.pfr >= 35 and
                           grp24h.pfr < 40
                      when true then '35 - 40'
                      else 'pfr >= 40'
                    end
                  end
                end
              end
            end
          end
        end
      end as pfr,
      grp24h.bb_won
    from
      (
        select
          player.player_name,
          date(hstat.date_played) as date,
          count(hstat.id_hand) as cnt_hands,
          cast(sum(
            case hstat.flg_vpip
              when true then 1
              else 0
            end
          ) as decimal)/count(hstat.id_hand)*100 as vpip,
          cast(sum(
            case hstat.cnt_p_raise > 0
              when true then 1
              else 0
            end
          ) as decimal)/count(hstat.id_hand)*100 as pfr,
          sum(
            hstat.amt_won /
            (hlim.amt_bb * hlim.val_nlpl_mult)
          ) as bb_won
        from
          holdem_hand_player_statistics as hstat,
          holdem_limit as hlim,
          player
        where
          hstat.id_limit = hlim.id_limit and
          hstat.id_player = player.id_player and
          player.player_name = 'DEIN-NAME-HIER'
        group by
          player.player_name,
          date(hstat.date_played)
        order by
          date desc
      ) as grp24h
  ) as grpstat
group by
  grpstat.player_name,
  grpstat.vpip,
  grpstat.pfr
order by
  BB_100 desc

Ihr braucht keine Angst zu haben, dass ihr eure Datenbank durch das Ausführen dieser Anweisungen beschädigt - es handelt sich lediglich um eine Abfrage, d.h. es werden keine Änderungen vorgenommen. Wenn ihr mir nicht vertraut, dann macht einfach vorher ein Backup von eurer Datenbank (Rechtsklick auf das PT3-DB Symbol, dann Backup klicken).

Bevor ihr die Abfrage ausführt, müsst ihr noch an der Stelle wo "DEIN-NAME-HIER" steht euren eigenen Nickname eintragen. Achtet dabei bitte auf die Groß-/Kleinschreibung, denn wenn ihr den Namen falsch eingebt, wird die Abfrage kein Ergebnis liefern. Wenn ihr soweit seid, klickt ihr auf den kleinen grünen Play-Pfeil (screenshot).

Je nachdem wie groß eure Datenbank ist, kann es nun einige Sekunden bis Minuten dauern bis ihr ein Ergebnis bekommt. Das Ergebnis wird im unteren Teil des Fensters angezeigt und sollte ungefähr so aussehen. Zur Interpretation:

Die Abfrage gruppiert zunächst alle von euch gespielten Hände (unabhängig vom gespielten Limit) und berechnet für jeden Tag an dem ihr gespielt habt den VPIP und den PFR. Eine Analyse auf Multitable-Sessionbasis wäre auch möglich, ist aber etwas komplizierter. Anschließend ordnet die Abfrage diese Tage in Gruppen ein: Habt ihr z.B. über alle an einem bestimmten Tag gespielten Hände einen VPIP von 22% und einen PFR von 17% gehabt, dann wird dieser Tag als VPIP 20-25, PFR 15-20 getagged. Andere Tage werden entsprechend anders getagged. Das Ergebnis der Abfrage präsentiert euch jetzt wieviele Hände ihr mit einer bestimmten VPIP/PFR Range gespielt habt und wie gut ihr damit abgeschnitten habt. Konkret zur Interpretation des Screenshots: Ich habe die meisten Hände (nämlich 6517) mit einem VPIP zwischen 15 und 20 sowie einem PFR von 10-15 gespielt und dabei durchschnittlich 14.27 BB/100 verdient.

Wenn ihr statt des gesamten Codes nur den blau hinterlegten Teil ausführt, dann bekommt ihr eine Auflistung aller Tage an denen ihr gespielt habt und für jeden Tag den durchschnittlichen VPIP/PFR.

Ich hoffe das war alles einigermaßen verständlich und vor allem, dass ihr mit dem Ergebnis der Abfrage etwas anfangen könnt. Ich persönlich finde das Ergebnis durchaus interessant und hilfreich (es bestätigt unter anderem die Annahme: "Tight is right."

4 Kommentare:

  1. Da es eine SQL-Sache ist und nicht direkt mit PT zusammenhängt, müßte es doch auch für den HEM gültig sein, oder?

    AntwortenLöschen
  2. Leider nein - unterschiedliche Programme = unterschiedliche Datenbankstrukturen. Aus ner HEM-DB bringst du mit diesen Abfragen kein vernünftiges Ergebnis heraus.

    AntwortenLöschen
  3. Sauber! Ich hatte ja auch schon immer mal vor, mich mehr mit dem Datenmodell von PT zu beschäftigen, war bisher aber immer zu faul. Vielleicht ändert sich das jetzt...

    AntwortenLöschen

Jaja komm, schreib mir was!