บทเรียน: ฟังก์ชันที่ใช้บ่อยในการเขียน 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);
}
คราวนี้เรามาดูโค้ดแบบใหม่ที่แก้ปัญหาเรื่องของจำนวนตัวอักษรว่ามีวิธีการอย่างไรในการแก้ไขปัญหาจากตัวอย่างโค้ดแรกที่ผ่านมา มาดูกันเลย
เนื้อหาของบทความนี้ทั้งหมด จะดูได้เฉพาะสมาชิกที่สมัครเรียนเท่านั้น
หากต้องการสมัครเข้าเรียนสามารถติดต่อได้ที่ช่องทางติดต่อสอบถามได้ที่ด้านล่างของเว็บนี้