นี่คือคำถามที่ผมถูกถามบ่อยที่สุดในรูปแบบใดรูปแบบหนึ่ง จากคนที่เพิ่งทำกลยุทธ์แรกเสร็จ: ต้องมีเทรดกี่ครั้ง ผลลัพธ์ถึงจะเป็นของจริง? ปกติจะมีตัวเลขพ่วงมาด้วย เช่น “ผมมี 1,200 เทรด แบบนี้พอแล้วใช่ไหม?” คำตอบตรงไปตรงมามักทำให้ทุกคนหงุดหงิด เพราะมันไม่ได้ขึ้นอยู่กับจำนวนเทรดเลย
สรุปทั้งหมดได้ในบรรทัดเดียว แล้วจากนั้นผมจะใช้เวลาที่เหลือของโพสต์อธิบายว่าทำไมมันถึงชวนเจ็บใจ
ค่าคลาดเคลื่อนมาตรฐานของอัตราส่วน Sharpe คือเท่าไร?
สำหรับ Sharpe ที่คำนวณจากผลตอบแทนเป็นช่วงจำนวน n ค่า โดยสมมติว่าค่าเหล่านั้นเป็นอิสระต่อกันและมีการแจกแจงใกล้เคียงปกติ ค่าคลาดเคลื่อนจากการสุ่มตัวอย่างคือ:
SE(s) ≈ √((1 + s²/2) / n)
โดยที่ s คือค่า Sharpe ที่วัดด้วยความถี่เดียวกัน เมื่อนำทั้งสองข้างมาปรับเป็นรายปี จะได้สมการที่เรียบง่าย เมื่อมีข้อมูล k ค่าในแต่ละปี และมีข้อมูล T ปี ค่า Sharpe รายปี S มี:
SE(S) ≈ √((1 + S²/(2k)) / T)
ดูค่า 2k ที่อยู่ในตัวส่วนสิ สำหรับผลตอบแทนรายวัน k = 252 ดังนั้นแม้ Sharpe จะเท่ากับ 2 ก็มีส่วนเพิ่มในเศษเพียง 4/504 ≈ 0.008 พจน์ทั้งหมดจึงยุบเหลือ 1 ค่าคลาดเคลื่อนมาตรฐานของ Sharpe รายปีมีค่าประมาณ 1/√T โดย T คือจำนวนปีปฏิทินของข้อมูล ค่านี้แทบไม่ขึ้นกับตัว Sharpe เอง ไม่ขึ้นกับความถี่ในการสุ่มตัวอย่าง และไม่เกี่ยวกับจำนวนเทรดที่คุณทำเลยแม้แต่น้อย
ดังนั้น:
| จำนวนปีข้อมูล | SE(Sharpe) | ช่วงความเชื่อมั่น 95% เมื่อวัดได้ 1.5 |
|---|---|---|
| 1 | 1.00 | −0.46 ถึง 3.46 |
| 2 | 0.71 | 0.11 ถึง 2.89 |
| 3 | 0.58 | 0.37 ถึง 2.63 |
| 5 | 0.45 | 0.62 ถึง 2.38 |
| 10 | 0.32 | 0.88 ถึง 2.12 |
แบ็กเทสต์ที่แสดง Sharpe 1.5 จากประวัติข้อมูล 2 ปี ไม่สามารถแยกผลลัพธ์ทางสถิติออกจากการโยนเหรียญได้ที่ระดับ 95% นี่คือสถานการณ์ตั้งต้นของงานวิจัยคริปโตส่วนใหญ่ เพราะข้อมูลที่สะอาด ปรับแก้การอยู่รอดของสินทรัพย์ และคิดค่าธรรมเนียมได้แม่นยำของคนส่วนมาก เริ่มมีตั้งแต่ราวปี 2022 และเหรียญที่น่าสนใจครึ่งหนึ่งยังไม่มีอยู่ก่อนปี 2023
แต่ผมมี 40,000 เทรด แบบนี้ช่วยแก้ปัญหาไม่ได้หรือ?
ไม่ได้ และนี่คือความเข้าใจผิดที่ผมอยากกำจัดให้มากที่สุด
จำนวนเทรดกับความยาวของตัวอย่างเป็นคนละปริมาณกัน และมีเพียงอย่างเดียวที่อยู่ในสูตร ถ้ากลยุทธ์ของคุณส่งคำสั่ง 40,000 ครั้งใน 6 เดือน คุณมี T = 0.5 และ SE ≈ 1.41 ช่วงความเชื่อมั่น 95% ของ Sharpe ที่วัดได้ 2.0 อยู่ระหว่าง −0.8 ถึง 4.8 แม้มี 40,000 เทรด ข้อสรุปที่ตรงไปตรงมาก็คือ “อาจจะดี หรืออาจจะติดลบ”
เหตุผลคือ 40,000 เทรดนั้นไม่ใช่การเดิมพันอิสระ 40,000 ครั้งในสภาวะตลาดที่ต่างกัน 40,000 แบบ แต่มันคือตัวอย่าง 40,000 ค่า จากพฤติกรรมตลาดประมาณ 180 วัน โดยแต่ละวันมีความสัมพันธ์กัน และสภาวะตลาดก็มีความสัมพันธ์ภายในกลุ่มด้วย กลยุทธ์กลับตัวสู่ค่าเฉลี่ยความถี่สูงที่ทำกำไรทุกวันเป็นเวลา 4 เดือนนั้น ที่จริงแล้วได้เดิมพันเพียงครั้งเดียว — ว่าการกลับตัวในช่วงเวลาสั้นจะยังใช้ได้ในสภาวะสภาพคล่องนี้ — และอาจได้เห็นผลของการเดิมพันนั้นในโอกาสที่เป็นอิสระต่อกันเพียงไม่กี่ครั้ง
วิธีคิดที่ผมใช้แทนคือ นับสภาวะตลาด ไม่ใช่จำนวนการจับคู่คำสั่ง กลยุทธ์นี้ผ่านสภาวะตลาดที่แตกต่างกันจริง ๆ มาแล้วกี่แบบ? กลยุทธ์รับผลตอบแทนจาก funding carry ที่ทำงานในช่วง basis เป็นบวกยาวนานเพียงช่วงเดียว ก็เจอสภาวะ n = 1 ไม่ว่าจะบันทึกการปรับสมดุลรายชั่วโมงไว้กี่ครั้งก็ตาม
ตรวจสอบเบื้องต้นแบบเร็ว: ใช้ block bootstrap กับ P&L รายวัน โดยกำหนดความยาวบล็อก 20 วัน แล้วดูการกระจายของค่า Sharpe ที่สุ่มตัวอย่างใหม่ ถ้าเปอร์เซ็นไทล์ที่ 5 ต่ำกว่าศูนย์ จำนวนเทรดของคุณก็ไม่มีความหมาย ผมเขียนโค้ดนี้ด้วย numpy ได้ประมาณ 9 บรรทัด และมันช่วยห้ามผมจากการใช้กลยุทธ์มากกว่าการตรวจสอบแบบอื่นใดเพียงอย่างเดียว
สูตรนี้ใช้ได้กับกลยุทธ์จริงไหม?
ไม่ทั้งหมด และมันประเมินความไม่แน่นอนไปในทิศทางที่คุณคงไม่ชอบ ผล 1/√T ตั้งอยู่บนสมมติฐานว่าผลตอบแทนเป็น IID และมีการแจกแจงปกติ แต่ผลตอบแทนของกลยุทธ์จริงมีสหสัมพันธ์ตามเวลาและมีความเบ้ ซึ่งโดยทั่วไปมักเบ้ติดลบสำหรับกลยุทธ์ที่คล้าย carry, short vol หรือการกลับตัวสู่ค่าเฉลี่ย การปรับแก้ของ Mertens นำโมเมนต์เหล่านี้กลับมาคิดด้วย:
SE(s) ≈ √((1 + s²/2 − γ₃·s + (γ₄−3)·s²/4) / n)
โดย γ₃ คือความเบ้ และ γ₄ คือความโด่ง ความเบ้ติดลบทำให้พจน์ −γ₃·s เป็นบวก ซึ่งทำให้ช่วงความเชื่อมั่นกว้างขึ้น ความโด่งส่วนเกินก็ทำให้กว้างขึ้นอีก สำหรับ P&L ของกลยุทธ์ crypto carry ทั่วไปที่มีความเบ้ราว −1.2 และความโด่งราว 9 ผมเคยเห็นค่าคลาดเคลื่อนมาตรฐานหลังปรับแก้สูงกว่าค่าแบบง่าย 30–40% งานของ Lo ในปี 2002 จัดการส่วนของสหสัมพันธ์ตามเวลา และให้ผลไปในทิศทางเดียวกัน: สหสัมพันธ์ต่อเนื่องเชิงบวกในผลตอบแทนทำให้ Sharpe แบบง่ายสูงเกินจริงและทำให้ค่าคลาดเคลื่อนที่เห็นต่ำเกินไป ซึ่งเป็นคู่ปัญหาที่น่ากังวล
ดังนั้นให้มอง 1/√T เป็นค่าต่ำสุดของความไม่แน่นอน นี่คือกรณีที่ดีที่สุดแล้ว
ถ้าผมทดสอบ 500 รูปแบบ Sharpe ต้องสูงแค่ไหน?
ทีนี้ก็มาถึงส่วนที่สำคัญสำหรับคนที่ใช้ไปป์ไลน์วิจัยอัตโนมัติ ซึ่งเป็นสิ่งที่เราทำกันทุกวันที่ Stratmill: เอเจนต์สร้างกลยุทธ์ไม่ได้สร้างตัวเลือกเดียว แต่สร้างหลายร้อยตัวเลือก
ค่าสูงสุดที่คาดหมายของการสุ่ม M ค่าจากการแจกแจงปกติมาตรฐานมีค่าประมาณ √(2 ln M) เมื่อนำไปคูณกับค่าคลาดเคลื่อนมาตรฐาน ก็จะได้ค่า Sharpe ที่กลยุทธ์ไร้คุณค่าจริง ๆ ในจำนวน M กลยุทธ์ ซึ่งโชคดีที่สุดจะแสดงออกมา
| จำนวนกลยุทธ์ที่ทดสอบ | √(2 ln M) | Sharpe สูงสุดจากสัญญาณรบกวน ช่วง 5 ปี (SE 0.45) | ค่าสูงสุดจากสัญญาณรบกวน ช่วง 2 ปี (SE 0.71) |
|---|---|---|---|
| 10 | 2.15 | 0.96 | 1.52 |
| 100 | 3.03 | 1.36 | 2.16 |
| 500 | 3.53 | 1.58 | 2.50 |
| 5,000 | 4.13 | 1.85 | 2.93 |
ดูแถวรองสุดท้าย ถ้าคุณสร้างตัวเลือก 500 แบบจากข้อมูล 2 ปี แล้วผู้ชนะได้ Sharpe 2.4 คุณก็ยังไม่ได้ค้นพบอะไรเลย ค่านี้ต่ำกว่าระดับสัญญาณรบกวน Sharpe ที่ปรับลดอคติของ Bailey และ López de Prado ใช้ความแปรปรวนของค่า Sharpe จากการทดลองแทนค่า √(2 ln M) แบบหยาบ และคุ้มค่าที่จะนำไปใช้ให้ถูกต้อง แต่สูตรคร่าว ๆ ก็เพียงพอที่จะปรับพฤติกรรมได้ตั้งแต่วันนี้
มี 2 เรื่องที่ทำให้ปัญหานี้หนักกว่าที่ตารางบอก อย่างแรก M ไม่ใช่จำนวนกลยุทธ์ที่คุณบันทึกไว้ แต่คือจำนวนที่คุณประเมินผล ซึ่งรวมการปรับพารามิเตอร์ทุกครั้ง ทุกครั้งที่คิดว่า “ลองใช้ lookback 30 ช่วงดูอีกทีดีกว่า” และการรันใหม่ทุกครั้งหลังแก้บั๊ก ไม่มีใครนับอย่างตรงไปตรงมาหรอก อย่างที่สอง ตัวเลือกของคุณไม่ได้เป็นการสุ่มที่เป็นอิสระต่อกัน ดังนั้น √(2 ln M) จึงประเมินความกว้างที่มีผลจริงสูงเกินไป แม้การทดลองที่มีความสัมพันธ์กันก็หมายความว่าสภาวะตลาดที่เข้าทางเพียงครั้งเดียวยกผลลัพธ์ของกลุ่มกลยุทธ์ขึ้นไปพร้อมกันได้
ตัวเลขที่อันตรายที่สุดในงานวิจัยเชิงปริมาณคือตัวเลขที่ไม่มีใครบันทึกไว้: คุณลองดูผลไปกี่ครั้งแล้ว
แล้วผมควรทำอะไรจริง ๆ?
มี 5 อย่าง เรียงตามลำดับที่ผมจะทำ
- บันทึกการประเมินผลทุกครั้ง ตั้งตัวนับที่เพิ่มขึ้นทุกครั้งที่รันแบ็กเทสต์ บันทึกค่าไว้อย่างถาวรและห้ามรีเซ็ต ถ้าคุณบอกไม่ได้ว่า M เท่ากับเท่าไร คุณก็ระบุเกณฑ์ของตัวเองไม่ได้ นี่คือชั่วโมงงานวิศวกรรมที่คุ้มค่าที่สุดในรายการทั้งหมด
- รายงาน Sharpe พร้อมช่วงความเชื่อมั่นเสมอ อย่าแสดงตัวเลขเดี่ยว ๆ รายงานแบ็กเทสต์ของเราแสดง
1.72 ± 0.51 (2.9y, skew-adjusted)และเครื่องหมาย ± ต้องมีเสมอ มันเปลี่ยนวิธีที่ทั้งทีมพูดถึงผลลัพธ์ - กำหนดเกณฑ์จาก M และ T ก่อนดูผล ดึงตัวเลขจากตารางด้านบนมาเขียนไว้ เกณฑ์ที่กำหนดหลังเห็นผลคือวิธีที่ทำให้ทุกคนโน้มน้าวตัวเองว่าการฟิตเส้นโค้งนั้นถูกต้อง
- เมื่อมีตัวอย่างน้อย ให้เพิ่มความหลากหลายแทนความถี่ คุณสร้างเวลาในปฏิทินเพิ่มไม่ได้ แต่ใช้สัญญาณเดียวกันกับสินทรัพย์ 40 ตัวที่ไม่สัมพันธ์กันได้ วิธีนี้เพิ่ม n ที่มีผลจริงได้ ซึ่งการเพิ่มความถี่ในการเทรดทำไม่ได้ อย่างไรก็ตามต้องระวังสหสัมพันธ์ด้วย — perpetual คริปโต 40 ตัวในชั่วโมงที่ตลาดหลีกเลี่ยงความเสี่ยง ก็เป็นเหมือนเครื่องมือเดียวกัน
- จากนั้นก็เทรดบนบัญชีจำลอง เวลานอกตัวอย่างสะสมได้วันละ 1 วัน และไม่มีทางลัด ซึ่งเป็นเหตุผลว่าทำไมตัวอย่างนี้จึงเป็นสิ่งเดียวที่ไม่มีใครฟิตเกินได้
ทั้งหมดนี้ไม่ได้ทำให้ตัวอย่างสั้น ๆ นำไปใช้ได้ แต่ช่วยให้คุณซื่อตรงกับสิ่งที่ตัวอย่างสั้น ๆ รองรับได้ ซึ่งเป็นข้อสรุปที่อ่อนกว่าที่รายงานแบ็กเทสต์ส่วนใหญ่มักทำให้เข้าใจมาก Sharpe 1.5 จากข้อมูล 2 ปีเป็นสมมติฐานที่น่าลองเทรดบนบัญชีจำลอง แต่ยังไม่ใช่ข้อค้นพบ
← บทความทั้งหมด
