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

แนะนำระบบ 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 หนึ่งบัญชี

  1. ก่อนกด start — คุณตั้งช่วงวันที่จาก bt\ea-bt.exe is_oos --year 2026 --yaml · เขียนเกณฑ์ในหัว bt\config.yaml · run bt\ea-bt.exe run --config bt\config.yaml --dry-run แล้วเห็นแผนหนึ่งงานต่อหนึ่งบัญชี · ถ้าขึ้น ⚠ .ex5 not found แต่บรรทัดท้ายเป็น (dry-run) would run 1 jobs ไม่ต้องทำอะไร — run compile ให้เอง
  2. เข้า queue — dashboard tab "ระบบ backtest" → card "queue งาน" → เลือก file config → "+ เพิ่มงานนี้เข้า queue" → แถวใหม่ขึ้นสถานะ รอ · ตรวจ label (EA · version · จำนวน .set × broker · ช่วงวันที่ · TF) ก่อนกด
  3. กด "เริ่ม queue" — สถานะเปลี่ยนเป็น กำลัง run · หน้าต่าง MT5 ของบัญชีนั้นเปิดขึ้นมาเอง และ Strategy Tester เริ่มเอง · card "log ล่าสุด" มีข้อความที่ระบบพิมพ์ระหว่าง run · dashboard refresh เองทุก 2 วินาที
  4. ระหว่าง run — ถ้า tick ของช่วงนั้นยังไม่อยู่ในเครื่อง MT5 โหลดจาก broker ก่อน ดู "Download history: xx%" มุมขวาล่างของ Strategy Tester ระหว่างนั้นเส้นทุนไม่ขยับ ไม่ได้ค้าง · ดูเส้นทุนใน tab Graph: ลงต่อเนื่องหลายเดือน = หยุดได้ (กด Stop และปิด MT5 ตัวนั้น) · ขึ้นเรียบสวย = ห้ามอ่านว่าผ่าน
  5. จบ — 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\
  6. อ่านผล — เปิด .htm อ่าน History Quality ก่อน · แล้ว bt\ea-bt.exe mc <รายงาน>.htm --daily และ bt\ea-bt.exe verdict <folder บัญชี> · เทียบกับเกณฑ์ที่เขียนไว้
  7. บันทึก — แก้แถว LAB_MACROSS ใน research\status.yaml แล้ว bt\ea-bt.exe ea_status --check ต้องไม่มี [error]

dashboard card สั่ง run และ queue งาน

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

Strategy Tester ของ MT5 ระหว่าง run

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

รายงาน .htm ของ lab

ข้อ 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):

  1. M0 → M0-LAB — ติดตั้ง kit และเพิ่มบัญชี demo (ขั้นตอนละเอียดพร้อมภาพ: ติดตั้ง kit และเพิ่มบัญชี demo)
  2. S1 → S4 — ระบบ · ข้อมูล · config · dashboard
  3. S4-LAB — run lab แรกด้วย LAB_MACROSS ให้จบหนึ่งรอบ เพื่อเห็นทุกชิ้นในหน้านี้ทำงานจริง
  4. S5 → S8 — อ่านรายงาน · สถิติ · ตัดสิน · เขียนรายงาน
  5. ทำซ้ำกับ EA ของคุณเอง — เขียนเกณฑ์ผ่าน/ตก แล้ว ทดสอบ EA ของตัวเอง

หมวด คู่มือระบบ backtest ท้ายเมนูคือหน้าอ้างอิง เปิดคู่ได้ตลอด: guide-dashboard · guide-config · guide-commands · guide-troubleshoot


ดูต่อ