mt4 2025.10.27 00:36:27.544 TestGenerator: unmatched data error (volume limit 885 at 2025.10.10 04:00 exceeded) แก้ไขอย่างไร
ข้อความ error ใน MetaTrader 4 ที่ว่า
> **"TestGenerator: unmatched data error (volume limit 885 at 2025.10.10 04:00 exceeded)"**
หมายถึง **ข้อมูลราคาหรือปริมาณ Volume ในช่วงเวลานั้น (2025.10.10 04:00)** ไม่ตรงกันหรือเกินขอบเขตของข้อมูลที่ตัวทดสอบกลยุทธ์ (Strategy Tester) สามารถใช้ได้ → ทำให้ EA หรือ Backtest หยุด หรือให้ผลลัพธ์ผิดพลาด
---
### 🔍 สาเหตุหลักที่พบบ่อย
1. **ข้อมูลราคาย้อนหลัง (Historical Data) เสียหาย / ไม่ครบ**
   * เช่นมีข้อมูล M1 แต่ไม่ครบ หรือมี Gap ระหว่างเวลา
   * เกิดขึ้นบ่อยเมื่อดาวน์โหลดข้อมูลจาก broker ที่ต่างกัน หรือเปลี่ยนโบรกเกอร์
2. **ช่วงเวลา (Timeframe) ที่ Backtest ใช้ข้อมูลไม่สัมพันธ์กัน**
   * เช่น คุณทดสอบที่ TF H1 แต่ข้อมูล M1 ที่ใช้สร้าง model ไม่ครบ
3. **ไฟล์ .fxt / .hst เก่าหรือไม่ตรงกับ Symbol**
   * ถ้าเคย backtest Symbol เดิมมาก่อน แล้วเปลี่ยน broker / เปลี่ยนค่าข้อมูล แต่ยังใช้ไฟล์เดิม
4. **EA ใช้ข้อมูล Volume หรือ Tick เกินจริง**
   * เช่น เขียนโค้ดเรียก volume หรือ tick ในลักษณะที่เกินขอบเขต
---
### ✅ วิธีแก้ทีละขั้นตอน
#### **วิธีที่ 1: ล้างและดาวน์โหลดข้อมูลใหม่**
1. ไปที่เมนู **Tools → History Center (F2)**
2. เลือก Symbol ที่ใช้ (เช่น EURUSD → M1)
3. คลิก **Delete** ลบข้อมูลทั้งหมด
4. จากนั้นคลิก **Download** เพื่อโหลดข้อมูลใหม่
   * ถ้าใช้ broker จริง ให้เชื่อมต่อ server และกด *Download* จาก MetaQuotes
> 🔸 หากต้องการความแม่นยำสูงสุด ให้โหลด timeframe M1 ก่อน แล้วค่อยเปิด backtest
---
#### **วิธีที่ 2: ลบไฟล์ backtest เดิม**
1. ปิด MT4
2. ไปที่โฟลเดอร์:
   ```
   C:\Users\<ชื่อผู้ใช้>\AppData\Roaming\MetaQuotes\Terminal\<รหัสบัญชี>\tester\history
   ```
3. ลบไฟล์ทั้งหมดในโฟลเดอร์ `history` และ `cache`
4. เปิด MT4 ใหม่ แล้วทดสอบอีกครั้ง
---
#### **วิธีที่ 3: ตรวจสอบการตั้งค่าใน Strategy Tester**
* Mode ควรใช้:
  * "**Every tick (the most precise method)**"
  * หรือถ้าทดสอบเร็ว ให้ใช้ "**Open prices only**" แทน เพื่อหลีกเลี่ยง tick mismatch
* ตรวจสอบให้แน่ใจว่า Symbol และ timeframe ตรงกับข้อมูลที่โหลดไว้ใน History Center
---
#### **วิธีที่ 4: ปรับหรือจำกัดการอ่าน Volume ใน EA**
ถ้า EA ใช้ `Volume[]`, `iVolume()`, หรือ `TickVolume` ตรวจสอบว่าไม่ได้อ้าง index เกินจำนวนแท่ง เช่น:
```mql4
if (i < 1) return; // ป้องกันการอ่านแท่งก่อนหน้าเมื่อ i=0
```
หรือในกรณี backtest บนข้อมูลจำกัด:
```mql4
int bars = Bars;
if (bars < 100) return;
```
---
### ⚠️ หมายเหตุ
ถ้าใช้ **ไฟล์ .csv / .fxt ที่สร้างจาก Tickstory หรือ Tick Data Suite** →
ให้ตรวจสอบว่าข้อมูลถูกสร้างด้วย broker เดียวกัน และใช้ Timezone เดียวกับใน MT4 ไม่เช่นนั้นจะ mismatch ได้ง่าย
---
หากคุณบอกผมได้ว่า:
* Symbol ที่ทดสอบ (เช่น EURUSD, XAUUSD ฯลฯ)
* Timeframe
* และ Mode ที่ใช้ใน Strategy Tester
--------------------------------------------