편집기에서 기본적으로 생성된 지표의 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 버튼을 사용하면 텍스트에서 올바른 위치를 선택할 수 없기 때문에 의도적으로 사용하지 않았습니다)
아직 다른 방법은 없습니다.
프로그램 실행을 즉시 중지하는 새로운 종료 명령의 도입에 대해 논의했지만 해결되지 않은 문제가 있습니다.
매우 죄송합니다. 예, C++에서와 같이 exit()가 좋을 것입니다. 이제 중첩된 함수의 응답을 호출자로 가져오는 것은 상당히 문제가 될 수 있습니다. 예, 유니버설 라이브러리는 작성할 수 없습니다.
옵션으로 모든 프로그램 개체를 삭제하는 별도의 함수를 만들고, 터미널에서 프로그램 자체를 삭제하는 조건이 충족되면 호출한 후 ExpertRemove()를 호출합니다. 이 경우 더 빨리 종료되어야 합니다. 사실 :)
내가 이전에 썼고 나보다 먼저 이 사이트의 기사에서 제안한 바와 같이 깊게 중첩된 함수에 오류가 있는 경우 0으로 나누기 또는 범위를 벗어난 배열을 호출할 수 있습니다. 하지만 아름답지 않습니다.
예, 여기에서 요점은 OOP만이 아닙니다(내가 이해하는 한 당신은 그것에 대해 이야기하고 있습니다). 간단히 - 오류를 수정할 수 없는 경우 - 프로그램이 종료됩니다.
중지하지만 즉시는 아닙니다.
이해할 수 없습니다. 표시기에서 ExpertRemove()로 작업하는 것이 올바른지 아닌지?
지표에 대한 기능이 있는 것 같거나 더 이상 관련이 없습니다.
ChartIndicatorDelete ();
이해할 수 없습니다. 표시기에서 ExpertRemove()로 작업하는 것이 올바른지 아닌지?
아니요. ExpertRemove()는 표시기에서 겹칩니다.
"중지하지만 즉시는 아닙니다" - 이것은 일반적으로 ExpertRemove에 대해 말합니다. 이 기능은 프로그램을 중단하지 않습니다.
아니요. ExpertRemove()는 표시기에서 겹칩니다.
"중지하지만 즉시는 아닙니다" - 이것은 일반적으로 ExpertRemove에 대해 말합니다. 이 기능은 프로그램을 중단하지 않습니다.
예를 들어 주십시오. 문제를 설명하기 위해 지표의 출처를 제공하십시오.
IsStopped 함수의 도움말에 따르면 mql 프로그램의 실행을 종료하라는 명령을 받으면 3초 후에 프로그램이 강제로 종료됩니다.
또한, 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의 실제 제한입니까? 테스터에서 커미션이 올바르게 처리되도록 서버에서 정확히 무엇을 하도록 조언받을 수 있습니까?