아마도 먼저 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 등).
고맙습니다
사이먼,
표현식은 조건이 될 수 있습니다
따라서 'for' 연산자 헤더의 매개변수 2는 표현식 OR 조건이 될 수 있습니까? Expression_1 및 Expression_3은 표현식을 유지해야 하며 조건이 올바른 것으로 변경되지 않아야 한다고 가정합니다. 왜 표현 1과 3도 조건이 될 수 없는지 모르겠습니다. 두 표현식 1&3은 모두 채워야 하는 매개변수일 뿐입니다. (조건은 Expression_2의 목적이라고도 하는 매개변수 2일 수도 있음)
문서 - 동안
예약 - 동안
Simon, 코드에서 while 연산을 사용하는 방법을 연습하겠습니다. 잘 부탁드립니다... 이 소리가 좋아요! :) 고맙습니다.
William, 부울로 변환된 숫자는 조건입니다... (1=true,0=false). 감사합니다.
고맙습니다.
사이먼,
나는 당신이 요청한대로 할 수 있어야하는 EA를 작성했습니다.
저는 이 EA의 조합과 터미널의 "전문가" 탭에서 얻은 결과의 스냅샷을 공유하고 있습니다.
EA는 USDJPY 주문을 선택하고 해당 정보를 전문가 탭에 인쇄할 수 있는 것 같습니다. EA가 주문을 마감하고 주문 정보를 인쇄하지 않는 이유는 무엇입니까?
고맙습니다.
사이먼,
나는 당신이 요청한대로 할 수 있어야하는 EA를 작성했습니다.
저는 이 EA의 조합과 터미널의 "전문가" 탭에서 얻은 결과의 스냅샷을 공유하고 있습니다.
EA는 USDJPY 주문을 선택하고 해당 정보를 전문가 탭에 인쇄할 수 있는 것 같습니다. EA가 주문을 마감하고 주문 정보를 인쇄하지 않는 이유는 무엇입니까?
고맙습니다.
코드와 그 의미를 설명하십시오. . . 특히 잠시 동안 저에게 이야기하십시오.
사이먼,
귀하의 코드와 그것이 무엇을 의미하는지 설명하십시오. . . 특히 잠시 동안 저에게 이야기하십시오.
코드 와 목적 을 설명하기 위해 최선을 다할 것입니다.
코드 목적:
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);
고맙습니다.
사이먼,
'while' 루프 논리:
OrderSelect() 함수는 1,2,3 등의 숫자 대신 변수 'i'를 사용합니다. (이를 염두에 두십시오)
따라서 OrderSelect() 함수와 OrderSymbol() 함수 내의 변수 i가 USDJP Y 가 아닌 경우 변수 i를 1만큼 증가시킵니다. ( i++; )
'while' 루프는 OrderSelect() 함수가 적절한 주문 티켓을 선택하고 OrderSymbol() 함수가 USDJPY 주문을 선택할 때까지 'i' 변수를 증가시킵니다. 두 가지 목표가 모두 달성되면 while 루프가 거짓이 되고 제어가 i++ 아래로 전달됩니다. (while 루프 본문).
반환 값 확인 및 오류 보고를 포함했다면 문제를 직접 보았을 것입니다.
안녕하세요 MQL4 커뮤니티 여러분,
첫 번째 참조: https://book.mql4.com/operators/for
첫 번째 참조에 따르면 'for' 연산자의 형식 예제는 다음과 같이 작성됩니다.
두 번째 참조: https://docs.mql4.com/basis/operators/for
두 번째 참고 문헌에 따르면 'for' 연산자의 제공 예는 다음과 같이 설명됩니다.
이 첫 번째 예 는 두 번째 매개변수로 "조건"을 포함하고 두 번째 예는 두 번째 매개변수로 "Expression2" 를 포함하는 이유는 무엇 입니까?
이 모순의 의미는 무엇입니까?
그것이 중요합니까?
'for' 주기 연산자를 사용하려면 모든 매개변수를 잘 이해하고 있어야 한다고 생각합니다.
고맙습니다.