เรามีปัญหา ระบบการซื้อขายอัตโนมัติของเรามีมูลค่าที่คาดว่าจะเป็นบวก: คณิตศาสตร์ตรวจสอบออกการทดสอบด้านหลังดูดีและในตอนแรกมันสร้างรายได้ แต่ในช่วงเวลาที่มันเป็นเลือดออก การสูญเสียขนาดเล็กที่สะสมเร็วกว่าการชนะบางครั้งสามารถชดเชยได้ นี่ไม่ใช่ข้อผิดพลาดในรหัส มันเป็นความเข้าใจผิดพื้นฐานเกี่ยวกับสิ่งที่สําคัญในการผลิต หมายเลขรุ่น: The Expected Value Trap บทเรียนการซื้อขายส่วนใหญ่กระดาษวิชาการและหลักสูตรออนไลน์สอนให้คุณสามารถเพิ่มมูลค่าที่คาดหวังได้มากที่สุด โลกที่ดูเหมือนว่าป้องกันการระเบิด: E[profit] = Σ(probability_i × outcome_i) หากตัวเลขนี้เป็นบวกคุณควรใช้เทรด หากคุณสามารถทําให้ตัวเลขนี้ใหญ่ขึ้นคุณควรเพิ่มประสิทธิภาพสําหรับมัน ง่ายไม่? นอกเหนือจากการผลิตกลยุทธ์การเพิ่มประสิทธิภาพนี้มีข้อบกพร่องที่ร้ายแรง: . it doesn't account for the path you take to reach that expected value ให้ฉันแสดงให้คุณเห็นสิ่งที่ฉันหมายถึงด้วยสถานการณ์ที่แท้จริงจากระบบของเรา ระบบเลือดออก กลยุทธ์ของเราถูกออกแบบมาเพื่อจับคะแนนราคาที่สูงขึ้นในตลาดที่เปลี่ยนแปลงได้ โมเดลจะ: การวิเคราะห์ทิศทางราคาที่เป็นไปได้สําหรับแต่ละหน้าต่างการซื้อขาย ปรับปรุงขนาดตําแหน่งโดยใช้การเขียนโปรแกรมสี่เหลี่ยม ดําเนินการเทรดเพื่อจับโอกาสการกระจายตัว ในกระดาษค่าที่คาดหวังเป็นบวกอย่างมั่นคง ในทางปฏิบัติ: วัน 1-3: จับปีกใหญ่ที่ทํา $ 15,000 วัน 4-12: การสูญเสียขนาดเล็กทุกวันรวม -$8,000 วัน 13-14: เพิ่มขึ้นอีก $ 12,000 วัน 15-28: การเลือดออกขั้นตอนโดยรวม - $ 11,000 The problem? Our optimizer had developed a structural bias. It was systematically taking positions that won big occasionally but lost small amounts frequently. The expected value calculation said this was fine: the big wins would eventually compensate. But "eventually" requires infinite capital and infinite time horizon. เราไม่มีทั้งสอง เห็นความแตกต่าง: การจําลอง เพื่อแสดงให้เห็นว่าทําไมการควบคุมความเสี่ยงเหล่านี้มีความสําคัญให้เปรียบเทียบสองกลยุทธ์ในการซื้อขายตลาดเดียวกันในช่วงหนึ่งปี: : การวัดตําแหน่งที่แข็งแกร่งขึ้นอยู่กับมูลค่าที่คาดหวังโดยใช้แรงบิด 150% เมื่อโอกาสดูดี Strategy A (EV Maximization) : สัญญาณตลาดที่คล้ายกัน แต่มีขนาด Kelly ส่วน (40% ของความก้าวร้าว) และลดตําแหน่งตาม CVaR ในช่วงเวลาที่มีความเสี่ยงสูง Strategy B (Risk-Controlled) ผลลัพธ์บอกเรื่องสําคัญ ดูแผนภูมิด้านซ้ายอย่างใกล้ชิด - เส้นทาง EV-maximization มากที่สุดไม่ได้ล้มเหลวอย่างรุนแรง พวกเขาเป็นเพียง... ไม่รวมกัน คุณสามารถเห็นรูปแบบ sawtooth: บางครั้งเพิ่มขึ้นตามการกัดกร่อนที่ช้า นี่คือการเลือดออกที่ล้มเหลวที่ค่าคาดหวังเชิงบวกพลาด โปรดสังเกตเห็นวิธีที่หลายเส้นทางได้ถึง $ 500k? ผู้เชี่ยวชาญเหล่านี้ดึงค่าเฉลี่ยถึง $ 146k แต่ เป็นเพียง $ 136k และ 29 จาก 100 เส้นทางจบลงภายใต้ทุนเริ่มต้น โมเดียม In a backtest, you might have gotten lucky and seen one of those winner paths. In production, you get one random draw. แผนภูมิที่เหมาะสมคือ "เบื่อ" และนั่นคือจุดประสงค์ ไม่มีการถ่ายภาพดวงจันทร์ถึง $ 500k แต่ยังไม่มีการลดลงอันตราย กลยุทธ์ที่ควบคุมความเสี่ยงคลังแน่นรอบ ๆ การเจริญเติบโตที่สม่ําเสมอ มันอยู่รอดเพื่อผลตอบแทนคอมโพสิตในช่วงหลายปี นี่คือความเป็นจริงของการผลิต: กลยุทธ์ที่อยู่รอดจะเกิดความซับซ้อน กลยุทธ์ที่ออกเลือดออกไม่ได้ทําอะไรไม่ว่าการคํานวณค่าที่คาดหวังได้สัญญาอะไร ค่าใช้จ่ายที่คาดหวังไม่ได้จับ 1. ความเสี่ยงของความเสียหาย นี่คือปัญหาของผู้เล่นคลาสสิกที่กําหนดโดยเกณฑ์ Kelly แม้จะมีค่าคาดหวังเชิงบวกหากขนาดตําแหน่งของคุณไม่ถูกต้องคุณจะ ละลาย ทารก พิจารณา: คุณมีเงินทุน $ 100,000 และเทรดที่มีโอกาสชนะ 60% ซึ่งทั้งสองเท่าการเดิมพันของคุณหรือสูญเสียมัน ค่าคาดหวังคือบวก (+20%) แต่ถ้าคุณเดิมพันทั้งหมดคุณมีโอกาส 40% ของการสูญเสียทั้งหมดในเทรดแรก Kelly กล่าวว่าขนาดเดิมพันที่เหมาะสมคือ: kelly_fraction = (p * b - q) / b # where p = win probability, q = loss probability, b = odds แต่นี่คือสิ่งที่เราได้เรียนรู้ในการผลิต: . even Kelly is too aggressive ทําไม? เพราะ: การประเมินความเป็นไปได้ของคุณผิด (เสมอ) การเปลี่ยนแปลงของตลาด (ข้อดี 60% ของคุณจะกลายเป็น 52%) ความสัมพันธ์แบ่งออกระหว่างความเครียด (เมื่อคุณต้องการมากที่สุด) คุณไม่สามารถปรับสมดุลได้ทันที (ความล้มเหลวความล่าช้าผลกระทบของตลาด) เราสิ้นสุดใช้ Kelly ส่วน (25-50% ของการเดิมพันทางทฤษฎีของ Kelly) เพราะค่าใช้จ่ายในโลกจริงของการประเมินขอบของคุณเป็นอันตราย 2. ความไม่เสถียรตัวเลขในเหตุการณ์ที่รุนแรง ในตอนเช้าหนึ่งระบบของเรามีความผิดพลาดในระหว่างเหตุการณ์สภาพอากาศที่รุนแรง ไม่ใช่ความผิดพลาดของซอฟต์แวร์ แต่ความผิดพลาดทางคณิตศาสตร์ ตาราง covariance ของเรากลายเป็นเดี่ยว เครื่องเพิ่มประสิทธิภาพไม่สามารถหาโซลูชั่น เราถูกแช่แข็งไม่สามารถซื้อขายในสภาพที่แน่นอนที่กลยุทธ์ของเราควรจะทําเงินมากที่สุด ปัญหา: เราได้เพิ่มประสิทธิภาพให้เหมาะกับสถานการณ์ที่คาดหวัง แต่เหตุการณ์ที่รุนแรงมีโครงสร้างความสัมพันธ์ที่แตกต่างกันสินทรัพย์ที่เคลื่อนไหวโดยปกติเป็นอิสระค่อยๆกลายเป็นความสัมพันธ์ที่สมบูรณ์แบบ โมทริกซ์ covariance ของคุณที่ได้รับการประเมินอย่างระมัดระวังซึ่งสร้างขึ้นจากหลายพันวันปกติกลายเป็นไร้ประโยชน์ แก้ไขไม่ได้ดีกว่าการคํานวณค่าใช้จ่ายที่คาดหวัง มันเป็น : 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_ นี้จะลดความแม่นยําบางอย่างในเวลาปกติเพื่อความเสถียรในขีดข่วน การคํานวณค่าที่คาดหวังของคุณจะเลวร้ายลงเล็กน้อย ระบบของคุณจะอยู่รอดกับหอยดํา เวลา Horizon Mismatch นี่คือปัญหาที่ไม่ได้ปรากฏใน backtests: การคํานวณค่าที่คาดหวังของคุณหมายความว่าคุณสามารถรอเวลานานพอสําหรับกฎหมายของตัวเลขขนาดใหญ่ที่จะทํางาน ในการผลิตคุณไม่สามารถ เราค้นพบสิ่งนี้เมื่อระบบของเราแสดงให้เห็นว่ามีค่าคาดการณ์เชิงบวกที่แข็งแกร่งกว่าหน้าต่าง 90 วัน แต่สูญเสียเงินอย่างต่อเนื่องกว่าหน้าต่าง 30 วัน ปัญหาไม่ได้เป็นคณิตศาสตร์ มันเป็นความเป็นจริงทางธุรกิจ ผู้ให้บริการเงินทุนของเราตรวจสอบประสิทธิภาพรายเดือน ขีด จํากัด ความเสี่ยงของเราได้รับการปรับแต่งรายเดือนตามผลลัพธ์ล่าสุด หากเรามีสามเดือนที่ไม่ดีขีด จํากัด ตําแหน่งของเราถูกลดลงไม่ว่ามูลค่าคาดหวังระยะยาวได้พูดอะไร กลยุทธ์ทางทฤษฎีต้องใช้เวลา 6-12 เดือนเพื่อแสดงผลกําไรได้อย่างน่าเชื่อถือ ความจริงทางปฏิบัติให้เรา 3 เดือนก่อนที่ผลกระทบเริ่มเกิดขึ้น เราต้องเพิ่มข้อ จํากัด ระยะเวลาที่ชัดเจนในการเพิ่มประสิทธิภาพของเรา: 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 นี่หมายความว่าการยอมรับกลยุทธ์ที่มีมูลค่าคาดหวังทางทฤษฎีต่ํากว่าเล็กน้อย แต่มีความน่าจะเป็นสูงกว่าในการแสดงผลกําไรภายในข้อ จํากัด ของการดําเนินงานของเรา มันไม่ได้เป็นทางทฤษฎีที่ดีที่สุด แต่เป็นสิ่งที่จําเป็นในทางปฏิบัติ สิ่งที่จะเพิ่มประสิทธิภาพแทน หลังจากเรียนการสอนที่เจ็บปวดนี่คือสิ่งที่เราได้เรียนรู้เพื่อเพิ่มประสิทธิภาพ: 1. ผลตอบแทนที่ปรับความเสี่ยงด้วย CVaR แทนที่จะเพิ่ม E[ผลกําไร] เราลด CVaR (Conditional Value at Risk) : การสูญเสียที่คาดหวังใน 5% ของสถานการณ์ที่เลวร้ายที่สุด 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) นี่อย่างชัดเจนลงโทษกลยุทธ์ที่มีผลตอบแทนเฉลี่ยที่ดี แต่มีความเสี่ยงหางอันตราย 2. ความแข็งแกร่งถึงรูปแบบข้อผิดพลาด เราคิดว่ารูปแบบของเราผิดและเพิ่มประสิทธิภาพสําหรับ ภายใต้ความไม่แน่นอนที่สมเหตุสมผล: มากที่สุดกรณี # 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) นี้ป้องกันการประเมินพารามิเตอร์ที่เชื่อถือได้มากเกินไป 3. Kelly-Constrainted ขนาดตําแหน่ง เรา จํากัด ขนาดตําแหน่งโดยชัดเจนตามเกณฑ์ของ Kelly แม้ว่าผู้เพิ่มประสิทธิภาพต้องการเพิ่มเติม: 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 เราใช้ 25% Kelly เป็นข้อ จํากัด ที่แข็งแกร่ง ใช่นี่จะช่วยลดมูลค่าที่คาดหวัง นอกจากนี้ยังช่วยให้มั่นใจว่าเราจะยังคงซื้อขายในเดือนถัดไป ความคิดการผลิต การเปลี่ยนแปลงจากความคิดค่าที่คาดหวังไปสู่ความคิดการผลิตเป็นปรัชญา: : "กลยุทธ์ใดที่มีผลตอบแทนที่คาดว่าจะสูงที่สุด" Research mindset "กลยุทธ์ใดที่จะอยู่รอดอยู่โดยผิดเกี่ยวกับการคาดการณ์ของฉันหรือไม่" Production mindset นี่คือการเปลี่ยนแปลงทางปฏิบัติที่เราทํา: การทดสอบด้านหลัง: การวิเคราะห์เดือนที่เลวร้ายที่สุดไม่เพียง แต่ผลตอบแทนเฉลี่ย ขนาดตําแหน่ง: ป้องกันตามค่าเริ่มต้นด้วย kill-switches สําหรับความผิดปกติ เมตรความเสี่ยง: ติดตาม CVaR ทุกวันไม่เพียง แต่ P&L การยืนยันแบบจําลอง: ประเมินความไม่แน่ใจของพารามิเตอร์ 30% ในการประเมินทั้งหมด การวางแผนภัยคุกคาม: เส้นทางโค้ดที่ชัดเจนสําหรับสถานการณ์ "รุ่นที่สมบูรณ์ผิด" บทเรียน ค่าคาดหวังเป็นแนวคิดทางคณิตศาสตร์ที่สวยงาม มันสะอาด intuitive และในทางทฤษฎีได้ดีที่สุด มันยังไม่เพียงพอ ในการผลิตคุณไม่ได้ซื้อขายกับการกระจายความเป็นไปได้ คุณซื้อขายกับ: รูปแบบความเสี่ยงที่ไม่สมบูรณ์แบบของคุณเอง ตลาดที่เปลี่ยนแปลง ข้อ จํากัด การดําเนินงานที่ไม่ได้อยู่ใน backtest ของคุณ ความจริงทางจิตวิทยาของการสังเกตว่าเงินทุนของคุณลดลงวันละวันแม้ว่า "มูลค่าคาดหวังจะบวก" ระบบที่อยู่รอดไม่ได้เป็นระบบที่มีมูลค่าที่คาดหวังมากที่สุด พวกเขาเป็นระบบที่ยังคงแข็งแกร่งเมื่อรูปแบบไม่ถูกต้องตลาดเปลี่ยนและหางสีดําปรากฏขึ้น ประหยัดค่าใช้จ่าย ประหยัดค่าใช้จ่าย ประหยัดค่าใช้จ่าย ประหยัดค่าใช้จ่าย ประหยัดค่าใช้จ่าย ประหยัดค่าใช้จ่าย ประหยัดค่าใช้จ่าย ประหยัดค่าใช้จ่าย ประหยัดค่าใช้จ่าย ประหยัดค่าใช้จ่าย ประหยัดค่าใช้จ่าย ประหยัดค่าใช้จ่าย