ทดสอบ EA ของตัวเอง
▶ clip: https://youtu.be/BoWnYPP35Dk — B1 · ทดสอบ EA ของตัวเอง (lab · บทเสริม · 9 นาที · ทำตามหน้านี้ทีละขั้นกับ BreakoutLab · ดูหลัง B2)
หน้านี้ใช้เมื่อมี EA ที่ download หรือซื้อมา (หรือเขียนเอง) แล้วอยากรู้ว่ามันมี edge จริงไหม · พาทำตั้งแต่วาง file ลงเครื่องจนได้คำตัดสินรอบแรก ทีละขั้น ทุกขั้นบอกว่าทำอะไร · เห็นอะไรบนจอ · เสร็จเมื่อไร · ถ้าไม่ได้ทำยังไง · ยังไม่รู้ว่าระบบทั้งหมดทำงานยังไง อ่าน ภาพรวมระบบ ก่อน
ต้องมีก่อน:
- ติดตั้ง kit และเพิ่มบัญชี demo แล้ว มี tick จริงช่วงที่จะ test (ติดตั้ง kit และเพิ่มบัญชี demo)
- แนะนำให้ทำ lab แรก S4-LAB กับ EA ฝึกหัด
LAB_MACROSSให้จบก่อนหนึ่งรอบ — ขั้นตอนเหมือนกันทุกอย่าง ต่างแค่ EA กับ config
ใช้เวลาเท่าไร: backtest ขึ้นกับ EA และความยาวช่วงวันที่ · ในคอร์ส LAB_MACROSS ช่วง 4 เดือนใช้ 21 วินาทีหลังมี tick ในเครื่องแล้ว · EA ที่เปิด trade ถี่อาจใช้หลายชั่วโมง
คำที่ต้องรู้ก่อนเริ่ม
| คำ | แปลว่า | ในหน้านี้อยู่ที่ |
|---|---|---|
| EA | Expert Advisor — โปรแกรม trade อัตโนมัติที่ run ใน MT5 | — |
.mq5 / .ex5 |
.mq5 = source code ที่คนอ่านได้ · .ex5 = ตัวที่ compile แล้วที่ MT5 run ได้ · EA ที่ซื้อมาส่วนใหญ่มีแค่ .ex5 ซึ่งอ่านข้างในไม่ได้ |
ขั้นที่ 3 |
| terminal | MT5 หนึ่งชุดใน folder ของมันเอง · kit มีหนึ่งตัวต่อบัญชี demo ที่ mt5\MT5_<ชื่อบัญชี>\ |
ขั้นที่ 10 |
preset / .set |
file ค่าตั้งของ EA หนึ่งชุด (lot · SL · ฯลฯ) · ชื่อ file บอกระบบว่าเป็น EA ไหน version ไหน preset อะไร | ขั้นที่ 3 |
| config | file .yaml ใน bt\ ที่บอกระบบว่าจะ run EA ไหน ด้วย preset ไหน บน broker ไหน ช่วงวันที่ไหน ทุนเท่าไร |
ขั้นที่ 8 |
| IS | in-sample — ช่วงข้อมูลที่ใช้ test รอบแรก · ระบบสุ่ม lock ไว้แล้วต่อปี ห้ามเลือกเอง | ขั้นที่ 6 |
| prereg | เกณฑ์ผ่าน/ตกที่เขียนไว้ก่อน run · เขียนหลังเห็นผล = ปรับเกณฑ์ให้ผ่านโดยไม่รู้ตัว | ขั้นที่ 7 |
| dry-run | สั่งให้ระบบพิมพ์แผนงานออกมาดูอย่างเดียว ยังไม่ run จริง | ขั้นที่ 9 |
| queue | รายการงาน backtest ใน dashboard ที่ระบบหยิบ run ทีละงาน · กดเพิ่มงาน = ระบบ copy config ทั้งก้อนเก็บไว้กับงานนั้น | ขั้นที่ 10 |
| รายงาน (report) | file .htm ที่ Strategy Tester เขียนออกมาหลัง run จบ · เปิดใน browser ได้ |
ขั้นที่ 11 |
| History Quality | บรรทัดในรายงานที่บอกว่า tick ที่ใช้เป็นของจริงกี่ % · ต่ำกว่า 90% = ทิ้งรายงานนั้น | ขั้นที่ 11 |
| R · E[R] · CI | R = กำไร/ขาดทุนต่อ trade หารด้วยระยะ SL · E[R] = ค่าเฉลี่ย R · CI = ช่วงที่ค่าจริงน่าจะอยู่ (95%) | ขั้นที่ 12 |
ในหน้านี้ <ชื่อ> = ชื่อ EA ที่ระบบตั้งให้ (ได้จากขั้นที่ 3) · <ชื่อบัญชี> = ชื่อที่ตั้งตอนเพิ่มบัญชี demo เช่น RoboForex-Demo ·
คำสั่งทุกบรรทัดพิมพ์ใน PowerShell ที่เปิดใน folder kit (ใน File Explorer: click ขวาที่ว่างใน folder kit → Open in Terminal)
เส้นทางทั้งหมด
วาง EA ใน inbox → intake → (ตรวจบนกระดาษ) → check tick → ขอช่วงวันที่ → เขียนเกณฑ์
→ ทำ config → dry-run → เข้า queue + กดเริ่มเอง → อ่านรายงาน → mc → verdict → ตัดสิน S1–S6 → บันทึกสถานะ
EA ที่เขียนหรือแก้เอง ข้ามขั้นที่ 1–3 ไปใช้หัวข้อ B · EA ที่เขียนเอง แทน แล้วกลับมาทำต่อตั้งแต่ขั้นที่ 4
A · EA ที่ download หรือซื้อมา
ขั้นที่ 1 · วาง EA ลงใน inbox
ทำ: copy folder ของ EA (หรือ zip) ไปไว้ใน research\0-intake\inbox\ · หนึ่ง folder ต่อ EA หนึ่งตัว
ยังไม่มี EA ของตัวเอง? ใช้ EA ตัวอย่างที่มากับ kit: copy ทั้ง folder
lab\inbox-sample\BreakoutLabไปวางใน inbox · ทำเหมือน EA ที่ download มา (มีแต่.mq5) · คาดว่าไม่มี edge มีไว้ฝึกขั้นตอน · ชื่อที่จะเห็นในขั้นถัดไปคือBreakoutLab
research\0-intake\inbox\
Gold-Trend-EA\
Gold-Trend-EA.ex5
manual.pdf
(ชื่อในตัวอย่างสมมติ) · file แถมอย่าง pdf ใส่มาด้วยได้ ระบบไม่เอาไปใช้
เสร็จเมื่อ: เปิด research\0-intake\inbox\ แล้วเห็น folder ของ EA
ถ้าไม่ได้: ไม่มี folder inbox → 1-ติดตั้ง.bat สร้างให้ในหมวด research folders · run 1-ติดตั้ง.bat ซ้ำ หรือสร้าง folder เอง
ขั้นที่ 2 · ดูก่อนว่าระบบจะรับไหม (intake แบบ dry-run)
ทำ:
bt\ea-bt.exe intake --src research\0-intake\inbox --dry-run
--src ต้องเป็น folder แม่ (inbox) ไม่ใช่ folder ของ EA · --dry-run = ดูอย่างเดียว ยังไม่ copy อะไร
เห็นอะไรบนจอ: บรรทัด total N items แล้วตารางนับว่าแต่ละ EA ตกชั้นไหน
| ชั้น (tier) | แปลว่า |
|---|---|
queued |
รับเข้า · ระบบจะเตรียม file ให้ |
MT4 |
มีแต่ .mq4 / .ex4 — เป็นของ MT4 run ใน MT5 tester ไม่ได้ |
not an EA |
เป็น indicator หรือ script ไม่ใช่ EA |
duplicate |
sha256 ตรงกับ file ที่รับไปแล้ว — ตัวเดียวกัน |
rejected before |
เคยตัดทิ้งไปแล้ว |
in repo / in repo (partly) |
มีใน kit แล้ว (ทั้งหมดหรือบางส่วน) |
Pine |
เป็นของ TradingView — backtest ใน MT5 ไม่ได้ |
no program |
ไม่มี file ที่เป็น program เลย |
cannot unpack |
แตก file บีบอัดไม่ได้ (ต้องมี 7-Zip) |
และบรรทัด copy -> ... / created -> ... บอกว่าถ้า run จริงจะวาง file ไว้ที่ไหน
เสร็จเมื่อ: EA ของคุณอยู่ชั้น queued
ถ้าไม่ได้: ชั้นอื่นทุกชั้น = EA นั้น backtest ใน kit ไม่ได้ · MT4 ต้องหา version MT5 จากผู้ขาย
ขั้นที่ 3 · รับเข้ากองจริง (intake)
ทำ: คำสั่งเดิมแต่ไม่มี --dry-run
bt\ea-bt.exe intake --src research\0-intake\inbox
เห็นอะไรบนจอ: ตารางเดิม และบรรทัด copy -> ... · created -> ... ที่ทำจริงแล้ว
ได้อะไร:
| file | คืออะไร |
|---|---|
research\0-intake\sources\... |
สำเนาต้นฉบับ เก็บไว้เทียบทีหลัง |
research\1-screen\eas\<ชื่อ>\<ชื่อ>_v0.01.ex5 |
ตัว EA ที่ระบบจะ run (หรือ .mq5 ถ้าได้มาเป็น source — ระบบ compile ให้ตอน backtest) |
research\1-screen\set\<ชื่อ>\V0.01\<ชื่อ>_v0.01_default.set |
preset เริ่มต้น · ข้างในไม่มีค่าตั้งสักตัว = tester ใช้ค่า default ของ EA ทุกตัว ซึ่งคือสิ่งที่รอบแรกต้องการ |
<ชื่อ> อาจไม่เหมือนชื่อ folder เดิม — ระบบแปลง _ และอักขระที่ไม่ใช่ A–Z 0–9 เป็น - ตัดข้อความในวงเล็บออก และยาวไม่เกิน 40 ตัวอักษร (intake เลือกตัด _ ทิ้งเพื่อกันชื่อชนกับตัวคั่น _v<เลข>_ ของชื่อ .set) · อ่านชื่อจริงจากบรรทัด copy -> research/1-screen/eas/... แล้วจดไว้ ใช้ทุกขั้นต่อจากนี้
ทำไมชื่อ .set ต้องเป็นรูปนี้: ระบบอ่านชื่อ file เป็น {EA}_v{version}_{preset} → <ชื่อ> · V0.01 · default แล้วใช้หา .ex5 และตั้ง folder ผล · ชื่อที่ไม่ตรงรูปนี้กลายเป็น version unversioned
เสร็จเมื่อ: มีทั้งสอง file ข้างบน
ถ้าไม่ได้: ไม่มีบรรทัด created -> แต่มี skip (exists) ... = file นั้นมีอยู่แล้วจากรอบก่อน ใช้ตัวเดิมได้
ขั้นที่ 4 · ตรวจบนกระดาษ (ไม่บังคับใน Standard)
บาง EA ตัดทิ้งได้โดยไม่ต้อง run — ถาม 2 ข้อ (รายละเอียดใน S7 หัวข้อ 4):
| gate | ถามว่า |
|---|---|
| G1 · cost | spread + commission + swap เทียบกับ SL จริงของ EA กินไปเท่าไร |
| G2 · โครงสร้าง | win% ที่ EA ต้องได้เพื่อคุ้มทุน เกินกว่าที่กลไกของมันให้ได้ไหม |
cost ต้องมาจากข้อมูลจริงของ broker ห้ามใส่ค่าคงที่ · EA ที่มีแต่ .ex5 อ่านกลไกจาก code ไม่ได้ ต้องดูจาก trade ที่มันเปิดใน backtest แทน · course Advanced ใช้ skill /ea-analyze ใน Claude Code ทำขั้นนี้
เสร็จเมื่อ: ตัดสินได้ว่าจะ run ต่อ หรือข้ามขั้นนี้ไป
ขั้นที่ 5 · check ว่ามี tick จริงช่วงที่จะ test
ทำไปแล้วตอนเพิ่มบัญชี (ขั้นที่ 5 ของ guide-install) · ทำซ้ำเมื่อจะ test ช่วงอื่น หรือเพิ่งเพิ่มบัญชีใหม่
ทำ: ปิด MT5 ของบัญชีนั้นก่อน แล้ว
bt\ea-bt.exe tick_depth --terminal mt5\MT5_<ชื่อบัญชี> --from 2026-01
bt\ea-bt.exe tick_years --own
เสร็จเมื่อ: ticks yes และ tick_years --own มีเดือนแรกไม่ช้ากว่า 202601

