인기 게시물

에디터의 선택 - 2019

MQL4 : MT4 및 MT5에 대한 고문을 한 번에 하나씩 작성합니다.

인사말, 친구들!

많은 사람들이 이미이 불편에 두 번 이상 직면했을 것입니다 .mql4에서 고문을 작성한 다음 MetaTrader 5로 게임을 해보고 싶었습니다. 모든 코드를 다시 작성하는 것은 다소 번거롭고 긴 작업이며 먼저 기존 코드의 작업을 처리해야합니다 . MT4와 MT5에 대해 두 개의 다른 Expert Advisor를 별도로 작성하는 것도 시간이 많이 걸립니다. 우리는 오늘 새로운 비디오 튜토리얼에서이 문제를 해결할 것입니다.

어떻게해야합니까? 대답은 간단합니다. 한 번에 두 터미널에 대해 하나의 조언자를 작성하십시오. 결국, 대부분의 경우, mql4와 mql5 언어는 그다지 다르지 않으며, 이러한 언어에서 많은 방법과 스크립트의 기본 구조는 비슷합니다. 하나의 스크립트로 공통 코드를 작성할 수 있고 다른 섹션을 두 언어로 다시 작성하여 컴파일러가 필요한 코드를 선택하도록 강요하면 많은 시간과 신경을 절약 할 수 있습니다.

다행히 MetaEditor는 전 처리기 조건부 컴파일 지시문을 지원합니다. 그리고 오늘 우리는 이것이 매우 간단한 예를 사용하여 어떻게 수행되는지 살펴볼 것입니다.

#ifdef identifier // #define 명령에서 사전 처리기에 식별자가 이미 정의 된 경우 여기의 코드가 컴파일됩니다. #endif

MT5의 코드에서 #define 지시문을 사용하여 MQL4의 변수를 대체합니다.

#ifdef __MQL5__ #define OrdersTotal PositionsTotal #endif

고문의 머리글에 입력 변수를 배치합니다.

입력 int Stop = 300; 입력 int Take = 400; 입력 int 슬립 = 100; 입력 int MN = 123; 이중 입력 LT = 0.1;

이제 구매 및 판매 방법을 작성할 수 있습니다.

bool 구매 (더블 가격, 더블 sl, 더블 tp) {#ifdef __MQL4__ int ticket = OrderSend (기호 (), 0, LT, 가격, 슬립, sl, tp, "", MN); if (티켓 <0) {PrintFormat ( "OrderSend error % d", GetLastError ()); } #endif #ifdef __MQL5__ // --- 쿼리 및 결과의 선언 및 초기화 MqlTradeRequest request = {0}; MqlTradeResult 결과 = {0}; // --- 요청 매개 변수 request.action = TRADE_ACTION_DEAL; // 거래 ​​운영 유형 request.symbol = Symbol (); // 문자 request.volume = LT; // 볼륨 request.type = 0; // 주문 유형 request.price = price; // 요청 개시 가격 .sl = sl; // 가격 StopLoss request.tp = tp; // 가격 TakeProfit request.deviation = 슬립; // 가격 요청에서 허용되는 편차 .magic = MN; // MagicNumber 주문 // --- 요청 보내기 if (! OrderSend (요청, 결과)) {// 요청을 보낼 수 없으면 오류 코드를 인쇄합니다 PrintPrint ( "OrderSend error % d", GetLastError ()); } // --- PrintFormat 작업에 대한 정보 ( "retcode = % u deal = % I64u order = % I64u", result.retcode, result.deal, result.order); #endif // --- return (false); }

판매 방법은 buy () 방법과 유사합니다. 우리는이 예제에서 전략에 대해 특별히 생각하지 않을 것입니다. 우리는 무작위로 여는 조건을 받고이 코드를 OnTick ()에 넣습니다 :

int oper = (int) (GetTickCount () % 2); // 2로 나눈 나머지는 항상 0 또는 1입니다. (oper == 0) {double price = Ask; double SL = NormalizeDouble (입찰-중지 * _Point, _Digits); 이중 TP = NormalizeDouble (입찰 + 테이크 * _Point, _Digits); 구매 (Ask, SL, TP); } if (oper == 1) {double price = 입찰; double SL = NormalizeDouble (Ask + Stop * _Point, _Digits); double TP = NormalizeDouble (Ask-Take * _Point, _Digits); 매도 (Ask, SL, TP); }

결론

그게 다야 이제 MetaEditor 4 및 MetaTrader 4 터미널에서 코드를 컴파일 할 수 있습니다. MetaEditor 5에서 Expert Advisor를 컴파일 할 수 있으며 MetaTrader 5 터미널에서 정상적으로 작동 할뿐만 아니라 터미널을 변경하기 위해 한 줄의 코드를 다시 작성할 필요가 없습니다. 모든 것이 컴파일되고 제대로 작동합니다.

비디오 시청: Robot Building Tutorials #6 - Intro to MQL4 (12 월 2019).

귀하의 코멘트를 남겨