본문 바로가기

EA 교육자료

for구문 [기본문법]

4-1. for구문
 
int i;                            //정수 i를 정의하고
for(i=0 ; i<15 ; i++)        //for(시작값으로 초기화 ; 조건 ;  증감) 
Print(i);                       //결과 실행(반복 할 내용)
 
for구문을 직역해 보면,
for(이걸로 시작합니다 ; 이 조건이 맞나요? ; 앞에 조건이 맞으면, 하나 더 증가하여 다시 시작)
조건이 맞지 않을 때까지 계속 돕니다.
그리고 이 반복문 아래에 속하는 코딩 Print(i) 은 반복문 횟수만큼 실행이 됩니다.
결과 값은 0부터 14까지 15번 실행되면서 Print를 실행합니다.
 
위의 예에서는 i의 타입을 정의 할 때 for구문 외부에서 했는데요, 아래와 같이 for구문 내부에서 정의할 수도 있습니다.
for(int i=0 ; i<15 ; i++)

아래, 플로우 차트를 통해 로직을 한번 더 살펴보겠습니다.
 
 
이제 반복문안에 쓰이는 'break'에 대해 알아 보겠습니다.

break는 반복문안에서 루핑을 돌다가 해당 조건이 왔을 때, 반복문을 종료 시키고 빠져 나오게 합니다.
 
for(int i=0 ; i<15 ; i++)       //i를 0부터 14까지, 15번 돌려보자
{
 if(i==10)                         //i가 10이 되면
break;                          //루핑 종료
Print(i);                         //0~9까지만 Print
}

반복문 안의 또다른 기능인 'continue'에 대해 알아봅시다.

루핑을 돌다가 해당 조건이 왔을 때, 그 조건만 뛰어넘고 계속 실행합니다. 아래 예에서는 루핑이 10에 도달 할 때 10은 생략하고 0부터 14까지만 실행합니다.
 
for(int i=0 ; i<15 ; i++)     //i를 0부터 14까지, 15번 돌려보자
{   
 if(i==10)                      //i가 10이 되면
continue;                   //해당 조건은 건너뜀
Print(i);                      //10은 생략하고 0~14까지만 Print
}
 
예제를 통해 종합복습을 하겠습니다.
 
for(int i=0;i<OrdersTotal();i++)   모든 오픈주문을 대상으로
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        주문 한개씩 잡아서 만약 그게 False면
      break;         브레이크로 반복문을 종료하고 빠져나옵니다.

      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol())   오더매직넘버가 지정해준 것과 같지않거나, 주문통화쌍이 일치하지 않으면
      continue;       콘티뉴로 해당 주문은 건너뜁니다

      //---- check order type 
      if(OrderType()==OP_BUY)    BUY포지션이면
        {
         if(Open[1]>ma && Close[1]<ma)  이러한 조건에서
         OrderClose(OrderTicket(),OrderLots(),Bid,3,White);    청산
         break;     그리고 브레이크로 종료
        }
      if(OrderType()==OP_SELL)    SELL포지션이면
        {
         if(Open[1]<ma && Close[1]>ma)  상동
         OrderClose(OrderTicket(),OrderLots(),Ask,3,White);   상동
         break;   상동
        }