Hệ thống giao dịch tự động của chúng tôi có giá trị dự kiến tích cực: toán học kiểm tra, các bài kiểm tra ngược trông tuyệt vời, và ban đầu, nó kiếm được tiền. nhưng theo thời gian, nó chảy máu. tổn thất nhỏ tích lũy nhanh hơn so với chiến thắng thỉnh thoảng có thể bù đắp. Đây không phải là một lỗi trong mã, đó là một sự hiểu lầm cơ bản về những gì quan trọng trong sản xuất. Bẫy giá trị dự kiến Hầu hết các hướng dẫn giao dịch, các bài báo học thuật và các khóa học trực tuyến dạy bạn tối đa hóa giá trị mong đợi. E[profit] = Σ(probability_i × outcome_i) Nếu con số này là tích cực, bạn nên lấy thương mại. Nếu bạn có thể làm cho con số này lớn hơn, bạn nên tối ưu hóa cho nó. Ngoại trừ trong sản xuất, chiến lược tối ưu hóa này có một nhược điểm chết người: . it doesn't account for the path you take to reach that expected value Hãy để tôi chỉ cho bạn những gì tôi có nghĩa là với một kịch bản thực tế từ hệ thống của chúng tôi. Hệ thống chảy máu Chiến lược của chúng tôi được thiết kế để nắm bắt đỉnh giá trong thị trường biến động. mô hình sẽ: Phân tích các hướng giá có thể cho mỗi cửa sổ giao dịch Tối ưu hóa kích thước vị trí bằng cách sử dụng lập trình vuông Thực hiện các giao dịch để nắm bắt các cơ hội phân tán Trên giấy tờ, giá trị dự kiến là tích cực.Trong thực tế: Ngày 1-3: Bắt một đỉnh lớn, kiếm được 15.000 đô la Ngày 4-12: Thiệt hại nhỏ mỗi ngày, tổng cộng -8.000 đô la Ngày 13-14: Một đỉnh khác, kiếm được 12.000 đô la Ngày 15-28: Xuất huyết dần dần, tổng cộng - $11,000 Vấn đề? Tối ưu hóa của chúng tôi đã phát triển một thiên vị cấu trúc. Nó đã có hệ thống chiếm các vị trí giành chiến thắng lớn thỉnh thoảng nhưng mất số tiền nhỏ thường xuyên. Việc tính toán giá trị dự kiến cho biết điều này là tốt: những chiến thắng lớn cuối cùng sẽ bù đắp. nhưng "rốt cuộc" đòi hỏi vốn vô hạn và chân trời thời gian vô hạn. Chúng tôi không có cả. Xem sự khác biệt: Một mô phỏng Để minh họa lý do tại sao những kiểm soát rủi ro này quan trọng, hãy so sánh hai chiến lược giao dịch cùng một thị trường trong một năm: Độ kích thước vị trí tích cực dựa hoàn toàn vào giá trị dự kiến, sử dụng đòn bẩy 150% khi cơ hội có vẻ tốt. Strategy A (EV Maximization) Các tín hiệu thị trường tương tự, nhưng với kích thước phân đoạn của Kelly (40% tích cực) và giảm vị trí dựa trên CVaR trong thời kỳ rủi ro đuôi cao. Strategy B (Risk-Controlled) Kết quả cho biết một câu chuyện quan trọng. Nhìn kỹ vào biểu đồ bên trái - hầu hết các con đường tối đa hóa EV không thất bại thảm khốc. Chúng chỉ đơn giản là... không làm trầm trọng. Bạn có thể nhìn thấy mô hình răng giáp: thỉnh thoảng tăng lên, tiếp theo là sự xói mòn chậm. Đây là sự chảy máu bí ẩn mà giá trị dự kiến tích cực bỏ lỡ. Lưu ý làm thế nào một vài con đường đạt đến $500k? Những người khác kéo trung bình lên đến $146k. chỉ là $ 136k, và 29 trong số 100 con đường kết thúc dưới vốn khởi đầu. Median In a backtest, you might have gotten lucky and seen one of those winner paths. In production, you get one random draw. Biểu đồ đúng là "chán", và đó chính xác là điểm. Không có hình ảnh mặt trăng lên đến $ 500k, nhưng cũng không có sự sụp đổ thảm khốc. Chiến lược kiểm soát rủi ro tập hợp chặt chẽ xung quanh tăng trưởng khiêm tốn. Đây là thực tế sản xuất: chiến lược sống sót sẽ trở nên phức tạp. chiến lược chảy máu không làm gì, bất kể những gì tính toán giá trị dự kiến hứa hẹn. Những gì giá trị dự kiến không nắm bắt 1.Rủi ro hủy diệt Đây là vấn đề của người đánh bạc cổ điển, được chính thức hóa bởi Tiêu chí Kelly. Ngay cả với giá trị dự kiến tích cực, nếu kích thước vị trí của bạn là sai, bạn đi phá vỡ sẽ Xem xét: Bạn có 100.000 đô la vốn và một giao dịch với 60% cơ hội chiến thắng mà hoặc tăng gấp đôi cược của bạn hoặc mất nó. giá trị dự kiến là tích cực (+20%). nhưng nếu bạn đặt cược tất cả, bạn có một cơ hội 40% để mất tất cả trên giao dịch đầu tiên. Kelly cho bạn biết kích thước đặt cược tối ưu là: kelly_fraction = (p * b - q) / b # where p = win probability, q = loss probability, b = odds Nhưng đây là những gì chúng tôi đã học được trong sản xuất: . even Kelly is too aggressive Tại sao? bởi vì: Các ước tính xác suất của bạn là sai (luôn luôn) Thị trường thay đổi (lợi thế 60% của bạn trở thành 52%) Các mối tương quan bị phá vỡ trong thời gian căng thẳng (khi bạn cần chúng nhiều nhất) Bạn không thể cân bằng lại ngay lập tức (độ trượt, độ trễ, tác động thị trường) Chúng tôi kết thúc bằng cách sử dụng phân đoạn Kelly (25-50% của cược lý thuyết Kelly) bởi vì chi phí thực tế của việc đánh giá quá cao lợi thế của bạn là thảm khốc. 2. số bất ổn trong các sự kiện cực đoan Một buổi sáng, hệ thống của chúng tôi sụp đổ trong một sự kiện thời tiết khắc nghiệt.Không phải là một sự cố phần mềm, mà là một sự cố toán học. Ma trận covariance của chúng tôi trở nên duy nhất.Nhà tối ưu hóa không thể tìm ra giải pháp.Chúng tôi bị đóng băng, không thể giao dịch, trong những điều kiện chính xác mà chiến lược của chúng tôi nên kiếm được nhiều tiền nhất. Vấn đề: Chúng tôi đã tối ưu hóa cho các kịch bản dự kiến.Nhưng các sự kiện cực đoan có cấu trúc tương quan khác nhau.Các tài sản thường di chuyển độc lập đột nhiên trở nên tương quan hoàn hảo.Ma trận covariance được ước tính cẩn thận của bạn, được xây dựng từ hàng ngàn ngày bình thường, trở nên vô dụng. Sửa chữa không tốt hơn dự kiến tính toán giá trị. : 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_ Điều này làm giảm một số độ chính xác trong thời gian bình thường cho sự ổn định ở mức cực đoan. tính toán giá trị dự kiến của bạn sẽ tồi tệ hơn một chút. hệ thống của bạn sẽ tồn tại sừng đen. Thời gian Horizon Mismatch Dưới đây là một vấn đề không xuất hiện trong các thử nghiệm ngược: tính toán giá trị dự kiến của bạn giả định bạn có thể đợi đủ lâu để luật số lớn hoạt động. Trong sản xuất, bạn không thể Chúng tôi phát hiện ra điều này khi hệ thống của chúng tôi cho thấy giá trị dự kiến tích cực mạnh mẽ trên cửa sổ 90 ngày nhưng liên tục mất tiền trên cửa sổ 30 ngày. Các nhà cung cấp vốn của chúng tôi đã xem xét hiệu suất hàng tháng. giới hạn rủi ro của chúng tôi đã được điều chỉnh hàng quý dựa trên kết quả gần đây. nếu chúng tôi có ba tháng tồi tệ, giới hạn vị trí của chúng tôi đã bị cắt giảm, bất kể giá trị dự kiến dài hạn nói gì. Chiến lược lý thuyết mất 6-12 tháng để thể hiện đáng tin cậy lợi nhuận. thực tế hoạt động cho chúng ta 3 tháng trước khi hậu quả bắt đầu. Chúng tôi đã phải thêm những hạn chế rõ ràng về thời gian để tối ưu hóa: 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 Điều này có nghĩa là chấp nhận các chiến lược có giá trị dự kiến lý thuyết thấp hơn một chút nhưng khả năng hiển thị lợi nhuận cao hơn trong giới hạn hoạt động của chúng tôi. Tối ưu hóa gì thay vì Sau những bài học đau đớn, đây là những gì chúng tôi đã học để tối ưu hóa cho: Rủi ro điều chỉnh lợi nhuận với CVaR Thay vì tối đa hóa E[lợi nhuận], chúng tôi giảm thiểu CVaR (Giá trị có điều kiện khi rủi ro): tổn thất dự kiến trong 5% kịch bản tồi tệ nhất 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) Điều này rõ ràng trừng phạt các chiến lược có lợi nhuận trung bình tốt nhưng rủi ro đuôi thảm khốc. Robustness to Model Error (Sự mạnh mẽ đến lỗi mô hình) Chúng tôi cho rằng mô hình của chúng tôi là sai và tối ưu hóa cho Trong phạm vi không chắc chắn hợp lý: trường hợp xấu nhất # 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) Điều này bảo vệ chống lại các ước tính tham số quá tự tin. 3.Kelly-Constrainted vị trí kích thước Chúng tôi rõ ràng giới hạn kích thước vị trí dựa trên tiêu chí Kelly, ngay cả khi người tối ưu hóa muốn nhiều hơn: 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 Chúng tôi sử dụng 25% Kelly như một hạn chế cứng. vâng, điều này làm giảm giá trị dự kiến. nó cũng đảm bảo chúng tôi vẫn sẽ giao dịch vào tháng tới. Suy nghĩ sản xuất Sự chuyển đổi từ suy nghĩ giá trị dự kiến sang suy nghĩ sản xuất là triết học: "Chiến lược nào có lợi nhuận dự kiến cao nhất?" Research mindset "Chiến lược nào sẽ tồn tại nếu sai về các giả định của tôi?" Production mindset Dưới đây là những thay đổi thực tế chúng tôi đã thực hiện: Backtests: Thêm phân tích tháng tồi tệ nhất, không chỉ là lợi nhuận trung bình Kích thước vị trí: Bảo thủ theo mặc định, với kill-switches cho sự bất thường Đo lường rủi ro: Theo dõi CVaR hàng ngày, không chỉ P&L Xác nhận mô hình: Giả sử sự không chắc chắn của các thông số 30% trên tất cả các ước tính Kế hoạch thảm họa: Các con đường mã rõ ràng cho các kịch bản "mô hình hoàn toàn sai" Bài học Giá trị dự kiến là một khái niệm toán học đẹp, sạch sẽ, trực quan và lý thuyết tối ưu. Nó cũng không đủ. Trong sản xuất, bạn không giao dịch chống lại một phân phối xác suất. Mô hình rủi ro không hoàn hảo của riêng bạn Thị trường thay đổi Các hạn chế hoạt động không nằm trong backtest của bạn Thực tế tâm lý của việc chứng kiến vốn của bạn giảm mỗi ngày ngay cả khi "giá trị dự kiến là tích cực" Các hệ thống sống sót không phải là những hệ thống có giá trị dự kiến cao nhất; chúng là những hệ thống duy trì sức mạnh khi mô hình sai, thị trường thay đổi và những con lừa đen xuất hiện. Tối ưu hóa cho sự sống còn đầu tiên. Lợi nhuận thứ hai. Giá trị dự kiến là một thành phần của tính toán đó, nhưng nó không phải là chức năng khách quan.