Strategy Specification คือสัญญาระหว่างแนวคิดกับซอฟต์แวร์ ยิ่งนิยามชัด ยิ่งลดการตีความและทำให้ทดสอบได้ เอกสารที่ดีไม่ต้องยาวที่สุด แต่ต้องตอบได้ว่าระบบควรทำอะไรในกรณีปกติและกรณีผิดปกติ

บริบทและข้อมูลนำเข้า

ระบุสินทรัพย์, timeframe, session, timezone, แหล่งข้อมูล และข้อกำหนดบัญชี อธิบาย Indicator ทุกตัวด้วยสูตรและพารามิเตอร์ รวมถึงการจัดการข้อมูลหายและแท่งที่ยังไม่ปิด

เขียนวัตถุประสงค์และสิ่งที่ไม่ทำ เช่น ระบบเปิดสถานะอย่างเดียวหรือจัดการสถานะเดิมด้วย ขอบเขตที่ชัดป้องกัน feature แฝงระหว่างพัฒนา

Signal, Order และ State

ใช้ตาราง decision rule ระบุ entry, exit, invalidation และ priority เมื่อหลายเหตุการณ์เกิดพร้อมกัน กำหนด order type, price rounding, retry, timeout, partial fill และ duplicate protection

วาด state machine เช่น idle, pending, open, closing, halted พร้อม event ที่เปลี่ยนสถานะ วิธีนี้ช่วยให้ restart และ reconciliation มีพฤติกรรมที่คาดการณ์ได้

Risk, Test และ Operations

ระบุ position sizing, exposure limit, loss limit, kill switch และข้อห้าม จากนั้นสร้าง test case แบบ Given/When/Then ครอบคลุม happy path และ failure เช่น disconnect, spread สูง หรือคำสั่งถูกปฏิเสธ

กำหนด log, metric, alert, deployment, rollback และผู้อนุมัติ การส่งมอบควรยืนยันว่าโค้ดตรง specification ไม่ใช่ยืนยันกำไร เพราะตลาดและผลในอนาคตไม่สามารถรับประกันได้

โครงสร้างเอกสาร 8 ส่วน

เอกสารที่ใช้งานได้จริงมักมีหัวข้อตามลำดับนี้ แต่ละส่วนตอบคำถามเดียวและอ้างอิงกันได้ด้วยรหัสกฎ

  1. Overviewวัตถุประสงค์ สมมติฐานของกลยุทธ์ สิ่งที่ระบบทำและไม่ทำ
  2. Market & Datasymbol, timeframe, session, timezone, แหล่งข้อมูล และวิธีจัดการข้อมูลหายหรือแท่งที่ยังไม่ปิด
  3. Indicators & Featuresสูตร พารามิเตอร์ และช่วงค่าที่อนุญาตของ Indicator หรือ feature ทุกตัว
  4. Decision Rulesตาราง entry, exit, invalidation พร้อม priority เมื่อหลายเหตุการณ์เกิดพร้อมกัน
  5. Orders & Executionorder type, price rounding, retry, timeout, partial fill และ duplicate protection
  6. State Machineสถานะ idle, pending, open, closing, halted และ event ที่เปลี่ยนสถานะ
  7. Risk Controlsposition sizing, exposure limit, loss limit, kill switch และข้อห้าม
  8. Test & Operationstest case แบบ Given/When/Then, log, metric, alert, deployment, rollback และผู้อนุมัติ

ตัวอย่างตาราง Decision Rule

ตารางกฎทำให้ผู้พัฒนาเขียน test ได้ทันทีโดยไม่ต้องเดาเจตนา และทำให้เจ้าของกลยุทธ์เห็นช่องว่างของตัวเองก่อนเสียเวลาโค้ด

ตัวอย่าง · Decision Rule ของระบบ Long-only บน H1

กฎเงื่อนไขการกระทำPriority
R0 Haltขาดทุนวันนี้ ≥ 3% หรือ error ต่อเนื่อง 5 ครั้งเข้าสถานะ halted จนกว่าจะอนุมัติด้วยมือ0 (ตรวจก่อน)
R1 Invalidationอยู่ในช่วง 30 นาทีก่อน-หลังข่าวแรงสูงตามปฏิทินที่กำหนดไม่เปิดคำสั่งใหม่ สถานะเดิมคงไว้1
R2 Exit Longราคาแตะ SL หรือ TP · หรือ RSI(14) > 70 เมื่อแท่งปิดปิดสถานะทั้งหมด2
R3 Entry Longแท่ง H1 ปิด · Close > SMA(50) · RSI(14) ตัดขึ้น 30 · ไม่มีสถานะเปิดส่ง market buy ตาม position sizing3

Priority ตัวเลขน้อยแปลว่าตรวจก่อน เมื่อ R0 เป็นจริงกฎอื่นจะไม่ถูกประเมิน ตัวเลขทั้งหมดเป็นเพียงตัวอย่างประกอบ ไม่ใช่คำแนะนำการตั้งค่า

ตัวอย่าง Pseudo-rules จากตารางเดียวกัน

เมื่อตารางชัด pseudo-code จะเขียนตามได้เกือบบรรทัดต่อบรรทัด และผู้พัฒนาสามารถแปลงเป็น MQL4, MQL5 หรือ Python ได้โดยไม่ต้องถามกลับ

ON bar_close(H1):
  IF state == HALTED: RETURN
  IF daily_loss >= 3% OR consecutive_errors >= 5:      # R0
      state = HALTED; alert("halted"); RETURN
  IF news_window_active(): RETURN                      # R1
  IF position == LONG AND (hit_sl_tp() OR rsi(14) > 70):
      close_all()                                      # R2
  ELSE IF position == NONE AND close > sma(50) AND rsi_cross_up(30):
      size = risk_size(balance * 1%, sl_distance)
      IF size < min_lot: log("skipped: size"); RETURN
      send_market_buy(size, sl, tp)                    # R3

โค้ดจริงต้องเพิ่มการจัดการ error, retry, partial fill และ reconciliation ตามส่วน Orders & Execution และ State Machine ของเอกสาร การส่งมอบยืนยันว่าโค้ดตรงกับกฎเหล่านี้ ไม่ใช่ยืนยันว่ากฎจะทำกำไร