순환 연산자 'for' 질문

 

안녕하세요 MQL4 커뮤니티 여러분,


첫 번째 참조: https://book.mql4.com/operators/for

첫 번째 참조에 따르면 'for' 연산자의 형식 예제는 다음과 같이 작성됩니다.

   for (Expression_1; Condition; Expression_2)         // Cycle operator header
      One operator , cycle body                     // Cycle body is one operator


두 번째 참조: https://docs.mql4.com/basis/operators/for

두 번째 참고 문헌에 따르면 'for' 연산자의 제공 예는 다음과 같이 설명됩니다.

 for (Expression1; Expression2; Expression3)
   operator;


이 첫 번째 예 는 두 번째 매개변수로 "조건"을 포함하고 두 번째 예는 두 번째 매개변수로 "Expression2" 를 포함하는 이유는 무엇 입니까?

이 모순의 의미는 무엇입니까?

그것이 중요합니까?

'for' 주기 연산자를 사용하려면 모든 매개변수를 잘 이해하고 있어야 한다고 생각합니다.

고맙습니다.

 

아마도 먼저 while 루프를 이해함으로써 for 루프를 더 잘 이해할 수 있을 것입니다. . . for 루프는 초기 조건과 증분이 내장된 while 루프입니다. . .

대한 설명서를 확인하십시오. . .

" for 연산자는 다음 연산자와 동일합니다. "

Expression1;
while (Expression2)
  {
   operator;
   Expression3;
  };


특히 귀하의 질문과 관련하여 " 왜 이 첫 번째 예가   두 번째 예는 "Expression2"를 포함하는 반면 두 번째 매개변수로 "조건"을 포함합니다.   두 번째 매개변수로? " 표현식은 조건이 될 수 있으며, 조건은 true 또는 false 값을 생성합니다(예: (a > b) 또는 (c || d) 또는 (OrdersTotal() >= 0) , 또한 설명서에 따르면 . . . " Expression2 는 사이클 종료에 대한 조건부 테스트입니다. "

 

사이먼,

표현식은 조건이 될 수 있습니다

따라서 'for' 연산자 헤더의 매개변수 2는 표현식 OR 조건이 될 수 있습니까? Expression_1 및 Expression_3은 표현식을 유지해야 하며 조건이 올바른 것으로 변경되지 않아야 한다고 가정합니다. 왜 표현 1과 3도 조건이 될 수 없는지 모르겠습니다. 두 표현식 1&3은 모두 채워야 하는 매개변수일 뿐입니다. (조건은 Expression_2의 목적이라고도 하는 매개변수 2일 수도 있음)

생각을 확인해주세요.

표현식은 산술 연산(2+2=4), 할당 등이 될 수 있습니다(모두 메타에디터 사전에 나열됨).

조건이 참 || 거짓(예: a>b, a>=b, a==b 등).

작업은 MetaEditor 사전에도 포함되어 있습니다(예: Break, Continue, Return, while, for 등).

고맙습니다

 
WhooDoo22 :

사이먼,

표현식은 조건이 될 수 있습니다

따라서 'for' 연산자 헤더의 매개변수 2는 표현식 OR 조건이 될 수 있습니까? Expression_1 및 Expression_3은 표현식을 유지해야 하며 조건이 올바른 것으로 변경되지 않아야 한다고 가정합니다. 왜 표현 1과 3도 조건이 될 수 없는지 모르겠습니다. 두 표현식 1&3은 모두 채워야 하는 매개변수일 뿐입니다. (조건은 Expression_2의 목적이라고도 하는 매개변수 2일 수도 있음)

올바르게 사용 하는 방법을 배웁니다. . . . for 루프는 더 미학적으로 즐거운 방식으로 배열된 while 루프입니다. 그러면 표현식 대 조건 문제가 모두 이해가 될 것입니다. . . 자신에게 호의를 베풀고 두통에 대한 옵션을 줄이십시오. . . . 공부 하는 동안

문서 - 동안

예약 - 동안
 
WhooDoo22 : 그래서, 'for' 연산자 헤더의 매개변수 2는 표현식 OR 조건이 될 수 있습니까?
모든 표현식은 숫자로 나타납니다. 부울로 변환된 숫자는 조건입니다. 같은 것. 당신은 말한다 t uh - mey -toh, 그리고 나는 t uh - mah -toh 라고 말합니다.
 

Simon, 코드에서 while 연산을 사용하는 방법을 연습하겠습니다. 잘 부탁드립니다... 이 소리가 좋아요! :) 고맙습니다.

William, 부울로 변환된 숫자는 조건입니다... (1=true,0=false). 감사합니다.

고맙습니다.

 

사이먼,

나는 당신이 요청한대로 할 수 있어야하는 EA를 작성했습니다.

저는 이 EA의 조합과 터미널의 "전문가" 탭에서 얻은 결과의 스냅샷을 공유하고 있습니다.


EA는 USDJPY 주문을 선택하고 해당 정보를 전문가 탭에 인쇄할 수 있는 것 같습니다. EA가 주문을 마감하고 주문 정보를 인쇄하지 않는 이유는 무엇입니까?

