포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 185

 

안녕하세요.

특정 이벤트가 끝나면 고문이 작업을 완료해야합니다.

내가 알기로는 이것은 deinit() 함수이므로 어떻게든 호출해야 합니다. 교과서 인용:

" 특수 함수 deinit()은 클라이언트 터미널이 종료될 때, 금융 상품 창을 닫을 때, 금융 상품 및/또는 차트 기간 을 변경하기 직전, MetaEditor에서 프로그램을 성공적으로 재컴파일할 때 클라이언트 터미널에서 실행을 위해 호출됩니다. , 입력 매개변수 변경 시 및 계정 변경 시.

즉, 예를 들어 이 함수를 호출하려면 터미널을 수동으로 닫아야 합니까?

조건이 트리거되었을 때 이 함수를 호출하려고 했으나 실행되었지만 새 틱이 와서 시작 함수가 다시 실행되었습니다.

 int deinit()
  {
   Alert ( "Закрываем программу" ); 
   return ( 0 );
  }

int start()
{
//код
..............
if ( OrdersTotal ()== 0 ) deinit();
return ( 0 );
}



어쨌든 프로그램을 완료하려면 어떻게 해야 합니까?

고맙습니다.

 
GygaByte :

안녕하세요.

특정 이벤트가 끝나면 고문이 작업을 완료해야합니다.

내가 알기로는 이것은 deinit() 함수이므로 어떻게든 호출해야 합니다. 교과서 인용:

" 특수 함수 deinit()는 클라이언트 터미널이 닫힐 때, 기호 창이 닫힐 때, 금융 상품 및/또는 차트 기간을 변경하기 직전, MetaEditor에서 프로그램이 성공적으로 재컴파일될 때에도 클라이언트 터미널에서 실행하기 위해 호출됩니다. , 입력 매개변수가 변경될 때와 계정을 변경할 때.

즉, 예를 들어 이 기능을 호출 하려면 터미널을 수동으로 닫아야 합니까?

조건이 트리거되었을 때 이 함수를 호출하려고 시도했지만 실행되었지만 새 틱이 와서 시작 함수가 다시 실행되었습니다.

어쨌든 프로그램을 완료하려면 어떻게 해야 합니까?

고맙습니다.

프로그래밍 방식 으로 터미널을 닫으 려면 코드 시작 부분에서 start() 함수 앞에 다음을 삽입하십시오.

 //----
#import "user32.dll"
int GetParent( int hWnd);   // вызов API
#import
//----

start() 함수에서 터미널을 닫아야 할 때 start() 함수 외부에서 선언한 ExitMT4() 함수를 호출합니다.

 //+----------------------------------------------------------------------------+
void ExitMT4() {   // выгрузить MT4 из памяти

   int hwnd=WindowHandle( Symbol (), Period ());
   int hwnd_parent= 0 ;
//----
   while (! IsStopped ()) {
      hwnd=GetParent(hwnd);
       if (hwnd== 0 ) break ;
      hwnd_parent=hwnd;
      }
   if (hwnd_parent!= 0 ) PostMessageA(hwnd_parent,WM_CLOSE, 0 , 0 );
}
//+----------------------------------------------------------------------------+
 
artmedia70 :

프로그래밍 방식으로 터미널을 닫으려면 코드 맨 처음에 start() 함수 전에 다음을 삽입하십시오.

start() 함수에서 터미널을 닫아야 할 때 start() 함수 외부에서 선언한 ExitMT4() 함수를 호출합니다.



자세한 답변 감사합니다.

원칙적으로 나는 단순히 고문을 닫는 것으로 충분할 것이며 터미널을 닫을 필요는 없습니다. 쉬운 방법 없을까요?

deinit()이 이 문제를 어떻게든 해결해야 한다고 생각하지만 분명히 내가 뭔가 잘못하고 있습니다.

 

내 컴퓨터에서 Alpari Limited, 빌드 509에서 Terminal.exe를 제거할 수 없습니다.

제어판을 사용하여 제거할 때 "제거할 권한이 없습니다. 시스템 관리자에게 문의하십시오!"라고 표시됩니다.

Uninstall.exe를 사용할 때 "서버가 링크를 반환했습니다"라고 표시됩니다.

Alpari 기술 지원은 이해할 수 있는 어떤 말도 할 수 없으며 단순히 전체 폴더를 철거하고 다른 디렉토리에 터미널을 설치하는 것을 제안합니다.

윈 7, 궁극의 가치. 관리자 권한이 활성화되고 Uninstall.exe가 관리자를 대신하여 실행되었습니다.

이 문제를 해결하기 위한 조언을 주시면 대단히 감사하겠습니다.

 
GygaByte :


자세한 답변 감사합니다.

