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

 
Andrey Barinov :

ExpertRemove가 작동하지 않는 경우 여전히 ChartClose()가 있습니다. 나는 문제가 무엇인지 이해하지 못합니다. 계정 변경 후에는 어떻게 됩니까? 어드바이저와 함께 추가 차트가 표시됩니까? 아니면 현재 차트의 기호만 바뀌고 있습니까? ChartID가 변경되어 이전 솔루션이 작동하지 않을 수 있습니까? Tick은 어쨌든 처리되므로 OnInit가 발생하지 않으면 OnTick에 업로드해야 합니다.

이 모든 질문에 답했다고 가정해 보겠습니다. 그러면 어떻게 될까요? 주제에 대해 자세히 알아보려면 자동차에 대한 테스트가 없으면 작동하지 않습니다.

이 작업 솔루션에 왔습니다.

 #include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003

// Выгружает себя, если после смены счета отсутствует символ.
void OnDeinit ( const int Reason )
{
   if (Reason == REASON_ACCOUNT )
  {
     MqlTick Tick;
    
     if (! SymbolInfoInteger ( _Symbol , SYMBOL_CUSTOM ) && ! SymbolInfoTick ( _Symbol , Tick))
    {
       Alert ( "Account is changed!" );
      
       if ( EXPERT::Remove() )
         Alert ( "Expert is removed!" );
      
       // ExpertRemove(); // Не поможет.
       // ChartClose();   // Не лучшее решение.
    }
//  else
       // Для кастомных и других случаев дополнить код следущим решением.
       // https://www.mql5.com/ru/forum/170952/page175#comment_16365819     
  }  
}


위협 전투 고문에게 필요합니다.

 
fxsaber :

계정 변경 시 자동으로 언로드되는 EA의 소스 코드를 여기에 보여주세요.

소스는 나중에 나옵니다. 먼저 이 기능이 적합한지 확인하세요.

 
Alexey Viktorov :

소스는 나중에 나옵니다. 먼저 이 기능이 적합한지 확인하세요.

출시되었습니다. 작동하지 않습니다.

 2020.05 . 21 10 : 49 : 58.028 00 (EURUSD,M1)  Идиот
2020.05 . 21 10 : 49 : 58.028 00 (EURUSD,M1)   ExpertRemove () function called

분명히 이것은 이미 로그에서 러시아어 단어를 사용하는 추세입니다.

 
fxsaber :

출시되었습니다. 작동하지 않습니다.

분명히 이것은 이미 로그에서 러시아어 단어를 사용하는 추세입니다.

이것은 로그가 아닙니다. 나는 당신을 화나게 할 의도가 없었습니다. 나는 무언가가 잘되지 않을 때 나를 위해 이것을 씁니다. 그리고 삭제하는 것을 잊었습니다.

당신이 요구한 것을 기대하지 않았다면 화를 내십시오. 계정을 변경할 때 차트 에서 고문을 제거하고 싶었습니다. 이 고문이 수행합니다. 나는 그것이 당신에게 어떻게 작동하지 않는지 알고 싶지 않습니다.
 
Alexey Viktorov :

이것은 로그가 아닙니다. 나는 당신을 화나게 할 의도가 없었습니다. 나는 무언가가 잘되지 않을 때 나를 위해 이것을 씁니다. 그리고는 삭제하는 것을 잊었습니다.

제안된 것과 다른 작동하는 솔루션을 찾으면 흥미롭게 볼 수 있습니다.

 
Alexey Viktorov :

계정을 변경할 때 차트에서 고문을 제거하고 싶었습니다. 이 고문이 수행합니다.

불행히도 그렇지 않습니다.



일반적으로 REASON_ACCOUNT로 ExpertRemove를 호출 하는 것은 전혀 의미가 없습니다.

 
fxsaber :

불행히도 그렇지 않습니다.



일반적으로 REASON_ACCOUNT로 ExpertRemove를 호출 하는 것은 전혀 의미가 없습니다.

초보자가 아니라면 어드바이저는 차트로만 작업한다는 것을 알아야 합니다. 일정이 없으면 서비스만 작동합니다. 그는 어떻게 작동합니까 ??? 그것을 위해 가십시오.

 
Alexey Viktorov :

초보자가 아니라면 어드바이저는 차트로만 작업한다는 것을 알아야 합니다. 일정이 없으면 서비스만 작동합니다. 그는 어떻게 작동합니까 ??? 그것을 위해 가십시오.

불행히도 당신은 이 문제에 대해 완전히 무능합니다. 여기에 제안된 작업 솔루션은 작업의 실제 미묘함과 작업이 실제로 작동하는 방식에 대한 이해입니다.

 
fxsaber :

불행히도 당신은 이 문제에 대해 완전히 무능합니다. 여기에 제안된 작업 솔루션은 작업의 실제 미묘함과 작업이 실제로 작동하는 방식에 대한 이해입니다.

네, 그렇습니다. 여기에 자격을 갖춘 사람은 단 한 명뿐입니다.

 

옵션으로.

 int OnInit ( void )
{
     string name_global = "exp_account" ;
     if ( GlobalVariableCheck (name_global) )
     {
           if ( AccountInfoInteger ( ACCOUNT_LOGIN ) !=   GlobalVariableGet (name_global) )
               if ( GlobalVariableDel (name_global) )
                     ExpertRemove ();
     }
     else
           GlobalVariableSet ( name_global, AccountInfoInteger ( ACCOUNT_LOGIN ) );

     return ( INIT_SUCCEEDED );
}