P0 · ปูพื้น
▶ clip: https://youtu.be/XY9dcg0WDRU
จบบทนี้แล้วทำได้:
- ตั้ง Strategy Tester ให้ใช้ tick จริง กด backtest เองหนึ่งครั้ง แล้วหาบรรทัด History Quality ในรายงานได้
- คำนวณกำไรต่อ trade ด้วยมือ และรู้ว่า contract size ของทองไม่ได้เป็น 100 เสมอ
- สงสัยหน่วยก่อนสงสัยกลยุทธ์ เมื่อเห็นตัวเลขที่ดีเกินจริง (บัญชี cent · tick value · digits)
- อธิบายได้ว่าทำไม mean ตัวเดียวไม่พอ และทำไมผลรวม R เท่ากันแต่เงินไม่เท่ากัน
- เขียนเกณฑ์ก่อนเห็นผล (prereg) และรู้ว่าทำไมห้ามแก้หลังเห็นผล
ต้องมีก่อน: ดู C0 · ติดตั้ง MT5 แล้ว (download เองจาก metatrader5.com) และมีบัญชี demo หนึ่งบัญชี — บทนี้ยังไม่ใช้ starter kit
1 · course นี้สอนอะไร และไม่สอนอะไร

| สอน | ไม่สอน |
|---|---|
| วิธีพิสูจน์ว่า EA มี edge จริงไหม ก่อนเอาเงินจริงไปเสี่ยง | หา signal trade |
| ทุก lab ใช้บัญชี demo | แจก EA ทำกำไร |
| คำแนะนำการลงทุน |
ถ้ามาเพื่อหาสูตรทำเงิน คอร์สนี้ไม่มีให้
ตัวนับสถานะงานวิจัยจริงของผู้สอน (Research Board ณ 21 ต.ค. 2026 · ทะเบียน 81 case ไม่ได้แสดงครบทุกหมวด):
| สถานะ | จำนวน |
|---|---|
| ปิด case แล้ว | 30 |
| เดินอยู่ (ผ่าน · เปิด) | 16 |
| ยังตัดสินไม่ได้ | 17 |
| ค้างรอของ | 7 |
ผลส่วนใหญ่ของงานแบบนี้คือ "ตัดทิ้ง" นั่นคือประโยชน์ของมัน: เงินจริงไม่ต้องไปเสียกับ EA ที่ backtest สวยแต่ไม่มี edge
2 · MT5 สามหน้าจอที่ต้องใช้

ใน MT5 ใช้อยู่แค่สามหน้าจอ
| หน้าจอ | ใช้ทำอะไร |
|---|---|
| Market Watch | — |
| Navigator | — |
| Strategy Tester | ตั้งและ run backtest — ใช้มากที่สุด |
ช่องใน Strategy Tester: EA (Expert) · symbol · period · modelling · ช่วงวัน (Date) · deposit · leverage
สองอย่างที่ต้องตั้งตั้งแต่ตอนนี้
- Modelling = "Every tick based on real ticks" เสมอ (ช่องที่วงไว้ในภาพ) ใน config ของระบบเขียนค่านี้ว่า
model: 4ถ้าเลือกแบบอื่น tester จะไม่ใช้ tick จริงตั้งแต่ต้น - ภาษาของ terminal เป็นภาษาอังกฤษ ตัวอ่านรายงานของระบบหาป้ายข้อความภาษาอังกฤษ เช่น
History Qualityถ้า terminal เป็นภาษาอื่น ป้ายในรายงานจะเป็นภาษานั้น และระบบจะอ่านรายงานไม่ออก
ค่า deposit และ leverage ในภาพไม่ใช่ประเด็นของหัวข้อนี้ ค่าที่ใช้จริงในแต่ละ run ให้ดูจากรายงาน
3 · Lab: กด backtest เองหนึ่งครั้ง

