MT4-테스터 대 MT5-테스터

 
오랜 아이디어를 실현하기 위해 손을 뻗었다

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

"MetaTrader 4에서 MQL5 마법사 작업의 기성품 전문가 고문" 기사에 대한 토론

fxsaber , 2017.03.09 13:02

비교를 위해 Tick Data Suite 평가판을 사용하는 것이 좋습니다(호환: MT4 빌드 940 - 1052).

MT5 테스터에서 "by real ticks" 모드를 선택합니다. 저장하고 TDS를 통해 MT4 테스터에 공급하십시오.

T‌두 테스터의 견적이 100% 일치하면 트랜잭션 측면뿐만 아니라 속도 측면에서도 정확하게 비교할 수 있습니다.

그러면 Expert Advisors의 전환/생성을 양방향으로 비교할 수 있습니다.

MT4 빌드 1072, MT5 빌드 1596 Alpari-MT5 거래 서버.

MT4 테스터 설정 스크린샷

두 테스터의 통화는 USD입니다. 이것은 EURUSD의 동일한 MT5 테스터에서 변환 기호의 더 많은 눈금을 가져오지 않도록 합니다.


우리는 두 테스터 모두에서 이러한 크로스 플랫폼 Expert Advisor를 시작합니다.

 // MQL4&5-code

#property strict

class FILE
{
private :
   const int handle;
  
   static string TickToString( const MqlTick &Tick, const string Delimeter = " " )
  {
     return (:: DoubleToString (Tick.ask, _Digits ) + Delimeter + :: DoubleToString (Tick.bid, _Digits ));
  }
public :  
  FILE( const string FileName ) : handle(:: FileOpen (FileName, FILE_WRITE | FILE_TXT | FILE_ANSI ))
  {
  }
  
  ~FILE( void )
  {
     if ( this .handle != INVALID_HANDLE )
      :: FileClose (handle);       
  }
  
   bool Write( const MqlTick &Tick ) const
  {
     return (( this .handle != INVALID_HANDLE ) && :: FileWriteString ( this .handle, FILE::TickToString(Tick) + "\n" ));
  }
};

const FILE File(:: MQLInfoString ( MQL_PROGRAM_NAME ) + ".txt" );

void OnTick ()
{
   MqlTick Tick;
  
   if ( SymbolInfoTick ( _Symbol , Tick))
    File.Write(Tick);
}


MT4 테스터 로그

 2017.05 . 07 23 : 25 : 36.155 EURUSD,M1: 1865415 tick events ( 7292 bars, 1865515 bar states) processed in 0 : 00 : 02.528 (total time 0 : 00 : 03.292 )


MT5 테스터 로그

 2017.05 . 07 23 : 26 : 01.016 Core 1   EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0 : 00 : 01.918 (including ticks preprocessing 0 : 00 : 00.203 ).

우리는 각 테스터로부터 받은 파일이 동일한지 확인합니다. 테스터의 틱은 동일합니다.


이것으로 주제에 대한 두 테스터의 준비가 완료되었습니다.

 

조언자

 // MQL4&5-code

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#ifdef __MQL5__
   #define Bid ( SymbolInfoDouble ( _Symbol , SYMBOL_BID ))
   #define Ask ( SymbolInfoDouble ( _Symbol , SYMBOL_ASK ))
#endif // __MQL5__

// Idea - https://www.mql5.com/ru/code/7464
#property strict

input int Shift = 3 ; 
input int Limit = 18 ;
input double Lots = 0.1 ;

int PriceToInteger( const double Price )
{
   return (( int )(Price / _Point + 0.1 ));
}

void OnTick ()
{
   static int PrevBid = PriceToInteger( Bid );
   static int PrevAsk = PriceToInteger( Ask );    

   const int IntBid = PriceToInteger( Bid );
   const int IntAsk = PriceToInteger( Ask );
  
   const bool TradeTime = ( TimeCurrent () % ( 24 * 60 * 60 ) < D'1970.01.01 23:50' ); // exclude swaps
  
   if (TradeTime && (IntAsk - IntBid < Limit))
  {
     if ((IntBid - PrevBid >= Shift)) 
       OrderSend ( _Symbol , OP_SELL , Lots, Bid , 0 , 0 , 0 );
    
     if (PrevAsk - IntAsk >= Shift) 
       OrderSend ( _Symbol , OP_BUY , Lots, Ask , 0 , 0 , 0 );
  }

  PrevBid = IntBid;
  PrevAsk = IntAsk;
  
   for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--) 
     if ( OrderSelect (i, SELECT_BY_POS ) && ((!TradeTime) || ( OrderProfit () > 0 ) ||
        (( OrderType () == OP_BUY )  && (PriceToInteger( OrderOpenPrice ()) - IntBid >= Limit)) ||
        (( OrderType () == OP_SELL ) && (IntAsk - PriceToInteger( OrderOpenPrice ()) >= Limit)))) 
       OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 0 ); 
}


