fxDreema ใช้ Indicator ได้ไหม?

อ้างอิง https://fxdreema.com/documentation/builder/indicators

บทแปลนี้เผยแพร่ในกลุ่ม fxDreema Discovery

Indicator ขอเรียกว่า อินดี้

จุดประสงค์ของอินดี้คือ ช่วยให้ข้อมูลกับเทรดเดอร์ในรูปแบบของ “วัตถุ” (object) ที่มองเห็นได้ชัดเจน เช่น สัญลักษณ์ลูกศร เส้นค่าเฉลี่ย หรือ Histogram แบบต่างๆ เพื่อช่วยให้ข้อมูลในการเทรด

fxDreema ไม่สามารถทำความเข้าใจ “วัตถุ” ที่อินดี้สร้างขึ้นได้โดยตรง

เนื่องจากการทำงานของ MT4/5 ต้องอ่านข้อมูล array ที่เรียกว่า “output buffers” หรือเรียกย่อๆ ว่า “buffer”เพื่อนำไปวาดสัญลักษณ์ให้อินดี้

fxDreema จึงใช้วิธีอ่านตัวแปร array “buffers” แทน ทำให้ fxDreema อ่านค่าอินดี้ออกมาเป็นตัวเลขเพื่อนำไปใช้ใน fxDreema ได้นั่นเอง


#folder ที่เก็บไฟล์อินดี้ ใน MT4/5 ใช้เมนู Files > Open Data Folder เพื่อเปิด folder เก็บข้อมูลหลักขึ้นมา แล้วไฟล์อินดี้จะอยู่ใน folder

  • MT4: %Data Folder% \MQL4\Indicators\
  • MT5: %Data Folder% \MQL5\Indicators\

#การใช้งานอินดี้ใน fxDreema

ยกตัวอย่างเช่น อินดี้ เส้น MA ตัวแปร buffer จะเก็บค่าตามตำแหน่งของแท่งเทียน

1 แท่งเทียน จึงมี 1 ค่า MA(Moving Average)

และโปรแกรม fxDreema จะเรียกแท่งเทียนใหม่ที่สุดที่ยังไม่จบแท่ง คือ “แท่ง 0” ส่วน แท่งที่เก่ากว่าเป็นแท่ง 1,2,3…N ไล่ย้อนกลับไปตามลำดับ

  • ค่า MA ของแท่ง 0 คือ 1.3667
  • ค่า MA ของแท่ง 1 คือ 1.3658
  • ค่า MA ของแท่ง 2 คือ 1.3641

#ตัวอย่าง กรณีที่มีเส้น MA และ BB การอ่านค่าอินดี้ อินดี้ 1 เส้น จะมี buffer 1 ตัว ต่อ 1 แท่งเทียน


#วิธีสังเกตอินดี้แต่ละตัวมี buffer อะไรบ้าง

buffer มักจะมีจำนวนตรงกับเส้นหรือวัตถุ(object) ที่ปรากฏบนหน้าจอ ดังนั้นเข้าไปดูในส่วนของการกำหนดสีก็จะพบ buffer ที่เราสนใจ

ตัวอย่างในภาพ มี 3 buffer ลำดับ buffer จะเริ่มที่ 0,1,2 ตามลำดับ

  • buffer 0 ใช้สำหรับ เส้นกึ่งกลาง
  • buffer 1 ใช้สำหรับ บรรทัดบน
  • buffer 2 ใช้สำหรับ บรรทัดล่าง

#ลูกศรในอินดี้ (ปรากฎตามสัญญาณของโปรแกรมเท่านั้น ไม่ได้แสดงผลต่อเนื่องทุกแท่งเทียนเหมือนเส้น MA)

อินดี้ที่แสดงผลออกมาเป็นลูกศร มักจะปรากฎตามสัญญาณบางแท่งเทียนเท่านั้น ลูกศรพวกนี้ทำงานยังไง?

MT4/5 วาดรูปจากข้อมูลใน buffer ภาพด้านล่างเป็นตัวอย่างของ MT4 ที่ดึงข้อมูลจาก buffer บนชาร์ตราคาได้อย่างไร ต้องกำหนดตัวแปร ENUM อย่างไร เพื่อให้ออกมาเป็น “วัตถุ” รูปแบบต่างๆ เช่น จุด เส้น ลูกศร Histogram

รายละเอียดเพิ่มเติม

ดังนั้นเราจะเห็นว่า MT4 ดึงข้อมูลจาก buffer มาแสดงผลเป็นวัตถุแท่งต่อแท่ง ส่วนที่ไม่ได้แสดงผล จึงเป็นการใส่ ค่าว่าง “EMPTY_VALUE” ลงใน buffer นั่นเอง เมื่อ MT4 เห็น “ค่าว่าง” ก็จะไม่แสดงผลออกมาในชาร์ตราคา

  • 32 บิต (MetaTrader 4): EMPTY_VALUE เท่ากับ 2,147,483,647
  • 64 บิต (MetaTrader 5): EMPTY_VALUE เท่ากับ 9,223,372,036,854,775,807