ทำใน MT5 ที่คุณติดตั้งเองตามปกติ ตัวนี้ระบบไม่แตะ · ห้ามใช้
mt5\_template\ของ starter kit ทำ lab นี้ — ต้นแบบนั้นต้องไม่เคยถูก login (ดู M0)
ขั้นที่ 1 ใน Strategy Tester เลือก EA ตัวอย่างชื่อ Moving Average ที่มากับ MT5
ขั้นที่ 2 ตั้งให้ run บน XAUUSD · H1 ช่วงสั้น ๆ เริ่มที่หนึ่งเดือน · Modelling = "Every tick based on real ticks" แล้วกด Start
ครั้งแรกต้องรอโหลด history: MT5 ต้อง download tick ของช่วงที่ตั้งก่อน ดูตัวเลข "Download history: xx%" ที่มุมขวาล่างของ Strategy Tester ระหว่างนั้นเส้นทุนยังไม่ขยับ ไม่ได้ค้าง ถ้าเปอร์เซ็นต์ไม่ขยับนานหลายนาที ให้ check network · ช่วงยาวรอนาน จึงเริ่มที่ 1 เดือน · run ครั้งต่อไปใช้ tick ที่ download ไว้แล้ว
ขั้นที่ 3 run เสร็จแล้ว save รายงานเป็น file .htm
ขั้นที่ 4 เปิดรายงานแล้วหาบรรทัด History Quality ให้เจอ
ด่านของ lab นี้: ชี้บรรทัด History Quality ได้ และอ่านค่าออก
ทำไมต้องจำชื่อ Moving Average: ถ้าวันหนึ่งพิมพ์ชื่อ file EA ผิดตัวพิมพ์เล็กใหญ่ tester จะ run Moving Average แทนเงียบ ๆ จบภายในราว 15 วินาที (case #1 ใน C0) ถ้าเห็นรายงานที่ EA ชื่อ Moving Average ทั้งที่ตั้งใจ run ตัวอื่น แปลว่าชื่อ file ผิด
ภาพรายงานบนจอ คือรายงานตัวอย่างใน lab ของ kit (lab\reports\tick-quality\Inter\A1-base.htm) ที่ History Quality แค่ 17% real ticks แปลว่า tick ส่วนใหญ่ MT5 สร้างขึ้นเอง ลองถามตัวเองว่าจะเชื่อตัวเลขข้างล่าง (Profit Factor 15.12 · Total Trades 253) ได้ไหม คำตอบอยู่ใน S2 และ S5
4 · lot และ contract size

กำไรต่อ trade คิดด้วยมือได้:
กำไร = ระยะราคาที่ขยับ × lot × contract size
ตัวอย่าง: $2 × 0.10 × 100 = $20
ห้ามจำเลข 100 ทองมี contract size อย่างน้อยสามค่า
| symbol | contract size | ราคาขยับ $1 ที่ 1 lot |
|---|---|---|
| XAUUSD | 100 | $100 |
| XAUUSDc (บัญชี USC) | 1 | $1 (= 100 USC) |
| XAUUSD.min (Axi) | 10 | $10 |
แถว XAUUSDc ได้ $1 แต่บัญชีเป็น cent จึงเห็นเป็น 100 USC เลข 100 ที่ตรงกันในสองแถวแรกจึงเป็นเรื่องบังเอิญ ต้องอ่าน contract size จาก symbol ของทุก broker
ทำไมเรื่องนี้สำคัญ: ความผิดพลาดสองทางไม่เท่ากัน
| ประเมิน contract size | lot ที่ได้ | ผล | case จริง |
|---|---|---|---|
| สูงเกินจริง | เล็กเกิน | กำไรน้อยลง | ตั้ง risk 1% ได้จริง 0.4% |
| ต่ำเกินจริง | ใหญ่เกิน | portfolio แตกได้ | ตั้ง risk 7% เสี่ยงจริง 135.82% |
ภาพขวาบนจอคือผลของ bt\ea-bt.exe lot_check --bug ที่จำลอง case บนบัญชี Exness cent (case เดียวกับ C0 หัวข้อ 1) ที่ EA เชื่อตัวคูณผิด 100 เท่า
| ก่อนแก้ | หลังแก้ | |
|---|---|---|
| lot จากสูตร | 116.88 | 1.16 |
| หลังตัดด้วย margin | 22.68 | — |
| risk จริง | 135.82% ของทุน (ตั้ง 7%) | 6.95% ของทุน (ตั้ง 7%) |
สังเกตว่าด่าน margin ตัด lot จาก 116.88 เหลือ 22.68 แต่ไม่ได้ถามว่า risk ที่เหลือเป็นเท่าไร (135.82%) · บรรทัด final gate (x1.5) ในภาพคือด่านที่เพิ่มหลังเหตุการณ์จริง ในการจำลองนี้มันขึ้น NO FIRE (ไม่ยิง) ส่วน code เดิมไม่มีด่านนี้ จึงเปิด 22.7 lot จริง (C0 หัวข้อ 1) · การตัด lot ลงไม่ได้แปลว่าปลอดภัย ต้องคิด risk% ที่เหลือจริงทุกครั้ง
5 · cent account · tick value · digits

| ก่อน — ลืมหาร 100 | หลัง — cent ÷ 100 |
|---|---|
| +568R ในสัปดาห์เดียว | +5.68R |
ตัวเลขเดียวกัน แค่หน่วยถูก บนบัญชี USC ทุกตัวเลขเป็น cent ต้องหาร 100 ก่อนคิดอย่างอื่น
หลัก: ตัวเลขที่ดีเกินจริง ให้สงสัยหน่วยก่อนสงสัยกลยุทธ์
กับดักเรื่องหน่วยอีกสามข้อ
| กับดัก | รายละเอียด | ทางกัน |
|---|---|---|
| tick value | แต่ละ broker รายงานคนละหน่วย เช่น Exness ส่ง 0.001 เป็น USD บนบัญชี cent ทั้งที่ค่าที่ถูกคือ 0.1 cent | ห้ามเชื่อ tick value ตรง ๆ |
| ชื่อบัญชี | บัญชีชื่อ "Robo-Cen" จริง ๆ มี contract 100 เป็นบัญชี USD ไม่ใช่ cent · ใน backtest 283 ชุดของ repo ผู้สอนไม่มีชุดไหนใช้สกุลเงิน cent | ดู contract size และสกุลเงินบัญชีจริง ไม่ใช่ชื่อ |
| digits | ทองที่ราคามีทศนิยม 2 หลักกับ 3 หลัก ค่า "points" ต่างกัน 10 เท่า · EA จาก Market บางตัวปรับ digits ให้เองแต่ไม่ครบทุกช่อง | ห้ามคูณ points ด้วย 10 ใน file .set เอง |
6 · สถิติ 1: mean · median · sd

ตัวเลขสามตัว 2, 3, 100:
| ค่า | ผล | บอกอะไร |
|---|---|---|
| mean | 35 | ถูก tail ลากได้ |
| median | 3 | trade ทั่วไปหน้าตาเป็นยังไง |
| sd | — | ผลแกว่งแค่ไหน |
E[R] (expected value ของ R) คือ mean ของกำไรต่อ trade นับเป็นจำนวนเท่าของเงินที่เสี่ยง ไม่ใช่ median
histogram สองชุดบนจอ (ข้อมูลสมมติเพื่อสอน) mean เท่ากันทั้งสองชุด สมมติว่า +0.15R
| ชุด | รูปทรง | ถ้าไม่มี trade กำไรก้อนใหญ่อีก |
|---|---|---|
| A | trade ส่วนใหญ่บวกนิด ๆ กระจายทุก trade | ยังบวก |
| B | trade ส่วนใหญ่ขาดทุน มี tail บนไม่กี่ trade | ติดลบทันที |
ตัวเลขเดียวปิดบังรูปทรงที่ใช้ตัดสินใจจริง จึงต้องดู distribution ทุกครั้ง และลองตัด trade ที่กำไรสูงสุดออก ถ้ากำไรหาย แปลว่าเป็นแบบ B
median ของข้อมูลจำนวนคู่ ต้องเอาสองค่ากลางมาเฉลี่ย เช่น 1, 2, 3, 4 ได้ 2.5 เคยมี code ที่หยิบแค่ค่ากลางฝั่งขวา ทำให้ตัวเลข "ทุนโตกี่เท่า" ที่ publish ไปแล้วเป็น 24.70 เท่า ทั้งที่ค่าจริงคือ 16.91 เท่า
7 · สถิติ 2: compounding

ได้ +10% แล้วเสีย −10% กลับมาเท่าทุนไหม — ไม่ เหลือ 99% ของทุนต้น (1.10 × 0.90 = 0.99)
เหตุผล: ผลรวมกำไรเป็นการบวก แต่เงินจริงเป็นการคูณ ผลที่ตามมาคือสองชุดที่ผลรวม R เท่ากันเป๊ะ ชุดที่แกว่งมากกว่าได้เงินน้อยกว่าเสมอ ชื่อเรียกคือ volatility drag
กราฟบนจอ (ข้อมูลสมมติเพื่อสอน) ผลรวม % เท่ากัน (0) ทั้งสองเส้น
| เส้น | แกว่ง | ตัวคูณทุนตอนจบ |
|---|---|---|
| เขียว | ±2% สลับ 20 ครั้ง | ×0.996 |
| ส้ม | ±10% สลับ 20 ครั้ง | ×0.904 |
case จริง — portfolio ผสม EA-A กับ EA-C (case #5 ใน C0)
| วัดด้วย | broker 1 | broker 2 | broker 3 |
|---|---|---|---|
| ผลรวม R ÷ drawdown | +1% | +12% | +63% |
| เงิน compounding จริง | −25% | −40% | +39% |
สาเหตุ: EA-C แกว่งรายวัน 2.4–3.7 เทียบกับ EA-A ที่ 0.6–0.9 อัตราส่วนมองไม่เห็นเรื่องนี้ ต้องคิดเป็นตัวคูณทุนเสมอ
8 · เครื่องมือบน Windows

| เรื่อง | กฎ | ตัวอย่างบนจอ (ตัวอย่างประกอบ) |
|---|---|---|
| PowerShell | path ที่มีเว้นวรรคต้องครอบด้วย "..." เสมอ ไม่ครอบจะได้ error |
cd "D:\MT5 demo\MQL5" |
| YAML | ย่อหน้าคือโครงสร้าง ย่อหน้าผิดความหมายเปลี่ยน · วันที่ใส่ quote | date_from: "2025.01.01" |
| ค้นแล้วไม่เจอ ≠ ไม่มี | file ของ MT5 หลายชนิด (.set · .htm · log) เป็น UTF-16 เครื่องมือค้นทั่วไปมองไม่เห็นข้อความข้างใน |
— |
ข้อสามสำคัญที่สุด case จริง: ค้นคำว่า OnlyUp ใน preset ได้ 0 จาก 28 file ทั้งที่มีจริง 6 file
ผลค้นที่ว่างเปล่า ให้ถือว่าคำสั่งผิด จนกว่าจะพิสูจน์ได้ว่าไม่มีจริง
9 · prereg = เขียน criteria ก่อนเห็นผล

prereg ย่อมาจาก pre-registration คือเขียน คำถาม · test period · criteria เป็นตัวเลข แล้ว lock ไว้ก่อนกด run
| ลำดับ | |
|---|---|
| ที่ถูก | เขียน criteria → run → อ่านผล |
| ที่ผิด | run → ดูผล → เขียน criteria ให้ผ่าน |
ห้ามแก้ criteria หลังเห็นผล แก้เมื่อไร ผลรอบนั้นใช้ตัดสินไม่ได้
ทำไมต้องเข้มขนาดนี้: backtest run ใหม่ได้ไม่จำกัด ลอง 20 preset ยังไงก็เจอตัวที่ "ผ่าน" แม้ EA จะไม่มี edge เลย ทุกการทดสอบจึงต้องลงบรรทัดใน file sidak-ledger (ใน kit คือ research\3-prereg\sidak-ledger.md · แม่แบบ prereg คือ research\3-prereg\prereg-template.md) ยิ่งลองมาก เส้น t ที่ต้องผ่านยิ่งสูงขึ้น
คำนี้มาจากการทดลองยา ที่ผู้วิจัยต้องลงทะเบียนแผนก่อนเก็บผล เพราะเคยมีการตีพิมพ์เฉพาะแบบที่ได้ผลดี ปัญหาที่มันกัน:
| ชื่อ | คืออะไร |
|---|---|
| p-hacking | ลองหลายแบบแล้วรายงานแบบที่ผ่าน |
| HARKing | ตั้งสมมติฐานหลังเห็นผล |
| garden of forking paths | การตัดสินใจเล็ก ๆ ที่เอนตามผลที่เห็นแล้ว |
ข้อจำกัด: prereg กันการโกงตัวเองได้ แต่ไม่ได้ทำให้คำถามหรือ criteria ถูกต้องขึ้นมาเอง criteria ที่ตั้งไว้ผิดก็ยังผิดอยู่ แม้จะเขียนไว้ก่อน run
จุดที่มักพลาด
| พลาด | ผลที่ตามมา | ทางกัน |
|---|---|---|
| Modelling ไม่ใช่ "Every tick based on real ticks" | tester ไม่ใช้ tick จริง | ตั้งทุกครั้ง · ใน config คือ model: 4 |
| terminal ไม่ใช่ภาษาอังกฤษ | ระบบอ่านรายงานไม่ออก | ตั้งภาษา terminal เป็นภาษาอังกฤษ |
| พิมพ์ชื่อ file EA ผิดตัวพิมพ์เล็กใหญ่ | tester run Moving Average แทนเงียบ ๆ | เห็นรายงานชื่อ Moving Average หรือจบใน ~15 วินาที = ชื่อ file ผิด |
| คิดว่า Download history ค้าง | ปิด tester กลางทาง | ดู % มุมขวาล่าง ไม่ขยับนานหลายนาทีค่อย check network |
| จำ contract size เป็น 100 | lot ผิด 10 หรือ 100 เท่า | อ่านจาก symbol ของทุก broker |
| ลืมหาร 100 บนบัญชี cent | ตัวเลขพอง 100 เท่า | ดีเกินจริง = สงสัยหน่วยก่อน |
| เชื่อชื่อบัญชี | บัญชีชื่อ cent อาจเป็น USD | ดู contract size และสกุลเงินจริง |
คูณ points ×10 ใน .set เอง |
ค่าเพี้ยนบน EA ที่ปรับ digits ให้แล้ว | ห้ามคูณเอง |
| ดูแค่ mean | พลาดแบบชุด B ที่อยู่ได้ด้วย tail | ดู distribution และตัด trade สูงสุดออก |
| ตัดสินด้วยผลรวม R หรืออัตราส่วน | พลาด volatility drag | คิดเป็นตัวคูณทุน |
| ค้นแล้วได้ 0 แล้วสรุปว่าไม่มี | สรุปผิดเพราะ file เป็น UTF-16 | ถือว่าคำสั่งผิดจนพิสูจน์ได้ |
| แก้ criteria หลังเห็นผล | ผลรอบนั้นใช้ตัดสินไม่ได้ | เขียนและ lock ก่อน run · ลง sidak-ledger |
ทวนท้ายบท

- EA เปิด 0.10 lot บน Axi XAUUSD.min ราคาขยับ $2 ได้กำไรเท่าไร
- รายงานบัญชี USC ขึ้นว่า "+568R ในสัปดาห์เดียว" ต้องสงสัยอะไรก่อน
- ค้น
OnlyUpใน preset ได้ 0 file สรุปว่าไม่มี preset ไหนใช้ค่านี้ได้ไหม
เฉลย
- $2 — $2 × 0.10 lot × contract size 10 = $2 เพราะ contract ของ XAUUSD.min คือ 10 ถ้าจำเลข 100 จะได้ $20 ผิดไป 10 เท่า
- สงสัยหน่วยก่อน บัญชี USC ตัวเลขเป็น cent ต้องหาร 100 ได้ +5.68R ตัวเลขที่ดีเกินจริงให้สงสัยหน่วยก่อนสงสัยกลยุทธ์
- สรุปไม่ได้ file ของ MT5 เป็น UTF-16 case จริงค้นได้ 0 จาก 28 file ทั้งที่มีจริง 6 file ผลว่างให้ถือว่าคำสั่งผิดจนกว่าจะพิสูจน์ได้