[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 269

 
yosuf :
감사합니다. 문제에 대한 프로그래밍 방식의 솔루션을 나타내는 링크가 있지만 어떻게 해야 할지 모르겠습니다. 그 이유는 무엇이며 이 문제를 어떻게 해결할 수 있습니까? EA가 한 달 동안 잘 작동했는데 지금은 버그가 있는 이유는 무엇입니까? 오류가 코드에 있었다면? 질문에 대한 답이 부담스럽다면 초보자를 위한 지점이 아닌 것으로 밝혀졌다. 나는 슬프다.

나는 시작 직후에 Expert Advisor에 다음과 같이 썼습니다.

 //--- Section A: start - checking.
   if (! IsExpertEnabled ())
      { Comment ( "Expert is NOT working. Check the reason." ); return ( 0 );}
   if (! IsConnected ())
      { Comment ( "No connection!" ); return ( 0 );}
   if ( IsTradeContextBusy ())
      { Comment ( "Trade flow is busy. Wait..." ); Sleep ( 5 * 1000 ); return ( 0 );}
   if ( AccountFreeMargin ()< 1000 *Lot_super)
      { Comment ( "No money to trade. Free Margin = " , AccountFreeMargin ()); Sleep ( 20 * 1000 ); return ( 0 );}
//--- Section A: end - checking.

그것을 시도하십시오. 당신도 유용하다는 것을 알게 될 것입니다.

 
drknn :


1. 알았어. 선언된 int start(). 나는 항상 null을 반환했습니다. 코드에서 return(-1) 및 return(-2) 명령을 보았습니다. 이 코드를 선택하는 방법?

2. 자연스러운 질문이 생깁니다. Expert Advisor/indicator/script의 start()를 int() 유형이 아니라 임의의 다른 유형으로 선언한 다음 터미널에 무엇을 반환해야 하는지 ? 다시 말해, 터미널은 return() 에 의해 반환된 값으로 무엇을 합니까?

1. 일반 함수가 무엇을 반환해야 하는지 어떻게 결정합니까?

2. 일반 함수처럼 모든 유형을 사용할 수 있습니다. 터미널은 반환된 값으로 아무 작업도 수행하지 않습니다. 그는 그들을 무시합니다.

특수 기능

 
Zhunko :

1. 정규 함수가 무엇을 반환해야 하는지 어떻게 결정합니까?

2. 일반 함수처럼 모든 유형을 사용할 수 있습니다. 터미널은 반환된 값으로 아무 작업도 수행하지 않습니다. 그는 그들을 무시합니다.


1. 정규 함수가 정확히 무엇을 반환해야 하는지 결정하려면 메인 코드에 왜 그런 값이 필요한지 알아야 합니다. 예를 들어 신호가 있을 때 구매 주문을 열기로 결정해야 하는 경우 이미 열려 있는 구매 주문 수를 반환하는 함수를 작성할 것입니다. 얼마나 많은가에 따라 코드는 코드에 포함된 논리에 따라 결정을 내립니다. 터미널에 어떤 반환 코드 처리 논리가 중첩되어 있는지 모르겠습니다. 오늘 세마포어 생성에 대한 기사를 보다가 리턴 코드(-2)를 발견했습니다. 놀라서 여기에 질문을 했습니다. 오직 그리고 모든 것. ( https://www.mql5.com/en/articles/1412 - 기사는 여기에 있습니다).

2. 터미널은 반환 값을 무시합니다. 그건 확실합니다? 그렇다면 왜 어드바이저/지시자/스크립트를 생성할 때 개발자가 템플릿에 정확히 int를 넣었는지에 대한 정당한 질문이 다시 발생합니다. 왜냐하면 거기에 void를 넣는 것이 더 논리적이기 때문입니다. 그러면 터미널은 다음을 수행할 필요가 없습니다. 아무 것도 무시하십시오. 그러면 1 프로세서 주기 시간을 얻을 수 있습니까? int init(), int deinit() 및 int start() 함수에서 반환할 내용에 논리가 있을 수 있습니까? 제 생각에는 Roche가 이미 누군가에게 이것을 설명했습니다. 0을 반환해야 할 때와 (-1)을 반환해야 할 때에 대한 설명이 있었던 것을 기억합니다. 이것은 내가 찾던 설명입니다. 죄송합니다 못찾았습니다...

추신

반환 (-2) 기사의 저자는 자신의 목적을 위해 사용합니다. 그러나 start() 함수가 0이 아닌 반환 코드로 끝나는 경우가 있다는 사실은 여전히 남아 있습니다. 그리고 이것은 한 사람에 의해 이루어지지 않습니다. 이것이 내가 이해하고 싶은 논리입니다.

 
Zhunko :

특수 기능

본문에 있는거같은데

미리 정의된 함수는 매개변수를 가질 수 있습니다. 그러나 클라이언트 단말에서 이러한 함수를 호출하면 외부에서 매개변수가 전달되지 않고 기본값이 사용됩니다.

우리는 함수로 들어오는 매개변수에 대해 이야기하고 있는 것이지, 반환된 매개변수에 대해서는 이야기하고 있지 않습니다.

 
답변 해주셔서 감사합니다!
drknn :
주문 카운터입니다. 예를 들어, 특정 통화 쌍에 대한 구매 주문이 있고 시장에 특정 매직 넘버가 있는 경우 코드에서 알아내야 하는 경우가 있습니다. 예를 들어, 있는 경우 다른 구매 주문을 여는 것은 불가능합니다. 즉, 결정을 내리기 위해서는 주문 카운터가 필요합니다.
 
paladin80 :

나는 시작 직후에 Expert Advisor에 다음과 같이 썼습니다.

그것을 시도하십시오. 당신도 유용하다는 것을 알게 될 것입니다.

감사합니다. 버그를 찾았습니다. 어드바이저가 막혀서 글(위 링크)에 나와있는 이유로 닫고 다시 시작했는데 오더마법을 123에서 124로 변경하는걸 깜빡해서 방향이 다른 2명의 어드바이져가 같은 마법을 받고 시작했습니다 누가 더 빨리 주문을 여는지 경쟁합니다. 먼저 열리면. 물론 "CELL"이 더 이상 "BUY"에 의해 열리지 않았거나 그 반대의 경우도 마찬가지입니다. 두 번째 업데이트된 고문의 마법을 변경하자마자 둘 다 정상적으로 작동하기 시작했습니다. 오류가 반복되면 조언을 받겠습니다. 답변 감사합니다.
 

다음 행을 어떻게 이해할 수 있습니까?

반품 주문량

if(매수>0) 반환(매수);

그렇지 않으면 반환(-판매);

} ?

 

우리는 스크립트를 작성합니다:

 int start(){
   Print ( "Попытка ретурна 136" );
   return ( 136 );
}

차트에 던지고 로그를 보십시오:

2012.07.20 12:04:11 111 NZDUSD,M15: removed
2012.07.20 12:04:11 111 NZDUSD,M15: uninit reason 0
2012.07.20 12:04:11 111 NZDUSD,M15: Попытка ретурна 136
2012.07.20 12:04:11 111 NZDUSD,M15: loaded successfully

(여기서 111은 스크립트 이름입니다). "단위 이유 0" 행이 보입니다. 터미널이 0을 기다리고 있었던 것 같습니다!

(-1)과 동일하게 시도:

 int start(){
   Print ( "Попытка ретурна -1" );
   return (-1);
}

결과는 동일합니다.

2012.07.20 12:08:19 111 NZDUSD,M15: 삭제됨
2012.07.20 12:08:19 111 NZDUSD,M15: 단위 이유 0
2012.07.20 12:08:19 111 NZDUSD,M15: 반환 시도 -1

2012.07.20 12:08:19 111 NZDUSD,M15: 성공적으로 로드됨

터미널을 보려면 0이 반환되는지 여부에 무관심하지 않습니다.

추신

실제로 인터넷에서 이 답변을 찾았습니다.

return 0 - 프로그램이 오류 없이 작업을 완료했습니다.
반환 1 - 또는 그 이상의 숫자, 프로그램은 오류와 함께 작업을 종료하고 추가 처리를 위해 오류 코드를 반환합니다.

모든 운영 체제에서 모든 프로그램은 항상 오류 코드를 반환합니다.

유일한 문제는 반환이 코드를 운영 체제가 아니라 터미널로 반환한다는 것입니다. 이렇게 하면 질문이 열려 있습니다.

 
drknn :

우리는 스크립트를 작성합니다:

차트에 던지고 로그를 보십시오:

(여기서 111은 스크립트 이름입니다). "단위 이유 0" 행이 보입니다. 터미널이 0을 기다리고 있었던 것 같습니다!

(-1) 과 동일하게 시도해 보겠습니다.

결과는 동일합니다.

터미널을 보려면 0이 반환되는지 여부에 무관심하지 않습니다.


unitit 이유는 EA 종료 이유 코드입니다.

https://docs.mql4.com/en/constants/uninit

 
당신은 약간 혼란스러워합니다. UNINIT REASON은 표준 함수에 관한 반환과 아무 관련이 없습니다. 어드바이저를 작성하고 "시작"에서 "초기화"를 호출하고 다른 반환 결과를 확인하십시오. 실제로 https://docs.mql4.com/en/basis/functions/special 모든 것이 문서에 완벽하게 작성되었습니다. 주의 깊게 다시 읽으십시오.