ข่าว:

Exness ลงทะเบียนระบบใหม่ ใส่รหัสพาร์ทเนอร์ 73208
https://www.exness.com/boarding/sign-up/a/73208?lng=th
1. เลือกประเทศ ไทย
2. อีเมล์จริงของคุณ
3. รหัสผ่าน
* รหัสผ่านต้องมีความยาว 8-15 ตัว
* ใช้ทั้งอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก
* ใช้ทั้งตัวเลขและตัวอักษรภาษาอังกฤษ
* ห้ามใช้อักขระพิเศษ (!@#$%^&*., และอื่นๆ)
4. ใส่รหัสพาร์ทเนอร์ 73208

Main Menu

MQL5 WIZARD: CREATING EXPERT ADVISORS WITHOUT PROGRAMMING

เริ่มโดย junjao, เมษายน 07, 2018, 03:20:18 PM

« หน้าที่แล้ว - ต่อไป »

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้


junjao

MQL5 WIZARD: CREATING EXPERT ADVISORS WITHOUT PROGRAMMING

ที่มา https://www.mql5.com/en/articles/171

ลงทะเบียน เปิดบัญชี mini ได้ที่ https://www.exness.com/a/73208

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

ใน MQL5 โดยใช้วิธีการเชิงวัตถุช่วยลดการเขียนและทดสอบระบบการซื้อขายอัตโนมัติได้อย่างมีนัยสำคัญ
MetaQuotes Software Corp.ได้พัฒนาชั้นเรียนเพื่อใช้กลยุทธ์การซื้อขาย ตอนนี้คุณสามารถสร้างรหัสที่ปรึกษาผู้เชี่ยวชาญโดยอัตโนมัติโดยตรงใน MetaEditor โดยเลือกที่ต้องการสัญญาณการค้า (ปัจจุบันมี 20 ของพวกเขา) ย้อนหลัง (4) และการบริหารจัดการการเงิน (5) โมดูล โดยการรวมโมดูลเหล่านี้คุณจะได้รับรูปแบบต่างๆของระบบการซื้อขายพร้อมใช้
นอกจากนี้คุณยังสามารถใช้ชั้นเรียนของคุณเองด้วยการใช้โมดูลเหล่านี้ได้ สร้างด้วยตนเองหรือสั่งซื้อผ่านบริการ งาน

ในบทความนี้เราจะพิจารณาการผลิตอัตโนมัติของรหัสที่มาปรึกษาผู้เชี่ยวชาญโดยใช้MQL5 Wizard และจะไม่มีอะไรให้โปรแกรม!

1. สร้างหุ่นยนต์เทรดดิ้งโดยใช้ MQL5 Wizard
รหัสที่มาของผู้เชี่ยวชาญที่ปรึกษาสร้างโดยใช้ตัวช่วยสร้าง MQL5ใน MetaEditor
ชั้นเรียนพื้นฐานของกลยุทธ์การซื้อขายจะอยู่ในโฟลเดอร์ '\ <client_terminal_directory> \ MQL5 \ Include \ Expert \' อัลกอริทึมที่พร้อมใช้งานของสัญญาณการค้าชั้นเรียนของตำแหน่งที่เปิดตามมาและชั้นเรียนของเงินและการจัดการความเสี่ยงจะอยู่ในโฟลเดอร์ย่อย Signal, Trailing และ Money MQL5 Wizard จะแยกวิเคราะห์แฟ้มในโฟลเดอร์เหล่านี้และใช้ในการสร้างรหัสของผู้เชี่ยวชาญที่ปรึกษา

ในการเปิดตัว MQL5 Wizard คุณต้องคลิกปุ่ม "ใหม่" บนแถบเครื่องมือหรือเลือก "ใหม่" จากเมนู "ไฟล์" (หรือเพียงกด Ctrl + N):

รูปที่ 1. เปิดตัว MQL5 Wizard
รูปที่ 1. เปิดตัว MQL5 Wizard
จากนั้นเลือกประเภทของโปรแกรมที่คุณต้องการสร้าง ในกรณีของเราให้เลือกตัวเลือก "Expert Advisor (generate)":
รูปที่ 2. การเลือกประเภทของโปรแกรม
รูปที่ 2. การเลือกประเภทของโปรแกรม


ขั้นตอนที่ 1. คุณสมบัติทั่วไปของที่ปรึกษาผู้เชี่ยวชาญ
ถัดไปจะเปิดกล่องโต้ตอบซึ่งคุณสามารถกำหนดคุณสมบัติทั่วไปของ Expert Advisor:
ภาพที่ 3. คุณสมบัติทั่วไปของที่ปรึกษาผู้เชี่ยวชาญ
รูปที่ 3. คุณสมบัติทั่วไปของที่ปรึกษาผู้เชี่ยวชาญ
ระบุชื่อที่ปรึกษาผู้เชี่ยวชาญของคุณชื่อผู้เขียนและลิงก์ไปยังเว็บไซต์ของคุณในฟิลด์ "ชื่อ" "ผู้เขียน" และ "ลิงก์" (ตามลำดับ)

ที่ปรึกษาผู้เชี่ยวชาญยังมีพารามิเตอร์การป้อนข้อมูลต่อไปนี้:

สัญลักษณ์ (ชนิดสตริง) - สัญลักษณ์การทำงานสำหรับ Expert Advisor
ระยะเวลา (ประเภทระยะเวลา) - ระยะเวลาการทำงานสำหรับ Expert Advisor ..
ในขั้นตอนถัดไปเลือกประเภทของสัญญาณการค้าซึ่งผู้เชี่ยวชาญจะทำการค้า



ขั้นที่ 2. เลือกโมดูลของสัญญาณการค้า

อัลกอริธึมของการเปิดและปิดตำแหน่งจะถูกกำหนดโดยโมดูลของสัญญาณการค้า โมดูลสัญญาณการค้ามีกฎของการเปิด / ปิด / ตำแหน่งย้อนกลับ
ห้องสมุดมาตรฐานมีโมดูลสัญญาณการค้าที่พร้อมใช้งาน:

CSignalAC - โมดูลสัญญาณตามรูปแบบการตลาดของตัวบ่งชี้ที่Oscillator เร่ง
CSignalAMA - โมดูลสัญญาณตามรูปแบบการตลาดของตัวบ่งชี้การปรับเปลี่ยนค่าเฉลี่ยเคลื่อนที่
CSignalAO - โมดูลสัญญาณตามรูปแบบการตลาดของตัวบ่งชี้ที่Oscillator ที่น่ากลัว
CSignalBearsPower - โมดูลสัญญาณตามรูปแบบการตลาดของ oscillator หมีพลังงาน
CSignalBullsPower - โมดูลสัญญาณตามรูปแบบการตลาดของออสซิลบูลส์พาวเวอร์
CSignalCCI - โมดูลสัญญาณตามรูปแบบการตลาดของ oscillator ดัชนีสินค้าโภคภัณฑ์ช่อง
CSignalDeM - โมดูลสัญญาณตามรูปแบบการตลาดของ oscillator DeMarker
CSignalDEMA - โมดูลสัญญาณตามรูปแบบการตลาดของตัวบ่งชี้ดับเบิลเฉลี่ยเคลื่อนที่ที่อธิบาย
CSignalEnvelopes - โมดูลสัญญาณตามรูปแบบการตลาดของตัวบ่งชี้ซองจดหมาย
CSignalFrAMA - โมดูลสัญญาณตามรูปแบบการตลาดของตัวบ่งชี้เศษส่วน Adaptive ค่าเฉลี่ยเคลื่อนที่
CSignalITF - โมดูลของการกรองสัญญาณตามเวลา
CSignalMACD - โมดูลสัญญาณตามรูปแบบการตลาดของ oscillator MACD
CSignalMA - โมดูลสัญญาณตามรูปแบบการตลาดของตัวบ่งชี้ค่าเฉลี่ยเคลื่อนที่
CSignalSAR - โมดูลสัญญาณตามรูปแบบการตลาดของตัวบ่งชี้Parabolic SAR
CSignalRSI - โมดูลสัญญาณตามรูปแบบการตลาดของ oscillator ดัชนีความแข็งแรงญาติ
CSignalRVI - โมดูลของสัญญาณขึ้นอยู่กับรูปแบบการตลาดของ Oscillator ดัชนีความแรงของสัมพัทธภาพ
CSignalStoch - โมดูลสัญญาณตามรูปแบบการตลาดของ oscillator Stochastic
CSignalTRIX - โมดูลสัญญาณตามรูปแบบการตลาดของออสซิลทริปเปิเอกเฉลี่ย
CSignalTEMA - โมดูลสัญญาณตามรูปแบบการตลาดของตัวบ่งชี้ที่ทริปเปิเฉลี่ยเคลื่อนที่ที่อธิบาย
CSignalWPR - โมดูลสัญญาณตามรูปแบบการตลาดของ oscillator วิลเลียมส์ช่วงร้อยละ
ประเภทสัญญาณการค้าถูกเลือกจากรายการ "ชื่อ" แบบเลื่อนลง

หลังจากกดปุ่มถัดไปคุณจะเห็นหน้าต่าง:

รูปที่ 4 การเลือกสัญญาณการค้าของ Expert Advisor

รูปที่ 4 การเลือกสัญญาณการค้าของ Expert Advisor

หากต้องการเพิ่มโมดูลของสัญญาณการค้าให้กดปุ่ม "เพิ่ม"

ให้เพิ่มสัญญาณการค้าบนพื้นฐานของการย้ายตัวบ่งชี้เฉลี่ย



รูปที่ 5 เลือกอัลกอริธึมของสัญญาณทางการค้า

รูปที่ 5 เลือกอัลกอริธึมของสัญญาณทางการค้า

แต่ละโมดูลของสัญญาณการค้ามีพารามิเตอร์ของตัวเอง คุณสามารถใช้ค่าเริ่มต้นได้

มีการสร้างพารามิเตอร์สองรูปแบบ คุณสามารถสลับระหว่างพวกเขาได้ด้วยการคลิกสองครั้งที่ปุ่มเมาส์ซ้ายบนไอคอนของพารามิเตอร์ หากพารามิเตอร์มีไอคอนที่เน้นแล้วจะมีให้เป็นตัวแปรอินพุทของ Expert Advisor พารามิเตอร์ดังกล่าวสามารถใช้สำหรับการเพิ่มประสิทธิภาพของผู้เชี่ยวชาญในStrategy Testerได้ หากพารามิเตอร์มีไอคอนสีเทาแสดงว่ามีค่าคงที่ซึ่งคุณไม่สามารถแก้ไขได้จากคุณสมบัติของผู้เชี่ยวชาญที่ปรึกษา

โมดูลของสัญญาณการค้าจะปรากฏในรายการ:

รูปที่ 6. เพิ่มโมดูลสัญญาณทางการค้าแล้ว

รูปที่ 6. เพิ่มโมดูลสัญญาณทางการค้าแล้ว



ขั้นตอนที่ 3. เลือก Module of Trailing Open Positions

ขั้นตอนต่อไปคือการเลือกอัลกอริธึมของตำแหน่งที่เปิดตามหลัง (Trailing Stop) การใช้เส้นสายช่วยให้คุณสามารถประหยัดผลกำไรที่ได้รับ

ไลบรารีมาตรฐานมีหลายวิธีในการเปิดตำแหน่งที่เปิดอยู่ :

CTrailingNone - หยุดต่อท้ายไม่ได้ใช้
CTrailingFixedPips - Trailing Stop ตาม Stop Stop คงที่
CTrailingMA - Trailing Stop ตาม MA
CTrailingPSAR - ท้ายหยุดอยู่บนพื้นฐานของParabolic SAR 
ใน Expert Advisor ของเราให้เลือก "Trailing Stop จาก Stop Stop คงที่":

รูปที่ 6 เลือก Algorithm of Trailing Open Positions
รูปที่ 7. เลือก Algorithm of Trailing Open Positions

ประเภทของการต่อท้ายนี้มีสองพารามิเตอร์ ได้แก่ StopLevel และ ProfitLevel (ในเครื่องหมายคำพูดด้วยเครื่องหมายจุลภาค 2 และ 4 หลัก) ซึ่งจะใช้กับตำแหน่งที่เปิดอยู่:

รูปที่ 7 การตั้งค่าพารามิเตอร์ของอัลกอริธึมที่เลือกไว้สำหรับตำแหน่งที่เปิดตามมา

รูปที่ 9 การตั้งค่าพารามิเตอร์ของอัลกอริทึมที่เลือกไว้สำหรับตำแหน่งที่เปิดตามมา



ขั้นตอนที่ 4. เลือกโมดูลเงินและการจัดการความเสี่ยง

ในขั้นตอนสุดท้ายคุณต้องเลือกระบบเงินและการบริหารความเสี่ยงซึ่งจะใช้ในที่ปรึกษาผู้เชี่ยวชาญของคุณ
วัตถุประสงค์ของอัลกอริทึมนี้คือการกำหนดปริมาณการซื้อขาย (ในล็อต) สำหรับการดำเนินธุรกิจการค้าและการบริหารความเสี่ยง เมื่อมูลค่าการสูญเสียเกินกว่าขีด จำกัด ที่อนุญาต (ตัวอย่างเช่น 10% ของทุน) โมดูลการจัดการเงินและความเสี่ยงจะบังคับให้ปิดสถานะที่ไม่สามารถทำกำไรได้

Standard Library มีการใช้งานพร้อมกันหลายรูปแบบของขั้นตอนวิธีการจัดการเงินและความเสี่ยง :
CMoneyFixedLot - การซื้อขายที่มีปริมาณการค้าคงที่
CMoneyFixedMargin - การซื้อขายโดยมีอัตรากำไรคงที่
CMoneyFixedRisk - การซื้อขายที่มีความเสี่ยงคงที่
CMoneyNone - การซื้อขายที่มีปริมาณการซื้อขายน้อยที่สุด
CMoneySizeOptimized - การซื้อขายที่มีปริมาณการค้าเพิ่มขึ้น
รูปที่ 8. เลือกอัลกอริธึมของเงินและการจัดการความเสี่ยง

รูปที่ 9 เลือกอัลกอริธึมของเงินและการบริหารความเสี่ยง

เลือกอัลกอริธึม 'การซื้อขายกับการค้าคงที่'
โมดูลที่เราเลือกมีสองพารามิเตอร์:
ล็อต - ปริมาณการซื้อขายในล็อต
เปอร์เซ็นต์ - เปอร์เซ็นต์ที่อนุญาตสูงสุดของความเสี่ยง
รูปที่ 9 การกำหนดพารามิเตอร์ของอัลกอริธึมที่เลือกของเงินและการบริหารความเสี่ยง
รูปที่ 10 การกำหนดพารามิเตอร์ของอัลกอริธึมที่เลือกของเงินและการบริหารความเสี่ยง

หลังจากคลิก "Finish" ไฟล์ TestExpert.mq5 จะปรากฏขึ้นในโฟลเดอร์ \ teminal_data_filder \ MQL5 \ Experts \ ชื่อไฟล์สอดคล้องกับชื่อที่ระบุของ Expert Advisor


2. โครงสร้างของที่ปรึกษาผู้เชี่ยวชาญที่สร้างขึ้นโดยใช้ตัวช่วยสร้าง MQL5
รหัสที่มาของ Expert Advisor ที่สร้างโดยตัวช่วยสร้าง MQL5 มีลักษณะดังนี้:

// + ----------------------------------------------- ------------------- +
// | TestExpert.mq5 |
// | Copyright 2012, MetaQuotes Software Corp. |
// | https://www.mql5.com |
// + ----------------------------------------------- ------------------- +
# property copyright "Copyright 2012, MetaQuotes Software Corp. "
#property link       "https://www.mql5.com"
#property version    "1.00"
// + --------------------------- --------------------------------------- +
// | รวม |
// + ----------------------------------------------- ------------------- +
#include <Expert \ Expert.mqh>
// --- สัญญาณที่ใช้ได้
#include <Expert \ Signal \ SignalMA.mqh>
// - - พร้อมใช้งานตามหลัง
#include <Expert \ Trailing \ TrailingFixedPips.mqh>
// --- การจัดการเงินที่มีอยู่
# รวม <Expert \ Money \ MoneyFixedLot.mqh>
// + ------------- -------------------------------------------------- --- +
// | ปัจจัยการผลิต |
// + ----------------------------------------------- ------------------- +
// --- ปัจจัยที่ใช้สำหรับผู้เชี่ยวชาญด้าน
การป้อนข้อมูล สตริง              Expert_Title = "TestExpert" ;
ulong                     Expert_MagicNumber = 23689 ;        //
bool                      Expert_EveryTick = false ;        //
// --- ปัจจัยที่ใช้สำหรับสัญญาณหลักของ
การป้อนข้อมูล int                 Signal_ThresholdOpen = 10 ;           / / ค่าเกณฑ์สัญญาณเพื่อเปิด [0 ... 100]
input  int                 Signal_ThresholdClose = 10 ;           // ค่า threshold ของสัญญาณเพื่อปิด [0 ... 100]
input  double              Signal_PriceLevel = 0.0 ;          // ระดับราคาเพื่อสร้าง
อินพุท ข้อตกลงDouble              Signal_StopLevel = 50.0 ;         / / หยุดการสูญเสียระดับ (ในจุด)
เข้า คู่              Signal_TakeLevel = 50.0 ;         / / ใช้ระดับกำไร (ในจุด)
อินพุท int                 Signal_Expiration = 4 ;            // หมดอายุรอคำสั่งซื้อ (ในบาร์)
การป้อนข้อมูล int                 Signal_MA_PeriodMA = 85 ;           // Moving Average (85,0, ... ) ระยะเวลาการ
ใส่ ค่าเฉลี่ยint                Signal_MA_Shift = 0 ;            // Moving Average (85,0, ... )
อินพุต การเปลี่ยนเวลาENUM_MA_METHOD       Signal_MA_Method = MODE_SMA ;      // ค่าเฉลี่ยเคลื่อนที่ (85,0, ... ) วิธี
ป้อนข้อมูล เฉลี่ยENUM_APPLIED_PRICE   Signal_MA_Applied = PRICE_CLOSE ;    // Moving Average (85,0, ... )
สัญญาณอินพุท แบบ Double              Signal_MA_Weight = 1.0 ;          // Moving Average (85,0, ... ) น้ำหนัก [0 ... 1.0]
// --- อินพุทสำหรับการ
ป้อนข้อมูล int ด้านหลัง                Trailing_FixedPips_StopLevel = 30 ;           / / หยุดการสูญเสียระดับต่อท้าย (ในจุด)
อินพุท int                 Trailing_FixedPips_ProfitLevel = 50 ;           / / เอากำไรระดับต่อท้าย (ในจุด)
/ / - ปัจจัยการผลิตสำหรับ
ใส่ เงินสองครั้ง              Money_FixLot_Percent = 10.0 ;         // เปอร์เซ็นต์การ
ป้อนข้อมูล Double              Money_FixLot_Lots = 0.1 ;          // Fixed volume
// + ------------------------------------------- ----------------------- +
// | ผู้เชี่ยวชาญผู้เชี่ยวชาญระดับโลก |
// + ----------------------------------------------- ------------------- +
CExpert ExtExpert;
// + ----------------------------------------------- ------------------- +
// | ฟังก์ชั่นการริเริ่มของผู้เชี่ยวชาญ |
// + ----------------------------------------------- ------------------- +
int  OnInit ()
  {
// --- เริ่มต้นผู้เชี่ยวชาญ
   ถ้า (! ExtExpert.Init ( Symbol (), Period (), Expert_EveryTick, Expert_MagicNumber))
     {
      // ---
      printf ล้มเหลว ( __FUNCTION__ + ": ข้อผิดพลาดในการเริ่มต้นใช้งานผู้เชี่ยวชาญ" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 1 );
     }
// --- สร้างสัญญาณ
   CExpertSignal * signal = new CExpertSignal;
   if (signal == NULL )
     {
      / / ---
      printf ล้มเหลว ( __FUNCTION__ + ": ข้อผิดพลาดในการสร้างสัญญาณ" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 2 );
     }
// ---
   ExtExpert.InitSignal (สัญญาณ);
   signal.ThresholdOpen (Signal_ThresholdOpen);
   signal.ThresholdClose (Signal_ThresholdClose);
   signal.PriceLevel (Signal_PriceLevel);
   signal.StopLevel (Signal_StopLevel);
   signal.TakeLevel (Signal_TakeLevel);
   signal.Expiration (Signal_Expiration);
// --- การสร้างตัวกรอง CSignalMA
   CSignalMA * filter0 = ใหม่ CSignalMA;
   if (filter0 == NULL )
     {
      // ---
      printf ล้มเหลว ( __FUNCTION__ + ": ข้อผิดพลาดในการสร้าง filter0" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 3 );
     }
   signal.AddFilter (filter0);
// --- ตั้งค่าพารามิเตอร์ของตัวกรอง
   filter0.PeriodMA (Signal_MA_PeriodMA);
   filter0.Shift (Signal_MA_Shift);
   filter0.Method (Signal_MA_Method);
   filter0.Applied (Signal_MA_Applied);
   filter0.Weight (Signal_MA_Weight);
// --- การสร้างวัตถุต่อท้าย
   CTrailingFixedPips * trailing = new CTrailingFixedPips;
   if (trailing == NULL )
     {
      // ---
      printf ล้มเหลว ( __FUNCTION__ + ": เกิดข้อผิดพลาดในการสร้างต่อท้าย" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 4 );
     }
// --- เพิ่ม trailing ไปยังผู้เชี่ยวชาญ (จะถูกลบโดยอัตโนมัติ))
   if (! ExtExpert.InitTrailing (trailing))
     {
      // ---
      printf ล้มเหลว ( __FUNCTION__ + ": ข้อผิดพลาดในการเริ่มต้นการต่อท้าย" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 5 );
     }
// --- ตั้งค่าพารามิเตอร์ต่อท้าย
   trailing.StopLevel (Trailing_FixedPips_StopLevel);
   trailing.ProfitLevel (Trailing_FixedPips_ProfitLevel);
// --- การสร้างวัตถุเงิน
   CMoneyFixedLot * money = new CMoneyFixedLot;
   ถ้า (เงิน == NULL )
     {
      // ---
      printf ล้มเหลว ( __FUNCTION__ + ": ข้อผิดพลาดในการสร้างเงิน" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 6 );
     }
// --- เพิ่มเงินให้ผู้เชี่ยวชาญ (จะถูกลบโดยอัตโนมัติ))
   if (! ExtExpert.InitMoney (money))
     {
      // ---
      printf ล้มเหลว ( __FUNCTION__ + ": ข้อผิดพลาดในการเริ่มต้นเงิน" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 7 );
     }
// --- ตั้งค่าเงิน
   money.Percent (Money_FixLot_Percent);
   money.Lots (Money_FixLot_Lots);
/ / --- ตรวจสอบพารามิเตอร์ทั้งหมดของวัตถุการค้า
   ถ้า (! ExtExpert.ValidationSettings ())
     {
      // --- ล้มเหลว
      ExtExpert.Deinit ();
      ผลตอบแทน (- 8 );
     }
// --- ปรับแต่งดัชนีที่จำเป็นทั้งหมด
   ถ้า (! ExtExpert.InitIndicators ())
     {
      // ---
      printf ล้มเหลว ( __FUNCTION__ + ": ข้อผิดพลาดในการเริ่มต้นตัวชี้วัด" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 9 );
     }
// --- ok
   return ( 0 );
  }
// + ----------------------------------------------- ------------------- +
// | การทำงานของ deinitialization ของผู้เชี่ยวชาญ |
// + ----------------------------------------------- ------------------- +
โมฆะ OnDeinit ( const  intเหตุผล)
  {
   ExtExpert.Deinit ();
  }
// + ----------------------------------------------- ------------------- +
// | ฟังก์ชันตัวจัดการเหตุการณ์ "Tick"
// + ----------------------------------------------- ------------------- +
โมฆะ OnTick ()
  {
   ExtExpert OnTick ();
  }
// + ----------------------------------------------- ------------------- +
// | ฟังก์ชันตัวจัดการเหตุการณ์ "Trade" |
// + ----------------------------------------------- ------------------- +
โมฆะ OnTrade ()
  {
   ExtExpert OnTrade ();
  }
// + ----------------------------------------------- ------------------- +
// | ฟังก์ชันตัวจัดการเหตุการณ์ "Timer"
// + ----------------------------------------------- ------------------- +
โมฆะ OnTimer ()
  {
   ExtExpert OnTimer ();
  }
// + ----------------------------------------------- ------------------- +
รหัสของที่ปรึกษาผู้เชี่ยวชาญประกอบด้วยหลายส่วน

ส่วนการอธิบายคุณสมบัติของโปรแกรม:

# property copyright "ลิขสิทธิ์ 2012, MetaQuotes Software Corp. "
#property link       "https://www.mql5.com"
#property version    "1.00"
ไฟล์ที่รวม:

#include <Expert \ Expert.mqh>
// --- สัญญาณที่ใช้ได้
#include <Expert \ Signal \ SignalMA.mqh>
// --- มีต่อท้าย
#include <Expert \ Trailing \ TrailingFixedPips.mqh>
// --- การจัดการเงินที่มีอยู่
# รวม <Expert \ Money \ MoneyFixedLot.mqh>
รหัสของคลาสCExpert (อินสแตนซ์ที่ใช้ใน Expert Advisor) จะอยู่ในไฟล์ Expert.mqh 

แฟ้ม SignalMA.mqh มีรหัสที่มาของการคัดเลือกระดับสัญญาณการค้า - CSignalMA แฟ้ม TrailingFixedPips.mqh มีรหัสที่มาของตำแหน่งที่เปิดท้ายระดับอัลกอริทึม - CTrailingFixedPips Money และการจัดการความเสี่ยงจะถูกใช้โดยคลาสCMoneyFixedLot ที่มีอยู่ในไฟล์ MoneyFixedLot.mqh
ถัดมาพารามิเตอร์การป้อนข้อมูลของที่ปรึกษาผู้เชี่ยวชาญ:

/ / --- ปัจจัยการผลิตสำหรับผู้เชี่ยวชาญด้านการ
ป้อนข้อมูล สตริง              Expert_Title = "TestExpert" ; // ชื่อเอกสาร
ulong                     Expert_MagicNumber = 23689 ;        //
bool                      Expert_EveryTick = false ;        //
// --- ปัจจัยที่ใช้สำหรับสัญญาณหลักของ
การป้อนข้อมูล int                 Signal_ThresholdOpen = 10 ;           / / ค่าเกณฑ์สัญญาณเพื่อเปิด [0 ... 100]
input  int                 Signal_ThresholdClose = 10 ;           // ค่า threshold ของสัญญาณเพื่อปิด [0 ... 100]
input  double              Signal_PriceLevel = 0.0 ;          // ระดับราคาเพื่อสร้าง
อินพุท ข้อตกลงDouble              Signal_StopLevel = 50.0 ;         / / หยุดการสูญเสียระดับ (ในจุด)
เข้า คู่              Signal_TakeLevel = 50.0 ;         / / ใช้ระดับกำไร (ในจุด)
อินพุท int                 Signal_Expiration = 4 ;            // หมดอายุของการสั่งซื้อที่ค้างอยู่ (ในบาร์)
การป้อนข้อมูล int                Signal_MA_PeriodMA = 85 ;           // Moving Average (85,0, ... ) ระยะเวลาการ
ป้อน ค่าเฉลี่ยint                 Signal_MA_Shift = 0 ;            // Moving Average (85,0, ... )
อินพุต การเปลี่ยนเวลาENUM_MA_METHOD       Signal_MA_Method = MODE_SMA ;     // ค่าเฉลี่ยเคลื่อนที่ (85,0, ... ) วิธี
ป้อนข้อมูล เฉลี่ยENUM_APPLIED_PRICE    Signal_MA_Applied = PRICE_CLOSE ;  // Moving Average (85,0, ... )
อินพุตของ ชุดราคาคู่              Signal_MA_Weight = 1.0;          // Moving Average (85,0, ... ) น้ำหนัก [0 ... 1.0]
// - อินพุทสำหรับการ
ป้อนข้อมูล int int                 Trailing_FixedPips_StopLevel = 30 ;           / / หยุดการสูญเสียระดับต่อท้าย (ในจุด)
อินพุท int                 Trailing_FixedPips_ProfitLevel = 50 ;           / / เอากำไรระดับต่อท้าย (ในจุด)
/ / - ปัจจัยการผลิตสำหรับ
ใส่ เงินสองครั้ง              Money_FixLot_Percent = 10.0 ;         // เปอร์เซ็นต์การ
ป้อนข้อมูล Double              Money_FixLot_Lots = 0.1 ;          // Fixed volume
พารามิเตอร์สามตัวแรก (Expert_Title, Expert_MagicNumber และ Expert_EveryTick) เป็นแบบทั่วไป พวกเขามักจะไม่คำนึงถึงปัจจุบันที่เลือกสัญญาณซื้อขาย , ต่อท้ายและเงินและการบริหารความเสี่ยงขั้นตอนวิธีการ

พารามิเตอร์ Expert_Title ของสายอักขระระบุชื่อ Expert Advisor, Expert_MagicNumber ระบุรหัส (ค่านี้จะถูกใช้ในพารามิเตอร์ของคำขอทางการค้า) และพารามิเตอร์ Expert_EveryTick ใช้เพื่อตั้งค่าโหมดการทำงานของ EA ถ้า Expert_EveryTick ถูกตั้งค่าเป็น Real Expert Advisor จะเรียกฟังก์ชัน handler (ตรวจสอบเงื่อนไขการค้าการดำเนินการทางการค้าการเปิดตำแหน่งที่เปิด) ทุกครั้งที่มีการทำเครื่องหมายใหม่สำหรับสัญลักษณ์ทำงาน
หลังจากพารามิเตอร์ทั่วไปของ Expert Advisor เป็นพารามิเตอร์สำหรับป้อนสัญญาณอัลกอริธึมสัญญาณที่เลือก (ในกรณีของเราเป็นพารามิเตอร์ที่ใช้ใน คลาสCSignalMA )

เราได้เลือกคลาสCTrailingStopFixedPipsของตำแหน่งที่เปิดตามมา เส้นทางจะเปิดตำแหน่งในระยะห่างที่กำหนดโดยระดับ Stop Loss และ Take Profit ซึ่งมีการกำหนดค่าไว้ใน "ปกติ" 2/4 จุดหลัก เมื่อราคาเคลื่อนไปยังตำแหน่งที่เปิดตามระยะทางซึ่งเกินจำนวนจุดที่กำหนดโดยระดับ Trailing_FixedPips_StopLevel Expert Advisor จะปรับเปลี่ยนค่าของระดับ Stop Loss และ Take Profit (ถ้า Trailing_FixedPips_ProfitLevel> 0) 

พารามิเตอร์การป้อนข้อมูล Money_FixLot_Percent และ Money_FixLot_Lots สอดคล้องกับพารามิเตอร์ของอัลกอริทึมที่มีล็อตการค้าแบบถาวรซึ่งใช้งานในคลาสCMoneyFixedLot ในกรณีของเราการค้าจะดำเนินการโดยมีปริมาณคงที่เท่ากับมูลค่าของ Money_FixLot_Lots
CMoneyFixedLotชั้นยังดำเนินขั้นตอนวิธีการบริหารความเสี่ยง: ถ้ามีการสูญเสีย (เป็นร้อยละที่กำหนดของผู้ถือหุ้นในปัจจุบัน) ระบุในพารามิเตอร์ Inp_Money_FixLot_Percent ที่CMoneyFixedLotชั้นจะแนะนำให้ปรึกษาผู้เชี่ยวชาญเพื่อกวาดต้อนใกล้ชิดของตำแหน่งไม่ได้ประโยชน์และดังนั้นจึงจะ ทำได้

หลังจากป้อนพารามิเตอร์ของผู้เชี่ยวชาญ Advisor ExtExpert วัตถุของคลาสCExpertถูกประกาศ:
CExpert ExtExpert;
นี่เป็นตัวอย่างของชั้นกลยุทธ์การซื้อขาย

เป็นตัวอย่างของการที่CExpertระดับวัตถุ ExtExpert มีการอ้างอิงไปยังวัตถุลูกของCExpertSignal (ชั้นฐานของสัญญาณการค้า) ที่CExpertMoney (ชั้นฐานของเงินและการบริหารความเสี่ยง) และCExpertTrailing (ชั้นฐานของท้ายเปิด ตำแหน่ง) นอกจากนี้คลาสCExpertประกอบด้วยอินสแตนซ์ของ CExpertTrade, SSymbolInfo , CAccountInfo , CPositionInfo , คลาสCOrderInfoและคอนเทนเนอร์ CIndicators

เมื่อต้องการตั้งค่าพารามิเตอร์ของ Expert Advisor คุณต้องสร้างอินสแตนซ์ของคลาสที่เกี่ยวข้องและระบุการอ้างอิงไปยังอ็อบเจ็กต์ที่สร้างขึ้นในคลาส ExtExpert
ลองพิจารณาฟังก์ชันOnInitของการเริ่มต้นที่ปรึกษาผู้เชี่ยวชาญ ที่นี่เราเริ่มต้นและกำหนดค่าคุณสมบัติของคลาส ExtExpert



1. การเริ่มต้นของคลาส ExtExpert:

// --- เริ่มต้นผู้เชี่ยวชาญ
   ถ้า (! ExtExpert.Init ( Symbol (), Period (), Expert_EveryTick, Expert_MagicNumber))
     {
      // ---
      printf ล้มเหลว ( __FUNCTION__ + ": ข้อผิดพลาดในการเริ่มต้นใช้งานผู้เชี่ยวชาญ" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 1 );
     }
อ็อบเจ็กต์ ExtExpert ถูกเตรียมใช้งานโดยใช้เมธอดInit ที่นี่เราตั้งค่าสัญลักษณ์ระยะเวลาแฟล็กของเมธอดที่เรียกใช้ติ๊กทุกตัว ID ของ Expert Advisor รวมถึงการสร้างและเริ่มต้นออบเจ็กต์ส่วนตัวของคลาส (ในขั้นตอนนี้CEXpertSignal , CExpertMoneyและCExpertTrailing classes จะถูกใช้เป็นสัญญาณต่อท้ายและเงิน วัตถุการจัดการ)

ถ้าอ็อบเจ็กต์ ExtExpert ไม่สามารถเริ่มต้นได้สำเร็จ Expert Advisor จะถูกยกเลิกด้วยรหัส return -1



2. สร้างและกำหนดค่าคุณสมบัติของวัตถุสัญญาณ

// --- สร้างสัญญาณ
   CExpertSignal * signal = new CExpertSignal;
   if (signal == NULL )
     {
      / / ---
      printf ล้มเหลว ( __FUNCTION__ + ": ข้อผิดพลาดในการสร้างสัญญาณ" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 2 );
     }
// ---
   ExtExpert.InitSignal (สัญญาณ);
   signal.ThresholdOpen (Signal_ThresholdOpen);
   signal.ThresholdClose (Signal_ThresholdClose);
   signal.PriceLevel (Signal_PriceLevel);
   signal.StopLevel (Signal_StopLevel);
   signal.TakeLevel (Signal_TakeLevel);
   signal.Expiration (Signal_Expiration);
// --- การสร้างตัวกรอง CSignalMA
   CSignalMA * filter0 = ใหม่ CSignalMA;
   if (filter0 == NULL )
     {
      // ---
      printf ล้มเหลว ( __FUNCTION__ + ": ข้อผิดพลาดในการสร้าง filter0" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 3 );
     }
   signal.AddFilter (filter0);
// --- ตั้งค่าพารามิเตอร์ของตัวกรอง
   filter0.PeriodMA (Signal_MA_PeriodMA);
   filter0.Shift (Signal_MA_Shift);
   filter0.Method (Signal_MA_Method);
   filter0.Applied (Signal_MA_Applied);
   filter0.Weight (Signal_MA_Weight);
การกำหนดค่าของวัตถุสัญญาณทางการค้าประกอบด้วยหลายขั้นตอน:

การสร้างวัตถุสัญญาณและการตั้งค่าพารามิเตอร์
การสร้างโมดูลของสัญญาณการค้าและการเพิ่มลงในอินสแตนซ์คลาสของ CExpertSignal
ถ้าอ็อบเจ็กต์ ExtExpert ไม่สามารถเริ่มต้นได้สำเร็จ Expert Advisor จะถูกยกเลิกด้วยรหัสการรับคืน (ตั้งแต่ -2 ถึง -3) ขึ้นอยู่กับว่าเกิดข้อผิดพลาดขึ้น

ขึ้นอยู่กับว่าพารามิเตอร์ถูกระบุไว้ใน MQL5 Wizard จะมีการสร้างรหัสที่เหมาะสม
// --- ตั้งค่าพารามิเตอร์สัญญาณ
   filter.PropiodMA ( 85 );                        // --- พารามิเตอร์ถูกตั้งค่าเป็น MQL5 Wizard
                                                   // --- (ไอคอนสีเทา - ค่าคงที่เท่ากับ 85)
   filter0.SlowPeriod (Signal_MA_Shift);      // --- พารามิเตอร์ถูกตั้งค่าเป็นตัวแปรอินพุท
                                                   // --- (ไอคอนสีน้ำเงิน - พารามิเตอร์การป้อนข้อมูลของ Expert Advisor)
หากพารามิเตอร์ถูกกำหนดและค่าของมันไม่แตกต่างจากค่าเริ่มต้นจะไม่มีการเขียนรหัสที่สร้างขึ้น ในกรณีเช่นนี้จะใช้ค่าดีฟอลต์ของพารามิเตอร์ (ระบุไว้ในคลาสที่เกี่ยวข้อง)


3. สร้างและกำหนดค่าคุณสมบัติอ็อบเจ็กต์ Trailing

// --- การสร้างวัตถุต่อท้าย
   CTrailingFixedPips * trailing = new CTrailingFixedPips;
   if (trailing == NULL )
     {
      // ---
      printf ล้มเหลว ( __FUNCTION__ + ": เกิดข้อผิดพลาดในการสร้างต่อท้าย" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 4 );
     }
// --- เพิ่ม trailing ไปยังผู้เชี่ยวชาญ (จะถูกลบโดยอัตโนมัติ))
   if (! ExtExpert.InitTrailing (trailing))
     {
      // ---
      printf ล้มเหลว ( __FUNCTION__ + ": ข้อผิดพลาดในการเริ่มต้นการต่อท้าย" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 5 );
     }
// --- ตั้งค่าพารามิเตอร์ต่อท้าย
   trailing.StopLevel (Trailing_FixedPips_StopLevel);
   trailing.ProfitLevel (Trailing_FixedPips_ProfitLevel);
การกำหนดค่าของวัตถุต่อท้ายยังประกอบด้วยหลายขั้นตอน:
การสร้างวัตถุต่อท้าย;
การเพิ่มต่อท้ายให้กับผู้เชี่ยวชาญ
การตั้งค่าพารามิเตอร์ต่อท้าย
ถ้าผู้เชี่ยวชาญด้านการให้คำปรึกษาจะถูกยกเลิกด้วยรหัสการส่งคืน (ตั้งแต่ -4 ถึง -5) ซึ่งขึ้นอยู่กับว่าเกิดข้อผิดพลาดขึ้น



4. สร้างและกำหนดค่าคุณสมบัติของวัตถุเงิน

// --- การสร้างวัตถุเงิน
   CMoneyFixedLot * money = new CMoneyFixedLot;
   ถ้า (เงิน == NULL )
     {
      // ---
      printf ล้มเหลว ( __FUNCTION__ + ": ข้อผิดพลาดในการสร้างเงิน" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 6 );
     }
// --- เพิ่มเงินให้ผู้เชี่ยวชาญ (จะถูกลบโดยอัตโนมัติ))
   if (! ExtExpert.InitMoney (money))
     {
      // ---
      printf ล้มเหลว ( __FUNCTION__ + ": ข้อผิดพลาดในการเริ่มต้นเงิน" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 7 );
     }
// --- ตั้งค่าเงิน
   money.Percent (Money_FixLot_Percent);
   money.Lots (Money_FixLot_Lots);
การกำหนดค่าของวัตถุการจัดการเงินและความเสี่ยงยังประกอบด้วย 4 ขั้นตอน:

การสร้างวัตถุเงิน
การเพิ่มเงินให้กับผู้เชี่ยวชาญ
การตั้งค่าเงิน
ถ้าวัตถุเงินไม่ได้เริ่มต้นที่ประสบความสำเร็จที่ปรึกษาผู้เชี่ยวชาญจะถูกยกเลิกด้วยรหัสผลตอบแทน (จาก -6 -7) ซึ่งขึ้นอยู่กับสิ่งที่ขั้นตอนที่มีข้อผิดพลาดเกิดขึ้น



5. เริ่มต้นตัวบ่งชี้ทั้งหมดที่ใช้ในชั้นเรียน

/ / --- ตรวจสอบพารามิเตอร์ทั้งหมดของวัตถุการค้า
   ถ้า (! ExtExpert.ValidationSettings ())
     {
      // --- ล้มเหลว
      ExtExpert.Deinit ();
      ผลตอบแทน (- 8 );
     }
// --- ปรับแต่งดัชนีที่จำเป็นทั้งหมด
   ถ้า (! ExtExpert.InitIndicators ())
     {
      // ---
      printf ล้มเหลว ( __FUNCTION__ + ": ข้อผิดพลาดในการเริ่มต้นตัวชี้วัด" );
      ExtExpert.Deinit ();
      ผลตอบแทน (- 9 );
     }
// --- ok
   return ( 0 );
หลังจากที่คุณสร้างและเริ่มต้นวัตถุของสัญญาณทางการค้าการต่อท้ายและการจัดการเงินแล้ววิธีการ ValidationSettings () ของ ExtExpert จะถูกเรียกใช้ หลังจากที่เรียกว่า InitIndicators () ของ ExtExpert วัตถุ มันเริ่มต้นตัวชี้วัดที่ใช้ในการส่งสัญญาณต่อท้ายและวัตถุเงิน
OnDeinit , OnTick , OnTradeและOnTimerเหตุการณ์จัดการจะดำเนินการโดยการเรียกวิธีการที่เหมาะสมของชนชั้น ExtExpert

ถ้าคุณต้องการทราบรายละเอียดเกี่ยวกับการใช้งานของCExpertคุณสามารถดูรหัสต้นฉบับของตัวบ่งชี้ที่อยู่ใน '\ <client_terminal_directory> \ MQL5 \ Include \ Expert \ expert.mqh'

3. ตรวจสอบที่ปรึกษาผู้เชี่ยวชาญที่สร้างขึ้นในโปรแกรมทดสอบกลยุทธ์ของ MetaTrader 5
ถ้ามีส่วนประกอบทั้งหมดของไลบรารีมาตรฐานรหัสของที่ปรึกษาผู้เชี่ยวชาญที่สร้างขึ้นจะสำเร็จ:
รูปที่ 10 การรวบรวมรหัสแหล่งที่ปรึกษาผู้เชี่ยวชาญที่สร้างขึ้นใน MQL5 Wizard สำเร็จ
รูปที่ 10 การรวบรวมรหัสแหล่งที่ปรึกษาผู้เชี่ยวชาญที่สร้างขึ้นใน MQL5 Wizard สำเร็จ

ส่งผลให้ที่ปรึกษาผู้เชี่ยวชาญจะค้าตามขั้นตอนวิธีการเลือกของสัญญาณการค้า , ต่อท้ายตำแหน่งที่เปิดและเงินและการบริหารความเสี่ยง
คุณสามารถตรวจสอบว่าระบบการซื้อขายที่สร้างขึ้นใหม่ของคุณใช้งานได้อย่างไรโดยใช้Strategy Testerจากเครื่องลูกข่ายของMetaTrader 5 ในรูปที่ 11 คุณสามารถดูผลการทดสอบข้อมูลย้อนหลังด้วยการตั้งค่าเริ่มต้น (EURUSD, H1, 2010.01.01-2011.06.01):

รูปที่ 11. ผลการทดสอบของผู้เชี่ยวชาญด้านการทดสอบข้อมูลย้อนหลัง (EURUSD, H1)
รูปที่ 11. ผลการทดสอบของผู้เชี่ยวชาญด้านการทดสอบข้อมูลย้อนหลัง (EURUSD, H1)


ชุดพารามิเตอร์ผู้เชี่ยวชาญของผู้เชี่ยวชาญที่ดีที่สุดสามารถหาได้จากการเพิ่มประสิทธิภาพในเครื่องมือทดสอบกลยุทธ์ของ MetaTrader 5


ข้อสรุป
การใช้ชั้นเรียนของกลยุทธ์การซื้อขายช่วยลดการสร้างและทดสอบแนวคิดการซื้อขายของคุณได้อย่างมาก ตอนนี้รหัสที่มาทั้งหมดของ Expert Advisor สามารถสร้างได้โดยตรงใน MetaEditor โดยใช้MQL5 Wizardบนพื้นฐานของไลบรารี Standard Library พร้อมใช้หรือโมดูลของคุณเอง
หากคุณไม่ต้องการหรือไม่สามารถเขียนโมดูลสัญญาณการค้าของคุณเองคุณสามารถได้รับประโยชน์จากบริการงานและสั่งซื้อหุ่นยนต์การค้าทั้งหมดหรือเฉพาะโมดูลที่จำเป็นเท่านั้น วิธีนี้จะให้ประโยชน์เพิ่มเติม:

ต้นทุนการพัฒนาของโมดูลแยกต่างหากควรต่ำกว่าค่าใช้จ่ายของที่ปรึกษาผู้เชี่ยวชาญทั้งหมด
โมดูลที่ได้สามารถนำมาใช้ซ้ำเพื่อสร้างทั้ง Expert Advisor แบบสแตนด์อโลนและหุ่นยนต์การค้าทั้งหมด (ตามโมดูลนี้) โดยใช้ MQL5 Wizard
โมดูลที่สั่งซื้อต้องปฏิบัติตามข้อกำหนดเพิ่มเติมของ MQL5 Wizard อย่างเคร่งครัดและให้การควบคุมเพิ่มเติมเกี่ยวกับคุณภาพของรหัส

สรพล
jun_jao2000@hotmail.com
MT4 MT5 EA Indicator EURUSD USDJPY XAUUSD Gold Bitcoin Oil
สอบถาม 081-446-5311 , line : junjaocom , Email : jun_jao2000@hotmail.com
สมัคร Exness ได้ที่ https://www.exness.com/a/73208
หน้าลงทะเบียน Exness ได้ที่ https://www.exness.com/boarding/sign-up/a/73208?lng=th
ขั้นตอนสมัคร exness https://www.junjao.com/board/index.php?topic=279