Dropping Odds und Steam Moves bei Pinnacle in Echtzeit erkennen
Ein Steam Move ist ein schneller, deutlicher Quotensturz bei einem marktführenden Buchmacher wie Pinnacle, meist weil Sharp-Geld auf eine Seite geflossen ist. Soft-Buchmacher hinken oft Sekunden oder Minuten hinterher, deshalb gehören Steam-Alerts zu den nützlichsten Signalen aus einem Live-Feed. In dieser Anleitung baust du einen Detektor auf dem PinnFeed-WebSocket. Er ist ein statistisches Werkzeug, kein Tippsystem.
Schritt 1 — Festlegen, was Steam ist#
Eine praxistaugliche Definition, die du anpassen kannst:
- die Dezimalquote eines Ausgangs fällt um mindestens 5 % gegenüber ihrem Höchstwert der letzten 2 Minuten;
- der Maximaleinsatz des Markts liegt bei mindestens 500, denn Pinnacle erhöht die Limits, je sicherer es sich bei einem Preis ist; Bewegungen in dünnen Märkten sind verrauschter;
- du alarmierst einmal pro Ausgang und Fenster, nicht bei jedem Tick.
Schritt 2 — Das Quotenbuch streamen#
Nutze den Python-Client aus der Python- und Node-Anleitung. Speichere ihn als pinnfeed_stream.py neben dem Skript unten; er ruft on_market(old, new, event) auf, sobald sich ein Markt ändert.
Schritt 3 — Das gleitende Maximum jedes Ausgangs verfolgen#
Halte pro Markt und Ausgang eine kurze Deque mit (timestamp, price), wirf alles weg, was älter als das Fenster ist, und vergleiche den aktuellen Preis mit dem Maximum im Fenster:
# steam.py: meldet Steam Moves bei Pinnacle (schnelle, starke Quotenstürze) aus dem Live-WebSocket.
# Nutzt pinnfeed_stream.py aus der Python/Node-Anleitung. pip install websockets
import asyncio, collections, os, time
from pinnfeed_stream import stream, SIDES
WINDOW_S = int(os.environ.get("WINDOW_S", 120)) # Rückblickfenster
MIN_DROP = float(os.environ.get("MIN_DROP", 0.05)) # Alarm, wenn die Quote im Fenster um 5 % oder mehr fällt
MIN_STAKE = float(os.environ.get("MIN_STAKE", 500)) # dünne Märkte ignorieren: Pinnacles Maximaleinsatz ist ein Vertrauenssignal
history = collections.defaultdict(collections.deque) # (Markt-id, Ausgang) -> deque[(ts, decimal)]
alerted = {}
def on_market(old, new, event):
if not event or (new.get("maxStake") or 0) < MIN_STAKE:
return
now = time.time()
for o in new["outcomes"]:
if o["name"] not in SIDES:
continue
h = history[(new["id"], o["name"])]
h.append((now, o["decimal"]))
while h and now - h[0][0] > WINDOW_S:
h.popleft()
high = max(p for _, p in h)
drop = 1 - o["decimal"] / high
key = (new["id"], o["name"])
if drop >= MIN_DROP and now - alerted.get(key, 0) > WINDOW_S:
alerted[key] = now
pts = o.get("points")
line = "" if pts is None else f" {pts:g}" if new["type"] == "total" else f" {pts:+g}"
print(f'STEAM {event["sport"]} | {event["home"]} v {event["away"]} | {new["type"]}{line} {o["name"]}: '
f'{high:.3f} -> {o["decimal"]:.3f} (-{drop:.1%} in {WINDOW_S}s) fair {o["fair"]:.3f} max stake {new["maxStake"]}')
asyncio.run(stream({"sports": ["soccer", "tennis", "basketball"], "markets": ["moneyline", "spread", "total"],
"main": True, "specials": False}, on_market))
Starte es mit python steam.py. Die Schwellen sind Umgebungsvariablen, zum Beispiel MIN_DROP=0.03 WINDOW_S=300 python steam.py für 3 % in fünf Minuten. Eine typische Zeile:
STEAM tennis | Sebastian Baez v Daniil Glinka | moneyline away: 2.260 -> 2.050 (-9.3% in 120s) fair 2.143 max stake 975
Schritt 4 — Oder den REST-Endpoint fragen#
Wenn dir eine regelmäßige Liste reicht, liefert GET /v1/drops die stärksten Quotenstürze in einem gleitenden Fenster, serverseitig berechnet:
curl -H "x-api-key: $PINNFEED_KEY" "https://pinnfeed.io/v1/drops?sport=soccer&live=true&minutes=10&min_pct=5"
Jede Zeile enthält Event, Markt, Linie, Ausgang, from, to, dropPct und movedAt. Das funktioniert in allen Plänen, auch in Free mit seinen 30 Sekunden Verzögerung.
Schritt 5 — Von Alerts zu Picks#
- Mit Soft-Buchmachern vergleichen. Ein Steam Move nützt nur dort, wo sich der Soft-Preis noch nicht bewegt hat. Die Value-Betting-Anleitung zeigt, wie du diesen Vorteil mit Pinnacles fairen Quoten beziffern kannst.
- Für den Rückstand der Soft-Buchmacher Pre-Match bevorzugen; live gehen Bewegungen oft auf den Spielstand zurück und weniger auf Sharp-Geld.
- Dich messen mit dem Closing Line Value: Schlagen deine Steam-Picks im Schnitt die Schlussquote, ist das Signal echt.
- Veröffentlichen: Der Telegram-Tipp-Bot schickt diese Alerts in einen Kanal.
Häufige Fragen#
Was ist der Unterschied zwischen Dropping Odds und Steam?#
Dropping Odds sind jede fallende Quote. Steam ist ein schneller, deutlicher Sturz bei einem Sharp-Buchmacher, meist ausgelöst durch informiertes Geld, der sich danach oft auf andere Buchmacher überträgt.
Warum Pinnacle für die Steam-Erkennung?#
Pinnacle akzeptiert hohe Limits und bewegt seine Preise mit der Sharp-Action, seine Bewegungen sind also das beste Marktsignal. Soft-Buchmacher kopieren sie oder ziehen später nach.
Geht das auch ohne WebSocket?#
Ja, per Polling von /v1/drops, das in allen Plänen funktioniert. Der WebSocket sieht jede Bewegung, wenn sie passiert; Polling sieht sie erst bei deiner nächsten Anfrage.