[TOC]

Baru-baru ini saya menemukan sebuah postingan di Zhihu dengan judul yang sangat menggiurkan: “Cara Stabil untuk Cepat Kaya di Dunia Kripto: 3000U hingga 12000U dalam Tiga Bulan”.
Aku hanya tertawa. Stabil? Cepat kaya? Menggabungkan dua kata ini biasanya berarti salah satu dari dua hal: itu penipuan, atau kamu adalah seseorang yang belum pernah mengalami peristiwa angsa hitam.
Namun, sebagai pengembang perdagangan kuantitatif, saya tetap tidak bisa menahan diri untuk mengklik dan melihat deskripsi strategi ini.

Setelah membacanya, saya pun termenung…
Sepertinya, mungkin, barangkali, harapan, keinginan, mungkin ada benarnya?
Tanpa basa-basi lagi, mari kita buka Platform Kuantifikasi Penemu dan mulai!
Logika paling sederhana:
// 伪代码
if (btcChange > 2%) {
开多 1手 BTC
开空 1手 ETH
}
Setelah selesai menulis kode, saya dengan percaya diri mengklik backtest, dan kemudian…

Kita merugi besar-besaran.
Melihat kurva ekuitas yang anjlok, saya diliputi keraguan diri yang mendalam.
Jika dipikirkan dengan tenang, masalahnya jelas:
1 lot BTC ≠ 1 lot ETH
Saat ini, BTC bernilai \(100.000 per koin, sedangkan ETH hanya sekitar \)3.000. Jika Anda menggunakan rasio 1:1 untuk melakukan lindung nilai, itu bukan lindung nilai, melainkan memberikan uang begitu saja.
Strategi lindung nilai yang tepat perlu mempertimbangkan:
Kode ini adalah mesin perhitungan inti dari strategi tersebut, yang sepenuhnya mengimplementasikan perhitungan koefisien Beta ETH relatif terhadap BTC. Koefisien Beta di sini mewakili dua informasi kunci: rasio harga yang mendasarinya dan korelasi volatilitas, yang secara langsung menentukan proporsi yang perlu di-hedging.
// 计算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
}
Fungsi dan logika utama:
Cov(ETH,BTC) / Var(BTC)Ini menunjukkan sensitivitas keuntungan ETH terhadap perubahan keuntungan BTC.Setelah versi Beta dirilis, kesenjangan antara teori dan realitas perlu dijembatani, dengan mengubah koefisien teoretis menjadi kuantitas yang dapat diperdagangkan di bursa. Bagian kode ini berhasil melakukan konversi penting tersebut.
// 计算对冲张数
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
}
}
Langkah-langkah konversi utama:
Bagian ini membahas eksekusi strategi dan pengendalian risiko, menerjemahkan rencana lindung nilai yang telah dihitung ke dalam operasi perdagangan aktual dan mengelola risiko. Logika masuk posisi diilustrasikan di sini, menggunakan posisi beli sebagai contoh; posisi jual dapat dipahami dengan cara yang sama.
Desain kondisi pemicuSistem ini menggunakan dua kondisi: kenaikan harga BTC > 2% dan kenaikan harga BTC > kenaikan harga ETH. Hal ini memastikan volatilitas pasar yang cukup dan bahwa hubungan kekuatan relatif yang diharapkan tetap berlaku.
// 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))
}
Eksekusi transaksi atomikEksekusi dilakukan secara berurutan dan mencakup mekanisme rollback. Pertama, buka posisi long di BTC; jika berhasil, kemudian buka posisi short di ETH. Jika order ETH gagal, segera tutup posisi long yang ada di BTC untuk memastikan integritas posisi dan menghindari risiko satu sisi.
Berikut ini adalah demonstrasi logika penutupannya:
Laba dan rugi dihitung berdasarkan mata uang.Total keuntungan dan kerugian dari kedua posisi dihitung berdasarkan jumlah koin yang dibuka, dan efek lindung nilai secara keseluruhan ditentukan.
Pengaturan ambang batas pengendalian risikoKinerja keseluruhan portofolio dievaluasi, dan garis pengambilan keuntungan asimetris (+3%) dan stop-loss (-1%) ditetapkan untuk mengejar nilai harapan positif.
// 按币数计算盈亏
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}
}
Pengujian ulang dilakukan lagi, dan hasilnya adalah…

Kurva akhirnya mulai naik!
Dari Oktober 2025 hingga Januari 2026, sekitar 3 bulan:
Setelah melalui pengujian menyeluruh, strategi ini terbukti valid:
Inilah daya tarik perdagangan kuantitatif:
Mulailah dengan sebuah ide → Tulis kode untuk mengimplementasikannya → Lakukan backtest untuk memverifikasi → Optimalkan dan tingkatkan
Strategi yang diuraikan dalam unggahan Zhihu itu masuk akal, tetapi detailnya yang menjadi masalah:
Perdagangan kuantitatif sejati melibatkan validasi setiap ide dengan data, implementasi setiap strategi dengan kode, dan pencatatan setiap transaksi.
Jika Anda memiliki ide, Anda harus memverifikasinya.
Kode tersebut ada di akhir artikel. Silakan jalankan, modifikasi, dan optimalkan sendiri.
Jika Anda tertarik, saya bisa melanjutkan menulis nanti:
Jangan ragu untuk menyukai, berkomentar, dan meminta lebih banyak pembaruan!
📝Kode sumber artikel (parameter strategi dapat diatur secara fleksibel di bagian parameter pada awal kode sumber; logika perdagangan telah dioptimalkan).:Strategi lindung nilai Beta dua arah
Artikel ini hanya untuk tujuan pembelajaran dan komunikasi dan bukan merupakan saran investasi apa pun.
P.S.: Tidak ada cara pasti untuk cepat kaya di dunia kripto; hanya manajemen risiko dan optimasi berkelanjutan.