MT4-테스터 대 MT5-테스터 - 페이지 3

 
fxsaber :
증거

이것은 증거가 아닙니다.

당신은 착각하고 있습니다.

내 진술은 유효합니다. 지정된 전문가 는 거래 내역에 대한 액세스만 테스트합니다.
 
Renat Fatkhullin :

이것은 증거가 아닙니다.

당신은 틀렸다.

실수는 어디에 있습니까? 직접 확인도 하고 History 기능이 있는 곳마다 BreakPoint를 설정하고 CTRL+F5로 디버깅을 시작했습니다. 모든 것이 깨끗하게 작동했습니다.
레나트 팻쿨린 :
내 진술은 유효합니다. 지정된 전문가 는 거래 내역에 대한 액세스만 테스트합니다.

결론에 도달했습니다.

 

나는 그러한 비교가 의미가 있는지 확신하지 못합니다. 클라우드 컴퓨팅 은 속도 면에서 MT4 테스터의 모든 이점을 아무 것도 아닙니다.

게다가 이 경우 실제로 고문은 데이터 액세스 속도만 테스트합니다. 그러나 나는 이것이 대부분의 고문에게 "병목 현상"이라고 생각하지 않습니다.

MT5에 헤지 포지션이 있는 계정이 도입된 후, 저는 개인적으로 MT4에 대해 한 가지 플러스도 보지 못했습니다. 실제 계정에 MT4가 있기 때문에 크로스 플랫폼 라이브러리만 사용합니다.

내가 개인적으로 부족한 유일한 것은 배열에 대한 포인터 또는 참조입니다. 표시기의 데이터를 다시 한 번 복사할 필요가 없도록 합니다. 다른 모든 것은 MQL5에 있습니다.

Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Заработать деньги, продавая мощности своего компьютера для сети распределенных вычислений MQL5 Cloud Network
 
fxsaber :
결론에 도달했습니다.
또 뭐가 있나요? 데이터 요청 및 파일로 던지기. 더 이상 조치를 취하지 않는 것 같습니다. 이 Expert Advisor가 테스트 중인 것으로 생각하십니까?
 
fxsaber :

위협 모든 실행이 완벽하게 일치하는 것은 아닙니다. 이것은 세 가지 중 하나가 확실히 거짓말을 한다는 것을 의미합니다(MT4+TDS, MT5 , MT4Orders). 추구합니다.

주제 덕분에 범인이 밝혀졌고, 비교할 기회가있을 때 항상 발생합니다.

버그를 보여주는 전문가 고문

 // MQL4&5-code

#property strict

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

#define PRINT(A) Print ( #A + " = " + ( string )(A));

void OnTick ()
{
   static bool FirstRun = true ;
  
   static const double PrevBid = Bid ;
   static const double PrevAsk = Ask ;
  
   if (FirstRun)
  {
    PRINT((PrevBid != Bid ) || (PrevAsk != Ask ))
    
    FirstRun = false ;
  }
}


MT4

 2017.05 . 08 10 : 57 : 33.056 2017.04 . 10 00 : 00 : 08   TDS_Test EURUSD,M1: (PrevBid!= Bid )||(PrevAsk!= Ask ) = false


MT5

 2017.05 . 08 11 : 01 : 31.266 2017.04 . 10 00 : 00 : 08    (PrevBid!= Bid )||(PrevAsk!= Ask ) = true
 
George Merts :
또 뭐가 있나요? 데이터 요청 및 파일로 던지기. 더 이상 조치를 취하지 않는 것 같습니다. 이 Expert Advisor가 테스트 중인 것으로 생각하십니까?
나는 전체 토론을 읽을 것을 제안합니다. 그러면 그러한 질문은 일어나지 않을 것입니다.
조지 머츠 :

MT5에 헤지 포지션이 있는 계정이 도입된 후, 저는 개인적으로 MT4에 대해 한 가지 플러스도 보지 못했습니다.

이 분기는 구성물의 농도에 의해 다소 구별됩니다. 따라서 예를 들어 여기 에서 개인 취향에 대해 이야기하는 것이 좋습니다.

 
fxsaber :
실수는 어디에 있습니까? 직접 확인도 하고 History 기능이 있는 곳마다 BreakPoint를 설정하고 CTRL+F5로 디버깅을 시작했습니다. 모든 것이 깨끗하게 작동했습니다.

결론에 도달했습니다.

모든 것에서:

  1. 히스토리에 대한 작업이 한창 진행 중이며 히스토리 스캔 후 거래가 종료됩니다.
  2. MT4Orders.mqh를 사용하는 것은 실험의 순수성을 즉시 끝내는 것입니다. 역겹고 읽을 수 없는 오버헤드가 있는 무시무시한 도서관. 누군가 심하게 게으름을 보였다
  3. for(i=200 000; i>=0; i--) 각 틱 에 대한 OrderSelect 쓰기는 광기이며 일본 톱과 러시아 농민에 대한 농담을 독점적으로 반복하려는 시도입니다.
       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 );
    
  4. 전체 테스트는 포인트 3의 주기를 위해서만 작성되었습니다.

    테스트에서 대략 1,800,000틱을 사용하며 5일 동안 200,000개의 거래가 열립니다. 단순화를 위해 900,000틱으로 단순화합니다. 여기서 히스토리의 100,000개 주문이 스캔되고 900,000 * 100,000 = 900,000,000,000 OrderSelect 호출이 발생합니다(심지어 라이브러리의 오버헤드 포함). 그것이 9000억 개의 OrderSelect와 테스트입니다.

    그리고 이 중 99.99%의 호출은 절대적으로 불필요하며 "브레이크"를 시연하기 위한 목적으로만 이루어집니다.


