Kami memiliki masalah. sistem perdagangan otomatis kami memiliki nilai positif yang diharapkan: matematika diperiksa, backtest terlihat bagus, dan pada awalnya, itu menghasilkan uang. tetapi seiring waktu, itu berdarah. kerugian kecil yang terakumulasi lebih cepat daripada kemenangan sesekali dapat mengimbangi. Ini bukan bug dalam kode.Ini adalah kesalahpahaman mendasar tentang apa yang penting dalam produksi. Perangkap Nilai yang Diharapkan Sebagian besar tutorial perdagangan, kertas akademik, dan kursus online mengajarkan Anda untuk memaksimalkan nilai yang diharapkan. E[profit] = Σ(probability_i × outcome_i) Jika angka ini positif, Anda harus mengambil perdagangan. Jika Anda dapat membuat angka ini lebih besar, Anda harus mengoptimalkan untuk itu. Kecuali dalam produksi, strategi optimasi ini memiliki kelemahan fatal: . it doesn't account for the path you take to reach that expected value Biarkan saya menunjukkan kepada Anda apa yang saya maksud dengan skenario nyata dari sistem kami. Sistem pendarahan Strategi kami dirancang untuk menangkap puncak harga di pasar volatile. Analisis arah harga yang mungkin untuk setiap jendela perdagangan Optimalkan ukuran posisi menggunakan pemrograman quadratic Eksekusi perdagangan untuk menangkap peluang spread Di atas kertas, nilai yang diharapkan sangat positif. Hari 1-3: Menangkap dorongan besar, menghasilkan $ 15.000 Hari 4-12: Kerugian kecil setiap hari, total -$8.000 Hari 13-14: Spike lain, menghasilkan $ 12.000 Hari 15-28: Pendarahan bertahap, total -$ 11.000 Masalahnya? optimizer kami telah mengembangkan bias struktural. secara sistematis mengambil posisi yang menang besar kadang-kadang tetapi kehilangan jumlah kecil sering. perhitungan nilai yang diharapkan mengatakan ini baik-baik saja: kemenangan besar akhirnya akan mengimbangi. tetapi "akhirnya" membutuhkan modal yang tak terbatas dan cakrawala waktu yang tak terbatas. Kami tidak memiliki keduanya. Melihat Perbedaan: Simulasi Untuk menggambarkan mengapa kontrol risiko ini penting, mari kita bandingkan dua strategi perdagangan pasar yang sama selama satu tahun: Peningkatan posisi agresif berdasarkan nilai yang diharapkan, menggunakan leverage 150% ketika peluang terlihat baik. Strategy A (EV Maximization) Sinyal pasar yang sama, tetapi dengan ukuran fraksi Kelly (40% agresif) dan penurunan posisi berdasarkan CVaR selama periode risiko ekor tinggi. Strategy B (Risk-Controlled) Hasilnya menceritakan sebuah cerita yang penting. Lihatlah grafik kiri dengan teliti - sebagian besar jalur EV-maximization tidak gagal secara bencana. Mereka hanya ... tidak mengkompos. Anda dapat melihat pola sawtooth: kadang-kadang memuncak, diikuti oleh erosi lambat. Ini adalah pendarahan rahasia yang nilai yang diharapkan positif hilang. Perhatikan bagaimana beberapa jalur mencapai $ 500k? Outliers itu menarik rata-rata hingga $ 146k. hanya $ 136k, dan 29 dari 100 jalur berakhir di bawah modal awal. mediaan In a backtest, you might have gotten lucky and seen one of those winner paths. In production, you get one random draw. Grafik yang tepat adalah "mengerikan", dan itulah yang tepat. Tidak ada bayangan bulan hingga $ 500k, tetapi juga tidak ada penarikan bencana. Strategi yang dikendalikan oleh risiko berkumpul dengan ketat di sekitar pertumbuhan sederhana. Ini adalah realitas produksi: strategi yang bertahan bermasalah. strategi yang berdarah tidak menghasilkan apa-apa, terlepas dari apa yang dijanjikan oleh perhitungan nilai yang diharapkan. Nilai yang diharapkan tidak menangkap 1. risiko kerusakan Ini adalah masalah pemain klasik, yang diformalkan oleh Kriteria Kelly. Bahkan dengan nilai yang diharapkan positif, jika ukuran posisi Anda salah, Anda Pergilah pecah akan Pertimbangkan: Anda memiliki modal $ 100.000 dan perdagangan dengan kemungkinan menang 60% yang baik menggandakan taruhan Anda atau kalah. nilai yang diharapkan positif (+20%). tetapi jika Anda bertaruh semuanya, Anda memiliki peluang 40% untuk kehilangan semuanya pada perdagangan pertama. Kelly memberi tahu Anda ukuran taruhan yang optimal adalah: kelly_fraction = (p * b - q) / b # where p = win probability, q = loss probability, b = odds Berikut ini yang kami pelajari dalam produksi: . even Kelly is too aggressive Mengapa ? karena : Perkiraan probabilitas Anda salah (selalu) Perubahan pasar (keunggulan 60% menjadi 52%) Korelasi pecah selama stres (ketika Anda membutuhkannya paling banyak) Anda tidak dapat menyeimbangkan kembali segera (slipage, latensi, dampak pasar) Kami akhirnya menggunakan fraksi Kelly (25-50% dari taruhan teoritis Kelly) karena biaya dunia nyata untuk melebih-lebihkan tepi Anda adalah bencana. Instabilitas Numerikal dalam Peristiwa Ekstrem Suatu pagi, sistem kami runtuh selama peristiwa cuaca ekstrim. bukan kecelakaan perangkat lunak, tetapi matematika. Matrix covariance kami menjadi unik. optimizer tidak dapat menemukan solusi. kami dibekukan, tidak dapat berdagang, selama kondisi yang tepat di mana strategi kami seharusnya menghasilkan uang paling banyak. Masalahnya: kami telah mengoptimalkan untuk skenario yang diharapkan. tetapi peristiwa ekstrem memiliki struktur korelasi yang berbeda. Aset yang biasanya bergerak secara independen tiba-tiba menjadi korelasi yang sempurna. matriks covariance Anda yang diperkirakan dengan hati-hati, yang dibangun dari ribuan hari normal, menjadi tidak berguna. Perhitungan nilai tidak lebih baik dari yang diharapkan. : regularization from sklearn.covariance import LedoitWolf # Instead of sample covariance cov_matrix = np.cov(returns.T) # Use shrinkage towards structured estimator lw = LedoitWolf() cov_matrix_robust = lw.fit(returns).covariance_ Ini menurunkan beberapa akurasi pada waktu normal untuk stabilitas di ekstrem. perhitungan nilai yang diharapkan Anda akan sedikit lebih buruk. sistem Anda akan bertahan dari keriput hitam. Waktu Horizon Mismatch Berikut adalah masalah yang tidak muncul dalam backtest: perhitungan nilai yang diharapkan Anda mengasumsikan Anda dapat menunggu cukup lama untuk hukum bilangan besar untuk bekerja. Dalam produksi, Anda tidak bisa. Kami menemukan ini ketika sistem kami menunjukkan nilai harapan positif yang kuat di atas jendela 90-hari tetapi secara konsisten kehilangan uang di atas jendela 30-hari. Penyedia modal kami meninjau kinerja setiap bulan. batas risiko kami disesuaikan setiap kuartal berdasarkan hasil terbaru.Jika kami memiliki tiga bulan buruk, batas posisi kami dikurangi, terlepas dari apa yang dikatakan nilai yang diharapkan jangka panjang. Strategi teoritis membutuhkan 6-12 bulan untuk menunjukkan keuntungan yang dapat diandalkan. realitas operasional memberi kita 3 bulan sebelum konsekuensi dimulai. Kami harus menambahkan pembatasan cakrawala waktu yang eksplisit untuk optimasi kami: def optimize_with_horizon_constraint(scenarios, max_horizon_days=30): """ Optimize not just for long-term EV, but for probability of positive returns within operational time horizon """ # Standard expected value ev = np.mean(scenarios) # But also: what'sthe probability we're profitable # within our actual time horizon? rolling_returns = pd.Series(scenarios).rolling(max_horizon_days).sum() prob_profitable_in_horizon = (rolling_returns > 0).mean() # Penalize strategies with low short-term win probability # even if long-term EV is great if prob_profitable_in_horizon < 0.6: return ev * 0.5 # Heavily discount return ev Ini berarti menerima strategi dengan nilai teoritis yang diharapkan sedikit lebih rendah tetapi kemungkinan yang lebih tinggi untuk menunjukkan keuntungan dalam keterbatasan operasional kami. Apa yang harus dioptimalkan Setelah pelajaran yang menyakitkan, inilah yang kami pelajari untuk mengoptimalkan: Return Risk-Adjusted dengan CVaR Alih-alih memaksimalkan E[profit], kami meminimalkan CVaR (Conditional Value at Risk): kerugian yang diharapkan dalam 5% skenario terburuk import cvxpy as cp # Decision variable: position sizes positions = cp.Variable(n_assets) # Scenarios returns scenario_returns = get_price_scenarios() # shape: (n_scenarios, n_assets) portfolio_returns = scenario_returns @ positions # CVaR constraints alpha = 0.05 # 5% tail var = cp.Variable() u = cp.Variable(n_scenarios) constraints = [ u >= 0, u >= -(portfolio_returns - var), ] cvar = var + cp.sum(u) / (n_scenarios * alpha) # Optimize for return while constraining tail risk objective = cp.Maximize(cp.sum(portfolio_returns) / n_scenarios - lambda_risk * cvar) Ini secara eksplisit menghukum strategi yang memiliki pengembalian rata-rata yang baik tetapi risiko ekor bencana. Keterkaitan dengan Model Error Kami mengasumsikan model kami salah dan mengoptimalkan untuk Dalam konteks ketidakpastian yang wajar: Kasus Terburuk # Instead of single expected return estimate mu_estimated = historical_returns.mean() # Assume uncertainty mu_lower_bound = mu_estimated - 2 * historical_returns.std() / np.sqrt(len(historical_returns)) # Optimize for worst-case in uncertainty range # (Robust optimization / minmax approach) Ini melindungi terhadap perkiraan parameter yang berlebihan. 3.Kelly-restricted posisi ukuran Kami secara eksplisit membatasi ukuran posisi berdasarkan kriteria Kelly, bahkan ketika optimizer menginginkan lebih banyak: def kelly_position_limit(edge, volatility, capital, max_kelly_fraction=0.25): """ edge: expected return per unit risk volatility: standard deviation of returns max_kelly_fraction: fraction of theoretical Kelly to actually use """ kelly_full = edge / (volatility ** 2) kelly_fraction = capital * kelly_full * max_kelly_fraction return kelly_position Kami menggunakan 25% Kelly sebagai pembatasan keras. Ya, ini mengurangi nilai yang diharapkan. Pemikiran Produksi Pergeseran dari pemikiran nilai yang diharapkan ke pemikiran produksi adalah filosofis: Strategi mana yang memiliki pengembalian yang paling tinggi yang diharapkan? Research mindset "Strategi apa yang akan bertahan jika salah tentang asumsi saya?" Production mindset Berikut adalah perubahan praktis yang kami lakukan: Backtest: Analisis bulan terburuk ditambahkan, tidak hanya hasil rata-rata Ukuran Posisi: Konservatif secara default, dengan kill-switch untuk anomali Risk metrics: Track CVaR setiap hari, tidak hanya P&L Validasi Model: Asumsikan ketidakpastian parameter 30% pada semua perkiraan Perencanaan bencana: jalur kode eksplisit untuk skenario "model benar-benar salah" Pelajaran yang Nilai yang diharapkan adalah konsep matematika yang indah, bersih, intuitif, dan secara teoritis optimal. Itu juga tidak cukup. Dalam produksi, Anda tidak berdagang terhadap distribusi probabilitas. Model Risiko Anda yang Tidak Sempurna Pasar yang berubah Pembatasan Operasional yang Tidak Ada di Backtest Anda Realitas psikologis menonton penurunan modal Anda hari demi hari meskipun "nilai yang diharapkan positif" Sistem yang bertahan bukanlah sistem dengan nilai yang paling tinggi yang diharapkan. mereka adalah sistem yang tetap kuat ketika model salah, pasar bergeser, dan ular hitam muncul. Optimisasi untuk kelangsungan hidup pertama. profitabilitas kedua. nilai yang diharapkan adalah komponen dari perhitungan itu, tetapi itu bukan fungsi objektif.