고맙습니다.

 
WhooDoo22 :

사이먼,

나는 당신이 요청한대로 할 수 있어야하는 EA를 작성했습니다.

저는 이 EA의 조합과 터미널의 "전문가" 탭에서 얻은 결과의 스냅샷을 공유하고 있습니다.


EA는 USDJPY 주문을 선택하고 해당 정보를 전문가 탭에 인쇄할 수 있는 것 같습니다. EA가 주문을 마감하고 주문 정보를 인쇄하지 않는 이유는 무엇입니까?

고맙습니다.

중괄호를 이해했다고 했지? https://www.mql5.com/en/forum/142732


코드와 그 의미를 설명하십시오. . . 특히 잠시 동안 저에게 이야기하십시오.
 

사이먼,

귀하의 코드와 그것이 무엇을 의미하는지 설명하십시오. . . 특히 잠시 동안 저에게 이야기하십시오.

코드목적 을 설명하기 위해 최선을 다할 것입니다.


코드 목적:

1. 3개의 주문 풀에서 USDJPY 주문을 선택합니다.

2. USDJPY 주문의 TP와 SL을 수정합니다.

3. OrderPrint() 함수를 실행합니다.

4. USDJPY 주문을 닫습니다.


코드 설명:

먼저 변수가 선언됩니다.

   int i;
   double bid_ask;

두 번째 로 'while' 루프가 실행됩니다.

'while' 루프 논리:

OrderSelect() 함수 는 1,2,3 등의 숫자 대신 변수 'i'를 사용합니다. (이를 염두에 두십시오)

따라서 OrderSelect() 함수와 OrderSymbol() 함수 내의 변수 i가 USDJP Y 가 아닌 경우 변수 i를 1만큼 증가시킵니다. ( i++; )

   while(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()!="USDJPY")

         i++;

'while' 루프는 OrderSelect() 함수가 적절한 주문 티켓을 선택하고 OrderSymbol() 함수가 USDJPY 주문을 선택할 때까지 'i' 변수를 증가시킵니다. 두 가지 목표가 모두 달성되면 while 루프가 거짓이 되고 제어가 i++ 아래로 전달됩니다. (while 루프 본문).

세 번째 로 OrderModify() 함수가 실행됩니다.

OrderModify(i,OrderOpenPrice(), 50 * Point , 50 * Point , 0 , CLR_NONE );

넷째 , OrderPrint() 함수가 실행된다.

OrderPrint();

다섯째 , 청산 주문이 매수 주문인지 매도 주문인지 구별하기 위한 매개변수가 포함됩니다.

         if (OrderType()==OP_BUY){bid_ask=Bid;}
         if (OrderType()==OP_SELL){bid_ask=Ask;}

여섯째 , 프로그램이 주문이 매수인지 매도인지 구분하면 OrderClose() 함수를 실행합니다.

OrderClose(i,OrderLots(),bid_ask, 3 , CLR_NONE );

일곱 번째 (그리고 마지막으로), 프로그램에는 전략 테스터에서 시각적 테스트 중에 티켓 번호가 실제로 USDJPY의 티켓인지 확인하기 위해 변수 'i'를 표시하는 주석이 포함됩니다.

 Comment ( "i = " ,i);

고맙습니다.

 
WhooDoo22 :

사이먼,


'while' 루프 논리:

OrderSelect() 함수는 1,2,3 등의 숫자 대신 변수 'i'를 사용합니다. (이를 염두에 두십시오)

따라서 OrderSelect() 함수와 OrderSymbol() 함수 내의 변수 i가 USDJP Y 가 아닌 경우 변수 i를 1만큼 증가시킵니다. ( i++; )

'while' 루프는 OrderSelect() 함수가 적절한 주문 티켓을 선택하고 OrderSymbol() 함수가 USDJPY 주문을 선택할 때까지 'i' 변수를 증가시킵니다. 두 가지 목표가 모두 달성되면 while 루프가 거짓이 되고 제어가 i++ 아래로 전달됩니다. (while 루프 본문).

죄송합니다. 귀하의 코드를 잘못 읽었습니다. . . 설명 감사합니다, 지금 무엇을 하고 있는지 이해합니다. 당신이 가진 문제는 매우 간단합니다. . . 게시한 화면 캡처의 오류 메시지를 보십시오. . . 주문 번호를 포함하여 OrderPrint()가 생성하는 내용을 살펴본 다음 오류를 확인합니다.

반환 값 확인 및 오류 보고를 포함했다면 문제를 직접 보았을 것입니다.
 

사이먼,

나는 당신이 무엇을 보고 있는지 알 수 없지만 ;) 이 문제에 대한 조명을 제공하기 위해 GetLastOrder() 함수 를 즉시 포함할 것입니다. 먼저 코드에 GetLastOrder() 함수를 포함하지 않고 질문을 게시한 것에 대해 사과드립니다.

고맙습니다.

사유: