A8 · ปล่อย binary
▶ clip: https://youtu.be/Xt1HEwnhN7E
จบบทนี้แล้วทำได้:
- บอกได้ว่าเมื่อไรเริ่ม release ได้ และเมื่อไรยังไม่ได้ แม้ผลจะดูดี
- พิสูจน์ว่า
.ex5ที่จะติด chart คือ file เดียวกับที่ผ่านการทดสอบ ด้วยด่าน 6 ข้อ - เขียนหลักฐาน release ที่บอกตรง ๆ ว่า branch ไหนของ code ยังไม่ถูกทดสอบ
- ส่ง binary ถึงบัญชีด้วยมือ และตรวจจาก log OnInit ว่าค่าที่ load ตรงกับที่ตั้งใจ
ต้องมีก่อน: A5 (version 5 จุด · ping log) · A7 (ด่าน robustness R1–R6)
1 · เงื่อนไขเริ่ม release

release เริ่มได้เมื่อครบสองเงื่อนไขพร้อมกัน
| ข้อ | เงื่อนไข |
|---|---|
| 1 | EA ผ่านขั้น verdict ตาม criteria ที่เขียนไว้ก่อน run (และด่าน robustness R1–R6 ตาม A7) |
| 2 | เจ้าของเงินถามเองว่าจะใช้ version ไหน — ไม่ใช่เราไปเสนอ |
ลำดับที่ถูก:
แก้ code → ทดสอบ → วัดผล → สรุป → เจ้าของถาม → ค่อยตอบ
ทำไมต้องรอให้ถาม ไม่ใช่เสนอเมื่อผลดี:
- ผลที่ดูดีกับความพร้อมใช้จริงเป็นคนละเรื่อง ตัวที่ชนะบน backtest เคยแพ้บนบัญชีจริงมาแล้วหลายรอบ
- ผลส่วนใหญ่มาจากช่วงข้อมูลที่ใช้ไปแล้ว ตัวเลขที่ดีจึงบอกได้น้อยกว่าที่เห็น
- ระหว่างทางถ้ามี version ใหม่ที่ผลดูดี ก็ยังไม่ใช่คำตอบว่าจะ deploy คำถามวิจัยของ version นั้นต้องได้บทสรุปก่อน
2 · ด่าน 6 ข้อ

หัวใจของด่านนี้: พิสูจน์ว่า binary ที่ปล่อยคือ binary ตัวเดียวกับที่ test ทุกข้อต้องมีหลักฐานเป็น file เก็บรวมใน file เดียวต่อ EA ต่อ version ที่ research\6-release\<EA>-v<version>.md ก่อนติด chart
ลำดับตาม research\6-release\README.md ของ kit:
ข้อ 1 · binary ที่จะใช้ = binary ที่ test ถ้าผลวิจัยวัดจาก version อื่น (แก้ code หลัง test) ต้องเทียบ trade-by-trade
bt\ea-bt.exe compare_deals <รายงาน version ที่ test>.htm <รายงาน version ที่จะใช้>.htm
- exit 0 = ตรงกันทุก deal และทุก order · exit 1 = ต่าง และพิมพ์จุดแรกที่ต่าง
- เทียบทุก column ยกเว้น comment และเทียบเลข deal/order ด้วย เพราะ tester ออกเลขตามลำดับคำสั่ง ถ้าเลขเลื่อนแปลว่ามีคำสั่ง (วาง/แก้/ลบใบ) เพิ่มหรือหาย แม้ trade จะดูเหมือนเดิม
- run สอง version ในวันเดียวกัน รอบเดียวกัน เพราะ swap มาจาก spec ปัจจุบันของ broker ถ้า run คนละวัน ค่า swap อาจต่าง แล้ว
compare_dealsจะฟ้องว่าต่างทั้งที่ code ไม่ได้เปลี่ยนการ trade
ข้อ 2 · sha256 ตรง hash ของ .ex5 ที่ผ่านข้อ 1 ต้องตรงกับ file ที่จะติด chart
Get-FileHash <file>.ex5
compile ใหม่เมื่อไร ต้องเริ่มข้อ 1 ใหม่ทั้งหมด หลักฐานข้อ 1 ผูกกับ binary ตัวที่ test ไม่ใช่กับ source
ข้อ 3 · เลข version ตรงกันครบ (A5 หัวข้อ 4)
bt\ea-bt.exe check_version --only <EA>
ต้องได้ 0 จุดที่ไม่ตรง
ข้อ 4 · จด ping
bt\ea-bt.exe check_ping_log
ต้อง exit 0
ข้อ 5 · ส่ง binary ถึงบัญชี ดูหัวข้อ 4 (ระบบของผู้สอนใช้ release.py สร้าง draft ซึ่งไม่อยู่ใน kit · ผู้เรียน copy เองแล้วติด chart)
ข้อ 6 · เปลี่ยน version เฉพาะบัญชีที่ไม่มี trade หรือ open order ค้าง EA version ใหม่มองไม่เห็นของที่ version เก่าทิ้งไว้
กับดักที่เจอจริง: ตัวตรวจ needs_compile นับ file .mqh ทั้ง folder Include ไม่ว่า EA จะ include จริงไหม พอแก้ library ตัวเดียว EA เก่าทุกตัวจะถูกตีว่าตกรุ่น (binary เก่ากว่า source)
| ทำ | ผล |
|---|---|
| compile ใหม่ | ถูก · แล้วเริ่มด่านข้อ 1 ใหม่ |
| แก้วันที่ของ file เพื่อหลอกตัวตรวจ | ห้าม · binary ที่ run จะไม่ใช่สิ่งที่ตัวตรวจคิดว่า run |
3 · case: ปล่อย branch ที่ไม่เคยถูก test

case EA-B v0.06 ซึ่งขึ้น Broadcast ไปแล้ว มีปัญหาสองชั้น
- arm ที่ใช้เทียบ trade-by-trade ไม่มีรายงาน ด่านข้อ 1 จึงไม่มีหลักฐานจริง
- branch ของ cent account ซึ่งเป็นเนื้อหาหลักของ version นั้น ไม่เคยถูกเดินใน test เลย test run บนบัญชีที่ไม่ใช่ cent จึงเดินผ่านแค่ code ส่วนอื่น
บทเรียน:
| การเทียบ trade-by-trade | |
|---|---|
| พิสูจน์ได้ | code ใหม่ไม่เปลี่ยนการ trade ในส่วนที่ test เดินผ่าน |
| พิสูจน์ไม่ได้ | code ใหม่ทำงานถูก — โดยเฉพาะ branch ที่ test ไม่เคยเดิน |
ดังนั้นทุก branch ที่ไม่ถูกเดินใน test ให้เขียนตรง ๆ ในหลักฐาน release ว่ายังไม่ถูกทดสอบ ถ้า version ใหม่แก้ code ส่วน cent account ต้องมี test บน cent account ด้วย ถ้าไม่มี หลักฐานต้องบอกว่าไม่มี
4 · ส่ง binary ถึง VPS

