Calculadora de arbitragem com odds da Pinnacle
Resposta: existe arbitragem quando os melhores preços de todos os resultados de um mercado, somando várias casas, têm probabilidades implícitas que somam menos de 1: 1/p1 + 1/p2 (+ 1/p3) < 1. Divida o stake de cada resultado na proporção de 1/preço para garantir o mesmo retorno. O PinnFeed fornece o lado da Pinnacle em tempo real (Builder) ou por REST; os preços da outra casa vêm da sua própria fonte, já que o PinnFeed traz só a Pinnacle.
Fórmula e divisão do stake#
def arb(prices: list[float], bankroll: float = 100):
inv = [1 / p for p in prices]
total = sum(inv)
if total >= 1:
return None # no arbitrage
stakes = [bankroll * i / total for i in inv]
return {"margin": 1 - total, "stakes": [round(s, 2) for s in stakes],
"return": round(bankroll / total, 2)}
print(arb([2.12, 2.02])) # Pinnacle over 2.12, other book under 2.02 -> small arb
Com 2,12 e 2,02 a soma implícita é 0,9668, então uma banca de 100 retorna cerca de 103,44 seja qual for o lado vencedor, antes de taxas e desde que as duas apostas fiquem de pé.
Loop de alertas (lado Pinnacle via PinnFeed)#
import os, time, requests
KEY = os.environ["PINNFEED_KEY"] # ps_live_...
def other_book_prices(event): # plug in your own source here
return {}
while True:
r = requests.get("https://pinnfeed.io/v1/odds",
params={"sport": "tennis", "market": "moneyline", "main": "true", "limit": 100},
headers={"x-api-key": KEY}, timeout=10)
for e in r.json()["events"]:
for m in e["markets"]:
if (m["maxStake"] or 0) < 100:
continue
pin = {o["name"]: o["decimal"] for o in m["outcomes"]}
other = other_book_prices(e) # {"home": 1.9, "away": 2.2}
if set(pin) == set(other) and pin:
best = [max(pin[k], other[k]) for k in pin]
res = arb(best)
if res:
print(e["home"], "v", e["away"], res)
time.sleep(5) # Hobby allows 2 req/s
Riscos antes de apostar#
- Os preços mudam entre as duas apostas; você pode perder uma das pernas.
- As casas podem anular erros evidentes ou limitar contas de arbitragem.
- As regras variam (desistências no tênis, prorrogação, empates); uma arbitragem "garantida" pode perder se a liquidação for diferente.
- Compare com o value betting, que costuma escalar melhor: arbitragem vs value betting.
Planos#
O Free tem 30 s de atraso, lento demais para arbitragem a não ser em testes. O Hobby (€29/mês) é REST em tempo real; o Builder (€99/mês) envia as mudanças da Pinnacle pelo WebSocket. Teste de 3 dias; o cartão é obrigatório e a cobrança ocorre após o dia 3, a menos que você cancele.
Conteúdo educativo para maiores de 18 anos. A arbitragem tem risco de execução e de liquidação; nada aqui promete lucro. No Brasil, aposte apenas em operadores autorizados pela SPA/MF.
Perguntas frequentes#
Dá para achar arbitragem só com o PinnFeed?#
Não. A arbitragem precisa de pelo menos duas casas; o PinnFeed traz só a Pinnacle.
O maxStake importa na arbitragem?#
Sim. Ele limita quanto a Pinnacle aceita naquele preço, e com isso a perna da Pinnacle.
Devo contar as taxas?#
Sim. A comissão de uma exchange ou as taxas de pagamento podem acabar com uma margem de arbitragem pequena.