mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 204

 
Andrey Khatimlianskii :

아무도 다른 이벤트 핸들러가 중단(또는 실행되지 않음)될 것이라고 보장하지 않았습니다.

경고 후에는 deinit와 init가 모두 발생합니다. 맞죠?

예, 전체 재부팅입니다. 단지 타이머(1초라도)가 실행됩니다 - 버그가 아니라 기능입니다.

 
fxsaber :

이 EA는 계정 간 전환 시 경고합니다. 규칙에 따르면 그는 이것을 해서는 안 될 것 같습니다.

그러나 이것은 타이머 때문입니다.

이 기능은 공식화는 간단하지만 구현이 어려운 문제를 해결하는 데 사용할 수 있습니다.

 // Если произошла смена счета, советник выгружается.

const bool Init = EventSetMillisecondTimer ( 1 );

void OnTimer ()
{
   static const long Account = AccountInfoInteger ( ACCOUNT_LOGIN );
  
   if (Account != AccountInfoInteger ( ACCOUNT_LOGIN ))
     ExpertRemove ();
}
 
fxsaber :

이 기능은 공식화는 간단하지만 구현이 어려운 문제를 해결하는 데 사용할 수 있습니다.

각 On-function 입력 시 계정 변경 사항을 확인할 수 없는 이유는 무엇입니까?

왜 밀리초 타이머인가? 작업 과정에서 재로그인이 발생하면 여전히 프로그램 실행을 중단하지 않습니다.

 
Andrey Khatimlianskii :

각 On-function 입력 시 계정 변경 사항을 확인할 수 없는 이유는 무엇입니까?

왜 밀리초 타이머인가? 작업 과정에서 재로그인이 발생하면 여전히 프로그램 실행을 중단하지 않습니다.

시도 해봐. 이 주제에 대한 긴 토론은 위의 링크를 참조하십시오.

 
fxsaber :

예, 전체 재부팅입니다. 단지 타이머(1초라도)가 실행됩니다 - 버그가 아니라 기능입니다.

ExpertRemove() 명령 후에 중지 플래그가 단순히 발생하고 EA는 다음 틱까지 계속 작동합니다. 새로운 틱에서 코킹된 정지 플래그를 만나면 어드바이저가 언로드됩니다. 즉, 새 틱이 도착할 때까지 모든 On 기능이 계속 정상적으로 작동합니다.

따라서 이 플래그의 상태를 프로그래밍 방식으로 가져올 수 없는 경우(이 기능을 특별히 찾지 않음) 전역적으로 자체 플래그가 있어야 합니다. ExpertRemove() 명령 전에 자체 플래그를 설정하고 각 On-function에서 확인합니다. 깃발이 올라가면 우리는 떠납니다. 그러면 타이머는 내부에 포함된 코드를 실행하지 않습니다.

아니면 내가 모든 것을 이해하지 못하고 질문이 다른가요?

 
Artyom Trishkin :

ExpertRemove() 명령 후에 중지 플래그가 단순히 발생하고 EA는 다음 틱까지 계속 작동합니다. 새로운 틱에서 코킹된 정지 플래그를 만나면 어드바이저가 언로드됩니다. 즉, 새 틱이 도착할 때까지 모든 On 기능이 계속 정상적으로 작동합니다.

따라서 이 플래그의 상태를 프로그래밍 방식으로 가져올 수 없는 경우(이 기능을 특별히 찾지 않음) 전역적으로 자체 플래그가 있어야 합니다. ExpertRemove() 명령 전에 자체 플래그를 설정하고 각 On-function에서 확인합니다. 깃발이 올라가면 우리는 떠납니다. 그러면 타이머는 내부에 포함된 코드를 실행하지 않습니다.

아니면 내가 모든 것을 이해하지 못하고 질문이 다른가요?

과정이 아니라 어떤 작업이 설명되었는지에 대한 솔루션입니다.

 
Artyom Trishkin :

ExpertRemove() 명령 후에 중지 플래그가 단순히 발생하고 EA는 다음 틱까지 계속 작동합니다. 새로운 틱 에서 코킹된 정지 플래그를 만나면 어드바이저가 언로드됩니다. 즉, 새 틱이 도착할 때까지 모든 On 기능이 계속 정상적으로 작동합니다.

따라서 이 플래그의 상태를 프로그래밍 방식으로 가져올 수 없는 경우(이 기능을 특별히 찾지 않음) 전역적으로 자체 플래그가 있어야 합니다. ExpertRemove() 명령 전에 자체 플래그를 설정하고 각 On-function에서 확인합니다. 깃발이 올라가면 우리는 떠납니다. 그러면 타이머는 내부에 포함된 코드를 실행하지 않습니다.

아니면 내가 모든 것을 이해하지 못하고 질문이 다른가요?

새 틱이 아니라 가장 가까운 수익률입니다.

OnInit()에 ExpertRemove()를 넣고 디버깅에서 단계별로 확인하십시오.

 
Alexey Viktorov :

새 틱이 아니라 다음 틱에서 돌아옵니다.

OnInit()에 ExpertRemove()를 넣고 디버깅에서 단계별로 확인하십시오.

네, 제가 틀렸습니다. 다음 이벤트는 더 이상 실행되지 않습니다. 필요하지 않은 기능들에 대한 도움말은 오랜만에 보네요 :)

 
fxsaber :

어떤 문제를 설명하고 있는지 확실하지 않습니다.

대답의 의미가 명확하지 않습니다. 글쎄, 알았어.

 
Artyom Trishkin :

대답의 의미가 명확하지 않습니다.

ExpertRemove 가 호출하지 않았습니다 .

사유: