![MQL5 마법사: 프로그래밍 없이 Expert Advisor 만들기](https://c.mql5.com/i/articles/overlay.png)
MQL5 마법사: 프로그래밍 없이 Expert Advisor 만들기
소개
자동 거래 시스템을 만들 때 시장 상황을 분석하고 거래 신호를 생성하는 알고리즘, 오픈 포지션을 추적하는 알고리즘, 자금 관리 및 위험 관리 시스템을 작성해야 합니다.
모듈의 코드가 작성되면 가장 어려운 작업은 모든 부품을 조립하고 거래 로봇의 소스 코드를 디버깅하는 것입니다. 여기서 핵심적인 역할은 모듈 상호 작용의 아키텍처에 의해 수행됩니다. 잘못 구축된 경우 대부분의 시간이 오류를 찾아 수정하는 데 소요되며 모듈의 알고리즘을 교체하면 전체 소스 코드를 다시 작성하게 됩니다.
MQL5에서 객체 지향 접근 방식을 사용하면 자동화된 거래 시스템의 작성 및 테스트가 상당히 쉬워집니다.
MetaQuotes Software Corp.는 거래 전략을 구현하기 위한 클래스를 개발했습니다. 이제 필요한 거래 신호 (현재 20 개 있음), Trailing (4 ) 및 Money Management (5) 모듈을 선택하여 MetaEditor에서 직접 Expert Advisors 코드를 자동으로 생성 할 수 있습니다. 이러한 모듈을 결합하면 즉시 사용 가능한 거래 시스템의 다양한 변형을 얻을 수 있습니다.
이러한 모듈을 구현하여 자체 클래스를 사용할 수도 있습니다. 직접 만들거나 작업 서비스를 통해 주문하세요.
이 기사에서는 MQL5 마법사를 사용한 Expert Advisor 소스 코드의 자동 생성을 고려합니다. 그리고 프로그래밍 할 것이 없습니다!
1. MQL5 마법사를 사용하여 거래 로봇 생성
Expert Advisor의 소스 코드는 MetaEditor의 MQL5 Wizard를 사용하여 생성됩니다.
거래 전략의 기본 클래스는 '\<client_terminal_directory>\MQL5\Include\Expert\' 폴더에 있습니다. 거래 신호 클래스의 즉시 사용 가능한 알고리즘, Trailing 오픈 포지션 클래스 및 돈 및 위험 관리 클래스가 Signal, Trailing 및 Money 하위 폴더에 있습니다. MQL5 마법사는 이러한 폴더의 파일을 구문 분석하고 이를 사용하여 Expert Advisor의 코드를 생성합니다.
MQL5 마법사를 시작하려면 도구 모음에서 "새로 만들기"단추를 클릭하거나 "파일"메뉴에서 "새로 만들기"를 선택해야 합니다 (또는 간단히 Ctrl + N을 누름).
그림 1. MQL5 마법사 시작
그런 다음 생성하려는 프로그램 유형을 선택합니다. 이 경우 "Expert Advisor (생성)"옵션을 선택합니다.
그림 2. 프로그램 유형 선택
1 단계. Expert Advisor의 일반 속성
다음으로 Expert Advisor의 일반 속성을 설정할 수 있는 대화 상자가 열립니다.
그림 3. Expert Advisor의 일반 속성
"이름", "저자"및 "링크"필드 (각각)에 Expert Advisor의 이름, 작성자의 이름 및 웹 사이트 링크를 지정합니다.
Expert Advisor에는 다음 입력 매개 변수도 있습니다.
- 기호 (문자열 유형) - Expert Advisor의 작업 기호입니다.
- 기간 (기간 유형) - Expert Advisor의 작업 기간 ..
다음 단계에서 전문가가 거래할 거래 신호 유형을 선택합니다.
2 단계. 거래 신호 모듈 선택
개시 및 마감 포지션의 알고리즘은 거래 신호 모듈에 의해 결정됩니다. 거래 신호 모듈에는 포지션 개시 / 폐쇄 / 반전 규칙이 포함되어 있습니다.
표준 라이브러리에는 즉시 사용할 수 있는 거래 신호 모듈이 있습니다.
- CSignalAC - Accelerator Oscillator 인디케이터의 시장 모델을 기반으로 한 신호 모듈입니다.
- CSignalAMA - Adaptive Moving Average 인디케이터의 시장 모델을 기반으로 한 신호 모듈입니다.
- CSignalAO - Awesome Oscillator 인디케이터의 시장 모델을 기반으로 한 신호 모듈입니다.
- CSignalBearsPower -오실레이터 Bears Power의 시장 모델을 기반으로 한 신호 모듈입니다.
- CSignalBullsPower - 오실레이터 Bulls Power의 시장 모델을 기반으로 한 신호 모듈입니다.
- CSignalCCI - 오실레이터 상품 채널 지수의 시장 모델을 기반으로 한 신호 모듈입니다.
- CSignalDeM - 오실레이터 DeMarker의 시장 모델을 기반으로 한 신호 모듈입니다.
- CSignalDEMA - 오실레이터 DeMarker의 시장 모델을 기반으로 한 신호 모듈입니다.
- CSignalEnvelopes - 인디케이터 봉투의 시장 모델을 기반으로 하는 신호 모듈입니다.
- CSignalFrAMA - 인디케이터 Fractal Adaptive Moving Average의 시장 모델을 기반으로 한 신호 모듈.
- CSignalITF - 시간별 신호 필터링 모듈입니다.
- CSignalMACD - 오실레이터 MACD의 시장 모델을 기반으로 한 신호 모듈입니다.
- CSignalMA - 이동 평균 인디케이터의 시장 모델을 기반으로 한 신호 모듈입니다.
- CSignalSAR - 인디케이터 Parabolic SAR의 시장 모델을 기반으로 한 신호 모듈.
- CSignalRSI - 오실레이터 상대 강도 지수의 시장 모델을 기반으로 한 신호 모듈입니다.
- CSignalRVI - 오실레이터 Relative Vigor Index의 시장 모델을 기반으로 한 신호 모듈입니다.
- CSignalStoch - 오실레이터 Stochastic의 시장 모델을 기반으로 한 신호 모듈입니다.
- CSignalTRIX - 오실레이터 Triple Exponential Average의 시장 모델을 기반으로 한 신호 모듈.
- CSignalTEMA - Triple Exponential Moving Average 인디케이터의 시장 모델을 기반으로 한 신호 모듈입니다.
- CSignalWPR - 오실레이터 Williams Percent Range의 시장 모델을 기반으로 한 신호 모듈입니다.
거래 신호 유형은 "이름" 드롭 다운 목록에서 선택됩니다.
다음 버튼을 누르면 다음 창이 표시됩니다.
그림 4. Expert Adviso의 거래 신호 선택
거래 신호 모듈을 추가하려면 "추가" 버튼을 누르십시오.
이동 평균 인디케이터를 기반으로 거래 신호를 추가해보겠습니다.
그림 5. 거래 신호 알고리즘 선택
거래 신호의 각 모듈에는 자체 매개 변수가 있습니다. 기본값을 사용할 수 있습니다.
매개 변수 생성에는 두 가지 모드가 있습니다. 매개 변수 아이콘에서 마우스 왼쪽 버튼을 두 번 클릭하여 전환할 수 있습니다. 매개 변수에 강조 표시된 아이콘 이 있는 경우 Expert Advisor의 입력 변수로 사용할 수 있습니다. 이러한 매개 변수는 전략 테스터에서 전문가 최적화에 사용할 수 있습니다. 매개 변수에 회색 아이콘
이 있으면 Expert Advisor의 속성에서 수정할 수 없는 고정 값을 갖게 됩니다.
거래 신호 모듈이 목록에 나타납니다:
그림 6. 무역 신호 모듈이 추가되었습니다.
3 단계. Trailing 오픈 포지션 모듈 선택
다음 단계는 오픈 포지션 Trailing 알고리즘 (트레일링 중지)을 선택하는 것입니다. Trailing을 사용하면 수익을 절약할 수 있습니다.
표준 라이브러리는 여러 오픈 포지션을 추적하는 방법을 제공합니다:
- CTrailingNone - Trailing Stop을 사용하지 않습니다.
- CTrailingFixedPips - 고정 정지 레벨에 따른 Trailing 정지.
- CTrailingMA - MA 기반 Trailing 중지.
- CTrailingPSAR - Parabolic SAR을 기반으로 한 Trailing 중지.
Expert Advisor에서 "고정된 정류장 수준에 따른 트레일링 정류장"을 선택합니다:
그림 7. Trailing 오픈 포지션 알고리즘 선택
이 유형의 Trailing에는 오픈 포지션을 추적하는 데 사용되는 StopLevel 및 ProfitLevel (쉼표 뒤에 2 자리 및 4 자리 숫자가 있는 따옴표의 포인트)의 두 가지 매개 변수가 있습니다.
그림 9. 선택한 Trailing 오픈 포지션 알고리즘의 매개 변수 설정
4 단계. 자금 및 위험 관리 모듈 선택
마지막 단계에서는 Expert Advisor에서 사용할 자금 및 위험 관리 시스템을 선택해야 합니다.
이 알고리즘의 목적은 거래 운영과 위험 관리를위한 거래량 (랏)을 결정하는 것입니다. 손실 가치가 허용 한도 (예: 자기 자본의 10 %)를 초과하면 자금 및 위험 관리 모듈이 수익성 없는 포지션을 강제로 청산합니다.
표준 라이브러리는 즉시 사용 가능한 자금 및 위험 관리 알고리즘 구현을 제공합니다.
- CMoneyFixedLot - 고정 거래량으로 거래.
- CMoneyFixedMargin - 고정 마진으로 거래.
- CMoneyFixedRisk - 고정 위험으로 거래.
- CMoneyNone - 최소 허용 거래량으로 거래합니다.
- CMoneySizeOptimized - 최적화된 거래량으로 거래.
그림 9. 자금 및 위험 관리 알고리즘 선택
'고정 거래량으로 거래' 알고리즘을 선택합니다.
선택한 모듈에는 두 개의 매개 변수가 있습니다.
- Lots - 랏 거래량.
- 백분율 - 최대 허용 위험 백분율.
그림 10. 선택한 자금 및 위험 관리 알고리즘의 매개 변수 설정
After clicking "Finish"the TestExpert.mq5 file will appear in the \teminal_data_filder\MQL5\Experts\ folder. 파일 이름은 Expert Advisor의 지정된 이름에 해당합니다.
2. 파일 이름은 Expert Advisor의 지정된 이름에 해당합니다.
MQL5 마법사를 사용하여 생성된 Expert Advisor의 구조:
//+------------------------------------------------------------------+ //| 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 | //+------------------------------------------------------------------+ #include <Expert\Expert.mqh> //--- available signals #include <Expert\Signal\SignalMA.mqh> //--- available trailing #include <Expert\Trailing\TrailingFixedPips.mqh> //--- available money management #include <Expert\Money\MoneyFixedLot.mqh> //+------------------------------------------------------------------+ //| Inputs | //+------------------------------------------------------------------+ //--- inputs for expert input string Expert_Title ="TestExpert"; // Document name ulong Expert_MagicNumber =23689; // bool Expert_EveryTick =false; // //--- inputs for main signal input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100] input int Signal_ThresholdClose =10; // Signal threshold value to close [0...100] input double Signal_PriceLevel =0.0; // Price level to execute a deal input double Signal_StopLevel =50.0; // Stop Loss level (in points) input double Signal_TakeLevel =50.0; // Take Profit level (in points) input int Signal_Expiration =4; // Expiration of pending orders (in bars) input int Signal_MA_PeriodMA =85; // Moving Average(85,0,...) Period of averaging input int Signal_MA_Shift =0; // Moving Average(85,0,...) Time shift input ENUM_MA_METHOD Signal_MA_Method =MODE_SMA; // Moving Average(85,0,...) Method of averaging input ENUM_APPLIED_PRICE Signal_MA_Applied =PRICE_CLOSE; // Moving Average(85,0,...) Prices series input double Signal_MA_Weight =1.0; // Moving Average(85,0,...) Weight [0...1.0] //--- inputs for trailing input int Trailing_FixedPips_StopLevel =30; // Stop Loss trailing level (in points) input int Trailing_FixedPips_ProfitLevel=50; // Take Profit trailing level (in points) //--- inputs for money input double Money_FixLot_Percent =10.0; // Percent input double Money_FixLot_Lots =0.1; // Fixed volume //+------------------------------------------------------------------+ //| Global expert object | //+------------------------------------------------------------------+ CExpert ExtExpert; //+------------------------------------------------------------------+ //| Initialization function of the expert | //+------------------------------------------------------------------+ int OnInit() { //--- Initializing expert if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) { //--- failed printf(__FUNCTION__+": error initializing expert"); ExtExpert.Deinit(); return(-1); } //--- Creating signal CExpertSignal *signal=new CExpertSignal; if(signal==NULL) { //--- failed printf(__FUNCTION__+": error creating signal"); ExtExpert.Deinit(); return(-2); } //--- ExtExpert.InitSignal(signal); signal.ThresholdOpen(Signal_ThresholdOpen); signal.ThresholdClose(Signal_ThresholdClose); signal.PriceLevel(Signal_PriceLevel); signal.StopLevel(Signal_StopLevel); signal.TakeLevel(Signal_TakeLevel); signal.Expiration(Signal_Expiration); //--- Creating filter CSignalMA CSignalMA *filter0=new CSignalMA; if(filter0==NULL) { //--- failed printf(__FUNCTION__+": error creating filter0"); ExtExpert.Deinit(); return(-3); } signal.AddFilter(filter0); //--- Set filter parameters 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); //--- Creation of trailing object CTrailingFixedPips *trailing=new CTrailingFixedPips; if(trailing==NULL) { //--- failed printf(__FUNCTION__+": error creating trailing"); ExtExpert.Deinit(); return(-4); } //--- Add trailing to expert (will be deleted automatically)) if(!ExtExpert.InitTrailing(trailing)) { //--- failed printf(__FUNCTION__+": error initializing trailing"); ExtExpert.Deinit(); return(-5); } //--- Set trailing parameters trailing.StopLevel(Trailing_FixedPips_StopLevel); trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel); //--- Creation of money object CMoneyFixedLot *money=new CMoneyFixedLot; if(money==NULL) { //--- failed printf(__FUNCTION__+": error creating money"); ExtExpert.Deinit(); return(-6); } //--- Add money to expert (will be deleted automatically)) if(!ExtExpert.InitMoney(money)) { //--- failed printf(__FUNCTION__+": error initializing money"); ExtExpert.Deinit(); return(-7); } //--- Set money parameters money.Percent(Money_FixLot_Percent); money.Lots(Money_FixLot_Lots); //--- Check all trading objects parameters if(!ExtExpert.ValidationSettings()) { //--- failed ExtExpert.Deinit(); return(-8); } //--- Tuning of all necessary indicators if(!ExtExpert.InitIndicators()) { //--- failed printf(__FUNCTION__+": error initializing indicators"); ExtExpert.Deinit(); return(-9); } //--- ok return(0); } //+------------------------------------------------------------------+ //| Deinitialization function of the expert | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ExtExpert.Deinit(); } //+------------------------------------------------------------------+ //| "Tick" event handler function | //+------------------------------------------------------------------+ void OnTick() { ExtExpert.OnTick(); } //+------------------------------------------------------------------+ //| "Trade" event handler function | //+------------------------------------------------------------------+ void OnTrade() { ExtExpert.OnTrade(); } //+------------------------------------------------------------------+ //| "Timer" event handler function | //+------------------------------------------------------------------+ void OnTimer() { ExtExpert.OnTimer(); } //+------------------------------------------------------------------+
Expert Advisor의 코드는 여러 섹션으로 구성됩니다.
프로그램 속성을 설명하는 섹션:
#property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00"
포함된 파일:
#include <Expert\Expert.mqh> //--- available signals #include <Expert\Signal\SignalMA.mqh> //--- available trailing #include <Expert\Trailing\TrailingFixedPips.mqh> //--- available money management #include <Expert\Money\MoneyFixedLot.mqh>
CExpert 클래스의 코드 (해당 인스턴스는 Expert Advisor에서 사용됨)는 Expert.mqh 파일에 있습니다.
SignalMA.mqh 파일에는 선택된 무역 신호 클래스인 CSignalMA의 소스 코드가 포함되어 있습니다. TrailingFixedPips.mqh 파일에는 Trailing 오픈 포지션 알고리즘 클래스의 소스 코드인 CTrailingFixedPips가 포함되어 있습니다. 자금 및 위험 관리는 MoneyFixedLot.mqh 파일에 포함된 CMoneyFixedLot 클래스에 의해 구현됩니다.
다음은 Expert Advisor의 입력 매개 변수입니다.
//--- inputs for expert input string Expert_Title ="TestExpert"; // Document name ulong Expert_MagicNumber =23689; // bool Expert_EveryTick =false; // //--- inputs for main signal input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100] input int Signal_ThresholdClose =10; // Signal threshold value to close [0...100] input double Signal_PriceLevel =0.0; // Price level to execute a deal input double Signal_StopLevel =50.0; // Stop Loss level (in points) input double Signal_TakeLevel =50.0; // Take Profit level (in points) input int Signal_Expiration =4; // Expiration of pending orders (in bars) input int Signal_MA_PeriodMA =85; // Moving Average(85,0,...) Period of averaging input int Signal_MA_Shift =0; // Moving Average(85,0,...) Time shift input ENUM_MA_METHOD Signal_MA_Method =MODE_SMA; // Moving Average(85,0,...) Method of averaging input ENUM_APPLIED_PRICE Signal_MA_Applied =PRICE_CLOSE; // Moving Average(85,0,...) Prices series input double Signal_MA_Weight =1.0; // Moving Average(85,0,...) Weight [0...1.0] //--- inputs for trailing input int Trailing_FixedPips_StopLevel =30; // Stop Loss trailing level (in points) input int Trailing_FixedPips_ProfitLevel=50; // Take Profit trailing level (in points) //--- inputs for money input double Money_FixLot_Percent =10.0; // Percent input double Money_FixLot_Lots =0.1; // Fixed volume
처음 세 개의 매개 변수 (Expert_Title, Expert_MagicNumber 및 Expert_EveryTick)는 일반적입니다. 선택한 거래 신호, Trailing, 돈 및 위험 관리 알고리즘에 관계없이 항상 존재합니다.
Expert_Title 매개 변수 문자열은 Expert Advisor의 이름을 지정하고 Expert_MagicNumber는 ID를 지정하며 (이 값은 거래 요청의 매개 변수에 사용됨) Expert_EveryTick 매개 변수는 EA의 작업 모드를 설정하는 데 사용됩니다. Expert_EveryTick이 true로 설정된 경우 Expert Advisor는 작업 심볼에 대해 새 틱이 올 때마다 핸들러 함수 (거래 조건 확인, 거래 작업 커밋, 오픈 포지션 Trailing)를 호출합니다.
Expert Advisor의 일반 매개 변수 다음에 선택한 거래 신호 알고리즘에 대한 입력 매개 변수가 제공됩니다 (이 경우 CSignalMA 클래스에서 사용되는 매개 변수).
트레일링 오픈 포지션의 CTrailingStopFixedPips 클래스를 선택했습니다. 손절매와 이익 실현 수준에 의해 결정된 고정된 거리에서 오픈 포지션을 추적하며, 그 값은 "정상" 2/4 자리 포인트로 정의됩니다. 가격이 Trailing_FixedPips_StopLevel 레벨에서 설정한 포인트 수를 초과하는 거리별로 오픈 포지션으로 이동하면 Expert Advisor는 손절매 및 이익 실현 레벨 값을 수정합니다 (Trailing_FixedPips_ProfitLevel> 0 인 경우).
Money_FixLot_Percent 및 Money_FixLot_Lots 입력 매개 변수는 CMoneyFixedLot 클래스에 구현 된 고정 거래 랏이 있는 알고리즘의 매개 변수에 해당합니다. 우리의 경우 거래는 Money_FixLot_Lots 값과 동일한 고정 거래량으로 수행됩니다.
CMoneyFixedLot 클래스는 또한 위험 관리 알고리즘을 구현합니다. Inp_Money_FixLot_Percent 매개 변수에 지정된 손실 (현재 자본의 주어진 비율)이 있는 경우 CMoneyFixedLot 클래스가 권장합니다. Expert Advisor가 무익한 직책을 강제로 폐쇄하고 그렇게 할 것입니다.
Expert Advisor의 입력 매개 변수 후에 CExpert 클래스의 ExtExpert 개체가 선언됩니다.
CExpert ExtExpert;
이것은 거래 전략 클래스의 인스턴스입니다.
CExpert 클래스의 인스턴스인 ExtExpert 개체는 CExpertSignal (거래 신호의 기본 클래스) 인 CExpertMoney의 하위 개체에 대한 참조를 포함합니다. (돈 및 위험 관리의 기본 클래스) 및 CExpertTrailing (Trailing 오픈 포지션의 기본 클래스) 클래스. 또한 CExpert 클래스에는 CExpertTrade, SSymbolInfo, CAccountInfo, CPositionInfo, COrderInfo, 클래스 및 CIndicators 컨테이너의 인스턴스가 포함됩니다.
Expert Advisor의 매개 변수를 설정하려면 해당 클래스의 인스턴스를 생성하고 ExtExpert 클래스에서 생성된 객체에 대한 참조를 지정해야 합니다.
Expert Advisor 초기화의 OnInit 기능을 살펴 보겠습니다. 여기에서 ExtExpert 클래스의 속성을 초기화하고 구성합니다.
1. ExtExpert 클래스 초기화:
//--- Initializing expert if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) { //--- failed printf(__FUNCTION__+": error initializing expert"); ExtExpert.Deinit(); return(-1); }
ExtExpert 객체는 Init 메소드를 사용하여 초기화됩니다. 여기에서는 매 틱마다 호출되는 메소드의 기호, 타임 프레임, 플래그, Expert Advisor의 ID를 설정하고 클래스의 개인 개체를 만들고 초기화합니다 (이 단계에서는 CExpertSignal, CExpertMoney 및 CExpertTrailing 클래스는 신호, Trailing 및 자금 관리 개체로 사용됩니다.
ExtExpert 개체가 성공적으로 초기화되지 않으면 Expert Advisor가 반환 코드 -1로 종료됩니다.
2. Signal 객체 속성 생성 및 구성
//--- Creating signal CExpertSignal *signal=new CExpertSignal; if(signal==NULL) { //--- failed printf(__FUNCTION__+": error creating signal"); ExtExpert.Deinit(); return(-2); } //--- ExtExpert.InitSignal(signal); signal.ThresholdOpen(Signal_ThresholdOpen); signal.ThresholdClose(Signal_ThresholdClose); signal.PriceLevel(Signal_PriceLevel); signal.StopLevel(Signal_StopLevel); signal.TakeLevel(Signal_TakeLevel); signal.Expiration(Signal_Expiration); //--- Creating filter CSignalMA CSignalMA *filter0=new CSignalMA; if(filter0==NULL) { //--- failed printf(__FUNCTION__+": error creating filter0"); ExtExpert.Deinit(); return(-3); } signal.AddFilter(filter0); //--- Set filter parameters 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 마법사에서 매개 변수가 지정된 방법에 따라 적절한 코드가 생성됩니다.
//--- Set signal parameters filter0.PeriodMA(85); //--- Parameter was set as fixed in MQL5 Wizard //--- (gray icon - fixed value equal to 85) filter0.SlowPeriod(Signal_MA_Shift); //--- Parameter was set as input variable //--- (blue icon - input parameter of Expert Advisor)
파라미터가 고정되어 있고 해당 값이 기본값과 다르지 않으면 생성된 코드에 기록되지 않습니다. 이 경우 매개 변수의 기본값 (해당 클래스에 지정됨)이 사용됩니다.
3. Trailing 개체 속성 생성 및 구성
//--- Creation of trailing object CTrailingFixedPips *trailing=new CTrailingFixedPips; if(trailing==NULL) { //--- failed printf(__FUNCTION__+": error creating trailing"); ExtExpert.Deinit(); return(-4); } //--- Add trailing to expert (will be deleted automatically)) if(!ExtExpert.InitTrailing(trailing)) { //--- failed printf(__FUNCTION__+": error initializing trailing"); ExtExpert.Deinit(); return(-5); } //--- Set trailing parameters trailing.StopLevel(Trailing_FixedPips_StopLevel); trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);Trailing 개체의 구성도 여러 단계로 구성됩니다.
- Trailing 개체 생성;
- 전문가에게 Trailing 추가;
- Trailing 매개 변수 설정.
Trailing 개체가 성공적으로 초기화되지 않으면 Expert Advisor는 오류가 발생한 단계에 따라 반환 코드 (-4에서 -5)와 함께 종료됩니다.
4. 머니 오브젝트 속성 생성 및 구성
//--- Creation of money object CMoneyFixedLot *money=new CMoneyFixedLot; if(money==NULL) { //--- failed printf(__FUNCTION__+": error creating money"); ExtExpert.Deinit(); return(-6); } //--- Add money to expert (will be deleted automatically)) if(!ExtExpert.InitMoney(money)) { //--- failed printf(__FUNCTION__+": error initializing money"); ExtExpert.Deinit(); return(-7); } //--- Set money parameters money.Percent(Money_FixLot_Percent); money.Lots(Money_FixLot_Lots);
자금 및 위험 관리 개체의 구성도 4 단계로 구성됩니다.
- 화폐 개체 생성;
- 전문가에게 돈을 추가합니다.
- 화폐 매개 변수 설정.
money object가 성공적으로 초기화되지 않으면 Expert Advisor는 오류가 발생한 단계에 따라 반환 코드 (-6 ~ -7)와 함께 종료됩니다.
5. 클래스에서 사용되는 모든 인디케이터 초기화
//--- Check all trading objects parameters if(!ExtExpert.ValidationSettings()) { //--- failed ExtExpert.Deinit(); return(-8); } //--- Tuning of all necessary indicators if(!ExtExpert.InitIndicators()) { //--- failed printf(__FUNCTION__+": error initializing indicators"); ExtExpert.Deinit(); return(-9); } //--- ok return(0);
거래 신호, 추적 및 자금 관리의 개체를 만들고 초기화 한 후 ExtExpert의 ValidationSettings() 메소드가 호출됩니다. 그 후 ExtExpert 개체의 InitIndicators() 메소드가 호출됩니다. 시그널, 트레일링 및 머니 오브젝트에 사용되는 인디케이터를 초기화합니다.
OnTick, OnTrade 및 OnTimer 이벤트 처리는 ExtExpert 클래스의 적절한 메소드를 호출하여 수행됩니다.
CExpert 메소드 구현에 대한 세부 사항을 알고 싶다면 '\<client_terminal_directory>\MQL5\Include\Expert\expert.mqh'에 있는 인디케이터의 소스 코드를 볼 수 있습니다.
3. MetaTrader 5 Strategy Tester에서 생성된 Expert Advisor 확인
표준 라이브러리의 모든 구성 요소가 있으면 생성된 Expert Advisor의 코드가 성공적으로 컴파일 됩니다.
그림 10. MQL5 마법사에서 생성된 Expert Advisor 소스 코드의 성공적인 컴파일
결과 Expert Advisor는 선택된 거래 신호, 취소 포지션 및 돈 및 위험 관리의 선택된 알고리즘에 따라 거래됩니다.
MetaTrader 5 클라이언트 터미널에서 전략 테스터를 사용하여 새로 생성 된 거래 시스템이 어떻게 작동하는지 확인할 수 있습니다. 그림 11에서는 기본 설정 (EURUSD, H1, 2010.01.01-2011.06.01)으로 과거 데이터에 대한 테스트 결과를 볼 수 있습니다.
그림 11. 과거 데이터에 대한 Expert Advisor 테스트 결과 (EURUSD, H1)
최고의 Expert Advisor 매개 변수 세트는 MetaTrader 5 Strategy Tester의 최적화 후에 찾을 수 있습니다.
결론
거래 전략 클래스를 사용하면 거래 아이디어의 생성 및 테스트가 상당히 쉬워집니다. 이제 Expert Advisor의 전체 소스 코드는 즉시 사용 가능한 표준 라이브러리 모듈 또는 자체 모듈을 기반으로 MQL5 마법사를 사용하여 MetaEditor에서 직접 구성할 수 있습니다.
자체 거래 신호 모듈을 작성하고 싶지 않거나 작성할 수 없는 경우 항상 일자리 서비스의 혜택을 받고 전체 거래 로봇을 주문하거나 필수 모듈만 주문할 수 있습니다. 이 접근 방식은 다음과 같은 추가 이점을 제공합니다.
- 개별 모듈의 개발 비용은 전체 Expert Advisor의 비용보다 낮아야 합니다.
- 결과 모듈은 MQL5 마법사를 사용하여 독립형 Expert Advisor 및 전체 거래 로봇 제품군 (이 모듈 기반)을 생성하는 데 재사용 할 수 있습니다.
- 주문 된 모듈은 MQL5 마법사의 추가 요구 사항을 엄격히 준수해야하며, 이를 통해 코드 품질을 추가로 제어 할 수 있습니다.
MetaQuotes 소프트웨어 사를 통해 러시아어가 번역됨.
원본 기고글: https://www.mql5.com/ru/articles/171
![퍼지 로직 (Fuzzy Logic)을 이용한 인디케이터 생성의 간단한 예](https://c.mql5.com/2/0/Fuzzy_logic_MQL5.png)
![성장하는 신경 가스: MQL5 구현](https://c.mql5.com/2/0/neural_gas_MQL5.png)
![표준 라이브러리 클래스를 사용하여 나만의 Market Watch 만들기](https://c.mql5.com/2/0/visual.png)
!["New Bar" 이벤트 핸들러](https://c.mql5.com/2/0/new_bar_born.png)