S2 · ข้อมูลมาก่อนกลยุทธ์
▶ clip: https://youtu.be/VkTqtFis_HU
จบบทนี้แล้วทำได้:
- อธิบายได้ว่าทำไม MT5 ให้ผล backtest ที่ไม่มีความหมายได้โดยไม่เตือน และจับได้จากบรรทัดไหน
- check ว่า terminal ของตัวเองมี tick จริงถึงปีไหน ด้วย
tick_depthแล้วtick_years - เอาช่วง IS / OOS มาตรฐานจาก
is_oosและตรวจช่วงที่มีอยู่ด้วยis_oos --check - รู้กับดักวันสุดท้ายของ
date_toและรู้ว่าเมื่อไรช่วงข้อมูลกลายเป็น "ช่วงข้อมูลที่ใช้ไปแล้ว" - แยกได้ว่าผลที่แย่ลงข้ามปีอาจมาจาก cost และ volatility ไม่ใช่กลยุทธ์เสื่อม
ต้องมีก่อน: จบ S1 · มีบัญชี demo อย่างน้อยหนึ่งบัญชีที่เพิ่มเข้า kit แล้ว (M0-LAB) สำหรับทำ lab
1 · MT5 ปั้น tick ให้เงียบ ๆ

ถ้าในเครื่องไม่มี tick จริงของช่วงที่ขอ MT5 จะไม่เตือนอะไรเลย มันสร้าง tick ขึ้นมาเองจาก bar M1 แล้วทดสอบต่อไปตามปกติ
- ตั้ง
model: 4(every tick based on real ticks) ไว้ใน config ก็ไม่ช่วย — model 4 แปลว่า "ใช้ tick จริงถ้ามี" ไม่ได้แปลว่า "หยุดถ้าไม่มี" - ทางเดียวที่จะรู้คือบรรทัด History Quality ในรายงาน
กติกา: History Quality ต่ำกว่า 90% = ทิ้งรายงานนั้น และห้ามเอาไปเฉลี่ยรวมกับใบอื่น เหตุผลที่ห้ามเฉลี่ย: ถ้าเอาใบที่ข้อมูลปลอมไปรวมกับใบที่ข้อมูลจริง ค่าเฉลี่ยที่ได้ก็ปนข้อมูลปลอมไปด้วย และดูไม่ออกว่าปนอยู่เท่าไร
บนจอมีรายงานสองใบเทียบกัน
| ใบ "ใช้ได้" | ใบ "ทิ้ง" | |
|---|---|---|
| ที่มา | รายงานของผู้เรียนเอง (RoboForex demo · IS 2026) | รายงานตัวอย่างใน lab (Inter) |
| History Quality | 99% real ticks | 17% real ticks |
| Total Net Profit | -6.32 | 1 159.86 |
ใบ 17% กำไรสูงกว่าก็จริง แต่ต้องระวังการอ่าน: สองใบนี้เป็น EA ต่างกันและ broker ต่างกันด้วย กำไรที่ต่างกันจึงไม่ได้มาจาก tick ปั้นอย่างเดียว สิ่งที่สองใบนี้สอนคือ ใบไหนอ่านต่อได้ ใบไหนไม่ได้ ไม่ใช่ว่า tick ปั้นทำให้กำไรสูงขึ้นเท่าไร
case 3X Combo — EA ตัวเดียวกัน run สองแบบ
| tick จริง | กำไรต่อ trade |
|---|---|
| 27% | +3.18 |
| 100% | +0.99 |
กำไรต่อ trade หายไปมากกว่าสองในสามเมื่อใช้ tick จริงครบ EA ที่ถือ trade เป็นวินาทีไวต่อราคาภายในแท่งมาก tick ที่ปั้นจาก M1 ไม่มีการเคลื่อนไหวจริงภายในนาทีนั้น EA แบบนี้จึงต้องใช้ tick จริง 100% เท่านั้น
2 · check ว่ามี tick ถึงปีไหน

