오류, 버그, 질문 - 페이지 2437

 
Alexey Navoykov :

저것들. OnTesterPass가 프레임 없이 호출되었습니까? 그렇다면 명백한 실수입니다. 이 이벤트는 패스의 끝이 아니라 프레임이 수신되었음을 의미합니다.

모든 프레임은 OnTesterDeinit 이벤트를 호출하기 전에 OnTesterPass에 도착해야 합니다. 이것은 정상적인 건강한 논리입니다. 반복하지만, 우리는 테스트의 강제 중단에 대해 이야기하고 있지 않습니다.

OnTesterPass는 하나 이상의 프레임이 도착하면 호출됩니다. 프레임 팩이 올 수 있습니다. 따라서 OnTesterPass에서는 한 번에 하나씩이 아니라 주기로 프레임을 수신해야 합니다. 그러나 "지난 시간 이후에 절대"이면 OnTesterPass가 호출되지 않습니다.

마지막 결과가 도착하면 최적화가 중지됩니다. 프레임은 특히 많은 양의 데이터가 한 프레임에서 전송되거나 여러 프레임이 한 번에 한 번에 전송되는 경우 나중에 도착할 수 있습니다. 따라서 최적화 완료 후 실행되는 OnTesterDeinit에서는 나머지 프레임의 수신을 정리할 필요가 있다. 주기도 합니다.

이것은 정상적인 건강한 논리입니다.

OnTesterPass뿐만 아니라 OnTesterDeinit에서 프레임을 수신하는 예를 여러 번 제공했습니다. 그리고 그것은 다른 유형의 복잡한 프레임을 수신하는 것입니다.

 
Slava :

패스당 한 번에 여러 프레임이 전송되는 경우.

한번 해봤는데 안되네요. 하나 의 FrameAdd 만 작동했습니다.

 
Slava :

마지막 결과가 도착하면 최적화가 중지됩니다. 프레임은 특히 많은 양의 데이터가 한 프레임에서 전송되거나 여러 프레임이 한 번에 한 번에 전송되는 경우 나중에 도착할 수 있습니다. 따라서 최적화 완료 후 실행되는 OnTesterDeinit에서는 나머지 프레임의 수신을 정리할 필요가 있다. 주기도 합니다.

프레임 이 나중에 도착할 수 있으면 즉시 OnTesterDeinit에 있을 것이라는 보장이 없습니까? 저것들. 대기 루프를 해야 합니까? 그리고 얼마나 기다려야 하나요?

나는 이전에 이것이 사실이라고 생각했습니다. OnTesterPass는 이전 OnTesterPass가 끝난 이후에 온 프레임에 대해서만 호출됩니다. OnTesterPass를 실행하는 동안 새 프레임이 도착한 경우, 보다 구체적으로 FrameNext에 대한 마지막 호출 순간부터 함수가 끝날 때까지 이 프레임은 이벤트를 생성하는 새 프레임이 도착할 때까지 계속 매달려 있습니다. 이것이 이러한 매달린 프레임을 얻기 위해 OnTesterDeinit가 필요한 이유입니다.

 
Alexey Navoykov :

프레임 이 나중에 도착할 수 있으면 즉시 OnTesterDeinit에 있을 것이라는 보장이 없습니까? 저것들. 대기 루프를 해야 합니까? 그리고 얼마나 기다려야 하나요?

나는 이전에 이것이 사실이라고 생각했습니다. OnTesterPass는 이전 OnTesterPass의 끝 이후에 온 프레임에 대해서만 호출됩니다. OnTesterPass를 실행하는 동안 새 프레임이 도착한 경우, 보다 구체적으로 FrameNext에 대한 마지막 호출 순간부터 함수가 끝날 때까지 이 프레임은 이벤트를 생성하는 새 프레임이 도착할 때까지 계속 매달려 있습니다. 이것이 이러한 매달린 프레임을 얻기 위해 OnTesterDeinit가 필요한 이유입니다.

FrameNext는 mqd 파일의 멍청한 읽기이며 다른 것은 없습니다.

FrameFirst - 파일 검색.
 
fxsaber :

