「月1%」จะกลายเป็น「月0.6%」เมื่อย้อนหลังกลับทดสอบด้วยข้อมูลในช่วง 26 ปี
สวัสดีครับ ผมคือคลอน ผมดำรงตำแหน่งผู้บริหารวิศวกรโครงสร้างพื้นฐานตามปกติ และอยู่ข้างๆ กันนั้น ผมกำลังสร้างบอทสวิงหุ้นญี่ปุ่นด้วย AI (Claude Code) ที่ถือหุ้นไม่กี่วันถึงหลายสัปดาห์แบบทำด้วยตนเอง เป็นมือสมัครเล่นทั้งการเขียนโปรแกรมและการเทรดวันต่อวัน ผมเริ่มด้วยความตั้งใจให้สามารถทำเงินจากการลงทุนได้ในอนาคต
※บทความนี้เป็นบันทึกการพัฒนาล dated 31 สิงหาคม 2026
ขอพูดตรงไปที่สรุปวันนี้ก่อนเลย
แม้จะได้ผลดีในการทดสอบย้อนหลัง (backtest) ด้วยข้อมูลในอดีต ข้อมูลนั้นให้ดูเป็นเรื่องประมาณครึ่งๆ เท่านั้นมีเหตุผลอยู่ 3 อย่าง
- การดึงช่วงเวลาออกมาใช้ต่างๆ ทำให้ตัวเลขเปลี่ยนแปลงได้ง่าย
- การปรับพารามิเตอร์เพื่อเพิ่มผลลัพธ์มักเป็น “ตอบโจทย์อดีตกาลเท่านั้น”
- ส่วนใหญ่เราแค่ดูหุ้นที่ชนะเท่านั้น
ทั้งหมดนี้เป็นเรื่องที่ผมลองทำด้วย Bot ของตัวเองจริงๆ จะเรียงลำดับเขียนไว้ทีละข้อ
ก่อนอื่น “バックテスト” คืออะไร?
バックテストคือการคำนวณว่า หากในอดีตใช้กลยุทธ์นี้ในการซื้อขาย จะมีกำไร (หรือขาดทุน) เท่าไร
ยกตัวอย่าง กลยุทธ์ที่ว่าจะ “ซื้อเมื่อเส้นค่าเฉลี่ยเคลื่อนที่สั้นกว่าเส้นยาวขึ้นตัดกัน” แล้วนำข้อมูลราคาหุ้นในช่วง 10 ปีมาคำนวณ เพื่อให้ได้ผลลัพธ์ ถ้าเขียนโปรแกรมจะได้ตัวเลขภายในเสี้ยววินาที เช่น “ผลตอบแทนต่อปี %” หรือ “สูงสุดที่ลดลงเท่านี้”
เมื่อได้ตัวเลขดีๆ มันทำให้เราตื่นเต้นมาก รู้สึกว่า “น่าจะไปต่อได้” ถึงกับว่า“ความเร้าใจนี้เป็นอันตรายที่สุด”. วันนี้ ผมจะเล่าเรื่องนี้
กับดักที่ 1: การตัดช่วงเวลาออกไปทำให้ตัวเลขผิดเพี้ยน
ถ้าเทรดกลยุทธ์หนึ่งในช่วงที่เศรษฐกิจดี (หลังนโยบาย Abenomics แล้ว) โดยวัดผลเฉพาะช่วงนั้นได้ผลเฉลี่ยต่อเดือนประมาณ +1%ถ้าคูณเป็นรายปี ก็จะได้ผลตอบแทนสูงเป็นทศนิยมหลายหลัก ทุกคนตื่นเต้นมาก นี่ยังเป็นเรื่องที่ Claude Code เพิ่งเริ่มใช้วันแรกเลยนะ จริงๆ คิดว่า “ถ้าทำร่วมกับ AI ได้ขนาดนี้ จะง่ายมาก!”ยิ่งรวมช่วงที่เรียกว่า “ทศวรรษที่หายไป” อย่างช่วงหยุดชะงัก ยังมีเดือนละ +0.3% และการลดลงจากจุดสูงสุดถึง -34% และมีช่วงที่แพ้เงินถึง 9 เดือนติดต่อกัน
แต่ทว่า เมื่อนำกลยุทธ์เดียวกันและพารามิเตอร์เดียวกันมาคำนวณใหม่เทียบตั้งแต่ปี 2000 ถึง 2026 เป็นระยะเวลา 26 ปี พบว่า เดือนละ +0.6% (ปีละประมาณ +7%) ลดลงไป
คือจริงๆ กลยุทธ์ไม่ได้เปลี่ยนอะไรเลยสิ่งที่เปลี่ยนคือ “ช่วงไหนถึงที่วัด”. เท่านั้นที่ทำให้ตัวเลขเปลี่ยนไปมาก เมื่อเห็นตัวเลขดีๆ ก็ให้ถามตัวเองก่อนว่า “นี่วัดระยะไหนอยู่กันแน่”
กับดักที่ 2: การปรับพารามิเตอร์มักเป็นงานที่ตอบอดีตมากกว่า
ถ้าปรับจำนวนวันที่ใช้ค่าเฉลี่ยเคลื่อนที่ เช่น ปรับค่าพารามิเตอร์มานิดเดียว จะพบชุดค่าที่ทำให้ผลดีกันขึ้น บอกตรงๆ ว่านี่สนุกมาก ตัวเลขดีขึ้นเรื่อยๆ ใช้เวลาประมาณ 3 ชั่วโมงก็หมดไป ความสนใจสูงจนลืมเวลา
แต่สิ่งนี้เรียกว่าการฟิตเท้าโค้ง (curve fitting/overfitting) กับดักที่มักเกิดขึ้น เพราะปรับให้สอดคล้องกับราคาหุ้นในอดีตมากเกินไป จนค่าพารามิเตอร์จำเสียงรบกวน (noise) ของราคาหุ้นในอนาคตไม่ได้ผล (อ้างอิง: OANDA證券 лаборат)
การแยกแยะก็ง่ายๆ หากปรับพารามิเตอร์เล็กๆ แล้วผลลัพธ์ตกลงไปอย่างมาก ก็เป็นสัญญาณน่าเป็นห่วงถ้าปรับนิดหน่อยแล้วผลลัพธ์ไม่ขยับมาก ก็ยังพอไปได้ (อ้างอิง:ぷろぐらむFX). ผมลองทดสอบด้วยวิธี brute-force มากมาย ในช่วงเศรษฐกิจดีๆ ทำให้ผลลัพธ์กระจายอยู่ที่ประมาณ 0.6% ถึง 1.2% ต่อเดือน แต่
ถ้าทำ brute-force ต่อเนื่องทั้ง 26 ปี ไม่มีชุดค่ไหนถึง 1% ช่วงเวลาสั้นๆ ที่ได้ 1% เป็นเพราะการเลือกช่วงเวลา แต่ไม่ใช่ความสามารถจริง
มีเรื่องที่น่ากลัวมากกว่านั้น หากมีการเลือกดัชนี/กฎเกณฑ์จากผลลัพธ์ในอดีต โดยคิดว่านั้นคือคำตอบ การทดสอบเองก็จะถูกทำให้สกปรกไปด้วย (อ้างอิง: holaprime) ทำให้หูผมเจ็บเลย
กับดักที่ 3: ดูแต่หุ้นที่ชนะเท่านั้น
Bot ของผมเลือกหุ้นที่เป็นตัวหลักของญี่ปุ่นในเวลานั้น
ถ้าคิดให้เห็นภาพ มันก็โหดร้ายที่คิดว่า “หุ้นที่ยังอยู่ในปัจจุบันคือหุ้นที่ผ่านการชนะมาก่อน”เพราะฉะนั้นหาก test ในอดีตดูแค่หุ้นที่อยู่ปัจจุบัน คะแนนจะดูดีกว่าความจริง คงมีหุ้นที่จดทะเบียนเลิกกิจการหรือที่ทรงพลังในอดีตแต่ไม่อยู่แล้ว
เรียกสิ่งนี้ว่าความลำเอียงของผู้รอดชีวิต (survivorship bias)เป็นโครงสร้างเดียวกับ “สอบผ่านหาคนที่สอบผ่านแล้วนำไปสอนคนอื่น” แนวทางที่ควรทำคือ แทนที่ข้อมูลด้วยหุ้นที่ล้มละลายหรือถูกลบออก แล้วแทนที่ข้อมูลด้วยหุ้นที่ยังอยู่ด้วย ผมยังทำไม่ได้และเป็นการบ้านของผมอยู่
เพิ่มเติม: ละเลยค่าธรรมเนียมจนเกินไป
อีกเรื่องหนึ่ง คือ ค่าธรรมเนียมจากการซื้อขายและ “ความคลาดเคลื่อนราคาที่คาดไว้ตอนซื้อขายไม่ได้” (slippage) ที่ตอนแรกผมใส่ไม่ละเอียดนัก
เมื่อใส่ให้ครบถ้วนแล้วคำนวณใหม่กลยุทธ์ที่มีการซื้อขายบ่อยมากจะเสียค่าธรรมเนียมจนติดลบประมาณ 100,000 เยน ผลตอบแทนที่ได้จากバックテストจึงเปลี่ยนไปอย่างมากตามวิธีใส่ค่าธรรมเนียม
งั้นแล้ว ควรสงสัยอย่างไร?
วิธีที่ผมทำตอนนี้มี 3 วิธี
- แบ่งช่วงเวลาเป็นก่อนหน้า-หลัง ตรวจสอบว่าทั้งสองช่วงมีผลลัพธ์ที่ต่อเนื่องกันหรือไม่ หากหลังช่วงหลังแย่ผิดปกติ ก็แปลว่ากลยุทธ์น่าจะไปกับช่วงก่อน
- เรียงลำดับผลลัพธ์ตามปี ตรวจสอบว่าคะแนนสะสมไม่ได้มาจากปีใดปีหนึ่งเท่านั้น
- ทำ brute-force กับพารามิเตอร์ทั้งหมด ตรวจดูว่าแต่ละค่าพารามิเตอร์เด่นมากจริงหรือไม่ และชุดค่ารอบข้างก็แข็งแรงพอๆ กันหรือไม่
จากนั้นที่สำคัญที่สุดคือทดลองกับ “ข้อมูลอนาคต” (Forward test) เพราะการแกะผลจากอดีตออกมาอาจเป็นการโกงความจริง และการติดตามตลาดในอนาคตเป็นสิ่งที่ต้องทำด้วยการบันทึกเป็นระยะเวลา
มีหลักการว่า “สำหรับพารามิเตอร์หนึ่งตัว ต้องมียอดซื้อขายอย่างน้อย 30 ครั้งถึงจะมีความน่าเชื่อถือทางสถิติ” (อ้างอิง: fortraders) ถ้าปรับ 3 อย่างก็ 90 ครั้ง ค่าก้าวอันสูงมากจริงๆ
“ชนะในอดีต” กับ “ชนะในอนาคต” แยกจากกัน
สรุปได้ว่า
เมื่อバックテストให้ตัวเลขดี ควรดูไม่ใช่ขนาดตัวเลข แต่ดูว่า“ตัวเลขนี้ได้มามีวิธีอะไร” เช่น เลือกช่วงเวลา ปรับพารามิเตอร์ให้สอดคล้องกับอดีต ดูหุ้นที่ชนะเท่านั้น หรือไม่ใส่ค่าธรรมเนียมสูงเกินไป
ผมจึงปรับคาดหวังจาก “เดือนละ 1%” ไปเป็น “26 ปีเฉลี่ยเดือนละ 0.6% จริงๆ” ถึงแม้ว่าจะทำให้จิตตก แต่หากไม่ทำการปรับนี้ อาจจะพบทีหลังเมื่อจริงลงมือ
ถัดไป ผมจะพยายามบันทึกวิธีการทำ forward test จริงๆ ในช่วงที่รอเปิดบัญชีลงทุน เพื่อเตรียมการไว้
※บทความนี้เป็นบันทึกการพัฒนาของผม ไม่ได้แนะนำหุ้นใดหรือวิธีใดเป็นพิเศษ การลงทุนควรใช้การตัดสินใจด้วยตนเอง