แนะนำระบบ backtest
▶ clip: https://youtu.be/an5B48csXYs — B0 · รู้จักระบบ backtest ก่อนลงมือ (บทเสริม · 7 นาที · ดูหลัง P0 ก่อนติดตั้ง)
หน้านี้ใช้เมื่อยังไม่เคย backtest มาก่อน หรือเรียนบทอื่นแล้วยังไม่เห็นภาพว่าคำสั่งแต่ละตัวต่อกันยังไง · อ่านหน้านี้ก่อนหน้าอื่นในคอร์ส มันบอกว่าระบบมีชิ้นอะไร แต่ละชิ้นอยู่ที่ไหน และงานไหลจากชิ้นไหนไปชิ้นไหน
ทุก path ในหน้านี้นับจาก folder kit (folder ที่มี 1-ติดตั้ง.bat เช่น C:\EA-Research\) · ทุกคำสั่งพิมพ์ใน PowerShell ที่ folder นั้น
1 · ระบบนี้คืออะไร และช่วยอะไร
backtest คือการให้ EA trade บนราคาย้อนหลัง แล้วดูว่ามันจะได้หรือเสียเท่าไร · ใน MT5 ตัวที่ทำงานนี้คือ Strategy Tester และคุณกดใช้เองได้ทันที (ทำครั้งหนึ่งในบท P0)
ระบบในคอร์สนี้ ไม่ได้แทน Strategy Tester — ข้างในยังเป็น Strategy Tester ของ MT5 ตัวเดิม · สิ่งที่ระบบทำคือสั่ง tester แทนมือคุณ และบังคับขั้นตอนที่คนกดเองมักข้าม
| กดเองใน Strategy Tester | สั่งผ่านระบบ |
|---|---|
| ตั้งค่าใหม่ทุกครั้ง ลืมเลือก "Every tick based on real ticks" ได้ | ทุกงานใช้ model: 4 (real ticks) จาก config เดียวกัน |
| test ข้าม broker = เปิด MT5 ทีละตัว ตั้งค่าซ้ำทีละตัว | หนึ่ง config run บนทุกบัญชีที่เปิดใช้ ใน queue เดียว (หนึ่งงานต่อหนึ่งบัญชี) |
| save รายงานเอง ตั้งชื่อเอง | รายงานลง folder ตามชื่อ EA · version · บัญชี · preset ให้เอง พร้อม .ini (ค่าที่ tester ใช้จริง) และ .log |
| เทียบหลายรายงาน = เปิดทีละใบ | ทุกงานใน config รวมไว้ใน summary.csv แถวละงาน |
| เลือกช่วงวันที่เอง (เลือกช่วงที่ผลถูกใจได้โดยไม่รู้ตัว) | ช่วงทดสอบมาจาก is_oos ซึ่ง lock ไว้แล้ว |
| run ซ้ำโดยไม่รู้ว่าเคย run แล้ว | skip_existing ข้ามงานที่มีรายงานและค่าใน .ini ตรงกันอยู่แล้ว |
| ตัวเลขในรายงานคือคำตอบ | รายงานเป็นแค่วัตถุดิบ · ตัดสินด้วย R · E[R] · CI · DD จาก shuffle (mc) ตามเกณฑ์ที่เขียนไว้ก่อน run |
ข้อดีของระบบ · หกข้อ
▶ clip: https://youtu.be/PRsD5BBkeLE — B3 · ข้อดีของระบบ backtest (บทเสริม · 5 นาที · ดูต่อจาก B0)
| # | ข้อดี | ทำได้ยังไง | ถ้ากดเองใน Strategy Tester |
|---|---|---|---|
| 1 | run หลาย broker หลายบัญชีพร้อมกัน จาก config เดียว | รายการ brokers ใน config ใส่ได้หลายบัญชี · แต่ละบัญชีมี MT5 แยก folder (mt5\MT5_<ชื่อ>) · หนึ่ง broker หนึ่งสาย วิ่งขนานกัน · เพิ่ม broker ด้วย add_account (copy MT5 · login · เพิ่มเข้า config ให้) |
เปิด MT5 ทีละ broker ตั้งค่าซ้ำทุกตัว — เหนื่อยจนคนส่วนใหญ่ไม่เทียบข้าม broker ทั้งที่ EA เดียวกันคนละ broker ผลต่างกันได้มาก |
| 2 | ใช้เครื่องเต็มที่ แต่ไม่ให้เครื่องล่ม | ระบบคิดเองว่ารับได้กี่งาน: (RAM ว่าง − 8 GB) ÷ 3.8 GB ต่องาน · CPU ไม่เกิน 80% · ไม่เกิน 6 งาน · หลาย config ที่ run พร้อมกันใช้โควตาเดียวกันทั้งเครื่อง | เปิดกี่ตัวต้องเดาเอง · เปิดมากไปเครื่องค้าง |
| 3 | queue · กดเริ่มครั้งเดียว run จนหมด | dashboard → queue งาน ใส่ได้หลาย config และ walk-forward · ตั้งก่อนนอน ตื่นมามีรายงาน | ต้องนั่งเฝ้าแล้วกดรอบถัดไปเอง |
| 4 | กันพลาดที่ MT5 ไม่เตือน | real ticks ทุกงาน · ช่วงวันที่จาก is_oos · ตรวจ tick ด้วย tick_depth · compile .mq5 ให้เองและหยุดถ้า compile ไม่ผ่าน · ข้ามงานที่มีรายงานและค่าตรงกัน (หยุดกลางคันแล้ว run ต่อได้) · --retry-failed run เฉพาะงานที่ล้ม |
พลาดข้อไหนก็ได้ตัวเลขที่ดูปกติแต่ผิด และไม่มีอะไรเตือน |
| 5 | ผลเป็นระเบียบ เทียบได้ในหน้าเดียว | folder ตาม EA · version · บัญชี · preset · มี .ini (ค่าที่ tester ใช้จริง) · summary.csv / summary.html แถวละงาน |
save และตั้งชื่อเอง · เทียบหลายรายงานต้องเปิดทีละใบ |
| 6 | พาไปถึงคำตัดสิน | mc คิด R · CI · DD จาก shuffle · verdict เทียบกับเกณฑ์ที่เขียนไว้ก่อน run |
ตัวเลขในรายงานถูกอ่านเป็นคำตอบ |
ตัวเลข 3.8 GB / 8 GB / 80% / 6 งาน มาจาก code ของระบบ (bt/core/leases.py) · ตัวอย่าง: RAM ว่าง 31 GB → (31 − 8) ÷ 3.8 ≈ 6 งานพร้อมกัน · บัญชีที่ใช้ MT5 folder เดียวกัน run ขนานกันไม่ได้
เป้าหมายของระบบคือ พิสูจน์ว่า EA มี edge จริงไหม ก่อนเอาเงินจริงไปเสี่ยง · ระบบไม่สร้างกลยุทธ์ให้ และ kit ไม่มี EA ที่ทำกำไร (LAB_MACROSS ที่แถมมาเป็น EA ฝึกหัดที่คาดว่าไม่มี edge) · ผลส่วนใหญ่ของงานแบบนี้คือการตัดทิ้ง
2 · ชิ้นส่วนทั้งหมด
| ชิ้น | อยู่ที่ | ทำอะไร |
|---|---|---|
| MT5 ต้นแบบ | mt5\_template\ |
copy มาจาก MT5 ที่คุณติดตั้งเอง ตอน 1-ติดตั้ง.bat · ใช้เป็นแม่แบบตอนเพิ่มบัญชี · ห้าม login ตัวนี้ |
| MT5 ต่อบัญชี | mt5\MT5_<ชื่อ>\ |
หนึ่งบัญชี demo = MT5 หนึ่งตัว = broker หนึ่งรายการในระบบ · สร้างจากต้นแบบตอนกด "เพิ่มบัญชี demo" · tick ของ broker นั้นเก็บอยู่ในตัวนี้ |
| EA | eas\<ชื่อ>\<ชื่อ>_v<เลข>.mq5 (source) · .ex5 (ตัวที่ compile แล้ว) |
กลยุทธ์ที่จะ test · ถ้ามีแต่ .mq5 คำสั่ง run compile ให้ก่อน backtest แล้ว copy .ex5 ไปที่ MQL5\Experts\starter-kit\ ของ MT5 แต่ละตัว · ตัวอย่างใน kit: eas\LAB_MACROSS\LAB_MACROSS_v1.00.mq5 |
| preset | set\<ชื่อ>\V<เลข>\<ชื่อ>_v<เลข>_<preset>.set |
ค่า input ของ EA หนึ่งชุด · ชื่อ file คือป้ายที่ระบบอ่านว่าเป็น EA อะไร version ไหน preset อะไร (S3) · ตัวอย่าง: set\LAB_MACROSS\V1.00\LAB_MACROSS_v1.00_default.set |
| config | bt\config.yaml (และ bt\config_<ชื่อ>.yaml ที่ copy เพิ่มเอง) |
บอกว่า test EA ไหน preset ไหน บนบัญชีไหน ช่วงวันที่ไหน ทุนเท่าไร ผลไปไหน · หัว file คือที่เขียนเกณฑ์ผ่าน/ตกก่อน run · ทุก key อธิบายใน guide-config |
| ea-bt.exe | bt\ea-bt.exe |
เครื่องมือทุกตัวรวมใน file เดียว: bt\ea-bt.exe <เครื่องมือ> · ดูรายชื่อ bt\ea-bt.exe --list · ดูวิธีใช้ bt\ea-bt.exe <เครื่องมือ> --help · ไม่ต้อง double-click · ไม่ต้องมี Python · คำสั่งทั้งหมดใน guide-commands |
| dashboard | เปิดด้วย 2-เปิดหน้าคุม.bat → http://127.0.0.1:8770 |
หน้า web คุมทั้งระบบ: เพิ่มบัญชี · เลือก EA · ตั้งค่า · เข้า queue · อ่านผล · ทุกปุ่มเรียก bt\ea-bt.exe ตัวเดียวกับที่พิมพ์เอง · หน้าต่างดำต้องเปิดค้างไว้ ปิด = dashboard ดับ · ทุก tab ทุกปุ่มใน guide-dashboard |
| queue | bt\queue.json · log ต่องาน bt\.queue\item-<เลข>.log |
รายการงานที่ run ทีละงานจนหมด · ตอนกดเพิ่ม ระบบ copy config ทั้งก้อนเก็บไว้กับงาน แก้ YAML ทีหลังไม่ถึงงานที่รออยู่ (S4) · สถานะงาน: รอ · กำลัง run · เสร็จ · ล้มเหลว |
| รายงาน | <backtest_root>\<EA>\<version>\<ชื่อบัญชี>\<preset>.htm คู่กับ .ini และ .log |
รายงานของ Strategy Tester หนึ่งใบต่อหนึ่งงาน · อ่าน History Quality ก่อนตัวเลขอื่น (S5) · ผลแปลก เปิด .ini ก่อน |
| summary.csv | <backtest_root>\summary.csv |
ทุกงานใน config แถวละงาน · column เช่น history_quality · total_trades · equity_dd_rel_pct |
| research\ | research\0-intake … research\9-evaluate |
folder เรียงตามขั้นของงานวิจัย 0–9 (ตารางข้างล่าง) · เปิด folder ก็รู้ว่างานอยู่ขั้นไหน · kit ที่เพิ่งแตกมีแค่ 3-prereg · 6-release · 8-forward · 9-evaluate ที่เหลือเกิดเมื่อมีงานในขั้นนั้น |
| status.yaml | research\status.yaml |
EA แต่ละตัวอยู่ขั้นไหน สถานะอะไร หลักฐานคือ file ไหน · คุณแก้เองเมื่อผ่าน/ตกด่าน · dashboard tab "สถานะกลยุทธ์" อ่านจาก file นี้ · ตรวจด้วย bt\ea-bt.exe ea_status --check |
ใน bt\config.yaml ของ kit backtest_root คือ research/4-backtest/_lab/LAB_MACROSS_IS2026 · รายงานของ lab แรกจึงอยู่ใต้ folder นั้น
ขั้นใน research\ (จาก research\README.md ของ kit · Standard สอนขั้น 3–5)
| # | ขั้น | ทำอะไร |
|---|---|---|
| 0 | intake | รับ EA เข้ามา จด sha256 · ตัด MT4 / indicator / ตัวซ้ำ |
| 1 | screen | ตรวจบนกระดาษ G1 cost · G2 โครงสร้าง |
| 2 | decode | ถอดกลไกจาก source หรือ log |
| 3 | prereg | เขียนเกณฑ์ผ่าน/ตกก่อน run · ช่วงทดสอบจาก is_oos · ลง Šidák ledger |
| 4 | backtest | run บน real ticks · จด cost ของยุคนั้น |
| 5 | verdict | ตัดสินตามเกณฑ์ขั้น 3 |
| 5R | robustness | R1–R6 ผ่าน หรือข้ามพร้อมเหตุผล ครบทุกข้อ |
| 6–9 | release · onboarding · forward · evaluate | ขึ้นบัญชีจริงและเทียบกับ backtest (Advanced) |
3 · ภาพรวมการไหล
flowchart LR
A["EA + preset + config"] --> B["dry-run<br/>ตรวจแผน"]
B --> C["queue<br/>copy config เก็บไว้"]
C --> D["MT5 tester<br/>real ticks"]
D --> E["รายงาน .htm<br/>+ summary.csv"]
E --> F["mc · verdict<br/>เทียบเกณฑ์"]
F --> G["status.yaml"]
- ก่อน A มีงานที่ไม่อยู่ในภาพ: ดึง tick ให้ครบช่วง (
tick_depth·tick_years) · เอาช่วงวันที่จากis_oos· เขียนเกณฑ์ในหัว config — ถ้าข้าม ผลที่ได้ไม่มีความหมายแม้ระบบจะ run ผ่าน - B → C dry-run ไม่ run จริง แค่พิมพ์แผนว่าจะเกิดกี่งาน บนบัญชีไหน ช่วงวันที่ไหน
- C → D คุณกด "เริ่ม queue" เอง ระบบไม่เริ่มให้
- F ผ่านแปลว่า "น่าลงแรงต่อ" เท่านั้น ยังต้องผ่าน OOS และ R1–R6
- G ผ่านหรือตกก็แก้
status.yamlในรอบเดียวกัน
4 · หนึ่งรอบงานจริงเป็นภาษาคน
ตัวอย่างนี้คือ lab แรก: EA LAB_MACROSS v1.00 · H1 · IS 2026 (2026-01-01 → 2026-04-30) · บัญชี RoboForex demo หนึ่งบัญชี
- ก่อนกด start — คุณตั้งช่วงวันที่จาก
bt\ea-bt.exe is_oos --year 2026 --yaml· เขียนเกณฑ์ในหัวbt\config.yaml· runbt\ea-bt.exe run --config bt\config.yaml --dry-runแล้วเห็นแผนหนึ่งงานต่อหนึ่งบัญชี · ถ้าขึ้น⚠ .ex5 not foundแต่บรรทัดท้ายเป็น(dry-run) would run 1 jobsไม่ต้องทำอะไร —runcompile ให้เอง - เข้า queue — dashboard tab "ระบบ backtest" → card "queue งาน" → เลือก file config → "+ เพิ่มงานนี้เข้า queue" → แถวใหม่ขึ้นสถานะ
รอ· ตรวจ label (EA · version · จำนวน .set × broker · ช่วงวันที่ · TF) ก่อนกด - กด "เริ่ม queue" — สถานะเปลี่ยนเป็น
กำลัง run· หน้าต่าง MT5 ของบัญชีนั้นเปิดขึ้นมาเอง และ Strategy Tester เริ่มเอง · card "log ล่าสุด" มีข้อความที่ระบบพิมพ์ระหว่าง run · dashboard refresh เองทุก 2 วินาที - ระหว่าง run — ถ้า tick ของช่วงนั้นยังไม่อยู่ในเครื่อง MT5 โหลดจาก broker ก่อน ดู "Download history: xx%" มุมขวาล่างของ Strategy Tester ระหว่างนั้นเส้นทุนไม่ขยับ ไม่ได้ค้าง · ดูเส้นทุนใน tab Graph: ลงต่อเนื่องหลายเดือน = หยุดได้ (กด Stop และปิด MT5 ตัวนั้น) · ขึ้นเรียบสวย = ห้ามอ่านว่าผ่าน
- จบ — MT5 ปิดเอง แถวใน queue เป็น
เสร็จ· ได้default.htm·default.ini·default.logใต้research\4-backtest\_lab\LAB_MACROSS_IS2026\LAB_MACROSS\V1.00\<ชื่อบัญชี>\และsummary.csvที่research\4-backtest\_lab\LAB_MACROSS_IS2026\ - อ่านผล — เปิด
.htmอ่าน History Quality ก่อน · แล้วbt\ea-bt.exe mc <รายงาน>.htm --dailyและbt\ea-bt.exe verdict <folder บัญชี>· เทียบกับเกณฑ์ที่เขียนไว้ - บันทึก — แก้แถว
LAB_MACROSSในresearch\status.yamlแล้วbt\ea-bt.exe ea_status --checkต้องไม่มี[error]

