บทเรียน: ฟังก์ชันที่ใช้บ่อยในการเขียน EA

บทเรียน: ฟังก์ชันที่ใช้บ่อยในการเขียน EA แบ่งตามหมวดหมู่

  คลิ๊กเพื่อดูคลิปวีดีโอที่มีรายละเอียดมากกว่าบทความนี้ (ลิ้งค์นี้จะดูได้เฉพาะสมาชิกเท่านั้น)

 

ในการเขียนภาษา MQL4 จะมีฟังก์ชันสำเร็จรูปที่ MQL4 ให้มาสามารถเรียกใช้งานได้ทันทีโดยที่ไม่ต้องสร้างขึ้นมาเอง ทำให้เกิดความสะดวกและรวดเร็วในการเขียนโปรแกรมด้วยภาษา MQL4


หมวดที่ 1: ฟังก์ชันที่เกี่ยวข้องกับตัวเลข (Numeric Functions)

1. NormalizeDouble()

วัตถุประสงค์: ปรับค่าตัวเลขทศนิยมให้ตรงกับจำนวนจุดทศนิยมที่ต้องการ

การใช้งาน:

double value = 1.23456789;
double normalizedValue = NormalizeDouble(value, 4); // ปรับค่าให้เหลือ 4 ตำแหน่งทศนิยม
Print("Normalized Value: ", normalizedValue); // ผลลัพธ์คือ 1.2346

การใช้งานทั่วไป: ใช้ในการปรับขนาด Lot หรือราคาที่มีทศนิยมให้ตรงกับความต้องการก่อนทำการส่งคำสั่งเทรด

2. MathAbs()

วัตถุประสงค์: หาค่าสัมบูรณ์ของตัวเลข

การใช้งาน:

double value = -10.5;
double absoluteValue = MathAbs(value); // หาค่าสัมบูรณ์ของตัวเลข
Print("Absolute Value: ", absoluteValue); // ผลลัพธ์คือ 10.5

การใช้งานทั่วไป: ใช้ในการคำนวณค่าที่ต้องเป็นบวกเสมอ เช่น การคำนวณความแตกต่างของราคา

3. MathRound(), MathFloor(), MathCeil()

วัตถุประสงค์: ฟังก์ชันเหล่านี้ใช้ในการปัดเศษตัวเลข

  • MathRound(): ปัดเศษตัวเลขไปยังค่าที่ใกล้เคียงที่สุด
  • MathFloor(): ปัดเศษตัวเลขลงไปยังค่าต่ำสุดที่ใกล้เคียงที่สุด
  • MathCeil(): ปัดเศษตัวเลขขึ้นไปยังค่าสูงสุดที่ใกล้เคียงที่สุด

การใช้งาน:

double value = 1.75;

double roundedValue = MathRound(value); // ผลลัพธ์คือ 2
double flooredValue = MathFloor(value); // ผลลัพธ์คือ 1
double ceiledValue = MathCeil(value);   // ผลลัพธ์คือ 2

Print("Rounded: ", roundedValue);
Print("Floored: ", flooredValue);
Print("Ceiled: ", ceiledValue);

การใช้งานทั่วไป: ใช้ในการปัดเศษจำนวน Lot หรือการปัดเศษค่าเพื่อใช้ในการคำนวณ

4. MarketInfo()

วัตถุประสงค์: ดึงข้อมูลตลาดที่สำคัญ เช่น ค่า tick, ขนาด Lot ขั้นต่ำ, ค่า spread, ราคา bid/ask, swap, ฯลฯ

ตัวอย่างการใช้งานดึงค่าสเปรด:

double spread = MarketInfo(Symbol(), MODE_SPREAD); // ดึงข้อมูลค่า spread ของคู่เงินปัจจุบัน
Print("Current Spread: ", spread);

รายละเอียดของพารามิเตอร์ที่ใช้บ่อย:
หากต้องการดึงค่าใดๆก็กำหนดค่า Mode ให้ตรงกับความต้องการเท่านั้นก็จะได้ผลลัพธ์ตามต้องการ

  • MODE_SPREAD: คำนวณค่า Spread (หน่วยเป็น point) ของคู่เงินปัจจุบัน
  • MODE_POINT: ดึงค่าของ point ซึ่งเป็นทศนิยมที่เล็กที่สุดของราคาคู่เงินปัจจุบัน
  • MODE_LOTSIZE: ขนาด Lot ของคู่เงินปัจจุบัน
  • MODE_MINLOT: ขนาด Lot ขั้นต่ำที่สามารถเปิดได้
  • MODE_MAXLOT: ขนาด Lot สูงสุดที่สามารถเปิดได้
  • MODE_TICKVALUE: ค่าเงินของ 1 tick สำหรับคู่เงินปัจจุบัน
  • MODE_TICKSIZE: ขนาดของ 1 tick ของคู่เงินปัจจุบัน
  • MODE_SWAPLONG: ค่า Swap สำหรับตำแหน่ง Long (ซื้อ)
  • MODE_SWAPSHORT: ค่า Swap สำหรับตำแหน่ง Short (ขาย)
  • MODE_STOPLEVEL: ระดับ Stop Level ขั้นต่ำ (หน่วยเป็น point) ที่สามารถตั้ง Stop Loss หรือ Take Profit ได้
  • MODE_DIGITS: จำนวนตำแหน่งทศนิยมที่ใช้กับราคาของคู่เงิน
  • MODE_BID: ราคาซื้อ (Bid) ปัจจุบัน
  • MODE_ASK: ราคาขาย (Ask) ปัจจุบัน

