ฉบับย่อ
- Custom functions คือ ฟังก์ชันที่ผู้เขียนกำหนดเพื่อที่จะแยก Logic ที่ซับซ้อน หรือ ที่มีการใช้งานซ้ำๆ ออกจาก code หลักเพื่อทำให้มันง่ายขึ้น
- เราได้อธิบายการจัดรูปแบบ Custom functions พอสังเขปเอาไว้ให้ดูด้านล่างพร้อมผลการ backtest
Custom functions คือ ฟังก์ชันที่ผู้เขียนกำหนดเอง เพื่อที่จะแยก Logic ที่ซับซ้อน หรือ มีการใช้งานซ้ำๆ ออกจากส่วนหลักของ code ซึ่งทำให้ code สะอาด และง่ายต่อการอ่าน และเช็คข้อผิดพลาดมากขึ้น
การสร้าง custom function ใน MQL สามารถทำได้โดยการใช้คำสั่ง “void” หรือ “double”, “int”, “string” ขึ้นอยู่กับประเภทของข้อมูลที่คุณต้องการให้ฟังก์ชันคืนค่า ในบทนี้ผมจะแบ่งหัวข้อในการอธิบายออกเป็นสองข้อ
- หัวข้อที่ 1 คือ การจัดการแบ่ง Source Code เก่าให้อยู่ในรูป Custom Functions โดยที่ Custom Function คือ การเขียนโปรแกรมฟังก์ชั่นตามต้องการของผู้ใช้งานเอง ฟังก์ชั่นเหล่านี้สามารถถูกเรียกใช้ในโปรแกรม MQL4 โดยอ้างอิงชื่อของฟังก์ชั่นและส่งค่าพารามิเตอร์เข้าไปในฟังก์ชั่น
- ข้อดี คือ ทำให้ง่ายง่ายต่อการเรียกใช้งานและปรับปรุง Source Code และหลังจากนั้นจะดำเนินการเพิ่ม Stop loss ให้กับ EA Forex ซึ่งจากประสบการณ์ของผู้เขียนพบว่า “การเพิ่ม Stoploss ให้กับ EA ระบบ Grid Martingale นั้นจะช่วยให้ Drawndown ของระบบลดลง”
- หัวข้อที่สอง ผมจะแสดงผลการ Backtest ของ EA ก่อนและหลังปรับปรุง Source Code
“การใช้งานฟังก์ชันสำเร็จรูปเป็นวิธีที่ดีในการลดการเขียนโค้ดที่ซ้ำซ้อน”
ส่วนที่ 1 การจัดรูปแบบ Custom Functions
วิธีหนึ่งที่ช่วยให้การจัดการ code เก่าให้มีประสิทธิภาพและสามารถบำรุงรักษาได้ง่ายขึ้นโดยเน้นการแบ่ง code ออกเป็นฟังก์ชันเล็ก ๆ ที่มีหน้าที่เฉพาะหน้าและมีความสัมพันธ์กันอย่างชัดเจน ทำให้ง่ายต่อการอ่านและแก้ไข code ในอนาคตและช่วยลดความซับซ้อนของ code ลงด้วย ซึ่งวิธีการมีดังนี้ครับ
1. เปิด Source Code VR Smart Grid Lite
2. Save As ไฟล์ Source Code เป็นชื่ออื่น
3. เริ่มต้น Modified EA Forex
3.1. สร้าง Custom Functions ชื่อ CountOreder() พิมพ์โค้ดตาม
3.2. Copy Source Code บรรทัดที่ 52-63, บรรทัดที่ 108,130 มาวางที่ส่วนประกาศตัวแปรเพื่อปรับคุณสมบัติของตัวแปรให้เป็นแบบ Global Variable
3.3. Cut Source Code บรรทัดที่ 52-106 มาวางภายใน Functions CountOrder และ ลองกดปุ่ม Compile เพื่อตรวจสอบ Errors
3.4. สร้าง Custom Functions ชื่อ LotsCalculation() พิมพ์โค้ดตามรูป 6 ที่ด้านล่างสุดของ Code
3.5. Cut Source Code บรรทัดที่108-148 มาวางภายใน Functions LotsCalculation และ ลองกดปุ่ม Compile เพื่อตรวจสอบ Errors
3.6. สร้าง Custom Functions ชื่อ EntryOrder() พิมพ์โค้ดตามรูป 9 ที่ด้านล่างสุดของ Code
3.7. Cut Source Code บรรทัดที่ 150-160 มาวางภายในFunctions EntryOrder และ ลองกดปุ่ม Compile เพื่อตรวจสอบ Errors
3.8. สร้าง Custom Functions ชื่อ ExitOrder() พิมพ์โค้ดตามรูป 11 ที่ด้านล่างสุดของ Code
3.9. Cut Source Code บรรทัดที่ 162-231 มาวางภายใน Functions ExitOrder และ ลองกดปุ่ม Compile เพื่อตรวจสอบErrors
3.10. แก้ไข Functions ชื่อ OnTick() พิมพ์โค้ดตามรูป 15 ที่ด้านล่างสุดของ Code
ส่วนที่ 2 การเปรียบเทียบผลการ Backtest
คำเตือน
จากผลของการ Backtest ที่ผมนำเสนอเป็นเพียงการ Backtest ที่ Model Quality 88.47% เท่านั้นก่อนนำไปใช้งานจริงผู้ใช้ควรทดสอบด้วยตนเองหลาย ๆ รอบทั้ง Forward Test และ Backtest
ทีมงาน eaforexcenter.com
"เริ่มต้นอย่างช้าๆ แต่ชัดเจน"
ให้เราได้ดูแลคุณ...
eaforexcenter.com