ก่อนตั้งช่วงทดสอบ ต้องรู้ก่อนว่า tick จริงมีถึงปีไหน ใช้สองคำสั่งตามลำดับนี้
bt\ea-bt.exe tick_depth --terminal mt5\MT5_<ชื่อ> --from <YYYY-MM ของ date_from>
bt\ea-bt.exe tick_years --own
ลำดับนี้สลับไม่ได้ เพราะ tick_years อ่านได้เฉพาะ tick ที่ดึงลงเครื่องแล้ว ถ้า run tick_years ก่อน ช่วงที่ยังไม่ได้ดึงจะไม่ขึ้นเลย และจะดูเหมือน broker ไม่มีข้อมูล
ข้อควรรู้จาก kit README เกี่ยวกับ tick_depth:
- ปิด MT5 ของบัญชีนั้นก่อน ถ้าเปิดค้างอยู่
tick_depthจะไม่ทำงาน - ใส่
--fromเสมอ ไม่ใส่ = หาขอบล่างสุดของ broker ซึ่งบนบัญชีใหม่ค่าไม่นิ่ง เพราะ MT5 ยังดึงไม่จบ ห้ามใช้ค่านั้นตั้งdate_from - ผลที่ต้องได้คือ
ticks yes· ถ้าได้NO — only M1 barsแปลว่าช่วงนั้นไม่มี tick จริง ใช้ช่วงนั้นกับบัญชีนี้ไม่ได้
broker แต่ละชั้น
ภาพบนจอเป็น bar เวลาของ tick จริงบนเครื่องผู้สอน (ข้อมูลถึง 2026-08) แบ่ง broker เป็นสี่ชั้น
| ชั้น | หมายถึง | broker บนเครื่องผู้สอน (ปีเต็ม) |
|---|---|---|
| 1 | ยาวพอทำ IS/OOS | Robo-Cen 2015–2025 · Robo-ECN 2021–2025 · Exness-RawSpread 2022–2025 |
| 2 | ใช้ยืนยันข้าม broker | IUX-Live2 2022–2024 · IUX-Demo 2023–2025 · CXM-ECN 2024–2025 · Exness-Cen (Trial6) 2022–2023 |
| 3 | เฉพาะ 2025+ | Axi · Pepper · CPT · Hantec |
| 4 | เฉพาะ 2026 | VT · FBS · IC · Brex ฯลฯ |
ข้อสรุปจากตารางนี้:
- broker ชั้น 1 ที่ยาวพอทำ IS และ OOS ได้จริงมีแค่ Robo-Cen (ตั้งแต่ 2015) · Robo-ECN (2021) · Exness-RawSpread (2022)
- ส่วนใหญ่ที่เหลือมีแค่ปี 2025 หรือ 2026
- ใน config ที่ใช้หลาย broker ตัวที่ข้อมูลสั้นที่สุดเป็นตัวกำหนดช่วง ใส่ broker ชั้น 4 เข้าไปหนึ่งตัว ช่วงทดสอบของทั้ง config ก็ถูกจำกัดไว้ที่ 2026
ตัวเลขบนจอเป็นของเครื่องผู้สอน ถ้าคุณเพิ่งเปิดบัญชี demo ใหม่ อาจได้สั้นกว่านี้ ให้ run บนเครื่องตัวเองแล้วเทียบ
3 · test period มาตรฐาน IS / OOS

