Indicator ที่มีประโยชน์ต้องแปลงแนวคิดเป็นข้อมูลที่สม่ำเสมอ อ่านง่าย และตรวจสอบย้อนหลังได้ เป้าหมายไม่ใช่ทำให้กราฟเต็มไปด้วยสัญญาณ แต่คือช่วยให้ผู้ใช้เห็นเงื่อนไขเดิมในรูปแบบเดียวกันทุกครั้ง
เริ่มจากวัตถุประสงค์เดียว
กำหนดว่าอินดิเคเตอร์ใช้บอกแนวโน้ม โมเมนตัม ความผันผวน หรือแจ้งเหตุการณ์อะไร หลีกเลี่ยงการรวมหลายหน้าที่จนไม่รู้ว่าสัญญาณเกิดจากเงื่อนไขใด จากนั้นระบุ input, timeframe และข้อมูลราคาที่ใช้
แยก visual output เช่น เส้น สี ลูกศร ออกจาก logic หลัก ทำให้เปลี่ยนหน้าตาได้โดยไม่เปลี่ยนความหมายของสัญญาณ
Repaint และข้อมูลอนาคต
สัญญาณบนแท่งที่ยังไม่ปิดอาจเปลี่ยนตามราคาใหม่ ซึ่งไม่จำเป็นต้องเป็น bug แต่ต้องสื่อสารให้ชัด ส่วนการอ้างอิงข้อมูลอนาคตในการคำนวณย้อนหลังจะทำให้ผลดูดีกว่าที่ใช้งานจริง
ทดสอบด้วยการบันทึกสัญญาณ ณ เวลาจริงและเปรียบเทียบหลังแท่งปิด ระบุ buffer และค่าที่ EA สามารถอ่านได้อย่างคงที่หากต้องต่อยอดอัตโนมัติ
Alert ที่ไม่รบกวนผู้ใช้
กำหนดการแจ้งเตือนต่อแท่ง ต่อเหตุการณ์ หรือเมื่อสถานะเปลี่ยน พร้อมตัวเลือกเสียง push หรือข้อความ ป้องกัน alert ซ้ำทุก tick และแสดงชื่อสินทรัพย์ timeframe และเหตุผลในข้อความ
อินดิเคเตอร์เป็นเครื่องมือแสดงข้อมูล ไม่ใช่คำแนะนำลงทุน สัญญาณอาจผิดพลาดและควรประเมินร่วมกับแผนความเสี่ยงของผู้ใช้
เช็กลิสต์ออกแบบ Indicator 8 ข้อ
ก่อนเขียนโค้ด ควรตอบรายการต่อไปนี้ให้ครบ เพื่อให้ Indicator ที่ได้ทดสอบซ้ำได้และต่อยอดเป็น EA ได้โดยไม่ต้องเขียนใหม่
- วัตถุประสงค์เดียวใช้บอกแนวโน้ม โมเมนตัม ความผันผวน หรือเหตุการณ์ใดเหตุการณ์หนึ่ง ไม่รวมหลายหน้าที่ในตัวเดียว
- ข้อมูลนำเข้าราคาแบบใด (close, typical, HL2), timeframe และจำนวนแท่งย้อนหลังขั้นต่ำที่ต้องมีก่อนคำนวณ
- สูตรและพารามิเตอร์เขียนเป็นสมการหรือ pseudo-code พร้อม input ค่าเริ่มต้น และช่วงค่าที่อนุญาต
- พฤติกรรมบนแท่งที่ยังไม่ปิดค่าบนแท่งปัจจุบันเปลี่ยนได้หรือไม่ และจะสื่อสารกับผู้ใช้อย่างไร
- Buffer สำหรับ EAระบุ index ของ buffer และความหมายของค่า (1, -1, 0, EMPTY_VALUE) เพื่อให้ EA อ่านได้คงที่
- การแสดงผลเส้น สี ลูกศร หรือ histogram แยกจาก logic เพื่อเปลี่ยนหน้าตาได้โดยไม่กระทบสัญญาณ
- Alertเงื่อนไขแจ้งเตือน ความถี่ (ต่อแท่งหรือต่อเหตุการณ์) และข้อความที่มี symbol, timeframe และเหตุผล
- วิธีตรวจสอบบันทึกสัญญาณ ณ เวลาจริงแล้วเทียบกับการคำนวณย้อนหลัง พร้อมเกณฑ์ที่ถือว่าผ่าน
ตัวอย่าง: Indicator จุดตัด EMA พร้อมตัวกรองความผันผวน
ตัวอย่างนี้แสดงว่าตาราง input และ pseudo-rules เพียงหน้าเดียวก็เพียงพอให้ผู้พัฒนาเริ่มงานได้โดยไม่ต้องตีความ
ตัวอย่าง · ตาราง Input
| Input | ค่าเริ่มต้น | ความหมาย |
|---|---|---|
| FastPeriod | 20 | EMA เร็ว คำนวณจากราคาปิด |
| SlowPeriod | 50 | EMA ช้า คำนวณจากราคาปิด |
| AtrPeriod | 14 | ช่วง ATR สำหรับตัวกรองความผันผวน |
| MinAtrPips | 5 | ไม่แสดงสัญญาณเมื่อ ATR ต่ำกว่าค่านี้ |
| SignalOnClose | true | คำนวณสัญญาณเมื่อแท่งปิดเท่านั้น (ไม่ repaint) |
| AlertMode | once 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 ใด ๆ ยังผิดพลาดได้ในทุกสภาวะตลาด



