초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 742

 
Klimenko_a_e :

실제 코드에서 함수는 객체를 반환합니다.

내 생각에 복사 생성자는 이 경우 임시 복사본을 만들어야 합니다.

코드는 MQL5 빌드 1545에서도 올바르게 작동합니다.

새 빌드에서 복사 생성자는 1차원 배열의 크기도 조정할 수 없습니다: 오류 4007.

제 생각에는 이것은 옳지 않습니다.

이 경우에 대해서는 확실히 말씀드리기 어렵습니다. 귀하의 문제에 대해 매우 훌륭한 전문가가 있으므로 https://www.mql5.com/ru/forum/1111 에 문의하는 것이 좋습니다.

내 편집으로 코드가 제대로 작동합니다. 없이 - 아니. 그러나 코드가 작동해야 하는 경우 - 위 링크의 분기에서 더 좋습니다.

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • www.mql5.com
Форум алго-трейдеров MQL5
 
Klimenko_a_e :

실제 코드에서 함수는 객체를 반환합니다.

내 생각에 복사 생성자는 이 경우 임시 복사본을 만들어야 합니다.

코드는 MQL5 빌드 1545에서도 올바르게 작동합니다.

새 빌드에서 복사 생성자는 1차원 배열의 크기도 조정할 수 없습니다: 오류 4007.

제 생각에는 이것은 옳지 않습니다.


빌드 1580에서 오류가 수정되었습니다. 덕분에 모든 것이 제대로 작동합니다.
 
fxsaber :

이 경우에 대해서는 확실히 말씀드리기 어렵습니다. 귀하의 문제에 대해 매우 훌륭한 전문가가 있으므로 https://www.mql5.com/ru/forum/1111 스레드에 연락하는 것이 좋습니다.

내 편집으로 코드가 제대로 작동합니다. 없이 - 아니. 그러나 코드가 작동해야 하는 경우 - 위 링크의 분기에서 더 좋습니다.


링크 주셔서 감사합니다.
 

누군가 조언할 수 있습니다.

입력 설정을 수동으로 변경한 후 Expert Advisor의 실행을 어떻게 중단할 수 있는지 알 수 없습니다.

1) 차트에서 다음 EA 코드를 실행합니다.

 #property version    "1.00"

input int Setting_ = 0 ;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
   Print ( "OnInit:" ,Setting_);
   
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   Print ( "OnDeinit(" ,reason, "):" ,Setting_);
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
   while (! _StopFlag )
   {
       Sleep ( 1000 );
   }
}

2) 설정 창을 열고 "Setting_" 매개변수를 1로 변경합니다.

3) 변경 사항을 적용합니다.

따라서 변경 사항을 적용하려면 OnInit를 실행해야 하지만 OnTick(또는 기타)의 계산이 중지될 때까지 OnInit가 실행되지 않습니다.

내가 아는 한, _StopFlag - mql5 프로그램 중지 플래그를 통해 프로그램을 중지 하는 검사만 있지만 이것은 완전한 종료를 위한 것입니다. 하지만 입력 설정이 계산을 중지하도록 변경되었음을 이해하는 방법을 모르겠습니다.

누군가가 그러한 상황에 직면했을 수 있습니까? 비밀 해킹이 있는 것은 아닐까?

 
Marat Sultanov :

누군가 조언할 수 있습니다.

입력 설정을 수동으로 변경한 후 Expert Advisor의 실행을 어떻게 중단할 수 있는지 알 수 없습니다.

1) 차트에서 다음 EA 코드를 실행합니다.

2) 설정 창을 열고 "Setting_" 매개변수를 1로 변경합니다.

3) 변경 사항을 적용합니다.

따라서 변경 사항을 적용하려면 OnInit를 실행해야 하지만 OnTick(또는 기타)의 계산이 중지될 때까지 OnInit가 실행되지 않습니다.

내가 아는 한, _StopFlag - mql5 프로그램 중지 플래그를 통해 프로그램을 중지 하는 검사만 있지만 이것은 완전한 종료를 위한 것입니다. 하지만 입력 설정이 계산을 중지하도록 변경되었음을 이해하는 방법을 모르겠습니다.

누군가가 그러한 상황에 직면했을 수 있습니까? 비밀 해킹이 있는 것은 아닐까?

OnInit()에서 초기화 해제 코드를 확인하십시오.

초기화 해제 이유

UninitializeReason() 함수에서 반환된 Expert Advisor의 초기화 해제에 대한 이유 코드입니다. 다음 값 중 하나를 가질 수 있습니다.

끊임없는

의미

설명

REASON_PROGRAM

0

전문가는 ExpertRemove() 함수를 호출하여 작업을 중지했습니다.

REASON_REMOVE

하나

프로그램이 차트에서 제거되었습니다.

REASON_RECOMPILE