คำแนะนำ #1 กล่อง Condition ใน fxDreema หากเอามาเปรียบเทียบ ค่าใดๆ กับ EMPTY_VALUE ว่าเป็น “ว่างเปล่า” EMPTY หรือไม่ ผลลัพธ์คือ “ไม่ถูกต้อง” เพราะ EMPTY_VALUE ถือเป็นค่าๆ หนึ่ง การเปรียบเทียบ “ว่างเปล่า” จึง ไม่ถูกต้องนั่นเอง

คำแนะนำ #2 หากคาดหวังสัญญาณจากอินดี้ที่วาดลูกศรให้คุณ แต่คุณไม่พบ buffer นั้น เพราะการวาดลูกศร อาจเกิดหลังจากที่แท่งเทียนจบลง แท่ง 0 จึงไม่มีข้อมูลใน buffer ให้ลองเปลี่ยนมาใช้แท่ง 1 แทน


#เส้นและลูกศร แสดงบนชาร์ตราคา แต่ไม่มีข้อมูลใน buffer?

ใช่ มันเป็นไปได้ อินดิเคเตอร์บางตัววาด “วัตถุ” ลงบนชาร์ตราคาโดยตรง ส่วนใหญ่จะเป็นอินดี้ที่วาดเส้นเทรนไลน์ หรือลูกศร ตามสัญญาณอินดี้

ในกรณีนี้ไม่สามารถใช้ “buffer” เพื่อดึงค่าออกมาใช้งานได้

แต่สามารถดึงข้อมูลจาก “วัตถุ” ที่วาดไปแล้วได้ แม้ว่านี่จะไม่ใช่เรื่องง่ายก็ตาม

ในกรณีที่อินดี้วาด “วัตถุ” ลงไปโดยตรง และคุณเขียน EA มาเพื่ออ่าน “วัตถุ” จากอินดี้ประเภทนี้จะมีผลอาจไม่สามารถ Optimization ได้เนื่องจากข้อจำกัดบางประการของ MT4/5

รายละเอียด วัตถุบนชาร์ตราคา > https://fxdreema.com/documentation/builder/chart-objects


#ตรวจสอบข้อมูลใน buffer

Custom Indicators คือ อินดี้ที่หามาเอง ไม่ใช่อินดี้มาตรฐาน การใช้งานครั้งแรก คุณอาจไม่รู้ว่า buffer มีค่าอะไรบ้าง และจะใช้อินดี้สร้างกลยุทธ์ได้อย่างไร สามารถตรวจสอบได้อย่างง่ายดายด้วยกล่อง “Trace”  (ติดตาม) https://fxdreema.com/demo/mt4-trace-multiple

กล่อง “Trace”  ใช้กับตัวแปร หรือ buffer หลายค่าพร้อมกันได้ นอกจากนี้อินดี้อาจมีเส้นต่างๆ ที่ไม่แสดงผล แต่อย่างน้อยก็ดึงค่าออกมาแสดงผลเพื่อสังเกตได้

เมื่อ Backtest เราจะเห็นค่าต่างๆ แบบนี้


#เมื่อไหร่ที่อินดี้จะแสดงผลบนชาร์ตขึ้นมาเองอัตโนมัติ

เมื่อ backtest จบ

ไม่แปลกใจหรือ? ระหว่างที่ EA ทำการ Backtest ไม่มีอินดี้อะไรแสดงผลขึ้นมาบนชาร์ตราคาเลย แต่พอ bactest จบลงกลับมีอินดี้แสดงผลขึ้นมาเองอัตโนมัติ

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


#การนำอินดี้เข้ามาใช้งานใน fxDreema : Custom Indicators

ใน fxDreema คุณสามารถเพิ่มอินดี้เองลงในฐานข้อมูลของ fxDreema ก่อน เพื่อนำอินดี้ไปใช้ใน Project ได้อย่างง่ายดาย

ขั้นแรก ไปที่เมนูด้านบน “My Indicators” เพื่อเพิ่มอินดี้ใหม่ ต้องใช้ไฟล์ซอร์สโค้ด นามสกุล *.mq4 หรือ *.mq5 หากไม่มีซอร์สโค้ด ต้องกรอกข้อมูล buffer ที่จำเป็นทั้งหมดเอง

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

  • ชื่อ อินดี้- ต้องเหมือนกับชื่อไฟล์อินดี้ (ไม่มีนามสกุล) หากชื่อไฟล์คือ “Custom ATR.mq5” ให้เขียน “Custom ATR”
  • พารามิเตอร์อินพุต – การนับและลำดับจะต้องถูกต้อง ไม่เช่นนั้น Custom Indicators จะโหลดไม่สำเร็จ ชื่อก็ควรเหมือนกันแต่ไม่เหมือนก็ได้ ประเภทข้อมูลควรเหมือนหรือใกล้เคียง
  • บัฟเฟอร์เอาต์พุต – ตั้งตามชอบ ให้คุณเข้าใจละกัน

เมื่อเพิ่มอินดี้ใหม่เข้าไปสำเร็จ ก็จะสามารถใช้งานอินดี้ใหม่นั้นผ่านกล่อง “Condition”


