Value bet contra casas soft com as odds justas da Pinnacle
Os preços da Pinnacle são o mais perto que o mercado de apostas tem de uma probabilidade real. Tire a margem e você tem uma odd justa; qualquer casa soft que pague mais que essa odd oferece uma aposta com valor esperado positivo (+EV). A PinnFeed calcula a odd justa em todo mercado, então a conta vira uma multiplicação. +EV é um conceito estatístico de longo prazo, não garantia de ganho.
Passo 1 — Entenda a odd justa#
Para um mercado com odds decimais d_i:
implied_i = 1 / d_i
margin = Σ implied_i − 1
fairProb_i = implied_i / Σ implied_j (método multiplicativo)
fair_i = 1 / fairProb_i
Cada resultado na API já traz fair e fairProb, e cada mercado traz margin. Os preços brutos também vêm, caso você prefira aplicar o método de potência ou o de Shin.
Passo 2 — Calcule o valor esperado#
Se uma casa soft oferece a odd decimal S num resultado cuja probabilidade justa é p:
EV = S × p − 1
Com S = 2.30 e p = 0.488 (odd justa 2.049), o EV é +12,3%: no longo prazo, a expectativa é de 0,123 de lucro médio por unidade apostada. A maioria usa um corte de 1–3% para absorver o ruído e o tempo até fazer a aposta.
Passo 3 — Defina o stake#
O Kelly cheio ((S·p − 1) / (S − 1)) é agressivo demais com probabilidades estimadas. Um quarto de Kelly é um meio-termo comum e é o que o script imprime.
Passo 4 — Rode o script#
Preencha SOFT com as odds que você coletou de uma casa soft (na mão, de um comparador ou de outra API), usando os nomes dos times como a PinnFeed escreve. Instale requests e rode python value.py:
# value.py: encontra odds +EV em uma casa soft usando as odds justas sem margem da Pinnacle.
# pip install requests
import os, requests
BASE = os.environ.get("PINNFEED_BASE", "https://pinnfeed.io")
KEY = os.environ["PINNFEED_KEY"]
# Odds que você coletou de uma casa soft: (mandante, visitante, resultado) -> odd decimal.
SOFT = {
("Osasuna", "Malaga", "home"): 1.95,
("Colon", "Defensor Sporting", "away"): 2.30,
}
MIN_EV = 0.02 # vantagem de 2%
def kelly(price, p, fraction=0.25):
"""Stake de Kelly fracionado como fração da banca."""
return max(0.0, fraction * (price * p - 1) / (price - 1))
r = requests.get(f"{BASE}/v1/odds", headers={"x-api-key": KEY},
params={"sport": "soccer", "market": "moneyline", "main": "true", "limit": 1000}, timeout=20)
r.raise_for_status()
for ev in r.json()["events"]:
for m in ev["markets"]:
for o in m["outcomes"]:
soft = SOFT.get((ev["home"], ev["away"], o["name"]))
if not soft:
continue
ev_pct = soft * o["fairProb"] - 1 # valor esperado por unidade apostada
flag = "VALUE" if ev_pct >= MIN_EV else "no edge"
print(f'{flag:8} {ev["home"]} v {ev["away"]} {o["name"]}: soft {soft} vs Pinnacle {o["decimal"]} '
f'(fair {o["fair"]:.3f}, margin {m["margin"]:.1%}) EV {ev_pct:+.1%} '
f'kelly/4 {kelly(soft, o["fairProb"]):.2%}')
A saída fica assim:
VALUE Colon v Defensor Sporting away: soft 2.3 vs Pinnacle 1.8065 (fair 2.049, margin 13.4%) EV +12.3% kelly/4 2.36%
A chamada REST funciona em todos os planos; no Free os preços têm 30 segundos. Para value ao vivo você precisa deles em tempo real: faça a mesma comparação dentro do cliente WebSocket do guia de Python e Node, com o Builder.
Passo 5 — Confira com o CLV#
No curto prazo, resultado é principalmente variância. O retorno honesto mais rápido é o closing line value: o preço que você pegou bateu a odd justa de fechamento da Pinnacle? O guia de CLV registra cada aposta e mede.
Perguntas frequentes#
Por que usar a Pinnacle como referência?#
A Pinnacle trabalha com margens baixas e limites altos e move os preços com o dinheiro sharp, então o preço dela sem margem é muito usado como a melhor estimativa pública da probabilidade real.
Qual método a PinnFeed usa para tirar a margem?#
O método multiplicativo (proporcional). Os preços decimais e americanos brutos vêm em todo resultado, então você pode usar outro método.
A PinnFeed fornece odds de casas soft?#
Não. A PinnFeed traz só a Pinnacle. Combine com suas próprias odds de casas soft ou com uma API de várias casas como a The Odds API.