หน้าหลัก > บล็อก > ทำไม EA ที่ใช้แท่งเทียนที่ปิดแล้วจึงไม่ Repaint

MQL5การออกแบบ EAแบ็คเทสต์

ทำไม EA ที่ใช้แท่งเทียนที่ปิดแล้วจึงไม่ Repaint

เผยแพร่: 2026-11-01เวลาอ่าน: ประมาณ 1 นาที
⏱ บทความนี้สะท้อนข้อมูล ณ วันที่เผยแพร่ ตัวเลขผลงาน EA (PF, DD, ผลตอบแทนต่อปี) เปลี่ยนแปลงตามการเทรดจริงและการตรวจสอบซ้ำ — ตรวจสอบล่าสุดได้ที่หน้า EA ดูผลงานล่าสุดของ EA →

สรุปก่อนเลยคือ สัญญาณของ 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 รีสตาร์ต เพื่อไม่ให้แท่งที่ปิดแล้วแท่งเดิมถูกประเมินซ้ำจนเข้าออเดอร์สองครั้ง ควรออกแบบให้ตรวจสอบสถานะที่ถืออยู่และเวลาที่ออเดอร์ล่าสุดถูกเปิดด้วย

ขั้นตอนตรวจสอบที่ผู้ใช้ทำได้เอง

แม้อ่านซอร์สโค้ดไม่ได้ ก็ยังตรวจสอบได้ในระดับหนึ่งด้วยวิธีต่อไปนี้

  1. ดูในโหมด Visual: เปิดโหมด Visual ในเทสเตอร์ แล้วดูว่าเวลาเข้าเทรดอยู่ใกล้ช่วงต้นแท่งหรือไม่ ถ้าเปิดออเดอร์กลางแท่งบ่อยๆ อาจใช้แท่งที่กำลังก่อตัวอยู่ (การปิดออเดอร์ถือเป็นอีกเรื่อง)
  2. เปลี่ยนโหมดโมเดลแล้วเปรียบเทียบ: ใช้ช่วงเวลาและการตั้งค่าเดียวกัน ทดสอบด้วย Open prices only, ทุกทิค และทุกทิคจากทิคจริง ถ้าจำนวนครั้งหรือเวลาเข้าเทรดต่างกันมาก ให้สงสัยว่าพึ่งพาความเคลื่อนไหวภายในแท่ง
  3. บันทึกลูกศรของอินดิเคเตอร์: เก็บเวลาที่ลูกศรปรากฏไว้ด้วยภาพหน้าจอ แล้วเทียบกับแท่งที่ผ่านไปอีกไม่กี่แท่ง ถ้าตำแหน่งเปลี่ยนหรือลูกศรหายไป แสดงว่า Repaint
  4. สอบถามผู้จัดจำหน่าย: ถามว่าตัดสินใจจากแท่งที่ปิดแล้วหรือไม่ และจัดการกรอบเวลาที่สูงกว่าอย่างไร

ทั้งหมดนี้เป็นเพียงหลักฐานทางอ้อม ไม่สามารถพิสูจน์ว่า "ไม่ Repaint" ได้เพียงลำพัง หากจะลองอินดิเคเตอร์ ให้ฝึกขั้นตอนกับอินดิเคเตอร์ฟรี และดูวิธีติดตั้ง EA ได้ที่วิธีตั้งค่า EA

ข้อจำกัดและข้อควรระวัง

การตัดสินใจจากแท่งที่ปิดแล้วก็มีด้านที่ไม่สะดวกเช่นกัน

  • เข้าเทรดช้าลง: ระหว่างรอปิดแท่ง ราคาอาจเคลื่อนไปแล้วและเข้าในตำแหน่งที่ไม่เอื้อ ในช่วงที่ราคาพุ่งหรือดิ่งแรง ส่วนต่างนี้อาจกว้างมาก
  • ต้นทุนช่วงต้นแท่ง: หากออกแบบให้ออเดอร์กระจุกที่ทิคแรกของแท่งใหม่ อาจได้รับผลจากสเปรดที่กว้างหรือราคาเปิดที่มีช่องว่าง
  • ป้องกันอินดิเคเตอร์ที่อ้างอิงอนาคตไม่ได้: อินดิเคเตอร์อย่าง ZigZag ที่รูปทรงเปลี่ยนภายหลัง หรือที่ต้องใช้แท่งถัดไปมายืนยัน ค่าอาจเปลี่ยนได้แม้อ่านจากแท่งที่ปิดแล้ว ขึ้นอยู่กับตำแหน่งที่อ่าน
  • แท่งที่ปิดแล้วก็ต่างกันตามโบรกเกอร์: ถ้าเวลาเซิร์ฟเวอร์หรืออัตราที่ส่งมาต่างกัน ราคา OHLC ก็ต่างกัน EA ตัวเดียวกันจึงอาจตัดสินใจต่างกันเมื่อเปลี่ยนโบรกเกอร์ และไม่อาจตัดความเป็นไปได้ที่ข้อมูลย้อนหลังจะถูกแก้ไขภายหลัง
  • การปิดออเดอร์เกิดขึ้นภายในแท่ง: แม้การตัดสินใจเข้าเทรดใช้แท่งที่ปิดแล้ว แต่ Stop Loss และ Take Profit จะถูกเรียกใช้กลางแท่ง ส่วนนี้ยังขึ้นกับคุณภาพของทิค

