ทำไม EA backtest กำไรแต่รันจริงเจ๊ง? คำตอบที่เจอบ่อยกว่าที่คิดคือ “ข้อมูลที่ใช้เทสไม่ใช่ตลาดจริง” คดีนี้เราชันสูตรระบบ breakout ทองช่วงเที่ยงคืน UTC ที่กำไรงามใน backtest — แต่พอเทียบฟีดที่เทสกับโบรกจริง 3 เจ้า พบว่า ATR M5 ต่างกันเกือบเท่าตัว (~3.1 เทียบ ~6.1) และเมื่อรันซ้ำบนข้อมูลโบรกจริง profit factor ต่ำกว่า 1 ทั้งสามเจ้า ระบบนี้จึงจบที่ verdict: KILLED ก่อนได้แตะเงินจริงแม้แต่บาทเดียว
กลยุทธ์ breakout ทองตอนเที่ยงคืนสัญญาอะไรกับเรา
คอนเซ็ปต์ฟังดูมีเหตุผล: ช่วงเที่ยงคืน UTC ตลาดทองเงียบ ราคาบีบตัวแคบ พอมีแรงทะลุกรอบก็วิ่งต่อ — เข้าไม้ตาม breakout แล้วเก็บกำไรจากโมเมนตัม
ใน backtest ภาพมันสวยจริง เส้น equity ไต่ขึ้นเรียบ ๆ ชนิดที่ทำให้เราเริ่มคิดว่า “เจอของดีแล้ว” ซึ่งจากประสบการณ์ในหมวด ชันสูตรกลยุทธ์ ของเรา ความรู้สึกแบบนี้แหละคือสัญญาณเตือนให้ตรวจศพก่อนฝัง เอ้ย ก่อนใช้เงินจริง
วิธีเทสของเรา — เทียบฟีดก่อน แล้วค่อยรันซ้ำ
ก่อนปล่อยระบบลงสนามจริง เราทำสองขั้น:
ขั้นแรก: ตรวจคุณภาพฟีด เราคำนวณ ATR บน timeframe M5 ของฟีดที่ใช้ backtest แล้วเทียบกับฟีดจากโบรกจริง 3 เจ้าในช่วงเวลาเดียวกัน เพื่อดูว่าความผันผวนที่ระบบ “เห็น” ตอนเทส ตรงกับที่มันจะเจอตอนรันจริงไหม
ขั้นสอง: รันซ้ำบนข้อมูลจริง เอาระบบเดิมเป๊ะ ๆ ไปรันบนข้อมูลย้อนหลังของโบรกจริงทั้ง 3 เจ้า ครอบคลุม 10 เดือน ได้ตัวอย่างประมาณ 5,000 setups ต่อเจ้า — เยอะพอที่ตัวเลขจะไม่ใช่เรื่องฟลุก
แถมอีกหนึ่งการตรวจ: เราเช็คว่าเวลาเข้าไม้ “เที่ยงคืน UTC” ที่ดูพิเศษนั้น พิเศษจริงไหม โดยเทียบกับการกระจายผลตอบแทนของเวลาเข้าแบบสุ่ม ตามแนวทาง random baseline ที่เราใช้เป็นมาตรฐาน
ผลที่เจอ — เจ๊งครบทั้งสามเจ้า
เริ่มจากฟีดก่อน: ฟีดที่ใช้ backtest ถูก smooth จน ATR M5 เหลือ ~3.1 ขณะโบรกจริงทั้งสามเจ้าอยู่แถว ~6.1 — ความผันผวนหายไปเกือบครึ่ง แปลว่าระบบถูกเทสบนตลาดจำลองที่นิ่งกว่าของจริงเกือบเท่าตัว
พอรันซ้ำบนข้อมูลโบรกจริง ผลออกมาแบบนี้:
| โบรกจริง | Profit Factor | Percentile ของเวลาเข้า (เทียบสุ่ม) |
|---|---|---|
| เจ้าที่ 1 | 0.79 | 48 |
| เจ้าที่ 2 | 0.88 | 59 |
| เจ้าที่ 3 | 0.86 | 59 |
Profit factor ต่ำกว่า 1 ทั้งสามเจ้า = ขาดทุนทั้งสามเจ้า ไม่มีข้อแม้
ส่วนคอลัมน์ขวา: เวลาเข้าเที่ยงคืน UTC ที่เราเคยคิดว่า “พิเศษ” อยู่ที่ percentile 48 / 59 / 59 ของการกระจายแบบโยนเหรียญ — คือกลาง ๆ พอดี ไม่ต่างจากจิ้มเวลาเข้ามั่ว ๆ อย่างมีนัยสำคัญเลย
ทำไมมันหลอกเรา — กลไกของฟีดที่ถูก smooth
ระบบ breakout ทองมีชีวิตอยู่ได้ด้วย “สัญญาณทะลุกรอบที่สะอาด” แต่ฟีดที่ถูก smooth ทำให้แท่งเทียนเรียบกว่าจริง ไส้เทียนสั้นกว่าจริง สัญญาณหลอกจึงหายไปเยอะ — breakout ใน backtest เลยดูคมและวิ่งต่อสวยงามเกินความเป็นจริง
พอเจอตลาดจริงที่ ATR สูงเกือบเท่าตัว สิ่งที่เคยเป็น “การทะลุกรอบ” กลายเป็นแค่ noise ธรรมดาของทอง ระบบเข้าไม้ตามสัญญาณที่ไม่มีความหมาย แล้วโดน volatility จริงเขย่าออก
ซ้ำร้าย ตัวเลข percentile บอกเราว่า edge เรื่อง “เวลาพิเศษ” ไม่เคยมีอยู่ตั้งแต่แรก — กำไรใน backtest ทั้งหมดมาจากข้อมูลที่ผิด ไม่ใช่จากตลาด เคสนี้คนละโรคกับ กริดมาร์ติงเกลทอง ที่ตายเพราะโครงสร้างความเสี่ยงของตัวเอง แต่ปลายทางเดียวกัน: ศพ
บทเรียนที่เอาไปใช้ได้
- ก่อนเชื่อ backtest ให้เทียบ volatility ของฟีดกับแหล่งอิสระเสมอ — ATR ง่าย ๆ ใน timeframe ที่ระบบใช้ก็จับความผิดปกติได้แล้ว เคสเราคือ 3.1 เทียบ 6.1
- ห้ามเทสด้วย instrument หรือฟีดที่ไม่ใช่ตัวที่จะเทรดจริง — ระบบที่ฟิตกับข้อมูลปลอมจะให้ผลปลอม ไม่ว่าสถิติจะสวยแค่ไหน
- เข้าไม้ “เวลาพิเศษ” ต้องพิสูจน์เทียบกับการสุ่ม — ถ้า percentile อยู่แถว 50 มันคือโยนเหรียญที่แต่งตัวดี
- จำนวนตัวอย่างต้องมากพอ — เราใช้ ~5,000 setups ต่อเจ้า ก่อนกล้าสรุปว่าเจ๊งจริง ไม่ใช่ดวงซวย
เทสเองได้ยังไง — เช็คลิสต์ก่อนเชื่อ backtest ตัวไหนก็ตาม
- ดึงข้อมูลราคาใน timeframe ที่ระบบใช้ (เช่น M5) จากฟีดที่จะใช้เทส และจากโบรกจริงอย่างน้อย 2-3 เจ้า ช่วงเวลาเดียวกัน
- คำนวณ ATR ของทุกฟีดแล้วเทียบกัน — ถ้าต่างกันเกินระดับที่อธิบายได้ (เคสเราต่างเกือบเท่าตัว) ให้ทิ้งฟีดเทสทันที
- รันระบบซ้ำบนข้อมูลของโบรกที่ตั้งใจจะเทรดจริง ให้ได้ตัวอย่างหลักพัน setups ขึ้นไป
- เทียบเวลาเข้า/เงื่อนไขเข้าไม้ กับ baseline แบบสุ่ม ว่าอยู่ percentile เท่าไหร่ของการกระจาย
- อ่านตัวเลขอย่าง profit factor ควบกับตัววัดที่ปรับความเสี่ยงแล้ว — เราเขียนวิธีอ่าน (และกับดัก) ของ Sharpe ratio กับ √252 ไว้แล้ว
ถ้าระบบรอดครบห้าขั้นนี้ ค่อยคุยเรื่องเงินจริง — ระบบ breakout ทองตัวนี้ตายตั้งแต่ขั้นที่ 2 และนั่นคือข่าวดีที่สุดของคดีนี้ เพราะมันตายบนกระดาษ ไม่ใช่ในพอร์ตของใคร