Origem: Um sonho de arbitragem aparentemente perfeito
Recentemente, me deparei com uma publicação no Zhihu com um título muito tentador: "Uma maneira estável de ficar rico rapidamente no mundo das criptomoedas: de 3000U para 12000U em três meses".
Eu apenas ri. Estável? Enriquecimento rápido? Juntar essas duas palavras geralmente significa uma de duas coisas: ou é um golpe, ou você é alguém que ainda não se deparou com um evento do cisne negro.
No entanto, como desenvolvedor de negociação quantitativa, não resisti à tentação de clicar para dar uma olhada quando vi a descrição dessa estratégia.
Essa teoria afirma o seguinte:
- **O BTC é líder no mundo das criptomoedas.**Suas flutuações de preço são definitivamente maiores do que as de suas contrapartes menores (ETH, SOL, etc.).
- **O mercado em alta chegou.**O BTC está em alta → Compre BTC e venda ETH → Lucre com a diferença de preço.
- **O mercado em baixa chegou.**O BTC está caindo drasticamente → Vender BTC a descoberto + comprar ETH → Ainda é uma maneira segura de lucrar com a diferença de preço.
Após a leitura, fiquei imerso em profunda reflexão...
Parece, talvez, possivelmente, quem sabe, espero, desejo, talvez faça algum sentido?
Primeira versão do código: Um Começo Ingênuo
Sem mais delongas, vamos abrir a Plataforma de Quantificação de Inventores e começar!
A lógica mais simples:
javascript
// 伪代码
if (btcChange > 2%) {
开多 1手 BTC
开空 1手 ETH
}
Após terminar de escrever o código, cliquei com confiança no backtest e então...

