반복문(Loop)은 특정 작업을 연속적으로 반복 수행할 필요가 있는 경우에 사용하는 제어문이며 For문과 While문 두가지 종류가 있습니다.

For문은 가장 많이 사용되는 반복문으로 특정 작업을 일정한 횟수만큼 반복시키는 제어문이고 while문은 횟수의 지정이 없이 특정한 조건이 만족하지 않을때 까지 반복실행을 하는 제어문입니다. 따라서 반복실행이 필요한데 횟수를 지정할 수 있는 경우에는 For문을 사용하고 횟수를 지정할 수 없는 경우에는 While문을 사용하면 됩니다.

  1. For 반복문

    아래 예제1 수식은 과거 10개봉 종가 중에 현재봉 고가와 저가 사이에 위치하는 종가가 몇개인지를 카운트 하는 수식입니다.

     ```c
     //예제1
     var : count(0);
     
     count = 0;
     if H[0]>= C[1] and C[1] >= L[0] Then
     		count = Count + C;
     if H[0]>= C[2] and C[2] >= L[0] Then
     		count = count + C;
     if H[0]>= C[3] and C[3] >= L[0] Then
     		count = count + C;
     if H[0]>= C[4] and C[4] >= L[0] Then
     		count = count + C;
     if H[0]>= C[5] and C[5] >= L[0] Then
     		count = count + C;
     if H[0]>= C[6] and C[6] >= L[0] Then
     		count = count + C;
     if H[0]>= C[7] and C[7] >= L[0] Then
     		count = count + C;
     if H[0]>= C[8] and C[8] >= L[0] Then
     		count = count + C;
     if H[0]>= C[9] and C[9] >= L[0] Then
     		count = count + C;
     if H[0]>= C[10] and C[10] >= L[0] Then
     		count = count + C;
     ```
     
     일반 제어문을 사용해서 작성하면 위와 같이 케이스 별로 나열해서 작성 할 수 있습니다. 
     10개의 if문은 종가의 이전값 참조만 다를 뿐 차이가 없는 문장입니다. 
     만약 과거 60개봉을 대상으로 한다면 그에 따라 작성량이 늘어나고 
     5개봉으로 줄이면 수식의 내용을 삭제해 주어야 하므로 
     대상봉이 늘거나 줄어들면 그에 따라 수식을 계속 수정해 주어야 합니다.
     
     위 수식을 For문을 이용해서 작성하면 아래와 같이 작성됩니다.
     식이 상대적으로 간결해 지므로 가독성이 좋아지게 됩니다.
     
     ```c
     //예제2
     var : ii(0),count(0);
     
     count = 0;
     For ii = 1 to 10 Step 1
     {
     		if H[0] >= C[ii] and C[ii] >= L[0] Then
     				count = count+1;
     }
     ```
     
     <aside>
     💡 ii에 값이 저장되면 C**[ii]**에 적용됩니다.
     최초 ii에 1저장  
     →  H[0] >= C**[1]** and C**[1]** >= L[0] 체크 → 만족하면 Count 에 1추가→ 값 1 증가
     ii에 2저장 
     → H[0] >= C**[2]** and C**[2]** >= L[0] 체크 → 만족하면 Count 에 1추가→ 값 1 증가
     ii에 3저장
     → H[0] >= C**[3]** and C**[3]** >= L[0] 체크 → 만족하면 Count 에 1추가→ 값 1 증가
     …………………
     ii에 9저장 
     → H[0] >= C**[9]** and C**[9]** >= L[0] 체크 → 만족하면 Count 에 1추가→ 값 1 증가
     ii에 10저장 
     → H[0] >= C**[10]** and C**[10]** >= L[0] 체크 → 만족하면 Count 에 1추가→ 값 1 증가
     ii에 11저장 
     → 최종값 10보다 크므로 For문에서 빠져나가게 됩니다.
     
     </aside>
     
     또한 과거 대상 봉수를 줄이거나 늘리면 예제1은 수식의 내용을 줄이거나 늘려주어야 하지만 예제2와 같이 For문으로 처리된 내용은 최종값만 변경하면 되므로 수식 내용이 늘어나는 부분은 없습니다.
     For ii = 1 to 10 Step 1 → For ii = 1 to **5** Step 1
     For ii = 1 to 10 Step 1 → For ii = 1 to **60** Step 1
    
  2. While 반복문

    아래는 현재봉의 종가보다 큰 종가가 몇 봉 전에 발생했었는지를 체크하기 위한 문장입니다.

     ```c
     var : ii(0),nPrevBar(0);
     
     nPrevBar = 0;
     While C[nPrevBar] <= C
     {
     	nPrevBar = nPrevBar+1;
     }
     
     if Index < nPrevBar Then
     	nPrevBar = 0;
     
     Plot1(nPrevBar);
     ```
     
     For문은 반복횟수를 지정하는 타입이라 위와 경우에는 반복 횟수를 지정하기에는 모호합니다. 물론 루프횟수를 적당히 크게 하여 for문으로 작성할 수는 있겠지만 그 횟수로도 부족할 경우가 있을 수 있습니다. 
     그러므로 루프 횟수를 지정하기 어려운 조건들은 While문을 사용하게 됩니다.
     
     <aside>
     💡 nPrevBar는 최초값 0
     → C**[0]** ≤ C[0] 체크 → 만족하면 nPrevBar는 1
     → C**[1]  ≤** C[0] 체크 → 만족하면 nPrevBar는 2
     → C**[2] ≤** C[0] 체크 → 만족하면 nPrevBar는 3
     → C**[3]** ≤ C[0] 체크 → 만족하면 nPrevBar는 4
     → C**[4]** ≤ C[0] 체크 → 만족하면 nPrevBar는 5
     ……….
     
     </aside>
     
     위 수식은 이전봉의 종가를 순차적으로 가져와 현재봉 종가와 비교하는 내용입니다.
     비교해서 이전봉의 종가가 현재봉 종가 이하이면 nPrevBar의 값을 1씩 증가시키고
     이전봉의 종가가 현재봉 종가보다 크면 While문을 빠져나가게 됩니다.
     이때 최종 nPrevBar에 저장된 값이 현재봉 종가보다 큰 봉이 몇봉전에 있는지 위치가 됩니다.
     차트 첫봉의 값까지 가져온 후에도 없으면 0으로 출력해 현재봉이 제일 큰 값임을 나타나게 됩니다.