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

เริ่มจากวัตถุประสงค์เดียว

กำหนดว่าอินดิเคเตอร์ใช้บอกแนวโน้ม โมเมนตัม ความผันผวน หรือแจ้งเหตุการณ์อะไร หลีกเลี่ยงการรวมหลายหน้าที่จนไม่รู้ว่าสัญญาณเกิดจากเงื่อนไขใด จากนั้นระบุ input, timeframe และข้อมูลราคาที่ใช้

แยก visual output เช่น เส้น สี ลูกศร ออกจาก logic หลัก ทำให้เปลี่ยนหน้าตาได้โดยไม่เปลี่ยนความหมายของสัญญาณ

Repaint และข้อมูลอนาคต

สัญญาณบนแท่งที่ยังไม่ปิดอาจเปลี่ยนตามราคาใหม่ ซึ่งไม่จำเป็นต้องเป็น bug แต่ต้องสื่อสารให้ชัด ส่วนการอ้างอิงข้อมูลอนาคตในการคำนวณย้อนหลังจะทำให้ผลดูดีกว่าที่ใช้งานจริง

ทดสอบด้วยการบันทึกสัญญาณ ณ เวลาจริงและเปรียบเทียบหลังแท่งปิด ระบุ buffer และค่าที่ EA สามารถอ่านได้อย่างคงที่หากต้องต่อยอดอัตโนมัติ

Alert ที่ไม่รบกวนผู้ใช้

กำหนดการแจ้งเตือนต่อแท่ง ต่อเหตุการณ์ หรือเมื่อสถานะเปลี่ยน พร้อมตัวเลือกเสียง push หรือข้อความ ป้องกัน alert ซ้ำทุก tick และแสดงชื่อสินทรัพย์ timeframe และเหตุผลในข้อความ

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

เช็กลิสต์ออกแบบ Indicator 8 ข้อ

ก่อนเขียนโค้ด ควรตอบรายการต่อไปนี้ให้ครบ เพื่อให้ Indicator ที่ได้ทดสอบซ้ำได้และต่อยอดเป็น EA ได้โดยไม่ต้องเขียนใหม่

  1. วัตถุประสงค์เดียวใช้บอกแนวโน้ม โมเมนตัม ความผันผวน หรือเหตุการณ์ใดเหตุการณ์หนึ่ง ไม่รวมหลายหน้าที่ในตัวเดียว
  2. ข้อมูลนำเข้าราคาแบบใด (close, typical, HL2), timeframe และจำนวนแท่งย้อนหลังขั้นต่ำที่ต้องมีก่อนคำนวณ
  3. สูตรและพารามิเตอร์เขียนเป็นสมการหรือ pseudo-code พร้อม input ค่าเริ่มต้น และช่วงค่าที่อนุญาต
  4. พฤติกรรมบนแท่งที่ยังไม่ปิดค่าบนแท่งปัจจุบันเปลี่ยนได้หรือไม่ และจะสื่อสารกับผู้ใช้อย่างไร
  5. Buffer สำหรับ EAระบุ index ของ buffer และความหมายของค่า (1, -1, 0, EMPTY_VALUE) เพื่อให้ EA อ่านได้คงที่
  6. การแสดงผลเส้น สี ลูกศร หรือ histogram แยกจาก logic เพื่อเปลี่ยนหน้าตาได้โดยไม่กระทบสัญญาณ
  7. Alertเงื่อนไขแจ้งเตือน ความถี่ (ต่อแท่งหรือต่อเหตุการณ์) และข้อความที่มี symbol, timeframe และเหตุผล
  8. วิธีตรวจสอบบันทึกสัญญาณ ณ เวลาจริงแล้วเทียบกับการคำนวณย้อนหลัง พร้อมเกณฑ์ที่ถือว่าผ่าน

ตัวอย่าง: Indicator จุดตัด EMA พร้อมตัวกรองความผันผวน

ตัวอย่างนี้แสดงว่าตาราง input และ pseudo-rules เพียงหน้าเดียวก็เพียงพอให้ผู้พัฒนาเริ่มงานได้โดยไม่ต้องตีความ

ตัวอย่าง · ตาราง Input

Inputค่าเริ่มต้นความหมาย
FastPeriod20EMA เร็ว คำนวณจากราคาปิด
SlowPeriod50EMA ช้า คำนวณจากราคาปิด
AtrPeriod14ช่วง ATR สำหรับตัวกรองความผันผวน
MinAtrPips5ไม่แสดงสัญญาณเมื่อ ATR ต่ำกว่าค่านี้
SignalOnClosetrueคำนวณสัญญาณเมื่อแท่งปิดเท่านั้น (ไม่ repaint)
AlertModeonce per barแจ้งเตือนสูงสุดหนึ่งครั้งต่อแท่ง

ตัวอย่าง · Pseudo-rules

ON bar_close:
  fast = EMA(close, FastPeriod)
  slow = EMA(close, SlowPeriod)
  atr  = ATR(AtrPeriod)
  IF atr < MinAtrPips:
      signal[bar] = EMPTY_VALUE          # ตลาดนิ่ง ไม่แสดงสัญญาณ
  ELSE IF fast[1] <= slow[1] AND fast > slow:
      signal[bar] = 1                    # cross up
  ELSE IF fast[1] >= slow[1] AND fast < slow:
      signal[bar] = -1                   # cross down
  ELSE:
      signal[bar] = 0
  IF signal[bar] != 0 AND NOT alerted_on(bar):
      alert(symbol, timeframe, "EMA cross", signal[bar])

ค่าใน buffer signal คือสิ่งที่ EA อ่านได้โดยไม่ต้องตีความสี ส่วนลูกศรบนกราฟเป็นเพียงการแสดงผลของค่าเดียวกัน ตัวเลขทั้งหมดเป็นตัวอย่างเพื่ออธิบายโครงสร้าง ไม่ใช่การตั้งค่าที่แนะนำ และสัญญาณจาก Indicator ใด ๆ ยังผิดพลาดได้ในทุกสภาวะตลาด