ตัวอย่างจาก lab: ticks yes — real ticks from the first week of the month · tick_years --own column first = 202512*
ถ้าไม่ได้: NO — only M1 bars = บัญชีนั้นใช้ช่วงนี้ไม่ได้ → ปิด broker นั้นใน config (ขั้นที่ 8 · enabled: false)
ขั้นที่ 6 · ขอช่วงวันที่จากระบบ
ทำ:
bt\ea-bt.exe is_oos --year 2026 --yaml
เห็นอะไรบนจอ:
date_from: '2026-01-01'
date_to: '2026-04-30' # IS 2026 · bt/is_oos.py
date_from: '2026-05-01'
date_to: '2026-07-31' # OOS 2026 · bt/is_oos.py
รอบแรกใช้คู่บน (# IS 2026) เท่านั้น · คู่ล่าง (OOS) เก็บไว้ทดสอบซ้ำหลังผ่านรอบแรก ห้ามใช้เลือกหรือปรับอะไร

ผลจริงใน PowerShell: คู่บนท้ายบรรทัด # IS 2026 คือช่วงที่ใช้รอบแรก · คู่ล่าง # OOS 2026 เก็บไว้
ทำไมห้ามพิมพ์วันที่เอง: ช่วง IS/OOS ของแต่ละปีถูกสุ่มครั้งเดียวแล้ว lock ไว้ ถ้าเลือกวันที่เองหลังเคยเห็นผล ก็คือเลือกช่วงที่ผลถูกใจ · tester หยุดที่ 00:00 ของ date_to (30 เม.ย. จึงไม่ถูก run)
เสร็จเมื่อ: จดสองบรรทัดนี้ไว้ใช้ในขั้นที่ 8
ขั้นที่ 7 · เขียนเกณฑ์ผ่าน/ตก ก่อน run
ยังไม่รู้ว่าเกณฑ์แต่ละข้อถามอะไร หรือควรตั้งค่าเท่าไร → อ่าน เขียนเกณฑ์ผ่าน/ตก ก่อน · หน้านั้นอธิบายทีละข้อว่าส่วนไหนเป็นสถิติ ส่วนไหนคุณเลือกเอง พร้อมตัวอย่าง prereg ของ BreakoutLab ทีละข้อพร้อมเหตุผล
ทำ:
- copy template เป็น file ของ EA นี้:
Copy-Item research\3-prereg\prereg-template.md research\3-prereg\prereg-<ชื่อ>.md
- เปิด
prereg-<ชื่อ>.md(เช่นnotepad research\3-prereg\prereg-<ชื่อ>.md) กรอกทุกหัวข้อ · เกณฑ์รอบแรกใช้ S1–S6:
| รหัส | เกณฑ์ | ผ่านเมื่อ |
|---|---|---|
| S1 | ข้อมูลใช้ได้ | ได้รายงาน · History Quality ≥ 90% |
| S2 | trade กระจายพอ | วันที่มี trade ≥ 10 วัน และ ≥ 10% ของวันที่ตลาดเปิดในช่วงนั้น |
| S3 | edge | E[R] > 0 และ CI ล่าง > 0 (bootstrap รายวัน) · t ≥ 2.0 (สูงขึ้นตาม ledger) |
| S4 | ไม่พึ่ง trade ไม่กี่ตัว | ตัด 3 trade กำไรสูงสุดแล้วยังบวก |
| S5 | ความเสี่ยง | Equity Drawdown Relative ≤ 30% |
| S6 | ชนะเกินจุดคุ้มทุนของตัวเอง | win% > 1 / (1 + payoff) |
ที่มาเต็มอยู่ใน docs\ea-screen-criteria.md ของ kit
3. เปิด research\3-prereg\sidak-ledger.md เพิ่มหนึ่งแถว · ช่อง "ผล" เว้นไว้ กรอกหลังตัดสิน
template ข้อ 2–3 ยังเขียนคำสั่งเป็น python bt/... · ในเครื่องคุณไม่มี Python ให้ใช้รูป bt\ea-bt.exe <เครื่องมือ> แทน
ทำไมต้องลง ledger: ยิ่งทดสอบหลายครั้ง โอกาสเจอ "ผ่าน" จากโชคล้วนยิ่งสูง (α = 5% ทดสอบ 10 ครั้ง → 40%) เกณฑ์ t จึงต้องเข้มขึ้นตามจำนวนครั้ง
เสร็จเมื่อ: มี prereg-<ชื่อ>.md ที่เกณฑ์เป็นตัวเลขครบ และแถวใหม่ใน sidak-ledger.md · จากนี้ห้ามแก้เกณฑ์ ถ้าพบทีหลังว่าตั้งผิด ให้เขียนเพิ่มว่าผิดตรงไหน ไม่ใช่แก้ทับ

sidak-ledger.md ของ lab: บรรทัด 25 คือแถวที่เพิ่ม (| 1 | 2026-11-01 | bt/config.yaml | ...) ช่องสุดท้าย "ผล" ยังว่าง · ในภาพช่อง t ที่ต้องได้เขียน 1.96 แต่เส้นขั้นต่ำที่ verdict ใช้คือ 2.0
ขั้นที่ 8 · ทำ config ของ EA นี้
ทำ:
- copy config ของ lab เป็น file ใหม่ (รายการ broker ติดมาด้วย):
Copy-Item bt\config.yaml bt\config_<ชื่อ>.yaml
- เปิด
bt\config_<ชื่อ>.yaml(notepad bt\config_<ชื่อ>.yamlหรือใน dashboard: card queue งาน ช่อง file config เลือก file นี้ → link แก้ YAML ดิบ) แล้วแก้เฉพาะ key เหล่านี้:
| key | ค่าใน lab | เปลี่ยนเป็น |
|---|---|---|
set_dir |
set/LAB_MACROSS |
research/1-screen/set/<ชื่อ> |
only_presets |
['V1.00/default'] |
['V0.01/default'] |
ea_dir |
eas |
research/1-screen/eas |
period |
H1 |
timeframe ที่ EA ออกแบบมา — ดูจากคู่มือผู้ขาย · ไม่รู้ = ถามผู้ขาย อย่าเดา |
date_from / date_to |
'2026-01-01' / '2026-04-30' |
ค่าจากขั้นที่ 6 |
backtest_root |
research/4-backtest/_lab/LAB_MACROSS_IS2026 |
research/4-backtest/<ชื่อ>_IS2026 |
key อื่นปล่อยตามเดิม · โดยเฉพาะ model: 4 (tick จริง) และ deposit: 10000 — ห้ามลดเป็น 1,000 เพราะ lot ที่คิดจาก risk% จะเหลือ 0.01 พอดีขั้นต่ำ ขาดทุน trade แรกแล้ว lot ปัดลงเหลือ 0 EA หยุดยิงทั้งรอบ (เกิดจริง 2026-11-01: 3 trade แล้วเงียบ 4 เดือน)
3. copy เกณฑ์จากขั้นที่ 7 ไปเขียนเป็น comment ในหัว file ด้วย (ทุกบรรทัดขึ้นต้นด้วย #)
4. broker ที่ tick_depth ไม่ตอบ yes → ใส่ enabled: false ที่รายการของ broker นั้นใน brokers:
ความหมายของทุก key และค่าเมื่อไม่ได้ตั้ง: คู่มือ config
เสร็จเมื่อ: บันทึก file แล้ว

ข้อ 3: หัว bt\config.yaml ของ lab — บรรทัด 15–21 คือเกณฑ์ S1–S6 ทุกบรรทัดขึ้นต้นด้วย # (S3 ในภาพเขียน t ≥ 1.96 · เกณฑ์ปัจจุบันคือ 2.0)

key ใต้ comment: brokers หนึ่งรายการ · set_dir · only_presets · ea_dir · period · model: 4 · date_from/date_to · ในภาพ deposit: 1000 เพราะ clip อัดก่อน kit เปลี่ยนเป็น 10000 — ใช้ 10000
ถ้าไม่ได้: brokers: [] (ว่าง) = ยังไม่ได้เพิ่มบัญชี demo ตอน copy · การเพิ่มบัญชีเขียน broker ลง bt\config.yaml ไม่ใช่ลง file ที่ copy ไปแล้ว → เพิ่มบัญชีก่อน (guide-install) แล้ว copy ใหม่ · หรือใน dashboard เลือก config_<ชื่อ>.yaml ในช่อง file config แล้วกด ค้นหา MT5 ในเครื่อง ใต้ตาราง MT5 ต่อ broker → check ชื่อและสัญลักษณ์ทอง → บันทึก broker
ขั้นที่ 9 · dry-run ตรวจแผนงาน
ทำ:
bt\ea-bt.exe run --config bt\config_<ชื่อ>.yaml --dry-run
เห็นอะไรบนจอ: (ค่าในวงเล็บมุมคือของคุณ)
EA : (guessed from .set name)
period : 2026-01-01 .. 2026-04-30 <TF> model=4
broker : <ชื่อบัญชี>/<ชื่อทอง>
selected : 1 files (picked one by one)
jobs : 1 total · 1 to run · 0 skipped
[<ชื่อบัญชี>] <ชื่อ>/V0.01/default · EA=<ชื่อ>_v0.01 -> run
(dry-run) would run 1 jobs
check ทีละบรรทัด: ช่วงวันที่ตรงกับขั้นที่ 6 · TF ตรงกับที่ EA ออกแบบ · หนึ่งงานต่อหนึ่งบัญชี · EA ชื่อตรงกับ .ex5 จากขั้นที่ 3

dry-run ของ lab: period · broker · jobs : 1 total · 1 to run · แถวงานลงท้าย -> run ⚠.ex5 not found (EA เป็น .mq5 run จะ compile ให้) · บรรทัดท้าย (dry-run) would run 1 jobs
เสร็จเมื่อ: ทุกบรรทัดตรง และบรรทัดท้ายเป็น (dry-run) would run N jobs โดย N = จำนวนบัญชีที่เปิดใช้
ถ้าไม่ได้:
| เห็น | แปลว่า | แก้ |
|---|---|---|
⚠ .ex5 not found และ EA ได้มาเป็น .mq5 |
ยังไม่ได้ compile | ไม่ต้องทำอะไร — run compile ให้ก่อน backtest · อยาก compile ก่อนก็ได้: bt\ea-bt.exe compile --config bt\config_<ชื่อ>.yaml |
⚠ .ex5 not found และ EA ได้มาเป็น .ex5 |
ea_dir ผิด |
ตรวจ key ในขั้นที่ 8 |
0 total ในบรรทัด jobs หรือ nothing to run |
only_presets ไม่ตรงชื่อ .set หรือไม่มี broker ที่เปิดใช้ |
ตรวจ only_presets = ['V0.01/default'] และ brokers |
-> skip (exists) |
มีรายงานของงานนี้แล้วด้วยค่าเดียวกัน | ไม่ต้อง run ซ้ำ ไปขั้นที่ 11 ได้เลย |
⚠ a broker terminal for this run is open |
MT5 ของบัญชีนั้นเปิดค้างอยู่ | ปิด MT5 ตัวนั้นก่อนเข้า queue |
แก้แล้ว dry-run ซ้ำจนตรงทุกบรรทัด
ขั้นที่ 10 · เข้า queue แล้วกดเริ่มเอง
ทำ:
- ปิด MT5 ของทุกบัญชีที่จะใช้ — terminal ที่เปิดค้างทำให้งานต้องรอ หรือขึ้น "ไม่มีรายงาน"
- เปิด dashboard (
2-เปิดหน้าคุม.bat) → tab ระบบ backtest → card queue งาน - ช่อง file config เลือก
config_<ชื่อ>.yaml - กด + เพิ่มงานนี้เข้า queue → แถวใหม่ขึ้นสถานะ
รอ - ตรวจ label ของแถวนั้น (EA · version · กี่ .set × กี่ broker · ช่วงวันที่ · TF) — ช่วงวันที่ผิดเห็นได้ตรงนี้
- กด "เริ่ม queue" เอง — ระบบไม่เริ่มให้
เห็นอะไรบนจอ:
- สถานะในแถวเปลี่ยน
รอ→กำลัง run→เสร็จ(หรือล้มเหลว) - MT5 ของบัญชีนั้นเปิดขึ้นมาเอง Strategy Tester run แล้วปิดเอง
- ครั้งแรกที่ tick ช่วงนั้นยังไม่อยู่ในเครื่อง มุมขวาล่างของ Strategy Tester ขึ้น "Download history: xx%" · ระหว่างนั้นเส้นทุนไม่ขยับ ไม่ได้ค้าง · ถ้า % ไม่ขยับนานหลายนาที ให้ check network
- card log ล่าสุด แสดงข้อความระหว่าง run · log เต็มของแต่ละงานอยู่ที่
bt\.queue\item-<เลข>.log
ระหว่าง run ดูเส้นทุน (tab Graph ของ tester):
| เห็น | ทำอะไร |
|---|---|
| ลงต่อเนื่องเป็นเส้นเดียวหลายเดือน | หยุดได้ · กด Stop แล้วปิด MT5 ตัวนั้นด้วย (กดแค่ Stop = queue ค้างจนครบ run_timeout_sec 7200 วินาที) · จดว่า "ตกด้วยตา" พร้อมช่วงวันที่และทุนต้น → ทุนตอนปิด ไม่ใช่ตัวเลขที่วัดแล้ว |
| ขึ้นเรียบสวย | ห้ามอ่านว่าผ่าน — grid/martingale เป็นแบบนี้ก่อนพัง ปล่อยให้จบ |
| แกว่งรอบเส้นเริ่ม หรือลงแล้วเด้งซ้ำ ๆ | ห้ามปิด ปล่อยให้จบ |

Strategy Tester ที่ระบบเปิดให้ระหว่าง run: tab Graph ด้านล่างคือเส้นทุน (Balance น้ำเงิน · Equity เขียว) · มุมขวาล่างมีเวลาที่ใช้ไปและปุ่ม Stop
เสร็จเมื่อ: ทุกแถวของงานนี้เป็น เสร็จ

card queue งาน หลัง lab run จบ: แถว 1 สถานะ เสร็จ · label LAB_MACROSS ทุก version · 1 .set × 1 broker · 2026-01-01..2026-04-30 H1 · ปุ่ม เริ่ม queue อยู่ขวา · card สั่ง run ด้านบนสรุป run ล่าสุด ... เสร็จ 1 · ล้มเหลว 0
ถ้าไม่ได้: ล้มเหลว ไม่ได้แปลว่า test ล้มเสมอไป อ่าน bt\.queue\item-<เลข>.log ก่อน แล้วดู แก้ปัญหาที่พบบ่อย · แก้ config หลังกดเพิ่มงานแล้วไม่มีผลกับงานที่รออยู่ — ลบงาน (✕) แล้วเพิ่มใหม่
ขั้นที่ 11 · เปิดรายงาน — History Quality ก่อนตัวเลขอื่น
รายงานอยู่ที่:
research\4-backtest\<ชื่อ>_IS2026\<ชื่อ>\V0.01\<ชื่อบัญชี>\default.htm
(รูปทั่วไป: <backtest_root>\<EA>\<version>\<ชื่อบัญชี>\<preset>.htm)
ใน folder เดียวกันมีสาม file:
| file | คืออะไร |
|---|---|
default.htm |
รายงานของ tester |
default.ini |
ค่าที่ tester ใช้จริง · ผลแปลกเมื่อไร เปิดตัวนี้ก่อน |
default.log |
journal ของรอบนั้น |

default.ini ของ lab: Symbol · Period · Model=4 · FromDate/ToDate · Deposit=10000 · ExpertParameters = ชื่อ .set ที่ใช้จริง
และใน research\4-backtest\<ชื่อ>_IS2026\ มี summary.csv รวมทุกงานแถวละงาน (column history_quality · total_trades · equity_dd_rel_pct)

หน้าสรุปของ lab (summary.html ข้าง summary.csv): แถวละงาน · ดู column history_quality (99% real ticks) · total_trades (29) · equity_dd_rel_pct (14.80)
ทำ: เปิด default.htm ใน browser อ่านตามลำดับนี้
| ลำดับ | บรรทัด | ถามว่า | ถ้าไม่ผ่าน |
|---|---|---|---|
| 1 | History Quality | ถึง 90% ไหม | ทิ้งรายงานทั้งใบ (ตก S1) ไม่ต้องอ่านต่อ |
| 2 | Symbol · Period · Initial Deposit · leverage | ตรงกับ config ไหม | run ผิด config ต้อง run ใหม่ |
| 3 | Equity Drawdown Relative | ร่วงหนักสุดกี่ % | > 30% = ตก S5 · ใช้แถว Relative ไม่ใช่ Maximal |
| สุดท้าย | Total Net Profit | — | ไม่ใช้ตัดสิน |

รายงานของ lab: ส่วน Settings ด้านบน (Expert · Symbol · Period · Initial Deposit) · ส่วน Results บรรทัดแรก History Quality 99% real ticks · Equity Drawdown Relative อยู่ column ขวา (14.80%)
ทำไม History Quality ต้องมาก่อน: ถ้าไม่มี tick จริง MT5 สร้าง tick จาก bar M1 เองโดยไม่เตือน บรรทัดนี้คือทางเดียวที่จะรู้ · รายละเอียดการอ่านรายงาน: S5
เสร็จเมื่อ: History Quality ≥ 90% และค่าในรายงานตรงกับ config
ขั้นที่ 12 · mc — R · CI · DD จาก shuffle
ทำ:
bt\ea-bt.exe mc research\4-backtest\<ชื่อ>_IS2026\<ชื่อ>\V0.01\<ชื่อบัญชี>\default.htm --daily
เห็นอะไรบนจอ: บรรทัดสรุปแบบนี้ (ตัวอย่างจาก LAB_MACROSS ใน S4-LAB):
days 24 · win 20.8% · E[R] -0.596 (bootstrap 95% -1.006..-0.138) · sd 1.09 · t -2.67 FAIL G4
และตาราง DD ที่ risk ต่าง ๆ (ลำดับจริง · shuffle p50 · p95)

ผล mc ... --daily ของ lab: บรรทัด days 24 · win 20.8% · E[R] -0.596 (bootstrap 95% -1.006..-0.138) · ตารางใต้คือ DD ราย risk% — column ลำดับจริง (actual sequence) เทียบกับ shuffle DD p50 / p95
อ่านยังไง:
- days = จำนวนวันที่มี trade ·
--dailyนับ trade ในวันเดียวกันเป็นหนึ่งตัวอย่าง เพราะไม่อิสระกัน → ใช้กับ S2 - E[R] และช่วง bootstrap 95% → S3: ช่วงทั้งช่วงต้องอยู่เหนือ 0 · ช่วงคร่อม 0 = ยังบอกไม่ได้ว่ามี edge
- DD shuffle p95 = DD ที่ต้องทนได้ · ลำดับ trade ที่เกิดจริงเป็นแค่เส้นทางเดียว
- ป้าย
FAIL G4/PASSท้ายบรรทัดเป็น gate ชุดเก่า ไม่ใช่คำตัดสิน S1–S6
เสร็จเมื่อ: จด days · E[R] · ช่วง 95% · t ลง prereg
ถ้าไม่ได้: EA ที่ไม่ตั้ง SL บน order คิด R ไม่ได้ → S3 ใช้ CI ของกำไรรายวันแทน และติดป้ายว่าเป็นเกณฑ์ตัวแทน (docs\ea-screen-criteria.md)
ขั้นที่ 13 · verdict — ตัวช่วยอ่าน
ทำ: ใส่ folder ของบัญชีหนึ่งตัว (ตัวที่มี .htm ข้างใน) ไม่ใช่ folder version
bt\ea-bt.exe verdict research\4-backtest\<ชื่อ>_IS2026\<ชื่อ>\V0.01\<ชื่อบัญชี>
อ่านยังไง: win% เทียบ need% (= 1 / (1 + payoff) เงื่อนไขเดียวกับ S6) · t net ต้อง ≥ 2.0 · verdict รายงานด่านแรกที่ตก (G2 ก่อน G4)

ผล verdict ของ lab: win% 20.69 ต่ำกว่า need% 39.05 → result = FAIL G2 · t net -2.24
verdict ไม่ได้ตรวจครบ S1–S6 — ไม่ดู History Quality และไม่ตัดสินด้วย DD Relative หรือ CI รายวัน · ใช้ประกอบ ไม่ใช่คำตัดสิน (S7)
ขั้นที่ 14 · ตัดสินด้วย S1–S6
ไล่ตามลำดับนี้ — ตรวจ "ตก" ก่อน (ตก S1 = หยุดตั้งแต่ขั้นที่ 11)
| ลำดับ | ถ้า | ป้าย | ทำอะไรต่อ |
|---|---|---|---|
| 1 | ตก S5 · หรือ E[R] ≤ 0 · หรือตก S4 | ตก | ปิด case รอบนี้ |
| 2 | ไม่ตก แต่ E[R] > 0 และ CI คร่อม 0 · หรือตก S2 | ยังตัดสินไม่ได้ | run ช่วงเพิ่ม (ข้อมูลยังไม่พอ ไม่ได้แปลว่าไม่มี edge) |
| 3 | ผ่านครบ S1–S6 | ผ่าน | เปิด case วิจัยต่อ |
ทำ: กรอกคำตัดสินในช่อง "ผล" ของ sidak-ledger.md และใน prereg-<ชื่อ>.md
เสร็จเมื่อ: มีคำตัดสินหนึ่งในสามป้าย พร้อมตัวเลขที่บอกได้ว่ามาจากบรรทัดไหนของ file ไหน
ขั้นที่ 15 · บันทึกสถานะ
ทำ: เปิด research\status.yaml เพิ่มรายการของ EA นี้ (copy รูปจากรายการ LAB_MACROSS ที่มีอยู่):
- ea: <ชื่อ>
version: V0.01
stage: '5'
state: ตก
since: '<วันที่ตัดสิน>'
evidence: research/4-backtest/<ชื่อ>_IS2026/<ชื่อ>/V0.01/<ชื่อบัญชี>/default.htm
summary: <ประโยคเดียวที่คนไม่รู้ศัพท์อ่านเข้าใจ>
next: <งานถัดไป>
state ใช้ได้: กำลังทำ · รอ · รอผู้ใช้ · ผ่าน · ตก · ปิด · ความหมายของแต่ละ stage อยู่ใน research\README.md ของ kit · ไม่รู้ขั้น = เขียนว่าไม่รู้ ห้ามเดา

research\status.yaml หลังบันทึกผล lab (เปิดใน VS Code): รายการ LAB_MACROSS ที่ stage: '5' · state: ตก · evidence ชี้ไปที่รายงาน · กรอบเหลืองรอบอักษรไทยเป็นของ VS Code เอง ไม่ใช่ error
แล้ว run
bt\ea-bt.exe ea_status --check
เสร็จเมื่อ: ไม่มี [error] · tab สถานะกลยุทธ์ ใน dashboard แสดง EA นี้ตามที่เขียน

ผล ea_status --check ที่ผ่าน: ไม่มีบรรทัด [error] · ตารางนับ EA ตามขั้น (5 verdict · failed 1)
EA ที่ตก: ปล่อย file ไว้ใน research\0-intake\sources\ ได้ · ระบบใช้ sha256 ของ file ที่ยังอยู่ตรงนั้นกันไม่ให้รับตัวเดิมซ้ำ · ถ้าจะลบ ต้องจด sha256 ลง research\0-intake\_rejected.json ก่อน ไม่งั้นรอบหน้า intake รับกลับเข้ามาเงียบ ๆ
B · EA ที่เขียนหรือแก้เอง
ต่างจากเส้นทาง A แค่ขั้นที่ 1–3 และ key ใน config · ขั้นอื่นเหมือนกันทุกอย่าง
| เส้นทาง A (ของนอก) | เส้นทาง B (ของตัวเอง) | |
|---|---|---|
| source | research\1-screen\eas\<ชื่อ>\ (intake วางให้) |
eas\<ชื่อ>\<ชื่อ>_v0.01.mq5 (วางเอง) |
| preset | research\1-screen\set\<ชื่อ>\V0.01\<ชื่อ>_v0.01_default.set |
set\<ชื่อ>\V0.01\<ชื่อ>_v0.01_default.set (สร้างเอง) |
set_dir |
research/1-screen/set/<ชื่อ> |
set/<ชื่อ> |
ea_dir |
research/1-screen/eas |
eas |
กติกาของ EA ที่เขียนเอง:
- ชื่อ
.setต้องแกะเป็น{EA}_v{version}_{preset}ได้ — ใน<ชื่อ>ห้ามมี_vตามด้วยตัวเลข (LAB_MACROSSมี_ได้) · วิธีตั้งชื่อ.setดู S3 หัวข้อ 1 - ชื่อ file ติดเลข version ห้ามเขียนทับ · แก้ code = file ใหม่ เลข version ใหม่ · เลขต้องตรงกัน: ชื่อ file ในหัว file ·
#property version·#define EA_VER·PresetTag - ส่งคำสั่ง trade ด้วย
CTradePingแทนCTrade - คิด lot จาก risk% ห้าม hardcode contract size (ทองมี 1 / 10 / 100) · ดูตัวอย่างใน
eas\LAB_MACROSS\LAB_MACROSS_v1.00.mq5
ก่อน dry-run ต้องผ่านทั้งสอง:
bt\ea-bt.exe check_version --only <ชื่อ>
bt\ea-bt.exe check_ping_log --only <ชื่อ>
run compile .mq5 ให้เองก่อน backtest · compile เองก่อนได้ด้วย bt\ea-bt.exe compile --config bt\config_<ชื่อ>.yaml (หรือปุ่ม compile ที่ค้าง ใน card สั่ง run ของ dashboard)
แล้วทำต่อตั้งแต่ขั้นที่ 4 ของเส้นทาง A
ผ่านแล้วยังไม่จบ
"ผ่าน" รอบแรกแปลว่า "น่าลงแรงต่อ" ไม่ใช่ "มี edge" · ผ่าน test period เดียวไม่พอ (case จริง: EA ที่ใช้ SL เป็น USD คงที่ 6 ตัว ผ่าน IS 2026 ทุกตัว แต่ตกช่วง 2022–2024 ทุกตัว) · ยังต้องผ่าน:
- OOS ของปีเดียวกัน (
bt\ea-bt.exe is_oos --year 2026 --yamlให้ช่วง OOS ด้วย) และปีอื่น - ด่าน robustness R1–R6 ใน
research\5-verdict\robustness.mdของ kit · R3 (slippage) วัดจากบัญชี demo ที่ forward เอง ขั้นตอนอยู่ในREADME.mdของ kit หัวข้อ "วัด slippage จากบัญชี demo ของตัวเอง"
ทุกอย่างยังเป็นบัญชี demo · ผลดีบน backtest ไม่ได้แปลว่าพร้อมใช้เงินจริง
ดูต่อ
- ภาพรวมระบบ — จุดเริ่มต้นของหมวดนี้
- ติดตั้ง kit และเพิ่มบัญชี demo
- คู่มือ config — ทุก key
- คู่มือ dashboard — ทุก tab ทุกปุ่ม
- คำสั่ง ea-bt.exe — ทุกเครื่องมือ
- แก้ปัญหาที่พบบ่อย
- บทเรียน: S3 โครง file และ config · S4 queue · S4-LAB lab แรก · S5 อ่านรายงาน · S7 ตัดสินผลรอบแรก