ทำไม EA ที่ใช้แท่งเทียนที่ปิดแล้วจึงไม่ Repaint
สารบัญ
สรุปก่อนเลยคือ สัญญาณของ EA ที่ตัดสินใจจากแท่งเทียนที่ปิดแล้วเปลี่ยนยาก เพราะ ข้อมูลที่ใช้ตัดสินใจหยุดเคลื่อนไหวแล้ว ณ เวลานั้น แท่งที่กำลังก่อตัวอยู่อาจเปลี่ยนทั้งราคาปิด ราคาสูงสุด และราคาต่ำสุดได้ในทิคถัดไป ส่วนราคา OHLC ของแท่งที่ปิดแล้วโดยปกติจะไม่ขยับอีกหลังปิดแท่ง
อย่างไรก็ตาม ไม่ได้แปลว่าแค่อ่านแท่งที่ปิดแล้วจะปลอดภัยเสมอไป ขึ้นอยู่กับวิธีคำนวณอินดิเคเตอร์และวิธีจัดการกรอบเวลาที่สูงกว่า ต่อให้ตั้งใจใช้แท่งที่ปิดแล้ว ค่าจากอนาคตก็อาจปนเข้ามาได้
ทำไมแท่งที่กำลังก่อตัวจึงอันตราย
ใน MQL5 shift 0 คือแท่งที่กำลังก่อตัว และ shift 1 คือแท่งล่าสุดที่ปิดแล้ว ราคาปิดของ shift 0 เป็นแค่ "ราคาตอนนี้" ถ้านำไปใช้ตัดสินใจ จะเกิดปัญหาดังนี้
- เงื่อนไขเข้าเทรดเกิดขึ้นและหายไปทุกทิค ทำให้เหตุผลที่เข้าออเดอร์หายไปภายหลัง
- ออเดอร์ถูกเปิดจากสัญญาณชั่ววูบที่ไม่เหลือบนกราฟหลังแท่งปิด
- ในเทสเตอร์ ผลลัพธ์เปลี่ยนง่ายตามวิธีสร้างทิค ถ้าความเคลื่อนไหวภายในแท่งต่างจากของจริง ความต่างนั้นจะส่งผลต่อผลงานโดยตรง
| หัวข้อ | แท่งที่กำลังก่อตัว (shift 0) | แท่งที่ปิดแล้ว (shift 1 ขึ้นไป) |
|---|---|---|
| ค่าที่ใช้ตัดสินใจ | เปลี่ยนจนกว่าจะปิดแท่ง | โดยปกติไม่เปลี่ยน |
| ความสามารถในการทำซ้ำของสัญญาณ | ต่ำ | สูง |
| ความเร็วในการเข้าเทรด | เร็ว | ช้ากว่าตามเวลาที่รอปิดแท่ง |
| ผลของโหมดทิคในเทสเตอร์ | การตัดสินใจเองอาจเปลี่ยนได้ | ผลต่อการตัดสินใจน้อย (แต่ยังมีผลต่อการปิดออเดอร์) |
การใช้แท่งที่กำลังก่อตัวไม่ได้ผิดเสมอไป มีการออกแบบที่จับ Breakout ได้ทันที ในกรณีนั้นต้องยอมรับว่า "พึ่งพาความเคลื่อนไหวภายในแท่ง" และให้น้ำหนักกับการทดสอบด้วยทิคจริงเป็นพิเศษ
เปรียบเทียบโบรกเกอร์แนะนำ →
🎁 ดาวน์โหลด EA ฟรี📧 คอร์สอีเมลฟรี (8 ฉบับ) + แพ็กอินดิเคเตอร์ MT5 13 ตัว เฉพาะสมาชิก
ทันทีที่ลงทะเบียน คุณจะได้รับลิงก์ดาวน์โหลดแพ็กเฉพาะสมาชิกที่รวมอินดิเคเตอร์ MT5 ทั้ง 13 ตัวของเรา: ไฟล์ที่คอมไพล์แล้ว (.ex5) ซอร์สโค้ด และคู่มือการติดตั้ง จากนั้นจะได้รับอีเมล 8 ฉบับเกี่ยวกับพื้นฐานการเทรดอัตโนมัติ การอ่านผลแบ็กเทสต์อย่างถูกต้อง และการเลือกโบรกเกอร์ (วันละฉบับใน 5 วันแรก แล้วในวันที่ 7, 14 และ 30 หลังลงทะเบียน) และยังได้รับแจ้งก่อนการขึ้นราคาแต่ละครั้งของเวอร์ชันที่ขายใน MQL5 Market (ราคาเปิดตัวที่ปรับขึ้นเป็นขั้นตามยอดขาย) EA ในเว็บไซต์นี้ใช้ฟรีเมื่อมีบัญชีจริงกับโบรกเกอร์พันธมิตร
* ปกป้องความเป็นส่วนตัวอย่างเคร่งครัด คุณสามารถยกเลิกการสมัครได้ตลอดเวลา
การออกแบบให้สัญญาณนิ่ง
CopyRates ต้องระบุตำแหน่งเริ่มต้นและลำดับของอาร์เรย์ให้ชัด
อ่านแท่งที่ปิดแล้วเพียงครั้งเดียวตอนทิคแรกของแท่งใหม่
datetime g_lastBar = 0;
void OnTick()
{
datetime t = iTime(_Symbol, _Period, 0);
if(t == 0 || t == g_lastBar) return;
MqlRates r[];
ArraySetAsSeries(r, true);
if(CopyRates(_Symbol, _Period, 1, 2, r) != 2) return;
g_lastBar = t;
// r[0] คือแท่งล่าสุดที่ปิดแล้ว, r[1] คือแท่งก่อนหน้านั้นหนึ่งแท่ง
}
มี 3 ประเด็นสำคัญ คือ ตั้งตำแหน่งเริ่มต้นเป็น 1 เพื่อตัดแท่งที่กำลังก่อตัวออกจากช่วงที่ดึง, กำหนดลำดับด้วย ArraySetAsSeries และถ้าดึงข้อมูลไม่สำเร็จไม่ให้อัปเดต g_lastBar แต่ลองใหม่ในทิคถัดไป ถ้าลืมกำหนดลำดับ ข้อมูลตัวแรกของอาร์เรย์จะเป็นแท่งที่เก่าที่สุด
iBarShift เป็นหลุมพรางเมื่ออ้างอิงกรอบเวลาที่สูงกว่า
เมื่ออ้างอิงกรอบเวลาที่สูงกว่า iBarShift จะคืนค่า "แท่งที่ครอบคลุมเวลานั้น" ถ้าส่งเวลาปัจจุบันเข้าไป โดยปกติจะได้แท่งของกรอบเวลาที่สูงกว่าที่กำลังก่อตัวอยู่
int s = iBarShift(_Symbol, PERIOD_H1, TimeCurrent(), false);
if(s < 0) return;
double closedH1 = iClose(_Symbol, PERIOD_H1, s + 1);
หากต้องการแท่งของกรอบเวลาที่สูงกว่าที่ปิดแล้ว ให้ระบุแท่งที่เก่ากว่าหนึ่งแท่งแบบนี้
Repaint ที่พบบ่อยเกิดจากอินดิเคเตอร์ที่วาดค่าของกรอบเวลาที่สูงกว่าลงบนกราฟกรอบเวลาที่ต่ำกว่า ถ้ากำหนดราคาปิดของแท่งกรอบเวลาสูงที่ครอบคลุมเวลาเดียวกันให้กับแท่งกรอบเวลาต่ำในอดีตแต่ละแท่ง ค่าสุดท้ายที่ ณ เวลานั้นยังไม่มีอยู่จริงก็จะถูกวาดลงในอดีต บนกราฟอาจดูแม่นยำ แต่ในเวลาจริงไม่สามารถตัดสินใจแบบเดียวกันได้
ถ้าตั้งพารามิเตอร์ตัวที่ 4 exact เป็น false เมื่อไม่มีแท่งที่ตรงกัน ฟังก์ชันจะคืนแท่งที่ใกล้เคียงที่สุด ทำให้สังเกตข้อมูลขาดหายได้ยากขึ้น จึงควรตรวจเวลาของแท่งที่ได้มาด้วย ข้อมูลของสัญลักษณ์หรือกรอบเวลาอื่นอาจอัปเดตช้า ดังนั้นควรตรวจสอบก่อนว่าเป็นแท่งของเวลาที่คาดไว้จริงแล้วจึงค่อยตัดสินใจ
ป้องกันการตัดสินซ้ำเมื่อรีสตาร์ต
ตัวแปร g_lastBar ในโค้ดข้างต้นจะกลับเป็นค่าเริ่มต้นเมื่อ EA รีสตาร์ต เพื่อไม่ให้แท่งที่ปิดแล้วแท่งเดิมถูกประเมินซ้ำจนเข้าออเดอร์สองครั้ง ควรออกแบบให้ตรวจสอบสถานะที่ถืออยู่และเวลาที่ออเดอร์ล่าสุดถูกเปิดด้วย
ขั้นตอนตรวจสอบที่ผู้ใช้ทำได้เอง
แม้อ่านซอร์สโค้ดไม่ได้ ก็ยังตรวจสอบได้ในระดับหนึ่งด้วยวิธีต่อไปนี้
- ดูในโหมด Visual: เปิดโหมด Visual ในเทสเตอร์ แล้วดูว่าเวลาเข้าเทรดอยู่ใกล้ช่วงต้นแท่งหรือไม่ ถ้าเปิดออเดอร์กลางแท่งบ่อยๆ อาจใช้แท่งที่กำลังก่อตัวอยู่ (การปิดออเดอร์ถือเป็นอีกเรื่อง)
- เปลี่ยนโหมดโมเดลแล้วเปรียบเทียบ: ใช้ช่วงเวลาและการตั้งค่าเดียวกัน ทดสอบด้วย Open prices only, ทุกทิค และทุกทิคจากทิคจริง ถ้าจำนวนครั้งหรือเวลาเข้าเทรดต่างกันมาก ให้สงสัยว่าพึ่งพาความเคลื่อนไหวภายในแท่ง
- บันทึกลูกศรของอินดิเคเตอร์: เก็บเวลาที่ลูกศรปรากฏไว้ด้วยภาพหน้าจอ แล้วเทียบกับแท่งที่ผ่านไปอีกไม่กี่แท่ง ถ้าตำแหน่งเปลี่ยนหรือลูกศรหายไป แสดงว่า Repaint
- สอบถามผู้จัดจำหน่าย: ถามว่าตัดสินใจจากแท่งที่ปิดแล้วหรือไม่ และจัดการกรอบเวลาที่สูงกว่าอย่างไร
ทั้งหมดนี้เป็นเพียงหลักฐานทางอ้อม ไม่สามารถพิสูจน์ว่า "ไม่ Repaint" ได้เพียงลำพัง หากจะลองอินดิเคเตอร์ ให้ฝึกขั้นตอนกับอินดิเคเตอร์ฟรี และดูวิธีติดตั้ง EA ได้ที่วิธีตั้งค่า EA
ข้อจำกัดและข้อควรระวัง
การตัดสินใจจากแท่งที่ปิดแล้วก็มีด้านที่ไม่สะดวกเช่นกัน
- เข้าเทรดช้าลง: ระหว่างรอปิดแท่ง ราคาอาจเคลื่อนไปแล้วและเข้าในตำแหน่งที่ไม่เอื้อ ในช่วงที่ราคาพุ่งหรือดิ่งแรง ส่วนต่างนี้อาจกว้างมาก
- ต้นทุนช่วงต้นแท่ง: หากออกแบบให้ออเดอร์กระจุกที่ทิคแรกของแท่งใหม่ อาจได้รับผลจากสเปรดที่กว้างหรือราคาเปิดที่มีช่องว่าง
- ป้องกันอินดิเคเตอร์ที่อ้างอิงอนาคตไม่ได้: อินดิเคเตอร์อย่าง ZigZag ที่รูปทรงเปลี่ยนภายหลัง หรือที่ต้องใช้แท่งถัดไปมายืนยัน ค่าอาจเปลี่ยนได้แม้อ่านจากแท่งที่ปิดแล้ว ขึ้นอยู่กับตำแหน่งที่อ่าน
- แท่งที่ปิดแล้วก็ต่างกันตามโบรกเกอร์: ถ้าเวลาเซิร์ฟเวอร์หรืออัตราที่ส่งมาต่างกัน ราคา OHLC ก็ต่างกัน EA ตัวเดียวกันจึงอาจตัดสินใจต่างกันเมื่อเปลี่ยนโบรกเกอร์ และไม่อาจตัดความเป็นไปได้ที่ข้อมูลย้อนหลังจะถูกแก้ไขภายหลัง
- การปิดออเดอร์เกิดขึ้นภายในแท่ง: แม้การตัดสินใจเข้าเทรดใช้แท่งที่ปิดแล้ว แต่ Stop Loss และ Take Profit จะถูกเรียกใช้กลางแท่ง ส่วนนี้ยังขึ้นกับคุณภาพของทิค
และสิ่งที่สำคัญที่สุดคือ การไม่ Repaint กับการทำกำไรเป็นคนละเรื่องกัน EA ของเราเองก็มีตัวที่ผลทดสอบกับข้อมูลในอดีตออกมาดี แต่ฟอร์เวิร์ดเทสต์บนบัญชีเดโมกลับขาดทุน การใช้แท่งที่ปิดแล้วเป็นเพียงหนึ่งในเงื่อนไขพื้นฐานที่ทำให้เชื่อถือผลทดสอบได้ ไม่ได้บอกผลงานในอนาคต นอกจากนี้ การใช้แท่งที่ปิดแล้วหรือไม่ต่างกันไปตามการออกแบบของ EA แต่ละตัว ดังนั้นเมื่อเลือก EA ให้ตรวจสอบเป็นรายตัว และพิจารณาร่วมกับตัวเลขในอันดับจากผลวัดจริง แนวคิดการทดสอบที่เกี่ยวข้องรวบรวมไว้ในความรู้เรื่อง EA และ MT5
สรุป
- ค่าของแท่งที่กำลังก่อตัวเปลี่ยนจนกว่าจะปิดแท่ง สัญญาณจึงอาจหายหรือเปลี่ยนได้
- ถ้าตัดสินใจจากแท่งที่ปิดแล้ว ข้อมูลที่ใช้ตัดสินใจจะคงที่ และได้รับผลจากวิธีสร้างทิคน้อยลง
CopyRatesต้องระบุตำแหน่งเริ่มต้นและลำดับให้ชัด และลองใหม่เมื่อดึงข้อมูลไม่สำเร็จiBarShiftมักคืนแท่งของกรอบเวลาที่สูงกว่าที่ยังก่อตัวอยู่ ถ้าจะอ่านแท่งที่ปิดแล้วต้องเลื่อน shift ออกไป- การวาดค่ากรอบเวลาสูงลงกราฟต่ำ และอินดิเคเตอร์ที่อ้างอิงอนาคต เป็นตัวอย่างทั่วไปของ Repaint
- แท่งที่ปิดแล้วมีปัญหาเรื่องความล่าช้าและต้นทุน และไม่ได้รับประกันกำไร
บทความที่เกี่ยวข้อง
2026-07-14
ผลทดสอบ EA ทองคำ 43 ตัว ด้วยข้อมูลจริง 11.5 ปี
2026-10-29
OnTick กับ OnTimer ใน MQL5 | เลือกใช้อย่างไรในการออกแบบ EA
2026-10-19
EA เดิม ช่วงเวลาเดิม แต่ผลแบ็คเทสต์ไม่ตรง: 5 จุดที่ต้องเช็ก
2026-10-16
วิธี Backtest ด้วย Custom Symbol และข้อควรระวัง
📧 คอร์สอีเมลฟรี (8 ฉบับ) + แพ็กอินดิเคเตอร์ MT5 13 ตัว เฉพาะสมาชิก
ทันทีที่ลงทะเบียน คุณจะได้รับลิงก์ดาวน์โหลดแพ็กเฉพาะสมาชิกที่รวมอินดิเคเตอร์ MT5 ทั้ง 13 ตัวของเรา: ไฟล์ที่คอมไพล์แล้ว (.ex5) ซอร์สโค้ด และคู่มือการติดตั้ง จากนั้นจะได้รับอีเมล 8 ฉบับเกี่ยวกับพื้นฐานการเทรดอัตโนมัติ การอ่านผลแบ็กเทสต์อย่างถูกต้อง และการเลือกโบรกเกอร์ (วันละฉบับใน 5 วันแรก แล้วในวันที่ 7, 14 และ 30 หลังลงทะเบียน) และยังได้รับแจ้งก่อนการขึ้นราคาแต่ละครั้งของเวอร์ชันที่ขายใน MQL5 Market (ราคาเปิดตัวที่ปรับขึ้นเป็นขั้นตามยอดขาย) EA ในเว็บไซต์นี้ใช้ฟรีเมื่อมีบัญชีจริงกับโบรกเกอร์พันธมิตร
* ปกป้องความเป็นส่วนตัวอย่างเคร่งครัด คุณสามารถยกเลิกการสมัครได้ตลอดเวลา
มีคำถามเกี่ยวกับ EA หรือ Forex ไหม?
คุณสามารถตั้งคำถามได้ที่ฟอรัมเทรดของ Nattzy (สมัครฟรี) ไม่จำเป็นต้องเกี่ยวกับบทความนี้ก็ได้ เช่น การตั้งค่า EA หรือการเลือกโบรกเกอร์
ถามที่ Nattzy ↗