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

 
stringo :
코드가 근본적으로 다릅니다

와.. 깜놀..

비교를 위해 x32 및 x64 코드의 간단한 부분을 게시할 수 있습니까? 글쎄, 말하자면 당신의 호기심을 달래기 위해 ...

 
KffAlex :


에게! 이 문제를 다루는 것은 이번이 3번째 입니다. Windows7 x64에서 외부 라이브러리를 생성하면 다음과 같은 기적이 일어납니다.


지연에 대해 사과드립니다. 비공개로 답변해 주셨습니다.

출처를 첨부해주세요. 가능 하면 서비스 데스크에 연락하여 모든 것을 정리하십시오. 이렇게 하면 이러한 지연 가능성이 최소화됩니다.

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
AlexSTAL :

와.. 깜놀..

비교를 위해 x32 및 x64 코드의 간단한 부분을 게시할 수 있습니까? 글쎄, 말하자면 당신의 호기심을 달래기 위해 ...

코드를 미리 알려줄 수는 없습니다. 현재 가지고 있는 특징이 없습니다.

다음 차이점.

  • 레지스터 64 - 32비트. 따라서 64비트 산술은 하나의 명령어에 맞습니다(2개의 64비트 정수의 32비트 나눗셈은 40개의 어셈블러 명령어로 수행됨)
  • 64비트 레지스터가 더 있습니다. 따라서 레지스터에 대한 주소 지정이 다릅니다.
  • 호출 규칙이 다릅니다. 예를 들어, 64비트에서 함수의 처음 4개 매개변수는 레지스터로 전달됩니다.
 
MT5에서 최적화 시간을 추가해야 합니다. MT4에서는 그랬고 여기에서는 올바른 수정 사항이 될 것입니다)
 
Renat :

테스트를 중지한 후 로컬 에이전트는 새 작업을 기다리는 증가된 캐시와 함께 메모리에서 5분 더 정지합니다. 5분 동안 아무도 로드하지 않으면 모든 리소스가 해제되면서 자동으로 언로드됩니다.

이러한 대기 메커니즘을 통해 기성/고양 인프라로 인해 반복 작업에 대한 에이전트의 응답 속도를 높일 수 있었습니다.

추신: 우리는 현지 에이전트에 대해 이야기하고 있습니다. 서비스로 실행되는 원격 에이전트는 언로드되지 않지만 일부 유휴 시간 후에 리소스를 해제합니다.

빌드 404를 사용하고 있습니다. 원격 에이전트의 문제에 대해 이야기하고 있습니다. 10시간의 유휴 시간이 지나도 메모리가 해제되지 않습니다.

몇 가지 문제가 더 있습니다.

1. 거의 항상 전략을 테스트 할 때 각 프로세서의 첫 번째 패스는 빠르게 종료되고 0 결과를 반환합니다.

그리고 중지했다가 다시 시작하면 이 0은 다시 계산되지 않습니다. 나는 많은 수의 프로세서에서 실행하고 40-50개의 결과가 0이고 이 데이터를 다시 계산할 방법이 없다는 사실이 방해가 됩니다.

2. 때때로 프로세서 중 하나가 실패로 전환되고 동시에 초당 여러 번 0 결과를 반환하기 시작합니다. 그러나 중지하면 이러한 데이터가 다시 계산됩니다(표의 주황색 필드).

3. 16개의 프로세서에서 원격 에이전트를 실행할 때 인터넷 1 메가 업로드는 기록을 너무 빨리 로드하는 것을 허용하지 않으며 분명히 시간 초과로 인해 모든 프로세서가 실패합니다. 하나의 프로세서를 켜면 일반적으로 작동합니다. 16개의 프로세서가 있는 시스템에서 첫 번째 프로세서로 기록을 다운로드한 다음 나머지 프로세서로 복사할 수 있습니까? 글쎄, 또는 기록을 로드할 때 시간 초과를 늘리십시오.

 
a483483 :

