MetaTrader 5 전략 테스터: 오류, 버그, 개선 제안 - 페이지 47

 
traveller00 :

빌드 2280. 거래소, 선물 시장. 전체 이력이 로드되지만 테스트는 오프라인으로 수행됩니다. iBarShift는 어떻게 든 표시기에서 이상하게 작동합니다. 그리고 동일한 코드가 일반적으로 스크립트에서 작동합니다. 버그 또는 내가 뭔가를 간과하고 있습니까?

그런 코드가 있습니다. 사실, 그것은 시장 시계의 모든 기호를 살펴보고 iBarShift 를 가져옵니다. 스크립트에서 정확히 동일한 코드가 정상적으로 수행됩니다. 표시기에서 기록이 없다는 오류와 함께 현재 기호(실행된 차트)를 제외한 모든 기호에 대해 -1을 반환합니다. 그리고 두 번째 실행에서 그는 분명히 이야기를로드하고 이미 정상적으로 보여줍니다.

표시기의 데이터 가용성은 보장되지 않으므로 수신 성공 여부를 확인해야 합니다. 실패하면 OnCalculate 에서 다시 시도하십시오. OnInit 에서 데이터에 액세스하는 것은 나쁜 생각입니다.


#property indicator_separate_window

void OnInit ()
{
}

int OnCalculate ( const int rates_total, const int prev_calculated, const datetime & time[], const double & open[], const double & high[],
   const double & low[], const double & close[], const long & tick_volume[], const long & volume[], const int & spread[])
{
   static bool printed = false ;
  
   if ( !printed ){
    printed = TryToPrint();
  }
   return 0 ;
}

bool TryToPrint(){


   datetime Time[];
   ArraySetAsSeries (Time, true );
   Print ("try");
   if ( CopyTime ( _Symbol , _Period , 0 , 1 ,Time) != 1 ) return false ;

   int Shift= iBarShift ( _Symbol , _Period ,Time[ 0 ]);
  
   bool fail = false ;
   if ( Shift < 0 )fail = true ; 
   string toprint = " Symbol ="+ _Symbol +", Shift="+( string )Shift;
  
  

   for ( int i= 0 ;i!= SymbolsTotal ( true );++i)
  {
     const string SymbName= SymbolName (i, true );
    Shift= iBarShift (SymbName, _Period ,Time[ 0 ]);
    
     if ( Shift < 0 )fail = true ;
    toprint = toprint + "\r\n" + " Symbol ="+SymbName+", Shift="+( string )Shift;

  }
   if ( !fail ) Print ( toprint );
  
   return !fail;
}
 

서버 이름이 캐시 항목에 항상 표시되는 것은 아닙니다.


 
tst 형식에서 거래/주문 시간은 초(날짜/시간) 단위입니다. 밀리초가 없습니다.
 
그런 Expert Advisor에 대해 tst-file이 생성되지 않는 것이 맞나요?
 input int i = 0 ;

void OnInit () {}


단일 패스 캐시를 생성하려면 어떤 조건이 충족되어야 합니까?

 
fxsaber :
그런 Expert Advisor에 대해 tst-file이 생성되지 않는 것이 맞나요?


단일 패스 캐시를 생성하려면 어떤 조건이 충족되어야 합니까?

네, 그러죠.

거래가 없으면 tst 파일이 저장되지 않습니다.

 
Slava :

네, 그러죠.

거래가 없으면 tst 파일이 저장되지 않습니다.

고맙습니다.

 
내 질문을 복제하겠습니다(분명히 손실됨).

개발자 여러분, 질문입니다. 유전자 알고리즘 의 매개변수를 사용자 정의할 수 있습니까? 예를 들어 중지 및 돌연변이의 기준을 설정하려면?

극단에 도달하기 전에 정지가 발생한다는 사실을 종종 접합니다.

또한 질문입니다. 시뮬레이션된 어닐링과 같은 다른 방법을 구현하시겠습니까?

 
안녕하세요 여러분, MT4에서 MT5로 전환했는데 테스터에 설정 파일을 저장하는 방법을 모르겠습니다. 말해 주세요. ini 및 opt를 저장하는 방법만 찾을 수 있습니다.
 

테스터에서 로봇을 실행합니다. 나는 특정 기호를 거래합니다. OnTimer로 입력하고 SymbolInfoTick에서 가격 견적을 가져옵니다.

따라서 어떤 이유로 다른 기호로 실행하면(같은 기호로 거래) 결과가 서로 크게 다릅니다. 아무나 만날 수 있나요? 이제 이 행동을 더 자세히 연구하고 있습니다.

추신. 실제 행동을 기반으로 한 모든 틱 과 지체 없는 완벽한 실행
 

문제가 무엇인지 이해했습니다. 누가 상관합니까? 리소스를 절약하기 위해 TimeCurrent의 OnTimer에서 시간을 확인하고 마지막 업데이트 이후 변경되지 않은 경우 아무 것도 수행할 필요가 없습니다. 따옴표 없음 - 상태는 동일합니다. 거래 세션을 추적하는 경우 이는 매우 비용이 많이 드는 작업입니다.

많은 캐릭터에 대해 모든 것이 잘 작동합니다. 그러나 그 중 두 개만 있을 때 모든 것은 오는 따옴표에 달려 있고 포지션을 여는 시간과 다른 것들이 움직이기 시작합니다. 결과적으로 전략 테스터 의 결과가 다릅니다.

추신. 일반적으로 SymbolInfoTick 을 통해 기호의 상태를 별도로 확인합니다.