การใช้งานทั่วไป: ใช้ในการดึงข้อมูลตลาดเพื่อนำไปใช้ในกลยุทธ์การเทรดหรือการคำนวณต่างๆ


หมวดที่ 2: ฟังก์ชันที่เกี่ยวข้องกับตัวอักษร (String Functions)

1. DoubleToString()

วัตถุประสงค์: แปลงค่าตัวเลขแบบทศนิยม (double) ให้เป็นข้อความ (string) โดยสามารถกำหนดจำนวนจุดทศนิยมที่ต้องการได้

การใช้งาน:

double value = 1.23456789;
string strValue = DoubleToString(value, 4); // แปลงค่าเป็นข้อความและกำหนดให้มี 4 ตำแหน่งทศนิยม
Print("String Value: ", strValue); // ผลลัพธ์คือ "1.2346"

การใช้งานทั่วไป: ใช้ในการแสดงตัวเลขในรูปแบบข้อความ โดยเฉพาะเมื่อแสดงผลในหน้าต่าง Terminal หรือในการบันทึกข้อมูลลงไฟล์

2. StringFormat()

วัตถุประสงค์: สร้างข้อความที่มีรูปแบบตามที่ต้องการ โดยสามารถแทรกค่าตัวเลขหรือตัวแปรต่างๆ ลงไปในข้อความได้

การใช้งาน:

double price = 1.2345;
string symbol = "EURUSD";
string message = StringFormat("Symbol: %s, Price: %.4f", symbol, price);
Print(message); // ผลลัพธ์คือ "Symbol: EURUSD, Price: 1.2345"

การใช้งานทั่วไป: ใช้ในการจัดรูปแบบข้อความเพื่อแสดงผลใน Terminal หรือบันทึกลงไฟล์

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

ฟังก์ชันที่ดึงค่า Surfix โดยทั่วๆไปที่เห็นส่วนใหญ่ก็จะใช้วิธีนับตัวอักษรของคู่เงิน แล้วก็จะดึงค่าตัวอักษรที่ 7 ขึ้นไปแสดงออกมาเป็น Surfix เช่น EURUSDmicro ผลลัพธ์ก็จะได้ micro ออกมา แต่หากตำนวนตัวอักษรหลักของชื่อสินค้ามีมากกว่า หรือ น้อยกว่า 6 ตัวอักษร เช่น USOILmicro ผลลัพธ์ก็จะได้ icro ออกมา ซึ่งไม่ถูกต้อง

ตัวอย่างโค้ดแบบง่ายๆ ที่ใช้วิธีนับจำนวนตัวอักษรก็จะเป็นแบบนี้

ตัวอย่างการเรียกใช้งาน
 string sf=get_symbol_suffix();
 Print(sx); // ก็จะแสดงชื่อ Surfix ของคู่เงินนั้นๆออกมาให้โดยอัตโนมัติ

//--- ส่วนของฟังก์ชัน ------------------------------------
string get_symbol_suffix(){
string ret="";
for(int i=0;i<SymbolsTotal(true);i++){
   if(StringLen(SymbolName(i,true)) > 6){
     ret=StringSubstr(SymbolName(i,true),6,10);
     break;
   }
}
return(ret);
}

คราวนี้เรามาดูโค้ดแบบใหม่ที่แก้ปัญหาเรื่องของจำนวนตัวอักษรว่ามีวิธีการอย่างไรในการแก้ไขปัญหาจากตัวอย่างโค้ดแรกที่ผ่านมา มาดูกันเลย

เนื้อหาของบทความนี้ทั้งหมด จะดูได้เฉพาะสมาชิกที่สมัครเรียนเท่านั้น
หากต้องการสมัครเข้าเรียนสามารถติดต่อได้ที่ช่องทางติดต่อสอบถามได้ที่ด้านล่างของเว็บนี้

Existing Users Log In
   
↑ กลับไปด้านบน