และสิ่งที่สำคัญที่สุดคือ การไม่ Repaint กับการทำกำไรเป็นคนละเรื่องกัน EA ของเราเองก็มีตัวที่ผลทดสอบกับข้อมูลในอดีตออกมาดี แต่ฟอร์เวิร์ดเทสต์บนบัญชีเดโมกลับขาดทุน การใช้แท่งที่ปิดแล้วเป็นเพียงหนึ่งในเงื่อนไขพื้นฐานที่ทำให้เชื่อถือผลทดสอบได้ ไม่ได้บอกผลงานในอนาคต นอกจากนี้ การใช้แท่งที่ปิดแล้วหรือไม่ต่างกันไปตามการออกแบบของ EA แต่ละตัว ดังนั้นเมื่อเลือก EA ให้ตรวจสอบเป็นรายตัว และพิจารณาร่วมกับตัวเลขในอันดับจากผลวัดจริง แนวคิดการทดสอบที่เกี่ยวข้องรวบรวมไว้ในความรู้เรื่อง EA และ MT5

สรุป

  • ค่าของแท่งที่กำลังก่อตัวเปลี่ยนจนกว่าจะปิดแท่ง สัญญาณจึงอาจหายหรือเปลี่ยนได้
  • ถ้าตัดสินใจจากแท่งที่ปิดแล้ว ข้อมูลที่ใช้ตัดสินใจจะคงที่ และได้รับผลจากวิธีสร้างทิคน้อยลง
  • CopyRates ต้องระบุตำแหน่งเริ่มต้นและลำดับให้ชัด และลองใหม่เมื่อดึงข้อมูลไม่สำเร็จ
  • iBarShift มักคืนแท่งของกรอบเวลาที่สูงกว่าที่ยังก่อตัวอยู่ ถ้าจะอ่านแท่งที่ปิดแล้วต้องเลื่อน shift ออกไป
  • การวาดค่ากรอบเวลาสูงลงกราฟต่ำ และอินดิเคเตอร์ที่อ้างอิงอนาคต เป็นตัวอย่างทั่วไปของ Repaint
  • แท่งที่ปิดแล้วมีปัญหาเรื่องความล่าช้าและต้นทุน และไม่ได้รับประกันกำไร

📧 คอร์สอีเมลฟรี (8 ฉบับ) + แพ็กอินดิเคเตอร์ MT5 13 ตัว เฉพาะสมาชิก

ทันทีที่ลงทะเบียน คุณจะได้รับลิงก์ดาวน์โหลดแพ็กเฉพาะสมาชิกที่รวมอินดิเคเตอร์ MT5 ทั้ง 13 ตัวของเรา: ไฟล์ที่คอมไพล์แล้ว (.ex5) ซอร์สโค้ด และคู่มือการติดตั้ง จากนั้นจะได้รับอีเมล 8 ฉบับเกี่ยวกับพื้นฐานการเทรดอัตโนมัติ การอ่านผลแบ็กเทสต์อย่างถูกต้อง และการเลือกโบรกเกอร์ (วันละฉบับใน 5 วันแรก แล้วในวันที่ 7, 14 และ 30 หลังลงทะเบียน) และยังได้รับแจ้งก่อนการขึ้นราคาแต่ละครั้งของเวอร์ชันที่ขายใน MQL5 Market (ราคาเปิดตัวที่ปรับขึ้นเป็นขั้นตามยอดขาย) EA ในเว็บไซต์นี้ใช้ฟรีเมื่อมีบัญชีจริงกับโบรกเกอร์พันธมิตร

* ปกป้องความเป็นส่วนตัวอย่างเคร่งครัด คุณสามารถยกเลิกการสมัครได้ตลอดเวลา

มีคำถามเกี่ยวกับ EA หรือ Forex ไหม?

คุณสามารถตั้งคำถามได้ที่ฟอรัมเทรดของ Nattzy (สมัครฟรี) ไม่จำเป็นต้องเกี่ยวกับบทความนี้ก็ได้ เช่น การตั้งค่า EA หรือการเลือกโบรกเกอร์

ถามที่ Nattzy ↗

ความคิดเห็นและคำถาม