결과


MT4 보고서

Strategy Tester Report
운이 좋은
MetaQuotes 데모(빌드 1072)

상징 EURUSD(유로 vs USD)
기간 1분 (M1) 2017.04.10 00:00 - 2017.04.14 20:58 (2017.04.10 - 2017.04.16)
모델 모든 틱(가용 가능한 모든 시간 프레임을 기반으로 한 가장 정확한 방법)
옵션 시프트=3; 제한=18; 로트=0.1;
역사의 바 7292 시뮬레이션된 진드기 1865515 시뮬레이션 품질 99.00%
그래프 불일치 오류 0
초기 보증금 100000.00 확산 변하기 쉬운
순이익 -10863.90 총 이윤 2528.70 총 손실 -13392.60
수익성 0.19 우승 기대 -0.49
절대 드로다운 10864.70 최대 드로다운 10864.70 (10.86%) 상대적인 하락 10.86% (10864.70)
총 거래 21954 숏포지션(%원) 12016년 (68.60%) 롱포지션(%원) 9938 (67.03%)
수익성 있는 거래(전체의 %) 14904 (67.89%) 거래 손실(전체의 %) 7050 (32.11%)
가장 큰 수익성 있는 거래 3.00 무역 손실 -4.40
중간 수익성 있는 거래 0.17 무역 손실 -1.90
최대 금액 연속 우승(이익) 155 (46.60) 연속 손실(손실) 115 (-210.10)
최대 연속 이익 (승수) 46.60 (155) 연속 손실(손실 수) -210.10 (115)
평균 연속 이득 5 지속적인 손실 2


MT5 보고서

전략 테스터 보고서
Alpari-MT5(빌드 1596)
설정
조언자: 운이 좋은
상징: EURUSD
기간: 엠원 (2017.04.10 - 2017.04.16)
옵션: 시프트=3
제한=18
로트=0.1
브로커: 알파리 인터내셔널 리미티드
통화: USD
초기 보증금: 100 000.00
어깨: 1:100
백테스트
기록 품질: 해당 없음
바: 7192 티키: 1865415 기호: 하나
순이익: -10 863.90 잔액에 의한 절대 손실: 10 863.90 다음을 통한 절대적 감소: 10 864.70
총 이윤: 2 528.70 잔액별 최대 인출액: 10 863.90 (10.86%) 자기자본으로 인한 최대 손실액: 10 864.70 (10.86%)
총 손실: -13 392.60 잔액별 상대적 하락: 10.86% (10 863.90) 자기 자본에 의한 상대적 하락: 10.86% (10 864.70)
수익성: 0.19 우승 기대치: -0.49 마진 수준: 863.58%
회복 계수: -1.00 샤프 비율: -0.50 Z-점수: -52.22 (99.74%)
AHPR: 1.0000(-0.00%) LR 상관관계: -1.00 온테스터 결과: 0
GHPR: 1.0000(-0.00%) LR 표준 오차: 149.82
총 거래: 21954 짧은 거래(% 승): 12016년 (68.60%) 긴 거래(% 승): 9938 (67.03%)
총 거래: 43908 수익성 있는 거래(전체의 %): 14904 (67.89%) 손실 거래(전체의 %): 7050 (32.11%)
가장 큰 수익을 내는 거래: 3.00 가장 큰 손실 거래: -4.40
평균 수익성 거래: 0.17 평균 손실 거래: -1.90
최대 연속 상금 수(이익): 155 (46.60) 최대 연속 손실 수(손실): 115 (-210.10)
최대 연속 이익(승리 횟수): 46.60 (155) 최대 연속 손실(손실 수): -210.10 (115)
평균 연속 승리: 5 평균 연속 손실: 2


결과 일치!


성능

MT4 로그
 2017.05 . 08 01 : 45 : 42.765 EURUSD,M1: 1865415 tick events ( 7292 bars, 1865515 bar states) processed in 0 : 00 : 03.682 (total time 0 : 00 : 04.400 )


MT5 로그

 2017.05 . 08 02 : 04 : 53.278 Core 1   EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0 : 00 : 12.309 (including ticks preprocessing 0 : 00 : 00.203 ).


