ข้ามไปที่เนื้อหา

ทดสอบ 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

ผล tick_depth และ tick_years

ตัวอย่างจาก 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) เก็บไว้ทดสอบซ้ำหลังผ่านรอบแรก ห้ามใช้เลือกหรือปรับอะไร

ผล is_oos ใน PowerShell

ผลจริงใน PowerShell: คู่บนท้ายบรรทัด # IS 2026 คือช่วงที่ใช้รอบแรก · คู่ล่าง # OOS 2026 เก็บไว้

ทำไมห้ามพิมพ์วันที่เอง: ช่วง IS/OOS ของแต่ละปีถูกสุ่มครั้งเดียวแล้ว lock ไว้ ถ้าเลือกวันที่เองหลังเคยเห็นผล ก็คือเลือกช่วงที่ผลถูกใจ · tester หยุดที่ 00:00 ของ date_to (30 เม.ย. จึงไม่ถูก run)

เสร็จเมื่อ: จดสองบรรทัดนี้ไว้ใช้ในขั้นที่ 8

ขั้นที่ 7 · เขียนเกณฑ์ผ่าน/ตก ก่อน run

ยังไม่รู้ว่าเกณฑ์แต่ละข้อถามอะไร หรือควรตั้งค่าเท่าไร → อ่าน เขียนเกณฑ์ผ่าน/ตก ก่อน · หน้านั้นอธิบายทีละข้อว่าส่วนไหนเป็นสถิติ ส่วนไหนคุณเลือกเอง พร้อมตัวอย่าง prereg ของ BreakoutLab ทีละข้อพร้อมเหตุผล

ทำ:

  1. copy template เป็น file ของ EA นี้:
Copy-Item research\3-prereg\prereg-template.md research\3-prereg\prereg-<ชื่อ>.md
  1. เปิด 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 ที่เพิ่มแถวแล้ว

sidak-ledger.md ของ lab: บรรทัด 25 คือแถวที่เพิ่ม (| 1 | 2026-11-01 | bt/config.yaml | ...) ช่องสุดท้าย "ผล" ยังว่าง · ในภาพช่อง t ที่ต้องได้เขียน 1.96 แต่เส้นขั้นต่ำที่ verdict ใช้คือ 2.0

ขั้นที่ 8 · ทำ config ของ EA นี้

ทำ:

  1. copy config ของ lab เป็น file ใหม่ (รายการ broker ติดมาด้วย):
Copy-Item bt\config.yaml bt\config_<ชื่อ>.yaml
  1. เปิด 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 แล้ว

เกณฑ์ S1–S6 เป็น comment ในหัว config

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

key ใน config ของ lab

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

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 แล้วกดเริ่มเอง

ทำ:

  1. ปิด MT5 ของทุกบัญชีที่จะใช้ — terminal ที่เปิดค้างทำให้งานต้องรอ หรือขึ้น "ไม่มีรายงาน"
  2. เปิด dashboard (2-เปิดหน้าคุม.bat) → tab ระบบ backtest → card queue งาน
  3. ช่อง file config เลือก config_<ชื่อ>.yaml
  4. กด + เพิ่มงานนี้เข้า queue → แถวใหม่ขึ้นสถานะ รอ
  5. ตรวจ label ของแถวนั้น (EA · version · กี่ .set × กี่ broker · ช่วงวันที่ · TF) — ช่วงวันที่ผิดเห็นได้ตรงนี้
  6. กด "เริ่ม 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

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

เสร็จเมื่อ: ทุกแถวของงานนี้เป็น เสร็จ

card queue งาน หลัง run จบ

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

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)

หน้าสรุป summary ของ lab

หน้าสรุปของ 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 — ไม่ใช้ตัดสิน

รายงาน Strategy Tester ของ lab

รายงานของ 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

ผล 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

ผล 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 · ไม่รู้ขั้น = เขียนว่าไม่รู้ ห้ามเดา

status.yaml หลังบันทึกผล lab

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

ผล 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 ทุกตัว) · ยังต้องผ่าน:

  1. OOS ของปีเดียวกัน (bt\ea-bt.exe is_oos --year 2026 --yaml ให้ช่วง OOS ด้วย) และปีอื่น
  2. ด่าน robustness R1–R6 ใน research\5-verdict\robustness.md ของ kit · R3 (slippage) วัดจากบัญชี demo ที่ forward เอง ขั้นตอนอยู่ใน README.md ของ kit หัวข้อ "วัด slippage จากบัญชี demo ของตัวเอง"

ทุกอย่างยังเป็นบัญชี demo · ผลดีบน backtest ไม่ได้แปลว่าพร้อมใช้เงินจริง


ดูต่อ