ช่วงทดสอบมาตรฐานใช้ปี 2022 ถึง 2026 แต่ละปีแบ่งครึ่ง แล้วสุ่มว่าครึ่งไหนเป็น IS ครึ่งไหนเป็น OOS ครั้งเดียว แล้ว lock ถาวร
| ปี | ม.ค.–มิ.ย. | ก.ค.–ธ.ค. |
|---|---|---|
| 2022 | OOS | IS |
| 2023 | IS | OOS |
| 2024 | OOS | IS |
| 2025 | IS | OOS |
| 2026 | IS ม.ค.–เม.ย. · OOS พ.ค.–ก.ค. | ส.ค. ขึ้นไปสงวนไว้ให้ forward |
ปี 2026 แบ่งต่างจากปีอื่น เพราะตั้งแต่สิงหาคม 2026 เป็นต้นไปสงวนไว้ให้ forward จึงเหลือ 7 เดือนแบ่งเป็น 4+3
ห้ามสุ่มใหม่เด็ดขาด สุ่มใหม่หลังเห็นผล = เลือกช่วงที่ถูกใจ ซึ่งคือสิ่งที่กติกานี้มีไว้กัน
ห้ามจำตารางเอง ให้เอาวันที่จากเครื่องมือทุกครั้ง ผลจริงบนจอ:
PS C:\ea-research-starter> 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
ตรวจช่วงที่มีอยู่แล้ว (เช่นใน config ที่ได้มาจากคนอื่น) ด้วย
bt\ea-bt.exe is_oos --check <from> <to>
ถ้าช่วงนั้นไม่ใช่ block มาตรฐาน คำสั่งจะคืน exit 1
ข้อจำกัดที่ต้องรู้: OOS ครึ่งปีที่อยู่ติดกับ IS เป็น OOS ที่อ่อน ผ่านแล้วบอกได้แค่ว่า "ไม่พังในหกเดือนถัดไป" ไม่ได้บอกว่าใช้ได้ในตลาดที่ต่างออกไปมาก
4 · test period ที่ใช้ไปแล้ว และกับดักวันที่

OOS ที่ใช้เลือกอะไรไปแล้ว = IS
OOS ช่วงไหนที่เคยถูกใช้เลือกอะไรไปแล้ว (เลือก EA เลือก preset เลือก parameter) ช่วงนั้นกลายเป็น IS ทันที เพราะเราได้เห็นผลในช่วงนั้นแล้วตัดสินใจตาม มันจึงไม่ได้เป็นข้อมูลที่ "ไม่เคยเห็น" อีกต่อไป
- รายงานที่ทดสอบบนช่วงแบบนี้ต้องเขียนกำกับว่า "ช่วงข้อมูลที่ใช้ไปแล้ว" ห้ามเขียนว่า "ผ่าน OOS" เฉย ๆ
- ตั้งแต่ 3 กันยายน 2026 ทองแทบไม่เหลือ OOS ย้อนหลังที่สะอาด ทางยืนยันเดียวคือ forward
tester หยุดที่ 00:00 ของ date_to
ตัวอย่างบนจอคือ IS 2023 (date_from: '2023-01-01' · date_to: '2023-06-30')
- tester หยุดที่เที่ยงคืนต้นวันของ
date_to→ วันที่ 30 มิ.ย. ไม่ถูกทดสอบ ที่ถูกทดสอบจริงคือ 1 ม.ค. → 29 มิ.ย. - กล่องขวาบนจอขยายให้เห็นชัด ของจริงคือ 1 วันจาก 181 วัน
- case ของ Wisdom EA: วันที่ 30 เมษายนได้ 0 trade ทั้งที่ถ้า run ต่อเนื่องได้ 10 trade
วันที่หายไปนี้ต้องเขียนเป็นข้อจำกัด ไม่ใช่แก้ด้วยการเลื่อน date_to เอง ถ้าเลื่อนเป็นวันถัดไป ช่วงจะหลุด block มาตรฐาน (ดู Lab ขั้นที่ 4)
History Quality: n/a
ถ้าบรรทัด History Quality ขึ้น n/a แปลว่าไม่มี tick จริงเลย ทิ้งรายงานเหมือนกรณีต่ำกว่า 90%
5 · ตลาดเปลี่ยน cost เปลี่ยน

