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

 
Slava :

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

이 기능은 패스당 프레임이 여러 개인 경우 계산된 패스의 결과로 실시간 작업을 허용하지 않습니다.

 
여기에는 순전히 방법론적인 결함이 있는 것 같습니다.

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

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

슬라바 , 2013.04.10 15:04

 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);
        }
     }
//---
  }
루프에서 FrameNext 이전에 루프의 각 패스에서 ArrayFree를 호출하는 것이 좋습니다.
 
Slava :

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

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

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

이전에 프레임 손실에 대해 이야기했는데 한 번에 많은 프레임이 전송되고 에이전트에 문제가 있는 경우(통신이 중단된 경우) 이 상황에 대해 조치가 취해질까요?

 
fxsaber :

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

네.

opt-file 읽기 코드를 게시하는 대가로

 
fxsaber :

이 기능은 패스당 프레임이 여러 개인 경우 계산된 패스의 결과로 실시간 작업을 허용하지 않습니다.

네.

따라서 "비기본" 유형의 프레임은 최적화가 끝난 후 빼야 합니다.

 
Aleksey Vyazmikin :

이전에 프레임 손실에 대해 이야기했는데 한 번에 많은 프레임이 전송되고 에이전트에 문제가 있는 경우(통신이 중단된 경우) 이 상황에 대해 조치가 취해질까요?

여기서 무엇을 할 건가요?

어떤 경우든 최적화 결과 는 프레임보다 더 빠르고 빠르게 종료됩니다. 에이전트가 중지된 경우(컴퓨터 끄기, 서비스 중지) 수행할 작업이 없습니다.

다음을 시도할 수 있습니다. 프레임이 전송될 때까지 결과를 전송하지 마십시오. 그러나 우리가 언제 통치할지는 알 수 없습니다

 
fxsaber :
여기에는 순전히 방법론적인 결함이 있는 것 같습니다.
루프에서 FrameNext 이전에 루프의 각 패스에서 ArrayFree를 호출하는 것이 좋습니다.

불필요한 메모리 재할당을 방지합니다.

이 경우 어레이 버퍼가 한 번 할당될 확률이 99%입니다.

 
Slava :

여기서 무엇을 할 건가요?

어떤 경우든 최적화 결과 는 프레임보다 더 빠르고 빠르게 종료됩니다. 에이전트가 중지된 경우(컴퓨터 끄기, 서비스 중지) 수행할 작업이 없습니다.

다음을 시도할 수 있습니다. 프레임이 전송될 때까지 결과를 전송하지 마십시오. 그러나 우리가 언제 통치할지는 알 수 없습니다

아마도 프레임 전송을 시작하기 전에 예상되는 프레임 수를 알 수 있고 예상보다 적게 도착하고 에이전트를 사용할 수 없는 경우 다른 에이전트에게 전달하고 이미 수신된 프레임을 덮어쓸 수 있습니까?

또는 각 프레임의 본문에 이 금액으로 총 금액과 일련 번호를 쓰고 모두가 오지 않은 경우 다시 최적화하십시오.
 
Slava :

네.

opt-file 읽기 코드를 게시하는 대가로

녹음에 더 관심이 많다. 형식을 알면 읽겠습니다.

 
Aleksey Vyazmikin :

아마도 프레임 전송을 시작하기 전에 예상되는 프레임 수를 알 수 있고 예상보다 적게 도착하고 에이전트를 사용할 수 없는 경우 다른 에이전트에게 전달하고 이미 수신된 프레임을 덮어쓸 수 있습니까?

또는 각 프레임의 본문에 이 금액으로 총 금액과 일련 번호를 쓰고 모두가 오지 않은 경우 다시 최적화하십시오.

모든 패스가 프레임을 반환하지 않는다면?

위의 테스터에서 오류를 잡는 예를 들었습니다. 일부 결과 값이 참조와 일치하지 않는 경우에만 프레임이 전송되었습니다.