한번 해봤는데 안되네요. 하나의 FrameAdd만 작동했습니다.

여기에서 나는 예를 보여주었다.
 

고맙습니다.


PS FrameFirst는 여기서 불필요합니다.

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

Expert Advisor로 결과를 자동으로 대체하는 전략의 예정된 테스트

슬라바 , 2013.04.10 15:04

다음은 예입니다. OnTester에서 EA는 2개의 프레임 (트랜잭션 기록 및 작업 기록)을 보냅니다.

OnTesterDeinit에서 첫 번째 및 두 번째 유형의 모든 프레임을 수신 및 처리

 void OnTesterDeinit()
  {
   string         name;
   ulong          pass;
   long           id;
   double         value;
   int            handle,i;
   BalanceInTime balance[];
   MqlRates       rates[];
//---
   FrameFirst();
   FrameFilter( "" , 1 );
   while (FrameNext(pass,name,id,value,balance))
     {
      handle= FileOpen (name+ "_" + string (id)+ "_" + IntegerToString (pass, 5 , '0' )+ ".txt" , FILE_WRITE | FILE_CSV | FILE_ANSI );
       if (handle!= INVALID_HANDLE )
        {
         for (i= 0 ; i< ArraySize (balance); i++)
             FileWrite (handle,balance[i].date, EnumToString (balance[i].entry), DoubleToString (balance[i].price, 5 ), DoubleToString (balance[i].balance, 2 ));
         FileClose (handle);
        }
     }
//---
   FrameFirst();
   FrameFilter( "" , 2 );
   while (FrameNext(pass,name,id,value,rates))
     {
      handle= FileOpen (name+ "_" + string (id)+ "_" + IntegerToString (pass, 5 , '0' )+ ".txt" , FILE_WRITE | FILE_CSV | FILE_ANSI );
       if (handle!= INVALID_HANDLE )
        {
         for (i= 0 ; i< ArraySize (rates); i++)
             FileWrite (handle,rates[i].time, DoubleToString (rates[i].open, 5 ), DoubleToString (rates[i].high, 5 ), DoubleToString (rates[i].low, 5 ), DoubleToString (rates[i].close, 5 ), string (rates[i].tick_volume));
         FileClose (handle);
        }
     }
//---
  }
 
fxsaber :


PS FrameFirst는 여기서 불필요합니다.

아니요. 불필요하지 않습니다 - 순전히 방법론적으로. 기본값이 없는 완전한 코드 블록

이 코드는 더 복잡한 코드에서 분리되었습니다. 4가지 종류의 서로 다른 프레임이 전송되었습니다. 동시에 그들은 OnTesterPass에서도 그것을 읽었습니다. 다음은 "세련된" 코드입니다.

 
Slava :

아니요. 불필요하지 않습니다 - 순전히 방법론적으로. 기본값이 없는 완전한 코드 블록

이 코드는 더 복잡한 코드에서 분리되었습니다. 4가지 종류의 서로 다른 프레임이 전송되었습니다. 동시에 그들은 OnTesterPass에서도 그것을 읽었습니다. 다음은 "세련된" 코드입니다.

FrameFirst 가 FrameFilter 전에 호출되면 항상 불필요하다는 사실에 대해.

하나 이상의 프레임을 통해 데이터를 전송하는 것은 권장하지 않습니다.

 
fxsaber :

FrameFilter가 FrameFilter보다 먼저 호출되면 FrameFirst가 항상 불필요하다는 사실에 대해.

하나 이상의 프레임을 통해 데이터를 전송하는 것은 권장하지 않습니다.

1. 네. 중복될 수 있습니다.

2. 한 가지 유형의 프레임이 OnTesterPass에서 읽혀지고 OnTesterDeinit에서 읽기가 완료됩니다. 나머지 프레임은 OnTesterDeinit에서 뺍니다.

여러 유형의 프레임을 보내고 받는 이 기능을 통해 테스터에서 재현하기 어려운 몇 가지 오류를 수정할 수 있었습니다. 또한 특정 기준값과 차이가 있을 경우에만 프레임을 전송하였다.

 
Slava :

선택 형식을 여시겠습니까?