ตลาดทองวันนี้ไม่ใช่ตลาดเดียวกับเมื่อหลายปีก่อน
range เฉลี่ยรายวันของทอง
| ปี | range |
|---|---|
| 2018 | 12 |
| 2024 | 33 |
| 2026 | 131 |
spread ของ XAUUSDc (cent) สาม era
| ช่วง | spread |
|---|---|
| 2022 – มิ.ย. 2024 | 20 |
| ถึง ม.ค. 2026 | 16 |
| ตั้งแต่ ก.พ. 2026 | 24–36 |
ผลที่ตามมา:
- ผลที่แย่ลงอาจมาจาก cost ไม่ใช่กลยุทธ์เสื่อม — EA ตัวเดิม setting เดิม จ่าย spread ต่อ trade ไม่เท่ากันในแต่ละ era
- รายงานต้องแยกตาม volatility เสมอ — ผลรวมหลายปีเอายุคที่ range 12 กับยุคที่ range 131 มาปนกัน ยุคหนึ่งอาจกลบอีกยุคหนึ่งได้
case EA-A: มี 14 set ที่ tune ได้ Profit Factor 1.1 ถึง 1.5 ในปี 2026 แต่นอกช่วงนั้นไม่เกิน 1.01 ตัวที่ดีที่สุด drawdown 99.94% สาเหตุคือ EA ใช้ระยะที่เป็น USD คงที่ ระยะ SL หรือ TP ที่พอดีกับตลาดที่ range 131 ต่อวัน ใช้ไม่ได้กับตลาดที่ range 12 หรือ 33 กลยุทธ์จึงพังเมื่อข้ามยุค
Lab · terminal ไหน run IS 2023 ได้ด้วย tick จริง

