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

 
Slawa :

아직 다른 방법은 없습니다.

프로그램 실행을 즉시 중지하는 새로운 종료 명령의 도입에 대해 논의했지만 해결되지 않은 문제가 있습니다.

매우 죄송합니다. 예, C++에서와 같이 exit()가 좋을 것입니다. 이제 중첩된 함수의 응답을 호출자로 가져오는 것은 상당히 문제가 될 수 있습니다. 예, 유니버설 라이브러리는 작성할 수 없습니다.
 
Alexey Kozitsyn :
매우 죄송합니다. 예, C++에서와 같이 exit()가 좋을 것입니다. 이제 중첩된 함수의 응답을 호출자로 가져오는 것은 상당히 문제가 될 수 있습니다. 예, 유니버설 라이브러리는 작성할 수 없습니다.
옵션으로 모든 프로그램 개체를 삭제하는 별도의 함수를 만들고, 터미널에서 프로그램 자체를 삭제하는 조건이 충족되면 호출한 후 ExpertRemove() 이 경우 더 빨리 종료되어야 합니다 ... 그렇지는 않지만 사실 :)
 
coderex :
옵션으로 모든 프로그램 개체를 삭제하는 별도의 함수를 만들고, 터미널에서 프로그램 자체를 삭제하는 조건이 충족되면 호출한 후 ExpertRemove()를 호출합니다. 이 경우 더 빨리 종료되어야 합니다. 사실 :)

내가 이전에 썼고 나보다 먼저 이 사이트의 기사에서 제안한 바와 같이 깊게 중첩된 함수에 오류가 있는 경우 0으로 나누기 또는 범위를 벗어난 배열을 호출할 수 있습니다. 하지만 아름답지 않습니다.

예, 여기에서 요점은 OOP만이 아닙니다(내가 이해하는 한 당신은 그것에 대해 이야기하고 있습니다). 간단히 - 오류를 수정할 수 없는 경우 - 프로그램이 종료됩니다.

 
Slawa :
중지하지만 즉시는 아닙니다.
이해할 수 없습니다. 표시기에서 ExpertRemove() 로 작업하는 것이 올바른지 아닌지?
 
Alexey Kozitsyn :
이해할 수 없습니다. 표시기에서 ExpertRemove()로 작업하는 것이 올바른지 아닌지?

지표에 대한 기능이 있는 것 같거나 더 이상 관련이 없습니다.

 ChartIndicatorDelete ();
 
Alexey Kozitsyn :
이해할 수 없습니다. 표시기에서 ExpertRemove()로 작업하는 것이 올바른지 아닌지?

아니요. ExpertRemove()는 표시기에서 겹칩니다.

"중지하지만 즉시는 아닙니다" - 이것은 일반적으로 ExpertRemove에 대해 말합니다. 이 기능은 프로그램을 중단하지 않습니다.

 
Slawa :

아니요. ExpertRemove()는 표시기에서 겹칩니다.

"중지하지만 즉시는 아닙니다" - 이것은 일반적으로 ExpertRemove에 대해 말합니다. 이 기능은 프로그램을 중단하지 않습니다.

일반적으로 exit()로 문제를 해결할 계획입니까? 아니면 사용자가 목발로 결정합니까?)
 
Slawa :
예를 들어 주십시오. 문제를 설명하기 위해 지표의 출처를 제공하십시오.
편집기에서 기본적으로 생성된 지표의 OnCalculate에 텍스트를 붙여넣습니다. 아무 차트에나 놓습니다. 차트 창의 왼쪽 상단에 표시기가 작동하는 것을 볼 수 있습니다. 표시기 목록에서 "삭제"를 선택하면 작업이 중지되지 않고 왼쪽 상단 모서리 에 표시됩니다. 그리고 창을 닫아도 멈추지 않습니다. 그리고 새 창을 연 후 새 창에서 계속됩니다. 게다가 이 창은 처음에 있었던 것과 같은 기호가 아닐 수도 있습니다. :)
터미널이 닫힌 경우에만 표시등이 작동을 멈춥니다. 그리고 중지 여부는 알 수 없습니다. 다시 시작하려면 작업 관리자를 통해 터미널을 수동으로 제거해야했습니다 ...

IsStopped 함수의 도움말에 따르면 mql 프로그램의 실행을 종료하라는 명령을 받으면 3초 후에 프로그램이 강제로 종료됩니다.

   int i= 0 ;
   while ( true ){
       Comment (i++);
       Sleep ( 100 );
   }

또한, while(true)이 while(!IsStopped())로 대체되면 차트에서 제거될 때 표시기가 성공적으로 작업을 완료합니다.

 

내부 컴파일러 오류에 대한 재미있는 이유(표시기에 사용된 기능):

무효 저장 데이터 (uint 핸들_, int wrdata_, int interv_, 문자열 dpath_, int tmode_, int tmult_, long ctime_, long & ltime_)
{
int ierr, wrint;
// ----
if ( interval_ > 0 ) // 작업 모드
{
if ( MQLInfoInteger ( MQL_TESTER ) == 0 ) { wrtint = interv_; } // 관련 없음
else { 쓰기 = interv_ * tmult_; } // 관련 없음
//
if ( ( ctime_ - ltime_ ) >= ( wrtint * 60 ) ) // 이 줄을 주석 처리하면 오류가 사라집니다.
{
// 일부 데이터 저장 코드 ... 중요하지 않음 - 확인됨
//
ltime_ = ctime_; // 일반적으로 중요하지 않습니다.
} // if ( ( ctime_ - ltime_ ) >= ( wrtint * 60 ) )
} // if ( 간격_ > 0 )
// ----
반품;

} // SaveData 무효화

(죄송합니다. SRC 버튼을 사용하면 텍스트에서 올바른 위치를 선택할 수 없기 때문에 의도적으로 사용하지 않았습니다)

치료법은 분명하지만 동의합니다. 매우 재미있는 결함입니다. :)))

 

한 DC는 100만 매출에 16x2 달러의 수수료를 가지고 있으며 서버 설정에서 16달러의 수수료를 설정한 것으로 보입니다. 적절한 테스트는 로트 10에서만 수행할 수 있습니다.

서버 설정의 곡률입니까, 아니면 MT5의 실제 제한입니까? 테스터에서 커미션이 올바르게 처리되도록 서버에서 정확히 무엇을 하도록 조언받을 수 있습니까?