Estamos perdendo dinheiro a rodo.
Ao ver a curva de patrimônio líquido despencar, fui tomado por profundas dúvidas.
Código da Segunda Edição: Cobertura Científica
Onde residia o problema? A arte da proteção beta.
Pensando bem, o problema é óbvio:
1 lote de BTC ≠ 1 lote de ETH
O Bitcoin está valendo atualmente US\( 100.000 cada, enquanto o Ethereum está em torno de US\) 3.000. Se você usar uma proporção de 1:1 para proteção, isso não é proteção, é jogar dinheiro fora.
Uma estratégia de hedge adequada precisa considerar:
- Relação de preços:BTC/ETH ≈ 30:1
- Diferença de volatilidadeCorrelação dos retornos entre os dois
- Valor nominal do contratoO contrato perpétuo de BTC da OKX equivale a 0,01 BTC e o contrato perpétuo de ETH equivale a 0,1 ETH.
Implementação completa da proteção beta
Este código é o mecanismo de cálculo principal da estratégia, que implementa integralmente o cálculo do coeficiente Beta do ETH em relação ao BTC. O coeficiente Beta representa duas informações essenciais: a relação entre os preços dos ativos subjacentes e a correlação de volatilidade, que determina diretamente a proporção que precisa ser protegida.
javascript
// 计算ETH相对BTC的Beta系数
function calculateBeta(btcRecords, ethRecords, lookback) {
// 数据不足时的降级处理
if (btcRecords.length < lookback + 1 || ethRecords.length < lookback + 1) {
Log("⚠️ K线数据不足,使用当前价格比作为默认Beta")
let btcPrice = btcRecords[btcRecords.length - 1].Close
let ethPrice = ethRecords[ethRecords.length - 1].Close
let defaultBeta = btcPrice / ethPrice
betaInfo.currentBeta = defaultBeta
betaInfo.correlation = 0
betaInfo.priceRatio = defaultBeta
betaInfo.returnBeta = 1.0
betaInfo.lastUpdate = new Date().toLocaleString()
Log(" 默认Beta =", _N(defaultBeta, 2), "| 价格比:", _N(btcPrice, 0), "/", _N(ethPrice, 0))
return defaultBeta
}
let btcReturns = []
let ethReturns = []
let priceRatios = []
// 第一步:计算日收益率 + 历史价格比
for (let i = btcRecords.length - lookback; i < btcRecords.length; i++) {
// 日收益率 = (今日收盘 - 昨日收盘) / 昨日收盘
let btcRet = (btcRecords[i].Close - btcRecords[i-1].Close) / btcRecords[i-1].Close
let ethRet = (ethRecords[i].Close - ethRecords[i-1].Close) / ethRecords[i-1].Close
btcReturns.push(btcRet)
ethReturns.push(ethRet)
// 记录每天的价格比
let ratio = btcRecords[i].Close / ethRecords[i].Close
priceRatios.push(ratio)
}
// 第二步:计算历史平均价格比
let avgPriceRatio = priceRatios.reduce((a, b) => a + b, 0) / priceRatios.length
// 第三步:计算价格比的波动性
let priceRatioVariance = 0
for (let i = 0; i < priceRatios.length; i++) {
let diff = priceRatios[i] - avgPriceRatio
priceRatioVariance += diff * diff
}
priceRatioVariance /= (priceRatios.length - 1)
let priceRatioStd = Math.sqrt(priceRatioVariance)
let priceRatioCv = priceRatioStd / avgPriceRatio // 变异系数
// 第四步:计算收益率的均值
let btcMean = btcReturns.reduce((a,b) => a+b, 0) / btcReturns.length
let ethMean = ethReturns.reduce((a,b) => a+b, 0) / ethReturns.length
// 第五步:计算协方差和方差
let covariance = 0
let btcVariance = 0
let ethVariance = 0
for (let i = 0; i < btcReturns.length; i++) {
let btcDiff = btcReturns[i] - btcMean
let ethDiff = ethReturns[i] - ethMean
covariance += btcDiff * ethDiff
btcVariance += btcDiff * btcDiff
ethVariance += ethDiff * ethDiff
}
covariance /= (btcReturns.length - 1)
btcVariance /= (btcReturns.length - 1)
ethVariance /= (ethReturns.length - 1)
// 第六步:计算收益率Beta
// Beta = Cov(ETH, BTC) / Var(BTC)
let returnBeta = covariance / btcVariance
// 第七步:计算相关系数
// 相关系数 = Cov(ETH, BTC) / (Std(BTC) × Std(ETH))
let correlation = covariance / Math.sqrt(btcVariance * ethVariance)
// 第八步:最终Beta = 历史平均价格比 × 收益率Beta
let finalBeta = avgPriceRatio * returnBeta
// 第九步:限制Beta范围,避免极端值
let minBeta = avgPriceRatio * 0.5
let maxBeta = avgPriceRatio * 2.0
finalBeta = Math.max(minBeta, Math.min(maxBeta, finalBeta))
// 第十步:获取当前价格比
let currentBtcPrice = btcRecords[btcRecords.length - 1].Close
let currentEthPrice = ethRecords[ethRecords.length - 1].Close
let currentPriceRatio = currentBtcPrice / currentEthPrice
// 更新Beta信息到全局
betaInfo.currentBeta = finalBeta
betaInfo.correlation = correlation
betaInfo.returnBeta = returnBeta
betaInfo.avgPriceRatio = avgPriceRatio
betaInfo.currentPriceRatio = currentPriceRatio
betaInfo.priceRatioStd = priceRatioStd
betaInfo.priceRatioCv = priceRatioCv
betaInfo.lastUpdate = new Date().toLocaleString()
return finalBeta
}
Funções principais e lógica:
- Validação de dados e processamento de degradaçãoVerifique se existem dados históricos suficientes; caso contrário, utilize diretamente a relação de preços atual para garantir que a estratégia possa ser executada sempre.
- Cálculo da série de retornosConverter dados de preços em rendimento elimina a influência das dimensões de preço absoluto, tornando os ativos com preços diferentes comparáveis.
- Cálculos Essenciais para Análise Estatística:
- CovariânciaMede a direção e a intensidade da correlação entre os rendimentos do BTC e do ETH.
- variânciaMede a volatilidade do próprio rendimento do BTC.
- Beta de rendimento:
Cov(ETH,BTC) / Var(BTC)Isso indica a sensibilidade dos retornos do ETH às mudanças nos retornos do BTC. - Coeficiente de correlaçãoA covariância padronizada reflete o grau de correlação linear.
- Síntese Beta AbrangenteBeta final = Razão média histórica de preços × Beta de retorno. Isso leva em consideração tanto a diferença no preço do ativo subjacente (por exemplo, o BTC é 30 vezes mais caro que o ETH) quanto a diferença na volatilidade (por exemplo, a volatilidade do ETH é 0,8 vezes a do BTC). Por exemplo, se a razão de preços for 30 e o Beta de retorno for 0,8, então o Beta final = 24, o que significa que para fazer hedge de 1 BTC são necessários 24 ETH.
- Mecanismos de controlo de riscosEstabeleça limites razoáveis para o valor Beta a fim de evitar o cálculo de índices de hedge irrazoáveis devido a condições extremas de mercado no curto prazo.
Após o lançamento da versão Beta, foi necessário preencher a lacuna entre a teoria e a realidade, convertendo os coeficientes teóricos em quantidades negociáveis na bolsa. Esta parte do código realizou essa conversão crucial.
javascript
// 计算对冲张数
function calculateHedgeAmount(beta) {
let btcCoinAmount = config.btcCoinAmount // 0.1 BTC
let ethCoinAmount = btcCoinAmount * beta // ETH数量 = 0.1 × Beta
// 转换成合约张数
let btcContracts = Math.floor(btcCoinAmount / contractInfo.btcCtVal)
btcContracts = Math.max(1, btcContracts) // 至少1张
let ethContracts = Math.floor(ethCoinAmount / contractInfo.ethCtVal)
ethContracts = Math.max(1, ethContracts)
// 实际开仓的币数
let actualBtcCoins = btcContracts * contractInfo.btcCtVal
let actualEthCoins = ethContracts * contractInfo.ethCtVal
Log("🎯 对冲计算 | Beta:", _N(beta, 3),
"\n BTC: ", _N(actualBtcCoins, 4), "币 =", btcContracts, "张 (CtVal:", contractInfo.btcCtVal, ")",
"\n ETH: ", _N(actualEthCoins, 4), "币 =", ethContracts, "张 (CtVal:", contractInfo.ethCtVal, ")",
"\n 实际比例:", _N(actualEthCoins / actualBtcCoins, 3))
return {
btc: btcContracts,
eth: ethContracts,
btcCoins: actualBtcCoins,
ethCoins: actualEthCoins,
beta: beta
}
}
Etapas principais de conversão:
- Determine o tamanho da posição baseDefina um valor base de BTC (por exemplo, 0,1) com base na configuração, que servirá como "âncora" para toda a carteira de hedge.
- Cálculo teórico de moedasQuantidade teórica de ETH = Quantidade base de BTC × Coeficiente Beta.
- Conversão do valor nominal do contratoO passo prático mais crucial é dividir o número teórico de moedas pelo "valor do contrato" (CtVal) de cada contrato. Por exemplo, um contrato de BTC pode representar 0,01 BTC e um contrato de ETH pode representar 0,1 ETH, obtendo-se assim o número de contratos.
- IntegralizaçãoO arredondamento para baixo garante que as negociações sejam feitas em contratos inteiros, com um mínimo de um contrato. Simultaneamente, a proporção de negociações reais é calculada de forma inversa para cálculos subsequentes e precisos de lucros e perdas.
Lógica de abertura e fechamento
Esta seção aborda a execução da estratégia e o controle de risco, traduzindo o plano de hedge calculado em operações de negociação reais e gerenciando o risco. A lógica de entrada é ilustrada aqui, usando uma posição comprada como exemplo; uma posição vendida pode ser compreendida da mesma forma.
projeto de condição de disparoO sistema emprega uma condição dupla: aumento do preço do BTC superior a 2% e aumento do preço do BTC superior ao aumento do preço do ETH. Isso garante volatilidade de mercado suficiente e que a relação de força relativa esperada se mantenha.
javascript
// BTC涨 > 2% 且涨幅大于ETH → 开多BTC + 开空ETH
if (btcChange > 0.02 && btcChange > ethChange) {
let amounts = calculateHedgeAmount(beta)
// 先开BTC多单
let btcOrder = createMarketOrder(config.btcSymbol, "buy", amounts.btc)
if (!btcOrder) {
Log("❌ BTC开多失败")
return null
}
// 再开ETH空单
let ethOrder = createMarketOrder(config.ethSymbol, "sell", amounts.eth)
if (!ethOrder) {
Log("❌ ETH开空失败,回滚BTC")
createMarketOrder(config.btcSymbol, "closebuy", amounts.btc)
return null
}
Log("🟢 开仓完成 | Beta:", _N(beta, 3))
}
Execução de transação atômicaA execução é sequencial e inclui um mecanismo de rollback. Primeiro, abra uma posição comprada em BTC; se bem-sucedida, abra uma posição vendida em ETH. Se a ordem de ETH falhar, feche imediatamente a posição comprada em BTC para garantir a integridade da posição e evitar a exposição a riscos unilaterais.
A seguir, apresentamos uma demonstração da lógica de fechamento:
Lucro e prejuízo calculados por moedaO lucro e a perda totais das duas posições são calculados com base no número de moedas abertas, e o efeito geral da proteção é determinado.
- Lucro/prejuízo da posição comprada em BTC = (preço atual - preço de abertura) × número de BTC mantidos
- Lucro/prejuízo da posição vendida em ETH = (preço de abertura - preço atual) × número de ETH mantidos
configurações de limite de controle de riscoO desempenho geral da carteira é avaliado e linhas assimétricas de realização de lucros (+3%) e de stop-loss (-1%) são definidas para buscar valor esperado positivo.
javascript
// 按币数计算盈亏
function checkClose(pos, btcTicker, ethTicker) {
let btcPnlUsd, ethPnlUsd
if (pos.type === 'long_btc_short_eth') {
// BTC多单盈亏 = (当前价 - 开仓价) × 币数
btcPnlUsd = (btcTicker.Last - pos.btcPrice) * pos.btcCoinAmount
// ETH空单盈亏 = (开仓价 - 当前价) × 币数
ethPnlUsd = (pos.ethPrice - ethTicker.Last) * pos.ethCoinAmount
} else {
btcPnlUsd = (pos.btcPrice - btcTicker.Last) * pos.btcCoinAmount
ethPnlUsd = (ethTicker.Last - pos.ethPrice) * pos.ethCoinAmount
}
let totalPnlUsd = btcPnlUsd + ethPnlUsd
let totalCost = pos.btcPrice * pos.btcCoinAmount + pos.ethPrice * pos.ethCoinAmount
let totalPnlPct = totalPnlUsd / totalCost
// 止盈: +3%
if (totalPnlPct >= 0.03) {
return {close: true, reason: '✅止盈', pnl: totalPnlPct, pnlUsd: totalPnlUsd}
}
// 止损: -1%
if (totalPnlPct <= -0.01) {
return {close: true, reason: '🛑止损', pnl: totalPnlPct, pnlUsd: totalPnlUsd}
}
return {close: false, pnl: totalPnlPct, pnlUsd: totalPnlUsd}
}
O teste foi refeito e os resultados foram...