MT4 테스터는 MT5 테스터보다 3배 더 빨랐습니다. MT5 속도 저하가 타사 라이브러리 사용으로 인한 것인지 의심이 가는 경우 이 Expert Advisor의 간단한 MT4 논리를 MQL5에 자신의 방식으로 다시 작성하고 가설을 테스트할 수 있습니다.


Threat MT5 테스터는 손으로 모든 Bases 폴더를 청소할 때까지 훨씬 느리게 작업했습니다. 이러한 상황을 고려하여 결과를 제시합니다.

 

트랜잭션 기록에 빠르게 액세스할 수 있는 새 빌드(이번 주에 출시할 예정)의 Alpari-MT5-Demo 서버에서 다음을 얻었습니다.

EURUSD,M1: 1865417 ticks, 7192 bars generated. Test passed in 0 : 00 : 05.578 .

MT5는 데이터와 작업 자체를 에이전트의 외부 프로세스로 전송하기 위한 시스템 오버헤드가 있어 작은(초) 작업과 비교할 때 큰 오류가 발생합니다.

음, MT5에서 테스터의 복잡성과 품질은 1000분의 1초 더 정확합니다. 즉, 밀리초 정확도로 많은 계측기의 동기식 모델링, 세계 변화를 스크롤하는 동안의 공정한 슬립/지연 및 많은 작은 기능입니다. 같은 장소에서 비용의 순환이 아닙니다.


수십 배의 느린 속도 - 모든 데이터의 초기 초기화/동기화 및 다운로드와 혼동하지 않습니까? 모든 것이 로그에 기록됩니다. 디스크의 파일은 어떤 경우에도 건드리지 않아야 합니다.

%userdata%\MetaQuotes 디렉터리(예: C:\Users\%username%\AppData\Roaming\MetaQuotes)를 바이러스 백신 단계에 추가하는 것이 좋습니다. 데이터가 있고 패스에 바이러스 백신을 추가하면 터미널과 테스터의 데이터에 대한 액세스 속도가 크게 향상됩니다.

그렇지 않으면 그들은 metatester[64].exe가 실행되는 것을 보고 네트워크 포트와 터미널과 테스터가 작성한 많은 대용량 데이터 파일을 열 때 그러한 활발한 테스트 활동을 전개합니다. 일부 트레이더의 경우, 바이러스 백신이 실행 중인 metatester[64].exe 파일을 확인할 시간조차 없고 터미널이 몇 초 만에 액세스할 수 없기 때문에 테스터에게도 떨어질 시간이 있습니다.

 
Renat Fatkhullin :

MT5 테스터의 복잡성과 품질은 1000분의 1초 정확도로 많은 계측기의 동기식 모델링, 세계 변화의 스크롤 중 공정한 슬립/지연 및 많은 작은 기능과 같이 훨씬 더 높습니다.

이것은 MT4+TDS 조합에도 있습니다. 또한 MT5에는 없는 기능이 몇 가지 더 있습니다. 하지만 물론 다중 통화는 없습니다.

약 10배 더 느림

처음에는 TDS가 특히 MT5를 느리게 한다고 생각하여 메모리를 지웠습니다. 동시에 Bases 폴더(디스크 공간이 부족함). 그 후 MT5는 단일 실행을 2배 더 빠르게 수행하기 시작했습니다(그 전에는 재부팅해도 도움이 되지 않았습니다). 아무리 생각해도 TDS 브레이크에 대한 가설을 확인할 수 없었다. 컴퓨터에 바이러스 백신이 없었습니다.

Alpari-MT5 서버 - 실제.


위협 전체 검색을 위한 MT4-optimizer 출시 - 14분. MT5(요원 한 명만 남음) - 시간이 많이 걸릴 것 같습니다. 결과는 오전/오후 게시하겠습니다.

 

전표는 어디에서 왔습니까?

당신은 완전히 다른 것을 의미합니다. MT5 테스터에서 Delay 필드로 플레이하면 완전히 다른 것을 알 수 있습니다. MQL5 코드의 일반적인 Sleep(2500)도 테스터에서 실행될 때 전 세계가 계속 모델링될 때 코드에 지연이 발생합니다. 실행 지연 필드 는 서버에 100ms 핑을 보낸 경우 거래가 실행되는 방식을 효과적으로 보여줍니다.

차수 브레이크가 있을 수 없습니다. 그리고 MT5가 자체적으로 잘 작동하는데 왜 MT5에 추가 사항이 있어야 합니까?

검색 정보 - 설정 및 제한이 없습니다.
 

