Pasar kripto akhir-akhir ini tidak begitu baik. BTC turun dari titik tertingginya, altcoin lebih parah lagi, banyak orang mulai menunggu dan bahkan keluar. Namun dalam periode ini, hal lain mulai menjadi perbincangan hangat secara diam-diam — RWA, yaitu tokenisasi aset dunia nyata. Emas, saham AS, minyak mentah, aset-aset dari pasar tradisional ini mulai muncul di bursa kripto dalam bentuk kontrak. Berbagai bursa besar berturut-turut meluncurkan instrumen seperti SPY (mewakili ETF S&P 500), XAU (emas), CL (minyak mentah), ditambah dengan BTC yang sudah ada sebelumnya, sebuah lingkungan perdagangan multi-aset yang mencakup saham AS, emas, minyak mentah, dan mata uang kripto untuk pertama kalinya terbentuk di rantai.
Melihat konfigurasi ini, muncul sebuah ide dalam pikiran: Dalam keuangan tradisional ada konsep klasik yang disebut risk parity (keseimbangan risiko). Sederhananya — jangan menaruh semua telur dalam satu keranjang, dan berapa banyak yang ditempatkan di setiap keranjang ditentukan oleh seberapa berbahayanya keranjang tersebut. Logika ini telah digunakan selama puluhan tahun di kalangan keuangan tradisional. Di pasar bearish ini, semua orang mencari cara untuk bertahan tanpa bergantung pada satu aset saja. Sekarang pasar kripto akhirnya memiliki kontrak untuk aset-aset ini, maka mulailah untuk mencoba menerapkan logika ini.
Pertama, jelaskan risk parity dengan jelas, baru lanjutkan
Sebelum membahas cara spesifiknya, kita harus menjelaskan arti dari risk parity terlebih dahulu, jika tidak, logika selanjutnya akan sulit dipahami.
Orang normal dalam mengalokasikan aset mungkin berpikir: Saya membagi uang saya menjadi empat bagian sama rata, masing-masing aset ditempatkan 25%. Kedengarannya seimbang, tetapi masalahnya adalah BTC bisa bergerak 10% dalam sehari, sementara emas mungkin hanya bergerak 0,5% dalam sehari. Dengan posisi 25% yang sama, risiko yang diberikan BTC kepada Anda adalah dua puluh kali lipat dari emas. Secara permukaan, keempat aset dibagi rata, namun pada kenyataannya nasib portofolio hampir sepenuhnya ditentukan oleh BTC saja, tiga lainnya hanya sebagai pelengkap.
Pendekatan risk parity adalah berpikir sebaliknya: bukan membagi dana secara merata, melainkan membagi risiko secara merata. BTC memiliki volatilitas tinggi, jadi alokasikan lebih sedikit; emas stabil, alokasikan lebih banyak — tetapi ini hanya langkah pertama. Yang lebih kritis lagi adalah bahwa aset tidak independen satu sama lain; BTC dan saham AS bisa turun bersama dalam kondisi pasar tertentu. Jika dua aset sangat searah, meskipun volatilitasnya sangat berbeda, meratakan risiko mereka juga tidak banyak berarti. Risk parity sejati perlu mempertimbangkan secara bersamaan volatilitas masing-masing aset dan korelasinya dengan aset lain, menggunakan matriks kovarians untuk mengukur kontribusi marjinal setiap aset terhadap risiko keseluruhan portofolio, sehingga pada akhirnya kontribusi risiko setiap aset kira-kira sama. Keuntungan dari logika ini adalah bahwa portofolio tidak akan hancur hanya karena satu aset tiba-tiba mengalami kejatuhan.
Pilih aset yang tepat terlebih dahulu, baru diversifikasi berarti
Untuk menerapkan risk parity, hal pertama yang harus dilakukan adalah memilih aset yang akan dimasukkan. Jika aset yang dipilih tidak tepat, perhitungan selanjutnya akan sia-sia meskipun sangat teliti.
Kumpulan aset yang dipilih adalah SPY, XAU, CL, dan BTC. Pemilihan keempat ini memiliki alasan — pergerakan mereka biasanya tidak sepenuhnya sinkron. Ketika ekonomi baik, saham naik; ketika sentimen risk-off muncul, emas naik; ketika ekspektasi inflasi tinggi, minyak mentah dan emas sama-sama naik; pasar kripto kadang searah dengan saham, kadang benar-benar terlepas. Justru karena korelasi antara aset-aset ini tidak tinggi, menempatkannya bersama-sama memiliki arti untuk diversifikasi risiko. Jika keempat aset setiap hari naik dan turun bersama-sama, diversifikasi hanyalah ilusi, tidak ada metode yang bisa menyelamatkan Anda.
Setelah aset dipilih, pertanyaan selanjutnya adalah: berapa banyak setiap aset yang harus dialokasikan? Inilah yang perlu dihitung oleh risk parity.
Bagaimana menghitung berapa banyak setiap aset yang harus dialokasikan
Logika operasi strategi terbagi menjadi dua langkah.
Langkah pertama, ambil data K-line dari keempat aset, lalu sejajarkan berdasarkan stempel waktu. Strategi menggunakan K-line 1 jam (PERIOD_H1) sebagai input data. Langkah ini terlihat sederhana, namun kenyataannya instrumen kontrak RWA terkadang kekurangan data. Jika pada suatu titik waktu tidak ada kuotasi untuk SPY, maka data pada titik waktu tersebut akan dihapus seluruh barisnya, hanya menyisakan titik waktu di mana keempat aset memiliki kuotasi secara bersamaan, kemudian lakukan perhitungan selanjutnya.
javascript
for (var k = 0; k < keys.length; k++) {
var row = timeMap[keys[k]], ok = true;
for (var i = 0; i < LABELS.length; i++) {
if (row[LABELS[i]] === undefined) { ok = false; break; }
}
if (ok) timestamps.push(parseInt(keys[k]));
}
Setelah data disejajarkan, urutan harga penutupan diubah menjadi return logaritmik, yaitu ln(harga saat ini / harga periode sebelumnya). Menggunakan return logaritmik daripada perubahan harga sederhana karena memiliki sifat aditif waktu — akumulasi multi-periode langsung sama dengan total return logaritmik, sehingga lebih mudah diproses; selain itu, di bawah asumsi umum bahwa harga aset mengikuti gerak Brown geometris, return logaritmik mengikuti distribusi normal, yang kompatibel dengan kerangka perhitungan matriks kovarians. Perlu dijelaskan bahwa return aktual aset kripto seringkali memiliki ekor tebal, ini adalah penyimpangan asumsi yang perlu diwaspadai; matriks kovarians mungkin meremehkan risiko sebenarnya dalam kondisi pasar ekstrem.
javascript
function calcLogReturns(prices) {
var r = [];
for (var i = 1; i < prices.length; i++) {
var prev = prices[i - 1], cur = prices[i];
if (!prev || !cur || prev <= 0 || cur <= 0) { r.push(0); continue; }
r.push(Math.log(cur / prev));
}
return r;
}
Langkah kedua, gunakan urutan return ini untuk menghitung matriks kovarians. Menghitung rata-rata kovarians historis sederhana terlalu kasar; di sini digunakan pembobotan EWMA — memberikan bobot lebih tinggi pada data terbaru, sehingga matriks kovarians dapat lebih cepat merasakan perubahan kondisi pasar.
javascript
for (var t = T - 1; t >= 0; t--) {
var w = Math.pow(lambda, T - 1 - t);
c += w * (retMat[i][t] - means[i]) * (retMat[j][t] - means[j]);
ws += w;
}
cov[i][j] = c / ws;
cov[j][i] = cov[i][j];
lambda adalah koefisien peluruhan; strategi menggunakan nilai default EWMA_LAMBDA = 0,94, yang mengacu pada pengaturan empiris RiskMetrics untuk data harian. Perlu dicatat bahwa 0,94 dari RiskMetrics dirancang untuk data harian, sedangkan strategi menggunakan data 1 jam yang lebih sering. Jika ingin sensitivitas matriks kovarians terhadap perubahan terkini setara dengan 0,94 untuk data harian, secara teoritis perlu dikonversi ke nilai yang lebih mendekati 1. Namun dalam praktik, 0,94 pada level jam masih merupakan titik awal yang dapat diterima, mewakili konfigurasi di mana data terkini memiliki bobot lebih tinggi dan data historis meluruh lebih cepat; dapat disesuaikan lebih lanjut berdasarkan hasil backtest aktual. Semakin dekat lambda ke 1, semakin lama pengaruh data historis bertahan, dan semakin lamban reaksi matriks kovarians terhadap perubahan terkini; semakin kecil lambda, semakin sensitif strategi terhadap perubahan kondisi pasar, tetapi juga lebih rentan memicu penyesuaian posisi yang tidak perlu karena noise jangka pendek.
Setelah perhitungan, ditambahkan istilah regularisasi pada diagonal, dengan koefisien ditetapkan sebesar 0,1% dari rata-rata diagonal (eps = diagMean * 0.001). Koefisien 0,001 kali ini dipilih melalui pengujian, cukup secara numerik untuk memastikan matriks definit positif, sementara dampaknya terhadap struktur kovarians dapat diabaikan. Perlu dijelaskan satu penyederhanaan: Praktik ketat EWMA kovarians harus menggunakan rata-rata tertimbang untuk menghitung deviasi, tetapi kode menggunakan rata-rata aritmatika sederhana dari seluruh jendela pandang ke belakang. Dalam kasus di mana rata-rata return mendekati nol (keadaan umum return jangka pendek aset keuangan), penyederhanaan ini memiliki dampak yang dapat diabaikan, tetapi dalam skenario di mana rata-rata secara signifikan menyimpang dari nol, akan menimbulkan bias kecil.
Setelah memiliki matriks kovarians, langkah selanjutnya adalah penyelesaian risk parity yang sebenarnya — menemukan serangkaian bobot sehingga kontribusi risiko setiap aset terhadap portofolio kira-kira sama. Sebelum iterasi dimulai, strategi telah menentukan arah setiap aset melalui kovarians portofolio volatilitas yang sama, hasilnya disimpan dalam array signs[] (+1 untuk long, -1 untuk short). Proses iterasi menggunakan tanda tetap yang telah ditentukan sebelumnya ini, hanya menyesuaikan besarnya bobot, tidak mengubah arah — ini dilakukan untuk stabilitas rekayasa, mencegah bobot berubah arah berulang kali karena gangguan numerik selama iterasi.
Masalah ini tidak memiliki solusi analitis, didekati dengan iterasi. Setiap putaran menghitung kontribusi risiko saat ini, menekan bobot aset yang kontribusinya terlalu besar, dan menaikkan bobot aset yang kontribusinya terlalu kecil, menyesuaikan berulang kali hingga konvergen.
javascript
for (var iter = 0; iter < 2000; iter++) {
var trc = riskContribs(w, scaledCov);
var pv = portVol(w, scaledCov);
var target = pv / n;
var obj = 0;
for (var i = 0; i < n; i++) {
for (var j = i + 1; j < n; j++) {
var d = Math.abs(trc[i]) - Math.abs(trc[j]);
obj += d * d;
}
}
if (obj < 1e-12) break;
var nw = [], ns = 0;
for (var i = 0; i < n; i++) {
var rc = Math.abs(trc[i]);
var sign = signs[i]; // menggunakan tanda tetap yang telah ditentukan sebelumnya
var a = target / rc;
var v = sign * Math.max(Math.abs(w[i]) * Math.pow(a, 0.5), 1e-6);
nw.push(v);
ns += Math.abs(v);
}
// normalisasi absolut, jumlah bobot absolut setiap aset menjadi 1
for (var i = 0; i < n; i++) w[i] = nw[i] / ns;
}
Kriteria konvergensi adalah jumlah kuadrat perbedaan kontribusi risiko semua aset kurang dari 1e-12, pada saat itu kontribusi risiko setiap aset dianggap cukup dekat, dan iterasi dihentikan. Batas maksimum iterasi adalah 2000 kali, untuk mencegah loop tak terbatas ketika matriks kovarians bersifat patologis. Dalam praktiknya, konvergensi biasanya tercapai dalam beberapa ratus iterasi. Jika batas atas tercapai namun belum konvergen, berarti ada masalah dengan data masukan atau matriks kovarians, maka strategi akan diturunkan menjadi posisi long dengan bobot sama, untuk memastikan sistem tidak berputar sia-sia.
Kontribusi risiko setiap aset didefinisikan sebagai bobotnya dikalikan dengan risiko marjinal, hasilnya bisa negatif, yang berarti aset tersebut mengurangi volatilitas portofolio secara keseluruhan.
javascript
function riskContribs(w, cov) {
var sv = matVecMul(cov, w);
var pv = portVol(w, cov);
var trc = [];
for (var i = 0; i < w.length; i++) trc.push(w[i] * sv[i] / pv);
return trc;
}
Bobot Bisa Negatif, Artinya Short
Strategi risk parity standar biasanya hanya melakukan long, tetapi pasar kontrak bisa melakukan short, sehingga strategi ini diperluas dengan mengizinkan bobot negatif.
Logika penentuannya adalah: pertama hitung portofolio referensi dengan volatilitas sama — aset dengan volatilitas tinggi memiliki bobot rendah, aset dengan volatilitas rendah memiliki bobot tinggi — lalu lihat kovarians antara setiap aset dengan portofolio referensi, apakah positif atau negatif. Kovarians negatif berarti aset tersebut cenderung bergerak berlawanan arah dengan portofolio secara keseluruhan, melakukan short pada aset tersebut membantu mengurangi risiko portofolio, sehingga bobot ditetapkan negatif, yang dalam pasar kontrak berarti membuka posisi short.
Perlu dijelaskan bahwa ini adalah pendekatan rekayasa, bukan solusi teoritis risk parity long-short standar — risk parity long-short yang ketat memerlukan optimasi terkendala berdasarkan matriks kovarians lengkap, dengan biaya komputasi yang lebih tinggi. Pendekatan ini memberikan penilaian arah yang cukup masuk akal dalam sebagian besar kondisi pasar, tetapi ketika beberapa aset memiliki kovarians negatif dengan portofolio referensi secara bersamaan, apakah melakukan short pada beberapa aset sekaligus masih dapat mengurangi risiko portofolio, perlu diverifikasi secara spesifik, tidak bisa digeneralisasi.
javascript
var invVols = [], sumInvVol = 0;
for (var i = 0; i < n; i++) {
var vol = Math.sqrt(Math.max(scaledCov[i][i], 1e-16));
invVols.push(1 / vol);
sumInvVol += 1 / vol;
}
var eqVolWeights = [];
for (var i = 0; i < n; i++) {
eqVolWeights.push(invVols[i] / sumInvVol);
}
var covWithPortfolio = 0;
for (var j = 0; j < n; j++) {
covWithPortfolio += eqVolWeights[j] * scaledCov[i][j];
}
var dir = covWithPortfolio < 0 ? -1 : 1;
Log('[Penentuan Arah]', LABELS[i],
'Kovarians dengan portofolio volatilitas sama:', _N(covWithPortfolio, 8),
'→', dir < 0 ? '🔴 Short' : '🟢 Long');
Setelah arah ditentukan, arah tersebut disimpan dalam array signs[] dan tidak berubah selama proses iterasi. Iterasi hanya bertugas menyesuaikan besarnya bobot, tidak mengubah arah. Setelah arah ditetapkan, ada satu hal lagi yang harus ditangani: seberapa besar leverage yang harus ditambahkan pada portofolio.
Leverage Tidak Semakin Tinggi Semakin Baik, Melainkan Mengikuti Volatilitas
Strategi ini memiliki mekanisme penyesuaian leverage yang terintegrasi, dengan tujuan mengendalikan volatilitas portofolio secara keseluruhan di sekitar level yang telah ditentukan. Sebagai analogi: Anda mengemudi, target kecepatan 60 km/jam. Di jalan tol, Anda bisa menekan pedal gas lebih dalam; di jalan perkotaan yang rumit, Anda mengurangi kecepatan. Mekanisme leverage strategi ini mirip — ketika volatilitas pasar secara keseluruhan rendah, leverage ditambahkan secara tepat agar tingkat risiko portofolio mencapai target; ketika volatilitas pasar tinggi, leverage dikurangi secara otomatis untuk memperkecil eksposur.
Strategi ini menggunakan candle 1 jam, dengan 8760 candle dalam setahun, sehingga koefisien tahunan langsung diambil sqrt(8760). Jika menggunakan periode lain, koefisien ini perlu disesuaikan: candle 15 menit sesuai sqrt(35040), candle 4 jam sesuai sqrt(2190), candle harian sesuai sqrt(365).
javascript
function calcLeverage(w, cov) {
var pv = portVol(w, cov) * Math.sqrt(8760);
if (!isFinite(pv) || pv <= 0) return 1;
return Math.min(TARGET_VOL / pv, MAX_LEVERAGE);
}
Volatilitas tahunan portofolio dibagi dengan volatilitas target, diperoleh kelipatan leverage yang harus ditambahkan, sekaligus ditetapkan batas atas untuk mencegah leverage lepas kendali dalam kondisi ekstrem. Ini bukan mengejar imbal hasil tertinggi, melainkan melakukan manajemen anggaran risiko — berapa banyak risiko yang digunakan untuk memperoleh imbal hasil, sudah direncanakan sebelumnya, bukan mengikuti pergerakan pasar.
Setelah leverage dihitung, portofolio dapat dibangun. Sementara itu, strategi juga akan secara otomatis menyesuaikan interval polling loop utama berdasarkan volatilitas saat ini, semakin tinggi volatilitas semakin cepat refresh, semakin rendah volatilitas semakin lambat, mengurangi perhitungan yang tidak perlu dan gesekan transaksi.
javascript
function getAdaptiveSleep(w, cov) {
var av = portVol(w, cov) * Math.sqrt(8760);
if (av > 0.50) return FAST_INTERVAL; // 15 menit
else if (av > 0.30) return MID_INTERVAL; // 30 menit
else return SLOW_INTERVAL; // 60 menit
}
Kapan Melakukan Rebalancing
Pasar bergerak setiap hari, bobot akan terus menyimpang dari desain awal. Jika dibiarkan, lama kelamaan risiko aktual yang ditanggung portofolio akan sangat berbeda dari yang diantisipasi. Strategi ini menetapkan dua kondisi yang memicu rebalancing: pertama, berdasarkan waktu, setiap jumlah jam tertentu, bobot dihitung ulang secara paksa; kedua, penyimpangan melebihi batas, ketika penyimpangan bobot aktual suatu aset dari bobot target melebihi ambang batas, atau terjadi pembalikan arah long-short, segera memicu rebalancing, tanpa menunggu waktu berikutnya.
Saat menghitung penyimpangan relatif, penyebutnya adalah nilai absolut bobot sebelumnya. Ketika bobot suatu aset ditekan sangat kecil (mendekati nol), penyimpangan relatif akan membesar, mudah menyebabkan rebalancing yang sering. Strategi ini memberikan perlindungan: ketika lastWeights[i] adalah nol, pemeriksaan penyimpangan dilewati langsung, menghindari pemicuan palsu akibat pembagian dengan nol.
javascript
if (!lastWeights) {
needRebal = true;
rebalReason = 'Pembukaan posisi pertama';
} else if ((now - lastTime) > REBALANCE_HOURS * 3600000) {
needRebal = true;
rebalReason = 'Rebalancing berkala (' + REBALANCE_HOURS + ' jam)';
} else {
for (var i = 0; i < weights.length; i++) {
if ((weights[i] >= 0) !== (lastWeights[i] >= 0)) {
needRebal = true;
rebalReason = LABELS[i] + ' Pembalikan arah (long↔short)';
break;
}
if (lastWeights[i] !== 0 &&
Math.abs(weights[i] - lastWeights[i]) / Math.abs(lastWeights[i]) > DRIFT_THRESHOLD) {
needRebal = true;
rebalReason = LABELS[i] + ' Bobot melampaui ambang batas drift';
break;
}
}
}
Setelah pemicu rebalancing, strategi menghitung jumlah nominal target untuk setiap aset, angka positif berarti long, negatif berarti short, kemudian membandingkan dengan posisi saat ini untuk memutuskan apakah akan menambah, mengurangi, atau mengubah arah. Saat mengubah arah, posisi lawan ditutup terlebih dahulu, lalu dibuka arah baru, untuk menghindari memegang posisi long dan short secara bersamaan.
javascript
if (targetSide === 'long' && shortQty > 0) {
exchange.CreateOrder(sym, "closesell", -1, shortQty);
}
if (targetSide === 'short' && longQty > 0) {
exchange.CreateOrder(sym, "closebuy", -1, longQty);
}
if (diffQty > 0) {
exchange.CreateOrder(sym, targetSide === 'long' ? "buy" : "sell", -1, diffQty);
} else if (diffQty < 0) {
exchange.CreateOrder(sym, targetSide === 'long' ? "closebuy" : "closesell", -1, Math.abs(diffQty));
}
Dengan cara ini, tidak hanya menghindari biaya transaksi yang besar akibat perdagangan yang terlalu sering, tetapi juga mencegah portofolio menyimpang dari tujuan desain dalam jangka waktu lama. Dalam kondisi normal, mekanisme rebalancing sudah cukup untuk menghadapi sebagian besar perubahan pasar. Namun, pasar terkadang tidak normal, sehingga diperlukan perlindungan tambahan.
Masih Ada Pemutus Darurat
Selain rebalancing normal, strategi juga memiliki mekanisme pengurangan posisi darurat. Setiap siklus utama akan memeriksa semua posisi saat ini, membandingkannya dengan harga terakhir yang tercatat, dan melihat seberapa besar pergerakan yang merugikan di setiap arah. Jika harga long turun atau harga short naik lebih dari 5%, strategi secara otomatis akan mengurangi setengah posisi, mengendalikan kerugian terlebih dahulu, tanpa menunggu rebalancing berikutnya.
javascript
if (pos.side === 'long') {
drop = (last - cur) / last;
} else if (pos.side === 'short') {
drop = (cur - last) / last;
}
if (drop >= EMERGENCY_DROP) {
Log('🚨 Pemicu Risiko Darurat! [' + label + '][' + pos.side + '] Perubahan merugikan:',
_N(drop * 100, 2) + '%', 'Terakhir:', _N(last, 4), '→ Harga sekarang:', _N(cur, 4));
if (mode === 'live') emergencyReduceLive(sym, label, pos.side, EMERGENCY_REDUCE);
else emergencyReducePaper(sym, label, cur, pos.side, EMERGENCY_REDUCE);
}
Dalam mode live, antarmuka penutupan posisi bursa dipanggil; dalam mode paper, margin dan kas diperbarui di status lokal sesuai proporsi posisi, menghitung laba/rugi saat ini, dan mencatat transaksi.
Ada detail desain yang perlu dijelaskan: setelah pemicu pengurangan darurat, harga acuan tidak langsung direset; pemeriksaan berikutnya masih menggunakan harga sebelum pemicu sebagai referensi. Ini berarti dalam kondisi pasar yang terus bergerak merugikan, mekanisme ini akan terpicu berulang kali di setiap siklus, mengurangi posisi secara bertahap hingga habis, atau menunggu rebalancing normal berikutnya untuk mereset harga acuan. Desain ini disengaja—dalam pergerakan ekstrem satu arah, pengurangan bertahap lebih efektif mengendalikan kerugian dibandingkan hanya satu kali pengurangan; tetapi efek sampingnya adalah jika harga sempat turun melewati ambang lalu cepat rebound, bisa kehilangan peluang rebound karena pengurangan yang berlebihan. Dalam pasar normal, mekanisme ini hampir tidak pernah terpicu, tetapi dengan adanya mekanisme ini, setidaknya tidak akan bertahan sepanjang jalan saat peristiwa black swan terjadi.
Bagaimana Tampilannya Saat Berjalan
Setelah strategi berjalan di platform, dashboard akan menampilkan secara real-time apakah setiap aset sedang long atau short, bobot masing-masing, leverage saat ini, estimasi volatilitas tahunan portofolio secara keseluruhan, serta matriks korelasi antara keempat aset. Floating profit/loss posisi diperbarui setiap menit, dan inti perhitungan strategi secara otomatis menyesuaikan frekuensi polling berdasarkan volatilitas pasar saat ini.
Pembaruan setiap 1 menit ini tidak menggunakan multithreading, melainkan dengan menyisipkan sub-loop di dalam loop utama saat menunggu. Sub-loop ini akan bangun setiap 1 menit untuk mengambil harga terbaru, memperbarui floating profit/loss dan kurva ekuitas, dan setelah akumulasi mencapai interval polling strategi, sub-loop akan keluar dan masuk ke perhitungan strategi berikutnya. Seluruh strategi berjalan dalam satu thread, tanpa risiko konkurensi.
javascript
function sleepWithPnlRefresh(totalSleepMs, weights, leverage, covMatrix, corrMatrix) {
var elapsed = 0;
while (elapsed < totalSleepMs) {
var step = Math.min(PNL_INTERVAL, totalSleepMs - elapsed);
Sleep(step);
elapsed += step;
var prices = getTickers();
var equity = calcEquity(prices);
var initCap = _G('pt_initCapital') || INIT_CAPITAL;
_chart.add(0, [new Date().getTime(), equity]);
LogProfit(equity - initCap, '&');
renderDashboard(weights, leverage, covMatrix, corrMatrix, prices, totalSleepMs, true);
}
}
Selain itu, strategi mendukung mode paper trading, yang memungkinkan menjalankan logika secara lengkap dan menyetel parameter tanpa menggunakan dana sungguhan. Setelah yakin perilakunya sesuai ekspektasi, barulah dievaluasi apakah akan beralih ke mode live. Setelah menjalankan konfigurasi ini dalam mode paper untuk beberapa waktu, mari lihat hasil aktualnya.
Hasil dari Paper Trading
Selama periode pengujian, strategi secara keseluruhan berada dalam posisi profit. Arah posisi: BTC, XAU, SPY semuanya long, CL minyak mentah short. Kebetulan saat itu situasi AS-Iran menunjukkan tanda-tanda mereda, premi risiko geopolitik menurun, harga minyak mentah turun cukup signifikan, sehingga short minyak mentah menjadi sumber profit utama periode ini. Pergerakan pasar selama periode ini cukup bersahabat dengan strategi, namun bukan berarti akan selalu demikian di masa depan. Faktanya, strategi ini masih memiliki beberapa aspek yang belum sepenuhnya dipahami; tidak jujur jika tidak mengakuinya.
Hal-Hal yang Belum Sepenuhnya Dipahami
Dalam proses pengembangan strategi ini, ada beberapa masalah yang belum sepenuhnya terpecahkan.
Pertama, likuiditas kontrak RWA jauh lebih rendah daripada BTC. Instrumen seperti SPY, XAU, CL masih sangat baru di blockchain; slippage dan kedalaman order book tidak diketahui. Dalam paper trading, masalah ini tidak terasa, tetapi akan nyata terjadi di mode live.
Kedua, strategi ini bergantung pada adanya diversifikasi antar aset. Namun, saat pasar panik ekstrem, korelasi antar aset berisiko cenderung meningkat tajam, sehingga efek diversifikasi berkurang drastis—dan justru saat itulah Anda paling membutuhkan perlindungan.
Ketiga, aset tradisional memiliki jam non-perdagangan, harga hampir tidak bergerak, tetapi BTC berfluktuasi 24/7. Hal ini menyebabkan matriks kovarians meremehkan hubungan aktual antar aset—setelah pasar saham AS tutup, BTC masih bergerak, tidak ada data SPY yang sesuai untuk volatilitas periode tersebut. Saat pasar tradisional buka kembali, penilaian strategi terhadap hubungan pergerakan mungkin sudah terlambat.
Keempat, data historis terbatas, stabilitas matriks kovarians dalam periode pendek masih diragukan. Parameter seperti faktor peluruhan EWMA, volatilitas target, ambang rebalancing semuanya berdasarkan pengalaman, belum terverifikasi secara ketat. Untuk menentukan short, digunakan tanda kovarians portofolio referensi dengan volatilitas setara (equal volatility reference portfolio covariance sign), yang merupakan pendekatan rekayasa. Ketika beberapa aset memiliki kovarians negatif dengan portofolio referensi secara bersamaan, apakah melakukan short secara bersamaan benar-benar mengurangi risiko portofolio perlu diverifikasi satu per satu, tidak bisa langsung diterapkan. Aset kripto sendiri memiliki karakter ekor gemuk (fat-tail), distribusi return aktual menyimpang dari normal. Dalam kondisi pasar ekstrem, estimasi risiko dari matriks kovarians akan lebih rendah dari sebenarnya. Ini adalah asumsi bias yang harus diterima dalam kerangka saat ini.
第五,实盘环境下方向切换时,平仓指令发出后策略等待固定时长即继续执行后续开仓,没有等待成交确认。在交易所响应较慢或网络延迟较高的情况下,存在旧仓未完全平掉就开新仓的风险。模拟盘不涉及真实成交,感知不到这个问题,切换实盘前需要根据具体交易所的响应速度评估是否需要调整等待时长。
这些问题靠模拟盘跑一跑是发现不了的,需要更细致的建模和理论推导,把每一个假设都认真验证一遍,才能知道这套逻辑在加密市场里到底站不站得住脚。
Terakhir
Motivasi awal di balik strategi ini sederhana: pasar kripto sedang bearish, kontrak RWA baru saja melengkapi peta kelas aset utama, dan keuangan tradisional memiliki teori alokasi yang telah terakumulasi selama puluhan tahun. Pertemuan kedua hal ini layak untuk dicoba. Kode sudah lengkap, logika transparan, parameter dapat disesuaikan. Namun pada akhirnya ini hanyalah sebuah titik awal, masih jauh dari strategi alokasi aset yang benar-benar tahan uji perdagangan nyata. Jika Anda memiliki ide yang lebih baik, silakan bergabung untuk menyempurnakannya.
Konten di atas hanya mencatat proses eksplorasi strategi, bukan merupakan saran investasi. Perdagangan kontrak mengandung risiko tinggi, kinerja akun simulasi tidak mewakili hasil perdagangan nyata. Sebelum melibatkan dana nyata, pastikan Anda memahami risiko terkait sepenuhnya.
Kode sumber strategi: Strategi Paritas Risiko Aset RWA
- 1



