[TOC]

A Polymarket é um mercado de previsão onde cada pergunta tem apenas dois resultados possíveis: sim ou não, subir ou cair, ganhar ou perder. Tomando como exemplo o contrato de variação de preço do BTC a cada 15 minutos, cada rodada tem…Up e DownDois contratos, apostando se o preço de fechamento do BTC será maior ou menor que o preço de abertura em 15 minutos. Uma aposta correta paga US$ 1, uma aposta incorreta resulta em zero.

Este mercado possui uma característica muito especial:A probabilidade da combinação dos dois resultados é de 100%, portanto, o preço de “Up” mais o preço de “Down” deveria, teoricamente, ser exatamente igual a 1.
[ \text{Preço_de_up} + \text{Preço_de_down} = 1 \quad \text{(Valor teórico)} ]
Este tipo de imóvel não existe nos mercados de contratos comuns, o que nos proporciona uma âncora natural de certeza.
A negociação quantitativa sempre teve um único objetivo: encontrar oportunidades relativamente certas em um mercado repleto de incertezas.
A estrutura binária do Polymarket fornece essa âncora:Independentemente de o BTC subir ou cair nesses 15 minutos, tanto a aposta em alta quanto a aposta em baixa pagarão inevitavelmente US$ 1.Usando esse ponto de ancoragem, não precisamos determinar a direção; basta encontrarmos uma oportunidade em que o custo total de compra de opções de compra (Up e Down) seja menor que 1 e o lucro seja garantido.
O problema é que, na maioria das vezes, a soma dos dois preços é próxima de 1, o que dificulta encontrar oportunidades de arbitragem direta. Então, onde exatamente estão as oportunidades?
A oportunidade surge deDesequilíbrios de preços devido à reação exagerada do mercado。
Imagine o seguinte cenário: em um período de 15 minutos, o BTC cai repentinamente e rapidamente, causando pânico no mercado e uma venda massiva de contratos de compra (Up), com o preço caindo de 0,5 para 0,35. Teoricamente, por mais que o preço de compra (Up) caia, o preço de venda (Down) deveria subir na mesma proporção, sendo a soma sempre igual a 1. No entanto, o mercado reage em velocidades diferentes. O preço de compra (Up) já sofreu uma queda acentuada, enquanto o preço de venda (Down) ainda está se movendo de 0,5 para 0,65 e pode não ter recuperado totalmente o valor inicial.
Neste momento crucial de transição, a soma de Alta e Baixa pode ser de apenas 0,93, resultando em um breve desequilíbrio de preços.
[ \text{Up}(0.35) + \text{Down}(0.58) = 0.93 < 1 ]
Esta é a janela de arbitragem: uma combinação que custa US\( 0,93 para comprar e que inevitavelmente renderá US\) 1, com o lucro determinado no momento da compra.
A ideia original partiu do usuário do Twitter @the_smart_ape e é muito concisa, com apenas quatro parâmetros:
| parâmetro | significado |
|---|---|
SHARES |
Ações de compra por perna |
SUM_TARGET |
Preço-alvo para ambas as pernas combinadas (limite superior) |
MOVE_PCT |
A magnitude do mergulho |
WINDOW_MIN |
Período da janela de monitoramento |
A lógica de execução é a seguinte: durante a janela de monitoramento no início de cada rodada, os preços são monitorados continuamente. Assim que uma determinada direção sofre uma queda acentuada que ultrapassa o limite de ativação, essa direção é comprada como a primeira perna. Em seguida, aguarda-se que o preço na direção oposta recue. Quando o preço combinado das duas pernas for menor que o preço-alvo, a segunda perna é comprada e a arbitragem é encerrada. A liquidação e o resgate são concluídos em 15 minutos.
Essa abordagem é simples e direta, mas se aplicada diretamente em negociações reais, encontrará diversos problemas óbvios.
A ideia original eraespera passivaCompre a primeira perna e observe quando o preço na direção oposta recuar. Compre a segunda perna somente quando o preço combinado das duas pernas estiver abaixo do preço alvo.
Nossas abordagens para a melhoria são diferentes.No momento de uma queda acentuada, há uma alta probabilidade de que os indicadores de Alta e de Baixa se movam em velocidades diferentes. Agimos simultaneamente durante esse período de assincronia:
SUM_TARGET - 第一腿价格Ao aplicar um limite de preço reverso, podemos fixar o preço antes que a tendência oposta atinja seu pico.Quando ambas as ordens são enviadas simultaneamente, a oportunidade de arbitragem é garantida no momento em que a ordem é emitida. Em vez de esperar passivamente que o mercado atenda às condições, deixamos que o mercado venha até nós.
A implementação do código principal é a seguinte:
function executeBothLegs(symbols, dumpSide, dumpAsk) {
var leg1Symbol = (dumpSide === "Up") ? symbols.up : symbols.down
var leg2Symbol = (dumpSide === "Up") ? symbols.down : symbols.up
leg1Price = _N(dumpAsk + SLIPPAGE, 4)
// 第二腿限价:SUM_TARGET - leg1Price,确保两腿合计 <= SUM_TARGET 即有利润
leg2Price = _N(SUM_TARGET - leg1Price, 4)
// 并发提交两个限价单
var goLeg1 = exchange.Go("CreateOrder", leg1Symbol, "buy", leg1Price, SHARES)
var goLeg2 = exchange.Go("CreateOrder", leg2Symbol, "buy", leg2Price, SHARES)
var id1 = goLeg1.wait()
var id2 = goLeg2.wait()
leg1OrderId = id1
leg2OrderId = id2
state = STATE.BOTH_PENDING
}
A ideia original era que a segunda perna se completaria rapidamente, mas, na realidade, acontece frequentemente que, após a perna de alta ser empurrada para baixo, o preço da perna de baixa não recua, o sentimento do mercado permanece pessimista e o preço combinado de ambas as pernas nunca atinge a meta.
Durante esse período, se você mantiver uma posição unilateral de compra, o preço poderá continuar caindo até se estabilizar em zero.É necessário emitir uma ordem de stop-loss.
Adicionamos dois parâmetros:
FLOOR_PRICE(Preço mínimo)Defina um mínimo absoluto (por exemplo, 0,05). Se o preço de venda cair até esse nível, isso indica que o mercado determinou que essa direção provavelmente será desfavorável, então encerre a perda e saia do mercado.EARLY_TAKE_PROFIT(Índice preliminar de realização de lucros)Após comprar a primeira parte do contrato, se o preço subir até a meta de lucro, venda-a diretamente para obter o lucro, sem esperar pela segunda parte.function handleLeg1OnlyRisk(symbols, upBid, downBid, isLastMin) {
var holdBid = (leg1Side === "Up") ? upBid : downBid
var profitLine = leg1EntryAsk * (1 + EARLY_TAKE_PROFIT)
var stopLine = leg1EntryAsk * (1 - LAST_MIN_STOP_LOSS)
var needClose = false
var reason = ""
if (holdBid <= FLOOR_PRICE) {
needClose = true; reason = "止损(保底)"
} else if (!isLastMin && holdBid >= profitLine) {
needClose = true; reason = "前期止盈"
} else if (isLastMin && holdBid <= stopLine) {
needClose = true; reason = "末段止损"
}
if (needClose) {
// 先撤对侧挂单,再平仓
cancelAndConfirmUntilClear(leg2OrderId)
closePosition(holdSymbol, holdBid, reason)
}
}
Uma garante o limite inferior e a outra fixa o limite superior, estabelecendo assim um limite para a posição unilateral originalmente ilimitada.
A abordagem original não distinguia a dimensão temporal, mas a situação é completamente diferente quando a fase de liquidação se aproxima: a liquidação está próxima e não há tempo a perder, mesmo que o preço não tenha recuado. Além disso, quanto mais perto da liquidação, mais drásticas tendem a ser as flutuações de preço.
AdicionamosLAST_MIN_S(O limite de tempo final pode ser ajustado.) Lógica de comutação após entrar na fase final:
LAST_MIN_STOP_LOSS(Percentual de stop-loss no final da sessão de negociação), saia da posição ao preço de mercado se o preço cair abaixo da linha de stop-loss.var isLastMin = (remaining <= LAST_MIN_S)
// BOTH_PENDING 状态下
if (isLastMin) {
Log("⏰ 最后1分钟,撤销未成交挂单")
cancelAllPending("最后1分钟")
}
Nos estágios iniciais, espere que os preços se recuperem; nos estágios posteriores, evite que os preços caiam a zero. Essas duas linhas de raciocínio não se contradizem.
A Polymarket é um mercado on-chain, e o retorno do status da ordem e das informações de posição pode, por vezes, ser lento; pode levar vários segundos para receber a confirmação após a realização de uma ordem. Portanto, a estratégia incorpora um mecanismo de detecção de tempo limite da ordem e de nova tentativa.
function placeOrderAndConfirm(symbol, side, price, amount) {
var orderId = exchange.CreateOrder(symbol, side, orderPrice, amount)
var deadline = Date.now() + ORDER_TIMEOUT_S * 1000
while (Date.now() < deadline) {
var order = exchange.GetOrder(orderId)
if (order && order.Status === 1) {
return { orderId: orderId, avgPrice: order.AvgPrice } // 成交
}
if (order && (order.Status === 2 || order.Status === 4)) {
return { orderId: orderId, avgPrice: null } // 已撤销
}
Sleep(1000)
}
// 超时后执行撤单
exchange.CancelOrder(orderId)
// ... 继续轮询确认最终状态
}
Ao mesmo tempo, adicionouSLIPPAGE(O parâmetro de slippage) aumenta a probabilidade de uma ordem de compra ser executada. O preço real da ordem de compra é igual ao preço alvo mais o slippage.
A Polymarket possui um mecanismo único: o valor pago não é devolvido automaticamente ao saldo após a liquidação do contrato.Os fundos só podem ser liberados por meio de uma chamada ativa à API de Resgate.Caso essa etapa seja omitida, o dinheiro na conta ficará bloqueado nas posições já liquidadas.
A estratégia inicia automaticamente o resgate em lotes durante cada transição para garantir o retorno oportuno dos fundos.
function doRedeem() {
var positions = exchange.GetPositions()
for (var i = 0; i < positions.length; i++) {
var pos = positions[i]
if (pos.Info && pos.Info.redeemable) {
var result = exchange.IO("redeem", pos.Symbol, true)
Log("Redeem 结果:", result)
}
}
}
// 每轮结算前(840s 后)自动触发
if (!redeemDone && elapsed >= 840) {
doRedeem()
redeemDone = true
}