바이러스 백신 부족에 대해-오랫동안 7의 모든 버전에는 이미 모든 파일을 잘 검사하는 정기적이고 눈에 띄지 않는 Windows Defender가 있습니다.

때로는 SSD 드라이브에서도 파일 작업에 눈에 띄는 지연이 발생합니다.

 

흉상(시작 시 100,000 USD)


MT4의 슬립(틱 기록의 밀리초는 제대로 작동해야 함) 및 기타 유용성


 
Renat Fatkhullin :

바이러스 백신 부족에 대해-오랫동안 7의 모든 버전에는 이미 정규적이고 눈에 띄지 않는 Windows Defender 가 있습니다. 모든 파일을 아주 잘 검색합니다.

장애가 있는. 이미 최적화에 대한 강력한 MT5 속도 저하를 볼 수 있는 모든 데이터가 있습니다. 비교 최적화 결과 는 MT5 작업이 끝나면 게시됩니다.
 
나는 중복으로 아이디어를 잡지 못했습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

fxsaber , 2017.05.07 21:55

Alpari-MT5 거래 서버

FOREX 기호의 틱 기록에 중복 틱이 있는 이유는 무엇입니까?

테스터는 Expert Advisors를 중복으로 구동하고 그 중 절반이 있습니다. 그에 상응하는 성능 저하를 두 번 얻을 필요가 있습니까?

 

당신은 아직도 내가 말하는 슬립이 무엇인지 이해하지 못하고 있습니다. MT4에서는 기본적으로 작동하지 않습니다.

틱이 아니라 µl5 프로그램을 실행하는 과정에서 멈출 때 틱이 계속되고 세상이 도는 것입니다. Sleep(3000)을 작성하고 프로그램은 3초를 기다리며 틱이 틱하는 동안 시장이 시뮬레이션됩니다.

테스터에서 실행 지연 필드를 200ms로 설정하면 거래를 실행할 때 200의 네트워크 대기 시간이 시뮬레이션되어 시장 미끄러짐이나 재호 가가 발생합니다.

또한 이것은 다중 통화 시스템의 프레임워크 내에서 시장 프로세스를 모델링하는 완전히 다른 강력한 수준입니다. 그리고 더 중요한 것은 멀리 떨어진 양도할 수 있는 과정에서입니다. 예를 들어, 10,000km 떨어진 에이전트가 작업을 실행하는 동안 코드에서 누락된 기호에 대한 액세스에 대한 동적 요청을 갑자기 수신하고 마스터에게 이 데이터를 요청하고 이를 시장 세계에 통합하고 계속 실행할 수 있습니다.

 
Renat Fatkhullin :

당신은 아직도 내가 말하는 슬립이 무엇인지 이해하지 못하고 있습니다. MT4에서는 기본적으로 작동하지 않습니다.

틱이 아니라 µl5 프로그램을 실행하는 과정에서 멈출 때 틱이 계속되고 세상이 도는 것입니다. Sleep(3000)을 작성하고 프로그램은 3초를 기다리며 틱이 틱하는 동안 시장이 시뮬레이션됩니다.

이것은 MT4에서 지금 작동하지 않습니다.

테스터에서 실행 지연 필드를 200ms로 설정하면 거래를 실행할 때 200의 네트워크 대기 시간이 시뮬레이션되어 시장 미끄러짐이나 재호가가 발생합니다.

이제 MT4에서 작동합니다.

또한 이것은 다중 통화 시스템의 프레임워크 내에서 시장 프로세스를 모델링하는 완전히 다른 강력한 수준입니다. 그리고 더 중요한 것은 멀리 떨어진 양도할 수 있는 과정에서입니다. 예를 들어, 10,000km 떨어진 에이전트가 작업을 실행하는 동안 코드에서 누락된 기호에 대한 액세스에 대한 동적 요청을 갑자기 수신하고 마스터에게 이 데이터를 요청하고 이를 시장 세계에 통합하고 계속 실행할 수 있습니다.

MT5를 폄하하려는 의도는 아닙니다. 재현 가능한 비교만 가능합니다. 물론 MT5 테스터는 어떤 면에서는 도달할 수 없지만 튜닝 MT4는 이제 MT5에는 없지만 실제로 수요가 있는 것을 제공할 수 있습니다. 우리는 MT4에서 실제 커스텀 틱에 대한 정확한 테스트가 100% 사실임을 확인했습니다. 뭐, 테스터의 각종 설정(커미션, 들여쓰기, 예치금 활성화 규칙 등)에 대한 규제가 가능합니다. 일반적으로 아직 MT5에서 근본적으로 구현되지 않은 것들이 있습니다.
사유: