ทำไม 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 FactorPercentile ของเวลาเข้า (เทียบสุ่ม)
เจ้าที่ 10.7948
เจ้าที่ 20.8859
เจ้าที่ 30.8659

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 ตัวไหนก็ตาม

  1. ดึงข้อมูลราคาใน timeframe ที่ระบบใช้ (เช่น M5) จากฟีดที่จะใช้เทส และจากโบรกจริงอย่างน้อย 2-3 เจ้า ช่วงเวลาเดียวกัน
  2. คำนวณ ATR ของทุกฟีดแล้วเทียบกัน — ถ้าต่างกันเกินระดับที่อธิบายได้ (เคสเราต่างเกือบเท่าตัว) ให้ทิ้งฟีดเทสทันที
  3. รันระบบซ้ำบนข้อมูลของโบรกที่ตั้งใจจะเทรดจริง ให้ได้ตัวอย่างหลักพัน setups ขึ้นไป
  4. เทียบเวลาเข้า/เงื่อนไขเข้าไม้ กับ baseline แบบสุ่ม ว่าอยู่ percentile เท่าไหร่ของการกระจาย
  5. อ่านตัวเลขอย่าง profit factor ควบกับตัววัดที่ปรับความเสี่ยงแล้ว — เราเขียนวิธีอ่าน (และกับดัก) ของ Sharpe ratio กับ √252 ไว้แล้ว

ถ้าระบบรอดครบห้าขั้นนี้ ค่อยคุยเรื่องเงินจริง — ระบบ breakout ทองตัวนี้ตายตั้งแต่ขั้นที่ 2 และนั่นคือข่าวดีที่สุดของคดีนี้ เพราะมันตายบนกระดาษ ไม่ใช่ในพอร์ตของใคร