빌드 404를 사용하고 있습니다. 원격 에이전트의 문제에 대해 이야기하고 있습니다. 10시간의 유휴 시간이 지나도 메모리가 해제되지 않습니다.

몇 가지 문제가 더 있습니다.

1. 거의 항상 전략을 테스트할 때 각 프로세서의 첫 번째 패스는 빠르게 종료되고 0 결과를 반환합니다.

그리고 중지했다가 다시 시작하면 이 0은 다시 계산되지 않습니다. 나는 많은 수의 프로세서에서 실행하고 40-50개의 결과가 0이고 이 데이터를 다시 계산할 방법이 없다는 사실이 방해가 됩니다.

2. 때때로 프로세서 중 하나가 실패로 전환되고 동시에 초당 여러 번 0 결과를 반환하기 시작합니다. 그러나 중지하면 이러한 데이터가 다시 계산됩니다(표의 주황색 필드).

3. 16개의 프로세서에서 원격 에이전트를 실행할 때 인터넷 1 메가 업로드는 기록을 너무 빨리 로드하는 것을 허용하지 않으며 분명히 시간 초과로 인해 모든 프로세서가 실패합니다. 하나의 프로세서를 켜면 일반적으로 작동합니다. 16개의 프로세서가 있는 시스템에서 첫 번째 프로세서로 기록을 다운로드한 다음 나머지 프로세서로 복사할 수 있습니까? 글쎄, 또는 기록을 로드할 때 시간 초과를 늘리십시오.


에이전트 로그, 설정, 기호, 서버가 필요합니다.

EX5 전문가가 될 수 있지만 물론 소스가 더 좋습니다.

가급적이면 서비스 데스크에서.

 
KffAlex :
이 문제는 기능이 프로그램의 본문으로 옮겨지면 존재하지 않지만 Windows XP에서는 단순히 그러한 문제가 없습니다 !!!
비트수(64/32)인 것 같은데, 윈도우 XP에서는 32비트 이하로 작업하기 때문에 에러가 재현되지 않습니다.
문제가 있는 EX5 파일이 첨부된 서비스 데스크 티켓을 만드십시오. ( 서비스 데스크에 대한 귀하의 링크 )
 

두 숫자를 비교하는 방법이 어떻게 오지 않는지 알려주세요. 벌써 2일이 지났습니다.

(오늘 날짜) > (어제 날짜)

           datetime bark[ 1 ];
           CopyTime (Symbol1, NULL ,0, 1 ,bark);
           if (bark[ 0 ]<=order)

주문 - (어제 날짜)

아니면 이것이 불가능합니까?

 

다음과 같이 썼습니다.

       for ( uint k= 0 ; k<66; k++)
         {
           datetime order=( datetime ) HistoryDealGetInteger (ticket, DEAL_TIME );
           datetime bark[ 1 ];
           CopyTime (Symbol1, NULL ,k, 1 ,bark);
           if (bark[ 0 ]<=order)
            {

테스터가 전화를 끊고 그게 다야

 
alexluek :

다음과 같이 썼습니다.

테스터가 전화를 끊고 그게 다야

미래의 시간은 과거보다 더 길고, 코드 조각은 암시적이지 않으며, if 블록에서 무엇을 하고 있는지, 무엇을 원하는지 명확하지 않습니다...

여기 내 생각에는 시간 비교에 대한 철저한 정보입니다. :)

 //+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                                                           mrProF |
//|                                                          http:// |
//+------------------------------------------------------------------+
#property copyright "mrProF"
#property link       "http://"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   datetime past= D'2010.12.1' ; //Прошлое
   datetime future= D'2010.12.02' ; //Будущее

   if (past<future)
     {
       Print (past, " раньше чем: " ,future);
     }

   datetime buffTime[ 1 ]; //Буфер для времени последнего бара
   CopyTime ( _Symbol , _Period , 0 , 1 ,buffTime); //Копируем время последнего бара

   if (buffTime[ 0 ]>past)
     {
       Print (past, " раньше чем: " ,buffTime[ 0 ]);
     }

  }
//+------------------------------------------------------------------+