ข้อ 2–3 และ 5: dashboard tab ระบบ backtest หลัง lab จบ — card สั่ง run ด้านบน · card queue งาน ด้านล่างมีงานแถวเดียวสถานะ เสร็จ · ปุ่ม เริ่ม queue อยู่ขวา

ข้อ 4: MT5 ที่ระบบเปิดให้ · Strategy Tester ครึ่งล่าง tab Graph วาดเส้นทุนระหว่าง run · ปุ่ม Stop มุมขวาล่าง

ข้อ 6: รายงาน default.htm ของ lab เปิดใน browser · บรรทัดแรกของ Results คือ History Quality 99% real ticks · อ่านบรรทัดนี้ก่อนตัวเลขอื่น
ใช้เวลาเท่าไร (ค่าที่วัดใน clip S4-LAB ไม่ใช่ค่ารับประกัน): ดึง tick ม.ค.–เม.ย. 2026 ราว 3 นาที · run backtest เอง 21 วินาที · ผลที่ได้คือ 29 trade, History Quality 99% real ticks, ตกเกณฑ์ · งานที่ช่วงยาวกว่า timeframe เล็กกว่า หรือ tick ยังไม่อยู่ในเครื่อง ใช้นานกว่านี้มาก · เพดานต่องานคือ run_timeout_sec ใน config (kit ตั้ง 7200 วินาที รวมเวลาโหลด tick)
ขั้นตอนลงมือทำทีละขั้น พร้อม "ได้อะไร" และ "ถ้าไม่ได้": guide-own-ea · lab เดียวกันนี้แบบมีค่าที่ได้ใน clip ทุกขั้น: S4-LAB · งานล้ม หรือขึ้น "ไม่มีรายงาน": guide-troubleshoot
5 · ศัพท์ที่ต้องรู้ก่อนเริ่ม
| คำ | แปลว่าอะไร | เห็นที่ไหน |
|---|---|---|
| tick | ราคาหนึ่งครั้งที่ broker ส่งมา (bid/ask ณ เวลาหนึ่ง) | ผลของ tick_depth · tick_years --own |
| real ticks | tester ใช้ tick ที่ broker บันทึกไว้จริง · ถ้าไม่มี MT5 ปั้น tick จากแท่ง M1 เองโดยไม่เตือน ผลดูปกติแต่ไม่มีความหมาย | model: 4 ใน config · ticks yes / NO — only M1 bars จาก tick_depth --from |
| History Quality | สัดส่วน tick จริงในรายงาน · ต่ำกว่า 90% = ทิ้งผลนั้น ไม่อ่านต่อ | บรรทัด History Quality ในรายงาน .htm · column history_quality ใน summary.csv |
| IS / OOS | In-Sample = ช่วงที่ใช้คัดกรองและพัฒนา · Out-of-Sample = ช่วงที่กันไว้ ไม่ดูจนกว่าจะผ่าน IS · แต่ละปีถูกสุ่มครั้งเดียวแล้ว lock (2026: IS ม.ค.–เม.ย. · OOS พ.ค.–ก.ค.) | bt\ea-bt.exe is_oos --year 2026 --yaml · date_from / date_to ใน config · บท S2 |
| preset | ค่า input ของ EA หนึ่งชุด เก็บเป็น file .set |
set\<ชื่อ>\V<เลข>\ · key only_presets ใน config |
| config | file .yaml ที่บอกว่า run อะไร ที่ไหน ยังไง ผลไปไหน |
bt\config.yaml · card "การตั้งค่า" ใน dashboard · guide-config |
| queue | รายการงานรอ run ที่เก็บสำเนา config ไว้ตอนกดเพิ่ม | card "queue งาน" · bt\queue.json |
| dry-run | พิมพ์แผนว่าจะเกิดกี่งาน บนบัญชีไหน ช่วงไหน โดยไม่ run จริง | run --config <file> --dry-run · ปุ่ม dry-run ใน card "สั่ง run" |
| report | รายงานของ Strategy Tester หนึ่งใบต่อหนึ่งงาน (.htm) · .ini ข้าง ๆ คือค่าที่ tester ใช้จริง |
<backtest_root>\<EA>\<version>\<ชื่อบัญชี>\ |
| R | กำไร/ขาดทุนของ trade หนึ่งไม้ หารด้วยเงินที่เสี่ยงไว้ในไม้นั้น · แพ้เต็ม SL = −1R · ได้สองเท่าของที่เสี่ยง = +2R · ไม่ขึ้นกับขนาด lot | ผลของ mc · บท S6 |
| E[R] | ค่าเฉลี่ย R ต่อ trade · ต้องอ่านคู่กับ CI — CI คร่อม 0 = ยังบอกไม่ได้ว่ามี edge | บรรทัดของ mc ... --daily เช่น E[R] -0.596 (bootstrap 95% -1.006..-0.138) |
| drawdown Relative | ทุนร่วงเป็น % มากที่สุดจากจุดสูงสุด · รายงานมีสองแถว ใช้แถว Relative ไม่ใช่ Maximal | "Equity Drawdown Relative" ในรายงาน · column equity_dd_rel_pct ใน summary.csv · บท S5 |
6 · เริ่มตรงไหน
หน้านี้อยู่ในบทเรียน 1 ต่อจาก P0 · เรียนต่อตามลำดับในเมนูจากบนลงล่าง (ลำดับเดียวกับ playlist บน YouTube):
- M0 → M0-LAB — ติดตั้ง kit และเพิ่มบัญชี demo (ขั้นตอนละเอียดพร้อมภาพ: ติดตั้ง kit และเพิ่มบัญชี demo)
- S1 → S4 — ระบบ · ข้อมูล · config · dashboard
- S4-LAB — run lab แรกด้วย
LAB_MACROSSให้จบหนึ่งรอบ เพื่อเห็นทุกชิ้นในหน้านี้ทำงานจริง - S5 → S8 — อ่านรายงาน · สถิติ · ตัดสิน · เขียนรายงาน
- ทำซ้ำกับ EA ของคุณเอง — เขียนเกณฑ์ผ่าน/ตก แล้ว ทดสอบ EA ของตัวเอง
หมวด คู่มือระบบ backtest ท้ายเมนูคือหน้าอ้างอิง เปิดคู่ได้ตลอด: guide-dashboard · guide-config · guide-commands · guide-troubleshoot
ดูต่อ
- guide-install — ติดตั้ง kit และเพิ่มบัญชี demo
- guide-own-ea — ทดสอบ EA ของตัวเองทีละขั้น
- S1 · ระบบทั้งหมดในหน้าเดียว + กติกา — ขั้น 0–9 และด่านของแต่ละขั้น
- S4-LAB · backtest งานแรกตั้งแต่ต้นจนจบ — lab เดียวกับหัวข้อ 4 พร้อมค่าที่ได้ใน clip