#การเพิ่มอินดี้เอง Custom Indicator มี 2 วิธี คือ รับข้อมูลจากซอร์สโค้ด หรือจาก MT4/5

วิธีแรก รับข้อมูลจากซอร์สโค้ด

เปิดไฟล์ซอร์สโค้ดอินดี้ และหาตัวแปร โดยข้อมูลที่จำเป็นทั้งหมดจะอยู่ที่ด้านบนของซอร์สโค้ด เช่น

//+------------------------------------------------------------------+
//|                                                    Alligator.mq5 |
//|                   Copyright 2009-2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009-2017, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"

//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots   3
#property indicator_type1   DRAW_LINE
#property indicator_type2   DRAW_LINE
#property indicator_type3   DRAW_LINE
#property indicator_color1  Blue
#property indicator_color2  Red
#property indicator_color3  Lime
#property indicator_width1  1
#property indicator_width2  1
#property indicator_width3  1
#property indicator_label1  "Jaws"
#property indicator_label2  "Teeth"
#property indicator_label3  "Lips"
//---- input parameters
input int                InpJawsPeriod=13;               // Jaws period
input int                InpJawsShift=8;                 // Jaws shift
input int                InpTeethPeriod=8;               // Teeth period
input int                InpTeethShift=5;                // Teeth shift
input int                InpLipsPeriod=5;                // Lips period
input int                InpLipsShift=3;                 // Lips shift
input ENUM_MA_METHOD     InpMAMethod=MODE_SMMA;          // Moving average method
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_MEDIAN;   // Applied price
//---- indicator buffers
double ExtJaws[];
double ExtTeeth[];
double ExtLips[];
//---- handles for moving averages
int    ExtJawsHandle;
int    ExtTeethHandle;
int    ExtLipsHandle;
//--- bars minimum for calculation
int    ExtBarsMinimum;

มองหาตัวแปร input ที่จำเป็นต้องใช้งาน

input int                InpJawsPeriod=13;               // Jaws period
input int                InpJawsShift=8;                 // Jaws shift
input int                InpTeethPeriod=8;               // Teeth period
input int                InpTeethShift=5;                // Teeth shift
input int                InpLipsPeriod=5;                // Lips period
input int                InpLipsShift=3;                 // Lips shift
input ENUM_MA_METHOD     InpMAMethod=MODE_SMMA;          // Moving average method
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_MEDIAN;   // Applied price
  1. คอลัมน์แรกที่ มองหา input ส่วนใหญ่จะเป็น global variable
  2. คอลัมน์ที่สอง มองไปทางขวา บรรทัดเดียวกัน คือ data type เช่น int, ENUM_MA_METHOD, ENUM_APPLIED_PRICE
  3. คอลัมน์ที่สาม คือชื่อตัวแปร InpJawsPeriod, InpJawsShift…
  4. คอลัมน์สุดท้าย คือ ค่าของตัวแปรนั้นๆ
  5. คอลัมน์ ถัดไปอาจจะมีหรือไม่มี คือคอมเม้นท์อธิบายตัวแปรนั้นๆ

ซอร์สโค้ดระบุจำนวน buffer output = 3 ชัดเจน นั่นคือ output ที่ได้จากอินดี้ ดึงค่านี้ไปทำงานต่อใน fxDreema ได้

#property indicator_buffers 3
#property indicator_plots 3

วิธีที่สอง รับข้อมูลจาก MT4/5

เปิดพารามิเตอร์อินดี้ พารามิเตอร์อินพุต อยู่ที่แท็บ Input

บัฟเฟอร์เอาท์พุต อยู่ใต้ แท็บ Colors

ประเภทข้อมูลของพารามิเตอร์อินพุตแต่ละตัวจะแสดงเป็นไอคอน

ความหมายของไอคอน

  • int – ประเภทตัวเลข ตัวเลขจำนวนเต็ม เช่น 3
  • double – ประเภทตัวเลข ตัวเลขทศนิยม เช่น 3.654
  • bool – ประเภทบูลีน “จริง” True หรือ “เท็จ” False
  • string – ข้อความ เช่น “Hello, World”
  • datetime – ประเภทตัวเลข จริงๆ แล้วเป็นค่าจำนวนเต็ม แต่อนุญาตให้ใช้ประเภทข้อมูลนี้สำหรับพารามิเตอร์เวลา
  • สี – ประเภทตัวเลขซึ่งเป็นค่าจำนวนเต็มเช่นกัน แต่ออกแบบมาเพื่ออธิบายสี

ประเภทข้อมูล

แปลโดย #นักแปลระบบเทรด HonyakuTrader.com

Author: Course Admin
Honyaku Trader เป็นเพียงผู้ชื่นชอบการเสพความรู้ หลงไหล ชอบการแปลระบบเทรดฯ / ไม่ใช่นักเทรดมืออาชีพ / ไม่ได้เป็นอาจารย์ / ไม่รับงาน Broker / ไม่ทำ IB(Introduce Broker) หรืองานสปอนเซอร์ใดๆ / ไม่ชี้ชวน ไม่ชี้นำ ไม่แนะนำการลงทุนใดๆ ทุกประเภท