원칙적으로는 단순히 고문을 닫는 것으로 충분할 것이며 터미널을 닫을 필요는 없습니다. 쉬운 방법 없을까요?

deinit()이 이 문제를 어떻게든 해결해야 한다고 생각하지만 분명히 내가 뭔가 잘못하고 있습니다.

deinit()가 아니라 return(0);
 
artmedia70 :
deinit()가 아니라 return(0);


내가 틀리지 않았다면 return(0)은 단순히 현재 start() 함수를 종료하고 다음 틱을 기다리며 차트에서 EA를 수동으로 고정 해제한 것처럼 EA를 종료해야 합니다.

나는 실제로 확인했습니다 - 각 틱마다 무한히 " 주문 열기 - 0 "이라는 경고가 표시됩니다.

소중한 "때까지"는 기다리지 않았습니다

 int start()
  {
   if ( OrdersTotal ()== 0 ) 
   {
   Alert ( "Открытых ордеров - " , OrdersTotal ());
   return ( 0 );
   }  
  }
//+------------------------------------------------------------------+
int deinit()
  {
 Alert ( "Пока" );  
   return ( 0 );
  }
 
polycomp :

내 컴퓨터에서 Alpari Limited, 빌드 509에서 Terminal.exe를 제거할 수 없습니다.

제어판을 사용하여 제거할 때 "제거할 권한이 없습니다. 시스템 관리자에게 문의하십시오!"라고 표시됩니다.

Uninstall.exe를 사용할 때 "서버가 링크를 반환했습니다"라고 표시됩니다.

Alpari 기술 지원은 이해할 수 있는 어떤 말도 할 수 없으며 단순히 전체 폴더를 철거하고 다른 디렉토리에 터미널을 설치하는 것을 제안합니다.

윈 7, 궁극의 가치. 관리자 권한이 활성화되고 Uninstall.exe가 관리자를 대신하여 실행되었습니다.

이 문제를 해결하기 위한 조언을 주시면 대단히 감사하겠습니다.

일부 악성 프로그램(저는 mail.ru를 사용했습니다)은 접근 권한을 재배포하여 관리자 권한이 있는 사용자가 해당 프로그램을 삭제할 수 없도록 합니다.

문제는 권리 재배포에서 과학적 찌르기의 방법으로 해결되었습니다(폴더의 RMB, 속성, 보안, 변경, 추가, 추가로 개체 유형, 검색 .......)

그러나 나는 "Revo uninstaller"에 대해 알게되었고 무언가를 제거한 모든 치질이 사라졌습니다. + 레지스트리가 활동에서 지워졌다는 확신.

 
GygaByte :


내가 틀리지 않았다면 return(0)은 단순히 현재 start() 함수를 종료하고 다음 틱을 기다리며 차트에서 EA를 수동으로 고정 해제한 것처럼 EA를 종료해야 합니다.

나는 실제로 확인했습니다 - 각 틱마다 무한히 " 주문 열기 - 0 "이라는 경고가 표시됩니다.

소중한 "때까지"는 기다리지 않았습니다

당신의 욕망은 "체커"에 대한 농담을 연상시킵니다. EA가 거래를 중단해야 하는 경우 (일부 조건이 발생한 후) (전역) 플래그를 활성화하여 시작() 기능을 중단하면 예상한 결과를 얻을 수 있습니다.
 
ALXIMIKS :

일부 악성 프로그램(저는 mail.ru를 사용했습니다)은 접근 권한을 재배포하여 관리자 권한이 있는 사용자가 해당 프로그램을 삭제할 수 없도록 합니다.

문제는 권리 재배포에서 과학적 찌르기의 방법으로 해결되었습니다(폴더의 RMB, 속성, 보안, 변경, 추가, 추가로 개체 유형, 검색 .......)

그러나 나는 "Revo uninstaller"에 대해 알게되었고 무언가를 제거한 모든 치질이 사라졌습니다. + 레지스트리가 활동에서 지워졌다는 확신.

매우 감사합니다! Revo uninstaller에 대해 알아보겠습니다.
 
TarasBY :
당신의 욕망은 "체커"에 대한 농담을 연상시킵니다. EA가 거래를 중단해야 하는 경우 (일부 조건이 발생한 후) (전역) 플래그를 활성화하여 시작() 기능을 중단하면 예상한 결과를 얻을 수 있습니다.

대략 이렇습니다.

 bool GlobalFlag;
int init()
{
   GlobalFlag = true ;
   return ( 0 );
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
   if ( GlobalFlag )
       if ( OrdersTotal () == 0 ) 
      {
         GlobalFlag = false ;
         Alert ( "Открытых ордеров - " , OrdersTotal ());
         Alert ( "Пока" );  
      }  
   return ( 0 );
}
//+------------------------------------------------------------------+
int deinit()
{
   return ( 0 );
}
//+------------------------------------------------------------------+