[TOC]

Baru-baru ini saya terjumpa satu catatan di Zhihu dengan tajuk yang sangat menarik: “Cara Stabil untuk Menjadi Kaya Dengan Cepat dalam Dunia Kripto: 3000U hingga 12000U dalam Tiga Bulan”.
Saya hanya ketawa. Stabil? Cepat kaya? Jika digabungkan dua perkataan ini biasanya bermaksud salah satu daripada dua perkara: sama ada ia satu penipuan, atau anda seseorang yang belum pernah mengalami peristiwa black swan lagi.
Walau bagaimanapun, sebagai pembangun perdagangan kuantitatif, saya masih tidak dapat menahan diri daripada mengklik untuk melihatnya apabila melihat penerangan strategi ini.

Selepas membacanya, saya termenung jauh…
Nampaknya, mungkin, mungkin, mungkin, harapan, harapan, mungkin masuk akal?
Tanpa berlengah lagi, mari kita buka Platform Kuantifikasi Pencipta dan mulakan!
Logik paling mudah:
// 伪代码
if (btcChange > 2%) {
开多 1手 BTC
开空 1手 ETH
}
Selepas selesai menulis kod, saya dengan yakin mengklik pada backtest, dan kemudian…

Kita rugi duit tak tentu hala.
Melihat keluk ekuiti yang menjunam ke bawah, saya jatuh ke dalam keraguan diri yang mendalam.
Jika difikirkan dengan tenang, masalahnya jelas:
1 lot BTC ≠ 1 lot ETH
BTC kini bernilai \(100,000 setiap satu, manakala ETH hanya sekitar \)3,000. Jika anda menggunakan nisbah 1:1 untuk lindung nilai, itu bukan lindung nilai, itu memberikan wang.
Strategi lindung nilai yang betul perlu dipertimbangkan:
Kod ini merupakan enjin pengiraan teras strategi ini, yang melaksanakan sepenuhnya pengiraan pekali Beta ETH berbanding BTC. Pekali Beta di sini mewakili dua maklumat utama: nisbah harga asas dan korelasi turun naik, yang secara langsung menentukan perkadaran yang perlu dilindung nilai.
// 计算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 utama dan logik:
Cov(ETH,BTC) / Var(BTC)Ini menunjukkan kepekaan pulangan ETH terhadap perubahan dalam pulangan BTC.Selepas versi Beta dikeluarkan, jurang antara teori dan realiti perlu dirapatkan, menukar pekali teori kepada kuantiti sebenar yang boleh diniagakan di bursa. Bahagian kod ini telah mencapai penukaran penting ini.
// 计算对冲张数
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 penukaran utama:
Bahagian ini merangkumi pelaksanaan strategi dan kawalan risiko, menterjemahkan pelan lindung nilai yang dikira ke dalam operasi perdagangan sebenar dan mengurus risiko. Logik kemasukan digambarkan di sini, menggunakan kedudukan panjang sebagai contoh; kedudukan pendek boleh difahami dengan cara yang sama.
Reka bentuk keadaan pencetusSistem ini menggunakan dua syarat: kenaikan harga BTC > 2% dan kenaikan harga BTC > kenaikan harga ETH. Ini memastikan turun naik pasaran yang mencukupi dan hubungan kekuatan relatif yang dijangkakan adalah benar.
// 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))
}
Pelaksanaan transaksi atomPelaksanaan adalah berurutan dan merangkumi mekanisme rollback. Pertama, buka posisi beli dalam BTC; jika berjaya, kemudian buka posisi jual dalam ETH. Sekiranya pesanan ETH gagal, segera tutup posisi beli sedia ada dalam BTC untuk memastikan integriti posisi dan mengelakkan pendedahan kepada risiko berat sebelah.
Berikut adalah demonstrasi logik penutupan:
Untung rugi dikira mengikut mata wangJumlah keuntungan dan kerugian bagi kedua-dua posisi dikira berdasarkan bilangan syiling yang dibuka, dan kesan lindung nilai keseluruhan ditentukan.
Tetapan ambang kawalan risikoPrestasi keseluruhan portfolio dinilai, dan garisan pengambilan untung asimetri (+3%) dan henti rugi (-1%) ditetapkan untuk mengejar nilai jangkaan 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}
}
Ujian semula dijalankan sekali lagi, dan hasilnya adalah…

Lengkungan akhirnya akan naik!
Dari Oktober 2025 hingga Januari 2026, lebih kurang 3 bulan:
Selepas ujian balik yang lengkap, strategi ini telah disahkan:
Inilah daya tarikan perdagangan kuantitatif:
Mulakan dengan idea → Tulis kod untuk melaksanakannya → Backtest untuk mengesahkan → Optimumkan dan tingkatkan
Strategi yang digariskan dalam catatan Zhihu itu memang kukuh, tetapi perinciannya terletak pada perkara yang tidak kena:
Perdagangan kuantitatif sebenar melibatkan pengesahan setiap idea dengan data, melaksanakan setiap strategi dengan kod dan merekodkan setiap perdagangan.
Jika anda mempunyai idea, anda perlu mengesahkannya.
Kod tersebut terdapat di penghujung artikel. Sila jalankan, ubah suai dan optimumkannya sendiri.
Jika anda berminat, saya boleh terus menulis kemudian:
Jangan ragu untuk like, komen dan minta lebih banyak kemas kini!
📝Kod sumber artikel (parameter strategi boleh ditetapkan secara fleksibel dalam bahagian parameter pada permulaan kod sumber; logik perdagangan telah dioptimumkan).:Strategi lindung nilai Beta dua hala
Artikel ini hanya untuk tujuan pembelajaran dan komunikasi dan bukan merupakan sebarang nasihat pelaburan.
P.S.: Tiada cara pasti untuk menjadi kaya dengan cepat dalam dunia kripto; hanya pengurusan risiko dan pengoptimuman berterusan.