2

프로그램 재컴파일

REASON_CHARTCHANGE

차트 기호 또는 기간이 변경되었습니다.

REASON_CHARTCLOSE

4

차트 닫힘

REASON_PARAMETERS

5

입력 매개변수가 사용자에 의해 변경되었습니다.

REASON_ACCOUNT

6

다른 계정이 활성화되었거나 계정 설정 변경으로 인해 거래 서버에 재접속이 발생했습니다.

REASON_TEMPLATE

7

다른 차트 템플릿이 적용됨

REASON_INITFAILED

여덟

OnInit() 처리기가 0이 아닌 값을 반환했음을 서명합니다.

REASON_CLOSE

아홉

터미널 폐쇄

 
Artyom Trishkin :

OnInit()에서 초기화 해제 코드를 확인하십시오.

...

음... 오해하셨군요 :)

사용자가 입력 매개변수를 변경했는지 함수 내부(예: OnTick )를 찾아야 합니다. 이제 프로그램을 끝내고 OnDeinit로 이동해야 할 때임을 알게 됩니다.

 
Marat Sultanov :

음... 오해하셨군요 :)

사용자가 입력 매개변수를 변경했는지 함수 내부(예: OnTick )를 찾아야 합니다. 이제 프로그램을 끝내고 OnDeinit로 이동해야 할 때임을 알게 됩니다.

사용자가 Expert Advisor 설정 창(F7)을 열고 매개변수를 변경한 후 거기에서 OK 버튼을 누르면 OnDeinit()가 즉시 호출되고 REASON_PARAMETERS 값을 초기화 해제 코드에 씁니다. 다음으로 OnInit()이 호출됩니다. 여기서 UninitializeReason() 을 사용하면 초기화 해제 코드를 확인할 수 있고 값이 REASON_PARAMETERS와 같으면 다음 에 무엇을 할지 결정할 수 있습니다.
 
Artyom Trishkin :
사용자가 Expert Advisor 설정 창(F7)을 열고 매개변수를 변경한 후 거기에서 OK 버튼을 누르면 OnDeinit()가 즉시 호출되고 REASON_PARAMETERS 값을 초기화 해제 코드에 씁니다. 다음으로 OnInit()이 호출됩니다. 여기서 UninitializeReason() 을 사용하면 초기화 해제 코드를 확인할 수 있고 값이 REASON_PARAMETERS와 같으면 다음 에 무엇을 할지 결정할 수 있습니다.

확인.

물론이죠:

1) 먼저 첫 번째 게시물에서 제공한 코드를 실행합니다. 아름다움을 위해 거기에 가져 오지 않았습니다 ... 모든 차트에서 시작할 수 있습니다.

2) Expert Advisor 설정 창을 호출합니다.

3) 설정을 변경하고 확인을 클릭합니다.

내 코드를 주의 깊게 살펴보면 결과적이고 자연스러운 결과에 놀라지 않을 것입니다. OnDeinit()는 호출되지 않습니다.

 

또한 EA가 deinit에 도달하지 않도록 할 수 있도록 이유와 매개변수 모두를 deinit에 출력했습니다.

코드에서 가장 중요한 부분에 주의하십시오.

 void OnTick ()
{
   while (! _StopFlag )
   {
       Sleep ( 1000 );
   }
}

이것은 입력 매개변수의 변경으로 인해 중단되지 않는 긴 계산의 시각적 에뮬레이션입니다. 그리고 나는 그것을 중단해야하며 질문은 어떻게? :)

MQL5에서 누락된 것이 없고 불행히도 이 상황을 해결하지 못하는 _StopFlag 외에 다른 언어가 없는지 확인하고 싶습니다.

대략적으로 말하면 과중한 계산 중에 입력 매개변수가 변경되는 순간을 잡아야 합니다.

 
Marat Sultanov :

또한 EA가 deinit에 도달하지 않도록 할 수 있도록 이유와 매개변수 모두를 deinit에 출력했습니다.

코드에서 가장 중요한 부분에 주의하십시오.

이것은 입력 매개변수의 변경으로 인해 중단되지 않는 긴 계산의 시각적 에뮬레이션입니다. 그리고 나는 그것을 중단해야하며 질문은 어떻게? :)

MQL5에서 누락된 것이 없고 불행히도 이 상황을 해결하지 못하는 _StopFlag 외에 다른 언어가 없는지 확인하고 싶습니다.

대략적으로 말하면 과중한 계산 중에 입력 매개변수가 변경되는 순간을 잡아야 합니다.

대략적으로 말하자면 - 내가 당신에게 쓴 것을 주의 깊게 다시 읽고 당신의 코드에서 무한 루프를 던지십시오.

Expert Advisor를 무한 루프에 넣는 것이 올바른 결정이라고 확신하십니까?

사유: