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

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

A8-1

release เริ่มได้เมื่อครบสองเงื่อนไขพร้อมกัน

ข้อ เงื่อนไข
1 EA ผ่านขั้น verdict ตาม criteria ที่เขียนไว้ก่อน run (และด่าน robustness R1–R6 ตาม A7)
2 เจ้าของเงินถามเองว่าจะใช้ version ไหน — ไม่ใช่เราไปเสนอ

ลำดับที่ถูก:

แก้ code → ทดสอบ → วัดผล → สรุป → เจ้าของถาม → ค่อยตอบ

ทำไมต้องรอให้ถาม ไม่ใช่เสนอเมื่อผลดี:

  • ผลที่ดูดีกับความพร้อมใช้จริงเป็นคนละเรื่อง ตัวที่ชนะบน backtest เคยแพ้บนบัญชีจริงมาแล้วหลายรอบ
  • ผลส่วนใหญ่มาจากช่วงข้อมูลที่ใช้ไปแล้ว ตัวเลขที่ดีจึงบอกได้น้อยกว่าที่เห็น
  • ระหว่างทางถ้ามี version ใหม่ที่ผลดูดี ก็ยังไม่ใช่คำตอบว่าจะ deploy คำถามวิจัยของ version นั้นต้องได้บทสรุปก่อน

2 · ด่าน 6 ข้อ

A8-2

หัวใจของด่านนี้: พิสูจน์ว่า 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

A8-3

case EA-B v0.06 ซึ่งขึ้น Broadcast ไปแล้ว มีปัญหาสองชั้น

  1. arm ที่ใช้เทียบ trade-by-trade ไม่มีรายงาน ด่านข้อ 1 จึงไม่มีหลักฐานจริง
  2. 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

A8-4

ระบบของผู้สอน (อัตโนมัติ) ผู้เรียน (ด้วยมือ)
ขั้นตอน เครื่องมือ 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):

  1. copy .ex5 ไปที่ MQL5\Experts\ และ .set ไปที่ MQL5\Presets\ ของ MT5 บัญชีนั้น
  2. ติด EA บน chart → load preset
  3. ดู 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

ทวนท้ายบท

A8-Q

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