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

 
Jager :

usdjpy에서 테스트하려고 하면 다음 메시지가 표시됩니다.

그리고 3000이 꺼지면 끝이없는 것 같습니다. 테스트는 2010.10.01 - 2010.10.10 구간에 시가만 포함하려고 했습니다.

빌드 401

또한 다른 원격 에이전트를 시작할 수 없습니다. 여기에 로그가 있습니다.

저도 어제 비슷한 사진을 봤는데... 전체 히스토리가 과부하가 걸린 것 같고 뭔가 문제가 있었던 것 같습니다.

프로세스가 끝날 때까지 기다리거나 터미널을 다시 시작했습니다.

어제 나는 흥미로운 것을 발견했습니다. EA를 다시 컴파일한 후 터미널을 다시 시작할 때까지 변경 사항이 테스터에서 작동하지 않습니다.

 
Im_hungry :
나는 완전히 지원합니다 - 아마도 서비스 데스크에서?. (나는 백 번 닫는다)
의미는 어떻습니까? 그들은 모두 알고 있습니다 ...
 

어제부터 전문가들은 디지털 생활을 시작했습니다.

테스트할 때 임의의 포커스를 제공합니다... OnInit() 함수를 마술처럼 건너뛰거나 DeInit() 함수에서 범위를 벗어난 배열 오류를 제공합니다.


트릭은 동일한 매개변수를 사용하여 전체 테스트를 시작하고 실행할 수 있거나 충돌할 수 있다는 것입니다.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Im_hungry :

작업은 다음과 같습니다. 표시 매개변수를 동적으로 만들기 위해 위치를 닫을 때 표시 매개변수 중 하나를 변경합니다. 이것이 전체 작업입니다.

이제 내 솔루션은 다음과 같습니다.

이 코드가 작동한다고 말할 수 있습니다. 테스트는 다른 결과를 보여주지만, 왜 t.s. 다른 시간에 나는 로그를 살펴 보았습니다. 1주일 동안 모든 것이 정상적으로 작동한 다음 버퍼에 동일한 값을 반복하여 출력합니다. 비록 불가능하지만(2주 동안 테스터 로그에 동일한 값이 있음) , 반복하지 않으면 단순히 오류를 씁니다.

경고를 통한 메시지

내가 이해할 수 있는 한, 새 막대가 나타날 때 EA는 일부 표시기의 핸들을 생성하고 동시에 이 표시기의 버퍼를 복사해야 합니다. 그러나 동시에 표시기 버퍼 를 계산하는 데 시간이 걸릴 수 있는 상황이 해결되지 않았습니다. 즉, 표시기 핸들을 성공적으로 생성할 수 있지만 표시기 버퍼가 아직 계산되지 않은 것입니다.
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
Yedelkin :
내가 이해할 수 있는 한, 새 막대가 나타날 때 EA는 일부 표시기의 핸들을 생성하고 동시에 이 표시기의 버퍼를 복사해야 합니다. 그러나 동시에 표시기 버퍼 를 계산하는 데 시간이 걸릴 수 있는 상황이 해결되지 않았습니다. 즉, 표시기 핸들을 성공적으로 생성할 수 있지만 표시기 버퍼가 아직 계산되지 않은 것입니다.

예, 동의합니다. 그래서 저는 이 디자인을 시도했습니다.

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{ 
   if (isNewBar()== true && proverkaHANDLA()== true )
     {
       if (! PositionSelect (Symbol1) && ! PositionSelect (Symbol2))
         {
          BSOpen();
         }
     }    
}
//+==================================================================+
bool proverkaHANDLA()
{
   ArraySetAsSeries (Sp1Buffer, true );
   ArraySetAsSeries (Sp2Buffer, true );
//----------------------
  vhandle= iCustom ( NULL , 0 , "МТ5" ,Symbol1, 100 ,Lots, 1 ,Close());
   if (vhandle< 0 )
    {
     Alert ( "Ошибка при создании индиката: " , GetLastError ());
     return ( 0 );
    }
   if ( CopyBuffer (vhandle, 0 , 0 , 50 ,Sp1Buffer)< 0 || CopyBuffer (vhandle, 1 , 0 , 50 ,Sp2Buffer)< 0 )
    {
     Alert ( "Ошибка копирования буферов индикатора номер ошибки:" , GetLastError ());
     return ( 0 );
    }
   return ( true );
}

작동하는지 보여주세요! 도와주셔서 감사합니다

 

그러나 때때로 그것은 모두 똑같이 제공합니다.

 Alert : Ошибка копирования буферов индикатора номер ошибки: 4806
 
Im_hungry :

예, 동의합니다. 그래서 저는 이 디자인을 시도했습니다.

작동하는지 보여주세요! 도와주셔서 감사합니다

이 구성은 "핸들이 생성되었지만 표시기 버퍼 가 아직 계산되지 않은" 경우를 건너뜁니다. 구성 자체는 기간당 한 번 호출되므로 CopyBuffer() 함수에 대한 여러 호출을 계속 시도할 수 있습니다. 저것들. CopyBuffer()<0 이면 선택한 기간이 허용하는 한(선택한 기간 내) 함수 호출을 반복합니다.
 
Im_hungry :

그러나 때때로 그것은 모두 똑같이 제공합니다.

좋아요. ProverkaHANDLA() 함수는 자체 내에서 CopyBuffer()를 한 번 호출하는 독립 블록입니다. 따라서 버퍼가 계산되지 않으면 항상 경고가 팝업됩니다. 지금까지 proverkaHANDLA() 함수는 "핸들이 생성되었지만 표시기 버퍼 가 아직 계산되지 않은" 상황을 처리하지 않고 무시했습니다.

 
Yedelkin :
이 구성은 "핸들이 생성되었지만 표시기 버퍼 가 아직 계산되지 않은" 경우를 건너뜁니다. 구성 자체는 기간당 한 번 호출되므로 CopyBuffer() 함수에 대한 여러 호출을 계속 시도할 수 있습니다. 저것들. CopyBuffer()<0 이면 선택한 기간이 허용하는 한(선택한 기간 내) 함수 호출을 반복합니다.

즉, CopyBuffer>0 동안 계산하고 새 매개변수(Close())

포지션이 닫힐 때 나타납니다. 즉, while을 반복해야 합니다. 이렇게 나옵니다.

 if (! PositionSelect (Symbol1) && ! PositionSelect (Symbol2))
  {
   While (vhandle> 0 )
    {
     if ( CopyBuffer (vhandle, 0 , 0 , 50 ,Sp1Buffer)< 0 || CopyBuffer (vhandle, 1 , 0 , 50 ,Sp2Buffer)< 0 )
      {
       Alert ( "Ошибка копирования буферов индикатора номер ошибки:" , GetLastError ());
       return ( 0 );
      }
    }
  }
 
도움말에서 BarsCalculated 에 대해 읽어보십시오. 그런데 필요한 예가 즉시 제공됩니다.