A estratégia inclui um painel de controle em tempo real que exibe o saldo da conta, o status atual, o monitoramento de preços e o lucro/prejuízo da posição em formato de tabela, permitindo que você acompanhe facilmente o progresso da estratégia durante as negociações ao vivo. O painel de controle contém quatro tabelas:

Exemplo de negociação ao vivo:
Uma nova rodada começa e a estratégia está sendo monitorada. Uma queda de 18,60% no contrato de compra foi detectada, de 0,43 para 0,35, acionando um sinal. Simultaneamente, duas ordens limitadas foram colocadas: a primeira ordem de compra a 0,37 e a segunda ordem de compra a 0,60, totalizando 0,97, abaixo do preço-alvo. Ambas as ordens foram enviadas simultaneamente e executadas. Preço médio de execução real: primeira perna 0,34, segunda perna 0,60, custo total real.0.94O lucro foi superior ao esperado, que ficou abaixo do limite predefinido de 0,97.
Essa estratégia é relativamente sólida em seu conceito e pode alcançar bons retornos quando as condições de mercado são favoráveis. No entanto, existem três deficiências que precisam ser reconhecidas francamente:
Falha 1: É difícil encontrar oportunidades para abrir posições quando o mercado está estável.As oportunidades de arbitragem dependem da reação exagerada do mercado; quando o mercado está estável, a probabilidade de uma queda acentuada é muito baixa, e a estratégia só pode operar isoladamente. Ampliar a faixa de ativação pode aumentar as oportunidades, mas a qualidade das entradas diminuirá.
Defeito 2: Os riscos de se manter em uma única posição são difíceis de evitar completamente.Após a execução da primeira ordem de stop-loss, se o preço continuar caindo em vez de se recuperar, a segunda ordem nunca será executada e continuará caindo até atingir a linha de stop-loss e ser acionada. Definir o limite de stop-loss é um dilema: muito apertado e será facilmente acionado por flutuações normais; muito folgado e a perda será muito grande se o preço realmente se comportar de forma incorreta.
Falha 3: O limite para o preço-alvo combinado de ambas as partes é uma questão de equilíbrio.Definir um limite muito alto aumenta as oportunidades, mas gera lucros menores a cada vez; definir um limite muito baixo aumenta os lucros a cada vez, mas pode resultar em uma longa espera por uma oportunidade significativa. Trata-se de uma escolha estratégica: acumulação frequente em pequena escala ou manter um limite baixo e aguardar uma grande oportunidade ocasional.
Essa estratégia é uma estrutura, e existem três direções que valem a pena explorar em profundidade:
Opção 1: Introduzir dados externos de preço do BTC.Essa estratégia é mais adequada para mercados laterais; em mercados com tendência definida, as ordens de stop-loss serão acionadas com frequência. Ela pode ser integrada com os preços do BTC em tempo real das corretoras, permitindo a abertura de posições pausadas quando uma tendência clara surgir, reduzindo assim perdas desnecessárias.
Direção 2: Modelagem Matemática.As opções “para cima” e “para baixo” são essencialmente duas opções binárias. Existem muitos modelos de precificação consolidados no mercado de opções, que podem, teoricamente, modelar a probabilidade de janelas de arbitragem e o ponto de entrada ideal com maior precisão, em vez de depender de limites fixos para tomar decisões arbitrárias.
Opção 3: Ajuste dinâmico de parâmetros.Atualmente, todos os parâmetros estão fixos, mas a volatilidade do mercado varia. Utilizar o mesmo conjunto de parâmetros em períodos de alta e baixa volatilidade é claramente inadequado. O ajuste automático dos parâmetros com base nas condições de mercado em tempo real aumenta consideravelmente a adaptabilidade da estratégia.
A lógica central desta estratégia — encontrar momentos de desequilíbrio de preços em mercados binários — não se limita aos contratos de BTC da Polymarket. Qualquer mercado com estrutura binária e discrepâncias de preços de curto prazo pode ser usado para descobrir oportunidades com uma abordagem semelhante. Nós simplesmente transformamos essa ideia em uma estrutura funcional; a parte realmente interessante ainda está por vir.
Código fonte da estratégia: Polymarket BTC - Robô de Arbitragem de Hedging de Duas Pernas em 15 Minutos (Versão de Hedging Bidirecional)