A curva finalmente está subindo!
Análise de dados de backtesting
De outubro de 2025 a janeiro de 2026, aproximadamente 3 meses:
Desempenho do fundo
- Capital inicial: US$ 50.000
- Patrimônio líquido final: US$ 51.095
- Retorno total: Aproximadamente 2,2%
- Rebaixamento máximo: Mantenha dentro de uma faixa razoável.
Estatísticas de transações
- Número de oportunidades de realização de lucros: 6
- Número de ordens stop-loss: 14
- Taxa de vitórias: 30%
A verdadeira conclusão
Após testes retrospectivos completos, esta estratégia foi validada:
✅ Peças teoricamente viáveis:
- A proteção beta pode, de fato, reduzir o risco unilateral.
- A reversão da relação de preços oferece oportunidades de arbitragem.
- As ordens de stop-loss e take-profit podem proteger os lucros.
⚠️ Problemas do mundo real:
- Baixos retornosA margem de lucro foi de apenas 30%, com um retorno acumulado de 2,2% em três meses, muito aquém do retorno quatro vezes maior alegado na publicação.
- Poucas oportunidades para abrir uma vagaO limite de 2% restringe a frequência de abertura de posições.
- Taxas de transaçãoA abertura e o fechamento frequentes de posições consumirão grande parte dos lucros.
- Risco de deslizamentoO trading em tempo real pode apresentar desempenho inferior ao backtesting.
- Condições extremas de mercadoSe tanto o BTC quanto o ETH sofrerem uma alta/desvalorização simultânea, o mecanismo de hedge falhará.
🔍 Áreas para otimização:
- Rotação de múltiplas moedasEle não só pode proteger contra a volatilidade do ETH, como também contra SOL, BNB, etc.
- Dinâmica de desvalorizaçãoAjustar os limites de entrada com base na volatilidade.
- Resfriamento Stop LossNão abra uma nova posição imediatamente após a colocação de uma ordem de stop-loss.
- Cobertura Delta de VolatilidadeAlém do beta de preço, também é possível considerar a proteção contra a volatilidade.
- Gestão de fundosAjuste dinamicamente a proporção de capital para cada abertura de posição.
Em conclusão: A importância da quantificação
Esse é o fascínio da negociação quantitativa:
Comece com uma ideia → Escreva o código para implementá-la → Faça backtesting para verificar → Otimize e melhore
A estratégia descrita naquele post do Zhihu era sólida, mas o diabo está nos detalhes:
- Sem a estratégia de hedge beta, é apenas uma aposta na direção.
- Sem um mecanismo de controle de riscos, é como correr nu.
- Sem verificação por meio de testes retroativos, é apenas ilusão.
O verdadeiro trading quantitativo envolve validar cada ideia com dados, implementar cada estratégia com código e registrar cada operação.
Se você tem uma ideia, deve verificá-la.
O código está no final do artigo. Sinta-se à vontade para executá-lo, modificá-lo e otimizá-lo você mesmo.
Se tiver interesse, posso continuar escrevendo mais tarde:
- Estratégias de hedge baseadas no delta da volatilidade
- Implementação da rotação de múltiplas moedas
- Otimização da gestão de fundos e do controle de riscos
Fique à vontade para curtir, comentar e pedir mais atualizações!
📝Código-fonte do artigo (os parâmetros da estratégia podem ser definidos de forma flexível na seção de parâmetros no início do código-fonte; a lógica de negociação foi otimizada).:Estratégia de hedge Beta bidirecional
Isenção de responsabilidade
Este artigo tem fins meramente educativos e de comunicação, e não constitui qualquer tipo de aconselhamento de investimento.
P.S.: Não existe fórmula mágica para enriquecer rapidamente no mundo das criptomoedas; apenas gestão de risco e otimização contínua.
- 1