| ระบบของผู้สอน (อัตโนมัติ) | ผู้เรียน (ด้วยมือ) | |
|---|---|---|
| ขั้นตอน | เครื่องมือ release สร้าง draft บน server ของผู้สอน → คนกด Broadcast | copy .ex5 + .set → ติด EA บน chart → ดู log ของ OnInit |
| ถึงบัญชียังไง | agent บน VPS ดึง version ใหม่ราวทุก 5 นาที | copy เอง |
| rollback | Broadcast version ก่อนหน้าซ้ำ | — |
ทางของผู้เรียน (จาก research\6-release\README.md ของ kit):
- copy
.ex5ไปที่MQL5\Experts\และ.setไปที่MQL5\Presets\ของ MT5 บัญชีนั้น - ติด EA บน chart → load preset
- ดู log ของ OnInit ว่าค่าที่ load ตรงกับที่ตั้งใจ — ตัวอย่าง
LAB_MACROSSพิมพ์ version ·PresetTag· symbol · ค่า input หลัก และ contract size ใน OnInit ถ้าค่าใน log ไม่ตรงกับ.setแปลว่า preset ไม่ถูก load (ต่อที่ A9)
ไม่ว่าทางไหน การกดลงเงินจริงเป็นหน้าที่ของคนเสมอ เครื่องมือเตรียมของได้ แต่ไม่กดแทน
ข้อควรระวังสองเรื่อง:
- EA grid/martingale เสียสถานะในหน่วยความจำตอน terminal restart การเปลี่ยน version คือการ restart EA ถ้า EA จำ basket ไว้ในตัวแปร ไม่ได้อ่านจาก position ที่เปิดอยู่ จะลืม basket ที่ค้าง
- push เข้า branch dev ของ server แล้วกลายเป็น deploy ทันที case จริง: แก้ column เดียวทำ EA ทุกตัวหลุดไปราว 1 ชั่วโมง ถ้าระบบของคุณ deploy อัตโนมัติจากการ push ต้องรู้ก่อนว่า branch ไหนคือของจริง
จุดที่มักพลาด
| พลาด | ผลที่ตามมา | ทางกัน |
|---|---|---|
| เสนอ deploy เมื่อผลดูดี | ปล่อย version ที่ยังไม่มีบทสรุปวิจัย | รอเจ้าของเงินถามเอง |
compare_deals สอง version คนละวัน |
ต่างเพราะ swap ไม่ใช่เพราะ code | run วันเดียวกัน รอบเดียวกัน |
| compile ใหม่หลังผ่านข้อ 1 แล้วไม่เริ่มใหม่ | binary ที่ติด chart ไม่ใช่ตัวที่พิสูจน์แล้ว | compile ใหม่ = เริ่มข้อ 1 ใหม่ · ตรวจ sha256 |
| แก้วันที่ของ file ให้ตัวตรวจเงียบ | binary เก่ากว่า source ยังวิ่งอยู่ | compile ใหม่ |
เชื่อว่า compare_deals ตรง = code ถูก |
ปล่อย branch ที่ไม่เคยเดิน (EA-B v0.06) | เขียนในหลักฐานว่า branch ไหนยังไม่ถูกทดสอบ |
| เปลี่ยน version บนบัญชีที่มี trade ค้าง | EA ใหม่มองไม่เห็นของเก่า · grid เสียสถานะ | เปลี่ยนเฉพาะบัญชีที่ไม่มี trade/open order |
| ไม่ดู log OnInit หลังติด chart | run ด้วยค่าที่ไม่ได้ตั้งใจ | เทียบค่าใน log กับ .set |
| push เข้า branch ที่ deploy อัตโนมัติ | EA ทุกตัวหลุด (~1 ชม.) | รู้ก่อนว่า branch ไหน deploy |
ทวนท้ายบท

- backtest ผลดีและผ่าน verdict แล้ว ปล่อยขึ้นบัญชีได้เลยไหม
compare_dealsตรงทุก trade พิสูจน์อะไรได้ และอะไรพิสูจน์ไม่ได้- แก้
.mqhแล้ว EA เก่าถูกตีว่าตกรุ่น ทำอย่างไร
เฉลย
- ไม่ได้ ต้องให้เจ้าของเงินถามเองด้วยว่าจะใช้ version ไหน ผลดูดีไม่เท่ากับพร้อมใช้จริง
- พิสูจน์ได้แค่ว่า code ใหม่ไม่เปลี่ยนการ trade ไม่ได้พิสูจน์ว่าทำงานถูก branch ที่ไม่ถูกเดิน เช่น cent account ของ EA-B v0.06 ต้องเขียนว่ายังไม่ถูกทดสอบ
- compile ใหม่ ห้ามแก้วันที่ของ file และเมื่อ compile ใหม่แล้ว ต้องเริ่มด่านข้อ 1 ใหม่