คำถาม: terminal ไหนในเครื่องคุณ run IS ปี 2023 ด้วย tick จริงได้ — ตอบได้โดยไม่ต้อง run backtest เลย
ทุกคำสั่งพิมพ์ใน PowerShell ที่ folder kit · ใน kit พิมพ์ bt\ea-bt.exe นำหน้าทุกคำสั่ง
ขั้นที่ 1 ขอช่วง IS ปี 2023 จาก is_oos
bt\ea-bt.exe is_oos --year 2023 --phase is --yaml
ต้องได้
date_from: '2023-01-01'
date_to: '2023-06-30' # IS 2023 · bt/is_oos.py
ขั้นที่ 2 ดึง tick แล้วดูว่ามีปีเต็มไหน — run tick_depth ทุกบัญชี (ปิด MT5 ของบัญชีนั้นก่อน) แล้วจึง run tick_years
bt\ea-bt.exe tick_depth --terminal mt5\MT5_<ชื่อ> --from 2023-01
bt\ea-bt.exe tick_years --own
ดู column full years (12 mo) ต้องครอบปี 2023 (เช่น 2015-2025) · ถ้าเป็น - แปลว่าไม่มีปีที่ครบ
ขั้นที่ 3 ตรวจช่วงด้วย --check
bt\ea-bt.exe is_oos --check 2023-01-01 2023-06-30
$LASTEXITCODE
ต้องขึ้น IS 2023 และ exit 0
ขั้นที่ 4 ลองเลื่อนวันท้ายเป็น 1 กรกฎาคมเอง
bt\ea-bt.exe is_oos --check 2023-01-01 2023-07-01
$LASTEXITCODE
ต้องได้ ★ matches no block — this range is neither IS nor OOS under the policy และ exit 1 ใน PowerShell ดู exit code ด้วย $LASTEXITCODE
ด่านของ lab: ตอบเป็นชื่อ terminal พร้อมแถวจาก tick_years ที่เป็นหลักฐาน · ถ้าไม่มีสักตัว ตอบว่า "ไม่มี" ได้ ถ้าบอกเหตุผลจาก column ได้
ระวัง: ถ้าพิมพ์
is_oos --year 2023โดยไม่ใส่--yamlจะมีบรรทัดtick:ต่อท้าย ซึ่งเป็นรายชื่อ terminal ของเครื่องผู้สอน ไม่ใช่ของคุณ ให้เชื่อtick_yearsของเครื่องตัวเองเท่านั้น
เฉลย — ทำเองก่อนแล้วค่อยเปิด
คำตอบขึ้นกับเครื่องของคุณ วิธีอ่านคือ
- terminal ที่ column
full years (12 mo)ครอบ 2023 → ตอบชื่อ terminal นั้น พร้อม copy แถวนั้นมาเป็นหลักฐาน - ทุก terminal ขึ้น
-หรือช่วงที่ไม่ครอบ 2023 → ตอบ "ไม่มี"
ตัวอย่างบนจอ (บัญชี demo RoboForex · 24 ต.ค. 2026):
terminal server symbol first last months full years (12 mo)
★ MT5_RoboMT5DemoECN RoboForex-ECN XAUUSD 202502 202610 21 -
tick มีตั้งแต่ 202502 ถึง 202610 และ full years เป็น - → IS 2023 ไม่มี tick จริง คำตอบคือ "ไม่มี" ต้องเพิ่มบัญชี broker ชั้น 1 ก่อน (ดูหัวข้อ 2)
ขั้นที่ 3–4: ช่วง 2023-01-01 → 2023-06-30 คือ IS 2023 (exit 0) · ช่วง 2023-01-01 → 2023-07-01 ไม่ตรง block ไหนเลย (exit 1) วันที่ 30 มิ.ย. ที่ไม่ถูกทดสอบต้องเขียนเป็นข้อจำกัด ไม่ใช่เลื่อนวันท้ายเอง
จุดที่มักพลาด
| พลาด | ผลที่ตามมา | ทางกัน |
|---|---|---|
เชื่อว่าตั้ง model: 4 แล้วได้ tick จริง |
อ่านผลจาก tick ที่ MT5 ปั้นจาก M1 | อ่าน History Quality ทุกใบ ต่ำกว่า 90% ทิ้ง |
| เอารายงานที่ต่ำกว่า 90% ไปเฉลี่ยรวม | ค่าเฉลี่ยปนข้อมูลปลอม | ทิ้งทั้งใบ ไม่เฉลี่ย |
run tick_years ก่อน tick_depth |
ไม่เห็นช่วงที่ยังไม่ได้ดึง | tick_depth ก่อนเสมอ |
เชื่อตัวเลข tick บนจอหรือบรรทัด tick: ของ is_oos |
ใช้ข้อมูลเครื่องผู้สอนแทนเครื่องตัวเอง | ใช้ tick_years --own ของเครื่องตัวเอง |
| ใส่ broker ข้อมูลสั้นใน config หลาย broker โดยไม่ดู | ช่วงทดสอบทั้ง config ถูกจำกัดโดยไม่รู้ตัว | ดูว่า broker ไหนสั้นที่สุด |
| พิมพ์วันที่เอง หรือสุ่ม IS/OOS ใหม่ | เลือกช่วงที่ถูกใจ | เอาจาก is_oos และตรวจด้วย --check |
เลื่อน date_to ไปวันถัดไปให้วันท้ายถูกทดสอบ |
หลุด block มาตรฐาน (exit 1) | เขียนวันที่หายเป็นข้อจำกัด |
| เขียนว่า "ผ่าน OOS" บนช่วงที่เคยใช้เลือกแล้ว | อ้างความแข็งแรงที่ไม่มี | เขียน "ช่วงข้อมูลที่ใช้ไปแล้ว" |
| สรุปว่ากลยุทธ์เสื่อมจากผลข้ามปี | มองข้ามว่า cost และ range เปลี่ยน | แยกรายยุค และบอก cost ของช่วงนั้น |
ทวนท้ายบท

- ตั้ง
model: 4แล้ว แปลว่ารายงานใช้ tick จริงแน่นอนไหม ต้องดูอะไร - อยากให้ 30 มิ.ย. ถูกทดสอบด้วย จึงตั้ง
date_to: '2023-07-01'ผิดตรงไหน - EA เดิมได้ผลแย่ลงในปี 2026 เทียบกับปี 2024 สรุปว่ากลยุทธ์เสื่อมได้ทันทีไหม
เฉลย
- ไม่แน่นอน ถ้าไม่มี tick จริง MT5 ปั้นจาก bar M1 โดยไม่เตือน ต้องดู History Quality ต่ำกว่า 90% ทิ้ง
- ช่วงนั้นหลุด block มาตรฐาน
is_oos --checkจะขึ้นว่าmatches no block(exit 1) วันท้ายที่หายไปเป็นข้อจำกัดของ tester ที่ต้องเขียนไว้ ไม่ใช่แก้ด้วยการเลื่อนวัน - ยังสรุปไม่ได้ เพราะ cost และ range เปลี่ยนตามยุค spread จาก 20 เป็น 16 เป็น 24–36 cent · range รายวันจาก 33 เป็น 131 ต้องแยกรายยุค และบอก cost ของช่วงนั้นก่อน