คุณสร้าง Expert Advisor แบบ MACD บน MT5 โดยไม่ต้องเขียนโค้ด ด้วยการวางโหนด Start บล็อก MACD สองตัว ตัวหนึ่งอ่านเส้นหลัก อีกตัวอ่านเส้นสัญญาณ เงื่อนไข Cross คั่นระหว่างทั้งสอง แล้วจบด้วยบล็อกส่งคำสั่ง จากนั้นเซิร์ฟเวอร์จะสร้างและคอมไพล์ MQL5 ให้ แล้วส่งไฟล์ .ex5 จริงมาให้คุณ ใช้เวลาสิบห้านาที ไม่ต้องแตะไวยากรณ์
จากนั้นคือส่วนที่ตัดสินว่าไฟล์นั้นมีค่าอะไรหรือเปล่า สูตรนี้มีบันทึกที่วัดไว้แล้ว และตัวเลขที่ฟังดูดีที่สุดของมันคือตัวเลขที่คุณควรเชื่อน้อยที่สุด
สิ่งที่คุณจะได้สร้าง
EA ที่ถือโพซิชันเดียวบนคู่เงินเดียว ซึ่งจะซื้อเมื่อเส้น MACD ตัดขึ้นเหนือเส้นสัญญาณของมัน และขายเมื่อมันตัดลง พร้อมจุดตัดขาดทุนและเป้าหมายแบบคงที่ คอมไพล์ออกมาเป็นไฟล์ .ex5 จริง แปดบล็อก
ในจำนวนนั้นมีสองบล็อกที่มีอยู่ด้วยเหตุผลเดียว คือบล็อกอินดิเคเตอร์ MACD คืนค่าออกมาได้ทีละ หนึ่ง เส้นเท่านั้น
ก่อนเริ่ม: MACD รายงานอะไร และคุณกำลังอ่านเส้นไหน
คุณต้องมีบัญชีฟรีที่ยืนยันอีเมลแล้ว (การออกแบบใช้ฟรีและไม่ต้องล็อกอิน ส่วนการคอมไพล์เป็น .ex5 ต้องล็อกอิน) เวลาราวสิบห้านาที และเทอร์มินัล MetaTrader 5
MACD เอาค่าเฉลี่ยเคลื่อนที่ตัวช้ามาลบออกจากตัวเร็ว แล้วเฉลี่ยผลต่างนั้นอีกที ดังนั้นเส้น main จึงวัดว่าค่าเฉลี่ยสองเส้นถ่างห่างกันไปแค่ไหน ส่วนเส้น signal คือค่าที่วัดได้นั้นหลังถูกทำให้เรียบ ทุกอย่างที่กฎ MACD พูดได้จึงเป็นคำกล่าวเกี่ยวกับระยะห่างระหว่างค่าเฉลี่ยสองเส้น ซึ่งแปลว่ามันคือเครื่องมือสายเทรนด์ที่สวมเสื้อผ้าของออสซิลเลเตอร์ และมันรับความหน่วงของค่าเฉลี่ยทั้งสองเส้นที่ประกอบมันขึ้นมาไว้ทั้งคู่
บล็อก MACD ของ Builder เปิดค่าเหล่านี้ให้ตั้ง
| ค่าของบล็อก | ค่าเริ่มต้น | มันควบคุมอะไร |
|---|---|---|
fast_ema | 12 | ค่าเฉลี่ยตัวที่ไวกว่า ช่วงที่ตั้งได้คือ 1–999 |
slow_ema | 26 | ตัวที่ช้ากว่า ช่องว่างระหว่างสองเส้นนี้คือตัวสัญญาณทั้งหมด |
signal_period | 9 | ผลต่างถูกทำให้เรียบมากแค่ไหนก่อนที่คุณจะเอามาเทียบ |
line | MODE_MAIN | บล็อกนี้จะส่งเส้นไหนออกมา — MODE_MAIN หรือ MODE_SIGNAL |
applied_price | PRICE_CLOSE | ราคาไหนที่ป้อนเข้าสู่การคำนวณ |
shift | 0 | 0 คือแท่งที่กำลังก่อตัว 1 คือแท่งที่ปิดไปล่าสุด |
timeframe | กราฟปัจจุบัน | ตั้งได้ตั้งแต่ M1 ถึง MN1 อ่านแยกจากกราฟที่เปิดอยู่ |
line คือแถวที่เปลี่ยนรูปร่างของโฟลว์คุณ มันเป็นตัวเลือกสองค่า ดังนั้น หนึ่งบล็อกจึงให้คุณได้หนึ่งเส้น การตัดกับเส้นสัญญาณจึงต้องใช้บล็อก MACD สองตัว ส่วนการตัดเส้นศูนย์ต้องใช้ตัวเดียว บวกกับการเปรียบเทียบกับค่าคงที่
ทีละขั้น: สร้าง EA แบบ MACD ใน Builder
- เปิด EA Builder แล้วโหลดเทมเพลต
macd_signalจากแกลเลอรี หรือจะเริ่มจากผืนผ้าใบเปล่าแล้วต่อสายเองก็ได้ - วางโหนด Start จากพาเลต Utility ถ้าไม่มีโหนดนี้ การตรวจสอบจะหยุดการสร้างพร้อมรหัส
EAB-E202 - เพิ่มบล็อก MACD แล้วปล่อย
lineไว้ที่MODE_MAINปล่อย 12/26/9 ไว้อย่างนั้นสำหรับการสร้างรอบแรก เพื่อให้ผลของคุณเทียบกับค่าตั้งต้นด้านล่างได้ - เพิ่มบล็อก MACD ตัวที่สอง ด้วยคาบชุดเดียวกัน แล้วตั้ง
lineเป็นMODE_SIGNALอินดิเคเตอร์เดียวกัน ค่าเดียวกัน แต่คนละเอาต์พุต นี่คือขั้นที่คนมักข้าม และการข้ามมันคือเหตุผลที่โฟลว์ของพวกเขาไปเทียบเส้นหนึ่งกับตัวมันเอง - ต่อทั้งสองเข้าเงื่อนไข Cross บล็อก Cross รับสองอินพุตแล้วถามว่าเส้นหนึ่งตัดอีกเส้น บนแท่งนี้ หรือไม่ ค่า
cross_typeของมันคือcrossoverหรือcrossunderฝั่งซื้อกับฝั่งขายจึงเป็นสองเงื่อนไขแยกกัน ไม่ใช่เงื่อนไขเดียวที่กลับด้าน - ต่อแต่ละเงื่อนไขเข้าบล็อก Open Buy / Open Sell ของตัวเอง การต่ออินดิเคเตอร์เข้าบล็อกส่งคำสั่งตรง ๆ จะถูกปฏิเสธด้วยรหัส
EAB-E205— ค่าดิบไม่ใช่การตัดสินใจ - ตั้งความเสี่ยงในแท็บ Settings ค่าเริ่มต้นที่ใช้ร่วมกันคือจุดตัดขาดทุน 50 pip เป้าหมาย 100 pip และล็อตคงที่
0.01โฟลว์ที่ไม่มีจุดตัดขาดทุนที่ใช้ได้จะทำให้การตรวจก่อนสร้างขึ้นระดับCRITICALก่อนที่มันจะยอมสร้างให้ - กด Measure แล้วอ่านผลเทียบกับเกณฑ์ที่แผงพิมพ์ออกมา คือ profit factor อย่างน้อย 1.2 จำนวนเทรดอย่างน้อย 60 และดรอว์ดาวน์ไม่แย่กว่า 20%
- กด Compile .ex5 ย้ายไฟล์เข้า
MQL5/Expertsผ่าน File > Open Data Folder รีเฟรช Navigator แล้วทดสอบมันใน Strategy Tester ก่อนที่มันจะเข้าใกล้บัญชีใด ๆ
- โหนด Start
- บล็อก MACD, line = MODE_MAIN
- บล็อก MACD, line = MODE_SIGNAL
- Cross — crossover สำหรับฝั่งซื้อ, crossunder สำหรับฝั่งขาย
- Open Buy และ Open Sell
- จุดตัดขาดทุนและจุดทำกำไร
- คอมไพล์เป็น .ex5
ถ้าคุณอยากได้เวอร์ชันตัดเส้นศูนย์แทน ให้ลบบล็อก MACD ตัวที่สองออก แล้วเปลี่ยน Cross เป็น Compare ซึ่งมีตัวดำเนินการคือ > < >= <= == != และมีค่า offset เริ่มต้นที่ 0 ประโยคที่ว่า “เส้น main ของ MACD อยู่เหนือศูนย์” คือคำกล่าวว่าค่าเฉลี่ยตัวเร็วอยู่เหนือตัวช้าเลยด้วยซ้ำ ซึ่งเป็นเหตุการณ์ที่เกิดยากกว่ามากและมาช้ากว่ามาก เมื่อเทียบกับการที่สองเส้นแตะกัน ในพาเลตยังมี OsMA ซึ่งส่งผลต่างของ main ลบ signal ออกมาตรง ๆ เป็นค่าเดียว กฎที่อิงฮิสโตแกรมจึงต้องใช้บล็อกเดียว ไม่ใช่สองบล็อก
การตั้งค่าจุดเข้า จุดออก และพารามิเตอร์ของ MACD
| การตั้งค่า | ค่าของเทมเพลต | การขยับมันทำอะไร |
|---|---|---|
fast_ema | 12 | ต่ำลงจะตอบสนองเร็วขึ้นและตัดกันบ่อยขึ้นมาก จำนวนเทรดจะขยับก่อนที่อัตราชนะจะขยับ |
slow_ema | 26 | สูงขึ้นจะถ่างช่องว่างที่เส้นเร็วต้องเดินทาง สัญญาณจึงมาช้าลงและมาน้อยลง |
signal_period | 9 | ความเรียบของเส้นที่ใช้เปรียบเทียบ สั้นลงแปลว่าตัดกันมากขึ้น และส่วนใหญ่คือสัญญาณรบกวน |
line | MODE_MAIN | ไม่ใช่ปุ่มจูน มันเป็นตัวตัดสินว่าคุณสร้างกฎอะไรขึ้นมา |
shift | 0 | ตั้งเป็น 1 เพื่อตัดสินบนแท่งที่ปิดแล้วเท่านั้น |
| จุดตัดขาดทุน | 50 pip (ค่าเริ่มต้นที่ใช้ร่วมกัน) | ช่วงที่ถูกค้นหาคือ 30–80 |
| จุดทำกำไร | 100 pip (ค่าเริ่มต้นที่ใช้ร่วมกัน) | ช่วงที่ถูกค้นหาคือ 60–250 |
เรื่องความหน่วง ซึ่งคือข้อบ่นที่ซื่อสัตย์ที่สุดที่มีต่ออินดิเคเตอร์ตัวนี้ ทุกค่าที่นี่คือเอาต์พุตของค่าเฉลี่ยสองชั้นซ้อนอยู่บนชั้นที่สาม การตัดกันจึงเป็นรายงานว่าการเคลื่อนไหวได้เกิดขึ้นไปแล้ว คำถามมีแค่ว่าช้าไปแค่ไหน การย่น fast_ema คือการซื้อความเร็ว แล้วจ่ายคืนด้วยการตัดกันหลอก ส่วนการยืด slow_ema คือการซื้อความน่าเชื่อถือ แล้วจ่ายคืนด้วยจุดเข้าที่มาถึงหลังการเคลื่อนไหวจบไปแล้ว บันทึกของเทมเพลตเองบอกว่ามันไปลงตัวตรงไหน คือ 698 เทรดในหนึ่งปี ซึ่งเป็นจำนวนที่สูงเป็นอันดับสองจากสิบสามเทมเพลตสายเทรนด์และโมเมนตัมที่ถูกวัดภายใต้เงื่อนไขเดียวกัน นั่นคือดีไซน์ที่ยิงไม่หยุด และการยิงไม่หยุดคือราคาของความหน่วงที่สั้น
การค้นหานั้นแตะอะไรและไม่ได้แตะอะไร การค้นหาพารามิเตอร์ที่บันทึกไว้ขยับเฉพาะจุดตัดขาดทุนกับเป้าหมายเท่านั้น — SL30-80 × TP60-250 รวม 12 ชุดค่าบนสามหน้าต่างเวลาของ H1 มันไม่เคยเปลี่ยน fast_ema, slow_ema หรือ signal_period เลย ดังนั้นจึงไม่มีอะไรบนหน้านี้ที่สนับสนุนคำกล่าวว่า 12/26/9 ถูก ผิด หรือปรับให้ดีขึ้นได้ สิ่งที่มันสนับสนุนคือคำกล่าวที่แคบกว่าและมีประโยชน์กว่ามาก คือไม่มีชุดค่าของจุดตัดขาดทุนกับเป้าหมายชุดไหนกู้ดีไซน์นี้ได้
แบ็คเทสต์ EA แบบ MACD
นี่คือบันทึกที่ Builder วัดไว้เอง ไม่ใช่การรันซ้ำใหม่ และทุกเทมเพลตในการเปรียบเทียบใช้ชุดเงื่อนไขชุดเดียวกันในตารางด้านล่าง ส่วนวิธีที่เราทดสอบระบุมาตรฐานที่บันทึกเหล่านั้นถูกยึดไว้
ค่าตั้งต้นของ macd_signal | ค่า |
|---|---|
| profit factor | 0.93 |
| จำนวนเทรด | 698 |
| ดรอว์ดาวน์สูงสุด | -1.05% |
| กำไรสุทธิ | -93.93 |
| อันดับในย่านของมันเมื่อเรียงตาม profit factor | อันดับ 8 จาก 13 |
| อันดับในย่านของมันเมื่อเรียงตามจำนวนเทรด | อันดับ 2 จาก 13 |
| ผ่านเกณฑ์ของแผง Measure เอง | ไม่ |
| เงื่อนไขการทดสอบ | |
|---|---|
| รหัสการทดลอง | EXP-MACD-RECIPE-BASELINE-001 |
| การทดลองหลัก | EXP-BUILDER-TEMPLATE-BASELINE-001 |
| สัญลักษณ์ / ไทม์เฟรม | USDJPYm M5 |
| ช่วงเวลา | 2025-06-01 – 2026-06-09 |
| โมเดล | M1 OHLC (Model=1) |
| เงินฝาก | 10,000 |
| สภาพแวดล้อม | Exness MT5 |
| วัดค่าตั้งต้นเมื่อ | 2026-06-18 |
| ยืนยันล่าสุด | 2026-08-25 |
ผลของการค้นหานั้นสมควรได้พื้นที่มากกว่าหนึ่งบรรทัด มีแปดเทมเพลตในแกลเลอรีที่พกการค้นหาพารามิเตอร์ที่บันทึกไว้มาด้วย และทั้งแปดตัวจบลงที่ no_robust_edge แต่พวกมันล้มเหลวกันคนละสองแบบ และความต่างนั้นสำคัญกว่าคำตัดสินที่เหมือนกัน สองตัวในนั้นไม่เคยผลิตชุดค่าที่ชนะได้เลยแม้แต่ชุดเดียว แม้แต่บนช่วงเวลาที่การค้นหาถูกฟิตมาเอง macd_signal เป็นตัวเดียวที่ผลิตชุดค่าซึ่งผ่าน 1.0 นอกกลุ่มตัวอย่างได้ — คือ 1.14 ถึง 1.15 ที่เป้าหมายกว้างที่สุด — แล้วจึงทำได้ 0.74 ถึง 0.77 บนหน้าต่างเวลาก่อนหน้า คำที่แมนิเฟสต์ใช้เรียกอาการนี้เองคือ ขึ้นกับสภาวะตลาด
อ่านต่อว่าเรื่องนี้บอกอะไรเกี่ยวกับการทดสอบ ถ้าคุณแบ่งข้อมูลออกเป็นสองส่วนครั้งเดียว ฟิตบนครึ่งแรกแล้วตรวจบนครึ่งหลัง เทมเพลตตัวนี้จะยื่นผลลัพธ์ที่ผ่านให้คุณ สิ่งเดียวที่จับมันได้คือการตรวจหน้าต่างเวลาที่สามซึ่งการค้นหาไม่เคยเห็น นั่นคือข้อโต้แย้งสนับสนุนการวิเคราะห์แบบ walk-forwardในกรณีที่จับต้องได้หนึ่งกรณี และมันมีค่ามากกว่าคำเตือนกว้าง ๆ เรื่องการโอเวอร์ฟิตใด ๆ
MACD ยืนอยู่ตรงไหนในหมู่เพื่อนบ้าน ทั้งหมดวัดภายใต้บล็อกเงื่อนไขชุดเดียวข้างบน
| เทมเพลต | บล็อก | profit factor | ดรอว์ดาวน์ | จำนวนเทรด |
|---|---|---|---|---|
ma_perfect_order_trend | 10 | 1.07 | -0.36% | 305 |
mtf_osc_filter | 27 | 1.04 | -0.64% | 187 |
consecutive_bars_momentum | 7 | 1.03 | -0.36% | 377 |
ao_ama_trend | 14 | 0.97 | -0.95% | 239 |
adx_trend | 12 | 0.96 | -0.76% | 534 |
multi_tf_trend | 15 | 0.96 | -0.51% | 247 |
ma_crossover | 9 | 0.95 | -0.84% | 420 |
macd_signal | 8 | 0.93 | -1.05% | 698 |
ma_slope_trend | 7 | 0.92 | -1.00% | 478 |
mtf_adx_filter | 14 | 0.92 | -0.84% | 343 |
elder_ray | 9 | 0.90 | -1.34% | 529 |
pitch_trail_trend | 9 | 0.77 | -1.61% | 467 |
dynamic_sl_trend | 9 | 0.68 | -1.62% | 708 |
ลองผ่าสิบสามตัวนี้ที่ค่ามัธยฐานจำนวนเทรดของกลุ่มเองคือ 420 แล้วสองครึ่งจะแยกออกจากกันอย่างชัดเจน หกตัวที่เทรดน้อยกว่าได้ profit factor เฉลี่ย 1.00 จาก 283 เทรด พร้อมดรอว์ดาวน์ -0.61% ส่วนหกตัวที่เทรดมากกว่าได้เฉลี่ย 0.86 จาก 569 เทรด พร้อม -1.23% คือผลลัพธ์แย่กว่าและลึกเป็นสองเท่า ดีไซน์ทั้งสามตัวที่อยู่เหนือ 1.0 นั่งอยู่ในครึ่งที่เงียบกว่า ส่วน MACD นั่งอยู่ในครึ่งที่ถี่กว่า
นั่นคือคำบรรยายของสิบสามดีไซน์ภายใต้ชุดทดสอบเดียว ไม่ใช่กฎธรรมชาติ เพราะตรรกะจุดเข้า จำนวนโหนด และจุดออกก็ต่างกันด้วย ความถี่จึงยังไม่ถูกยืนยันว่าเป็นสาเหตุ แต่มันคือแพตเทิร์นที่วางอยู่ตรงหน้าคุณ และเทมเพลต MACD ที่แถมมาอยู่ผิดข้างของมัน
ข้อผิดพลาดที่ควรเลี่ยง
เชื่อผลที่ผ่านนอกกลุ่มตัวอย่าง นี่คือความผิดพลาดที่เทมเพลตตัวนี้มีอยู่เพื่อสาธิต ช่วงเวลาที่กันไว้หนึ่งช่วงคือกลุ่มตัวอย่างเดียว และกฎสายโมเมนตัมชนะกลุ่มตัวอย่างเดียวได้ เพียงเพราะตลาดเป็นเทรนด์ในช่วงนั้น ให้ทดสอบหน้าต่างเวลาที่สามซึ่งการค้นหาไม่เคยเห็น ก่อนที่จะเชื่อตัวเลขไหน
เทียบเส้นหนึ่งกับตัวมันเอง ถ้าบล็อก MACD ทั้งสองตัวถูกปล่อยไว้ที่ MODE_MAIN เงื่อนไข Cross จะเทียบค่าที่เหมือนกันเป๊ะและไม่ยิงเลย หรือไม่ก็ยิงเพราะการปัดเศษ ให้เช็กค่า line ของทั้งสองบล็อกก่อนที่จะสงสัยว่าทำไมจำนวนเทรดถึงเป็นศูนย์
อ่านการตัดกันเป็นคำพยากรณ์ MACD คือค่าเฉลี่ยสองชั้นของค่าเฉลี่ยอีกชั้น การตัดกันรายงานว่าการเคลื่อนไหวได้ดำเนินมาหลายแท่งแล้ว ทางเลือกในการออกแบบคือคุณยอมรับความช้าได้แค่ไหน ไม่ใช่ว่าจะยอมรับความช้าหรือไม่
ฟิตจุดตัดขาดทุนกับเป้าหมายไปเรื่อย ๆ จนกว่าเส้นทุนจะดูสวย การค้นหาที่บันทึกไว้ทำแบบนั้นไปแล้วอย่างเป็นระบบบน 12 ชุดค่าและสามหน้าต่างเวลา แล้วรายงานกลับมาว่า no_robust_edge ถ้าการจูนด้วยมือของคุณชนะการค้นหาอย่างเป็นระบบได้ ให้สงสัยการจูนนั้น
ซ้อนฟิลเตอร์โมเมนตัมทับกัน ส่วนผสมข้างบนคือเวอร์ชันที่วัดแล้วของสัญชาตญาณนั้น คือดรอว์ดาวน์ 3.76 เท่า เพื่อแลกกับ profit factor ที่แย่ลงนิดหน่อย
รันมันข้าง ๆ EA ตัวอื่นโดยไม่แยกมันออกจากกัน EA แต่ละตัวบนบัญชีเดียวต้องมีเมจิกนัมเบอร์ของตัวเอง ไม่อย่างนั้นการปิดออร์เดอร์ของ EA ตัวหนึ่งจะไปปิดโพซิชันของอีกตัว
ขั้นตอนถัดไปและตัวแปรอื่น ๆ
เมื่อไหร่ที่ไม่ควรใช้ MACD ในตลาดที่ออกข้าง ค่าเฉลี่ยสองเส้นจะตัดกันซ้ำแล้วซ้ำอีก และทุกการตัดคือสัญญาณรบกวน — ส่วนค่าเริ่มต้นที่ยิงถี่คือสิ่งที่ตลาดออกข้างลงโทษพอดี ถ้าคุณระบุเงื่อนไขที่จะหยุดกฎนี้ระหว่างช่วงราบเรียบไม่ได้ ก็ให้เพิ่มเงื่อนไขนั้นเข้าไป หรือไม่ก็ใช้ไอเดียที่ไม่ต้องพึ่งการถ่างออกของค่าเฉลี่ยสองเส้น
ตัวแปรที่ควรลอง เรียงตามน้ำหนักหลักฐาน ให้ลองเวอร์ชันตัดเส้นศูนย์ก่อนเป็นอย่างแรก เพราะมันง่ายกว่าหนึ่งบล็อกและยิงน้อยกว่ามาก และครึ่งที่เงียบกว่าของย่านนี้คือที่ที่ผลลัพธ์เหนือ 1.0 ทุกตัวไปนั่งอยู่ จากนั้นค่อยลองกฎเดียวกันบน timeframe ที่สูงกว่าภายในบล็อก MACD ซึ่งทำให้สัญญาณช้าลงโดยไม่ต้องแตะกราฟ แล้วค่อยขยับคาบต่าง ๆ หลังจากนั้น และเปลี่ยนทีละค่า
แล้วค่อยทดสอบมันให้ถูกวิธี แผง Measure ทำงานระดับแท่งและเป็นการประมาณค่า มันคือฟิลเตอร์ ไม่ใช่คำตัดสิน วิธีแบ็คเทสต์ EA บน MT5พาเดินการรันจริงตั้งแต่ต้นจนจบ รวมถึงว่าควรเชื่อดรอว์ดาวน์บรรทัดไหนในสองบรรทัดของรายงาน ส่วนวิธีสร้าง EA แบบ RSIคือสูตรพี่น้องที่มีรูปแบบความล้มเหลวตรงข้ามกัน คือการค้นหาของมันไม่เคยชนะอะไรเลย ซึ่งทำให้มันปฏิเสธง่ายกว่าและสอนเราน้อยกว่าตัวนี้ ส่วนวิธีสร้าง EA บน MT5 โดยไม่ต้องเขียนโค้ดครอบคลุมคลังบล็อกที่กว้างกว่า และคู่มือการแบ็คเทสต์ลงลึกไปที่ขั้น walk-forward ที่หน้านี้กำลังโต้แย้งสนับสนุน
และถ้าอยากปรับเทียบว่าบันทึกที่ทำไว้ครบหน้าตาเป็นอย่างไร EA ที่เผยแพร่แล้วแต่ละตัวพกรายการเทรดที่ปิดแล้วครบถ้วนและ run manifest มาด้วย ลองเอาสักตัวไปเทียบกับตารางข้างบนก่อนที่จะเชื่อกลยุทธ์ใด ๆ รวมถึงตัวที่คุณสร้างขึ้นเองด้วย