깨끗한 테스트를 실행하려면 라이브러리 없이 동일한 두 개의 깨끗한 예제를 작성하십시오. 따라서 호환성을 위해 기본 제공 오버헤드가 없고 순도가 보장됩니다.

우리는 기록 액세스를 최적화하고 이 데모를 완전히 무효화했습니다. 그녀는 일부러 그렇게 썼습니다.

 
Renat Fatkhullin :

모든 것에서:

  1. 히스토리에 대한 작업이 한창 진행 중이며 히스토리 스캔 후 거래가 종료됩니다.
어디에?
  1. MT4Orders.mqh를 사용하는 것은 실험의 순수성을 즉시 끝내는 것입니다. 역겹고 읽을 수 없는 오버헤드가 있는 무시무시한 도서관. 누군가 심하게 게으름을 보였다
나였 어.
  1. for(i=200 000; i>=0; i--) 각 틱 에 대한 OrderSelect 쓰기는 광기이며 일본 톱과 러시아 농민에 대한 농담을 독점적으로 반복하려는 시도입니다.
MQL4를 완전히 잊어버렸습니다. 여기에는 역사에 대한 언급이 없습니다.
  1. 전체 테스트는 포인트 3의 주기를 위해서만 작성되었습니다.

    99.99%의 호출은 절대적으로 불필요하며 "브레이크"를 시연하기 위한 목적으로만 이루어집니다.
예제는 발명되지 않았 으며 원본에 대한 링크가 소스에 제공됩니다. 이것은 가장 유명하고 오래된 스캘퍼 중 하나입니다.

깨끗한 테스트를 실행하려면 라이브러리 없이 동일한 두 개의 깨끗한 예제를 작성하십시오. 따라서 호환성을 위해 기본 제공 오버헤드가 없고 순도가 보장됩니다.

두 테스터를 비교할 수 있기를 원합니다. 각각의 장단점을 참조하십시오. 그리고 비교는 버그를 식별하는 가장 효과적인 방법 중 하나입니다.

분기는 두 테스터의 초기 데이터 ID를 증명하는 것으로 시작됩니다. 이것은 어디에도 없는 기초입니다. 또한 모든 사람이 테스트 고문을 선택할 수 있습니다.

우리는 기록 액세스를 최적화하고 이 데모를 완전히 무효화했습니다. 그녀는 일부러 그렇게 썼습니다.

SD에 대한 누군가의 지원 덕분에 그들은 해냈습니다 . 건설적인 비판은 좋다.
 

기록 작업은 OrderSelect 및 유사한 OrderXXXX 명령입니다. 이해하지 못하는 척 할 필요는 없습니다. 특히 라이브러리를 작성했다면.

MQL4를 잊지 않고, 역사에 대한 작업도 있습니다.

각 틱 에 대해 200,000 거래 깊이를 기록 스캐너를 작성하고 사이클에서 합리적인 종료 조건을 잊으셨습니까? 이것은 특히 러시아 농민을 재생하기 위해 호출됩니다.

그리고 일부 스캘퍼를 언급하지 마십시오. 싸이클은 의도적으로 너무 멍청하게 작성되었습니다. 그리고 테스트 5일 이내에도 수천억 개의 OrderXXX 함수가 테스트되었으며 그 중 99.99%는 호출할 필요가 없었습니다.


문제는 당신이 "Expert Advisor의 전체 예는 오직 한 가지 일을 하는 방식으로 작성되었습니다 - 그것은 각 틱에서 매우 비효율적인 방식으로 트랜잭션의 전체 기록을 스캔하는 방식으로 작성되었습니다"라는 절대적으로 정확한 진술로 논쟁을 시작했다는 것입니다. 당신이 왜 그렇게 구체적으로 테스트를 작성했는지 아주 잘 알고 있었지만. 결국, 그들은 한 손의 움직임으로 어리석은 스캔의 99.99%를 제거할 수 있었지만 테스트는 실패했을 것입니다.
 
Renat Fatkhullin :

기록 작업은 OrderSelect 및 유사한 OrderXXXX 명령입니다. 이해하지 못하는 척 할 필요는 없습니다. 특히 라이브러리를 작성했다면.

MQL4를 잊지 않고, 역사에 대한 작업도 있습니다.

각 틱 에 대해 200,000 거래 깊이를 기록 스캐너를 작성하고 사이클에서 합리적인 종료 조건을 잊으셨습니까? 이것은 특히 러시아 농민을 재생하기 위해 호출됩니다.

그리고 일부 스캘퍼를 언급하지 마십시오. 주기는 구체적으로 작성되었습니다. 그리고 테스트 5일 이내에도 수천억 개의 OrderXXX 함수가 테스트되었으며 그 중 99.99%는 호출할 필요가 없었습니다.

나는 논쟁하지 않을 것이다. MQL4에 익숙한 포럼 회원들에게 이 짧은 소스를 보고 Renat이 의미하는 바를 설명하도록 요청합니다.

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

MT4-테스터 대 MT5-테스터

fxsaber , 2017.05.08 01:11

조언자

 // 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에서 역사 작업이 어디로 가고 있는지 알 수 없습니다. 도와주세요.