커뮤니티

if 조건문 여러개를 for문으로 줄일 수 있나요?

프로필 이미지
예스쟁이
2023-08-08 22:02:28
901
글번호 171339
답변완료

첨부 이미지

아래와 같은 코드를 짰는데요. input : ntime(210000), line_num(5), size_tick(8); var : Tcond(False), oo(0), k(0); array : up_line[20](0), dn_line[20](0), uptext[20](0), dntext[20](0); array : up_touch[20](0), dn_touch[20](0), up_T[20](0), dn_T[20](0), up_TL[50](0), dn_TL[50](0); if Bdate != Bdate[1] Then Tcond = False; if (sdate != sdate[1] and stime >= ntime) or (sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then { oo = o; For k = 1 to line_num { up_T[k] = 0; dn_T[k] = 0; up_line[k] = oo + PriceScale*size_tick*k; dn_line[k] = oo - PriceScale*size_tick*k; up_touch[k] = 0; dn_touch[k] = 0; up_TL[k] = TL_New(sDate,sTime,up_line[k],NextBarSdate,NextBarStime,up_line[k]); // 선긋기 dn_TL[k] = TL_New(sDate,sTime,dn_line[k],NextBarSdate,NextBarStime,dn_line[k]); // 선긋기 } if H >= up_line[1] Then { up_T[1] = 1; up_touch[1] = up_touch[1] + 1; } if H >= up_line[2] Then { up_T[2] = 2; up_touch[2] = up_touch[2] + 1; } if H >= up_line[3] Then { up_T[3] = 3; up_touch[3] = up_touch[3] + 1; } if H >= up_line[4] Then { up_T[4] = 4; up_touch[4] = up_touch[4] + 1; } For k = 1 to line_num { uptext[k] = Text_New(NextBarSdate,NextBarStime,up_line[k],NumToStr(up_touch[k],0)); dntext[k] = Text_New(NextBarSdate,NextBarStime,dn_line[k],NumToStr(dn_touch[k],0)); } } ------------------------------------------------------------------ 이 코드를 실행하면 첨부파일1의 이미지와 같이 숫자가 표시 되는데요. 이것을 아래와 같이 if문들이 반복되어 for 문으로 바꿔봤는데요. 실행 결과가 다르게 나오는데요. 어디가 잘못됐는지 잘 모르겠습니다.. 도움 부탁드립니다. input : ntime(210900), line_num(4), size_tick(8); var : Tcond(False), oo(0), k(0); array : up_line[20](0), dn_line[20](0), uptext[20](0), dntext[20](0); array : up_touch[20](0), dn_touch[20](0), up_T[20](0), dn_T[20](0), up_TL[50](0), dn_TL[50](0); if Bdate != Bdate[1] Then Tcond = False; if (sdate != sdate[1] and stime >= ntime) or (sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then { oo = o; For k = 1 to line_num { up_T[k] = 0; dn_T[k] = 0; up_line[k] = oo + PriceScale*size_tick*k; dn_line[k] = oo - PriceScale*size_tick*k; up_touch[k] = 0; dn_touch[k] = 0; up_TL[k] = TL_New(sDate,sTime,up_line[k],NextBarSdate,NextBarStime,up_line[k]); // 선긋기 dn_TL[k] = TL_New(sDate,sTime,dn_line[k],NextBarSdate,NextBarStime,dn_line[k]); // 선긋기 } For k = 1 to line_num { if H >= up_line[k] Then //CrossUp(h,uptt[1]) //H >= uptt[1] { up_T[k] = k; up_touch[k] = up_touch[k] + 1; } } For k = 1 to line_num { uptext[k] = Text_New(NextBarSdate,NextBarStime,up_line[k],NumToStr(up_touch[k],0)); dntext[k] = Text_New(NextBarSdate,NextBarStime,dn_line[k],NumToStr(dn_touch[k],0)); } }
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-08-09 11:58:59

안녕하세요 예스스탁입니다. 2개의 식은 다른점이 없습니다. if 내용도 for문으로 이상없이 변경되어 있습니다. 현재 2개식의 ntime이 다릅니다. 동일한 시간으로 지정하시면 동일하게 드려집니다. 즐거운 하루되세요 > 예스쟁이 님이 쓴 글입니다. > 제목 : if 조건문 여러개를 for문으로 줄일 수 있나요? > 아래와 같은 코드를 짰는데요. input : ntime(210000), line_num(5), size_tick(8); var : Tcond(False), oo(0), k(0); array : up_line[20](0), dn_line[20](0), uptext[20](0), dntext[20](0); array : up_touch[20](0), dn_touch[20](0), up_T[20](0), dn_T[20](0), up_TL[50](0), dn_TL[50](0); if Bdate != Bdate[1] Then Tcond = False; if (sdate != sdate[1] and stime >= ntime) or (sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then { oo = o; For k = 1 to line_num { up_T[k] = 0; dn_T[k] = 0; up_line[k] = oo + PriceScale*size_tick*k; dn_line[k] = oo - PriceScale*size_tick*k; up_touch[k] = 0; dn_touch[k] = 0; up_TL[k] = TL_New(sDate,sTime,up_line[k],NextBarSdate,NextBarStime,up_line[k]); // 선긋기 dn_TL[k] = TL_New(sDate,sTime,dn_line[k],NextBarSdate,NextBarStime,dn_line[k]); // 선긋기 } if H >= up_line[1] Then { up_T[1] = 1; up_touch[1] = up_touch[1] + 1; } if H >= up_line[2] Then { up_T[2] = 2; up_touch[2] = up_touch[2] + 1; } if H >= up_line[3] Then { up_T[3] = 3; up_touch[3] = up_touch[3] + 1; } if H >= up_line[4] Then { up_T[4] = 4; up_touch[4] = up_touch[4] + 1; } For k = 1 to line_num { uptext[k] = Text_New(NextBarSdate,NextBarStime,up_line[k],NumToStr(up_touch[k],0)); dntext[k] = Text_New(NextBarSdate,NextBarStime,dn_line[k],NumToStr(dn_touch[k],0)); } } ------------------------------------------------------------------ 이 코드를 실행하면 첨부파일1의 이미지와 같이 숫자가 표시 되는데요. 이것을 아래와 같이 if문들이 반복되어 for 문으로 바꿔봤는데요. 실행 결과가 다르게 나오는데요. 어디가 잘못됐는지 잘 모르겠습니다.. 도움 부탁드립니다. input : ntime(210900), line_num(4), size_tick(8); var : Tcond(False), oo(0), k(0); array : up_line[20](0), dn_line[20](0), uptext[20](0), dntext[20](0); array : up_touch[20](0), dn_touch[20](0), up_T[20](0), dn_T[20](0), up_TL[50](0), dn_TL[50](0); if Bdate != Bdate[1] Then Tcond = False; if (sdate != sdate[1] and stime >= ntime) or (sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then { oo = o; For k = 1 to line_num { up_T[k] = 0; dn_T[k] = 0; up_line[k] = oo + PriceScale*size_tick*k; dn_line[k] = oo - PriceScale*size_tick*k; up_touch[k] = 0; dn_touch[k] = 0; up_TL[k] = TL_New(sDate,sTime,up_line[k],NextBarSdate,NextBarStime,up_line[k]); // 선긋기 dn_TL[k] = TL_New(sDate,sTime,dn_line[k],NextBarSdate,NextBarStime,dn_line[k]); // 선긋기 } For k = 1 to line_num { if H >= up_line[k] Then //CrossUp(h,uptt[1]) //H >= uptt[1] { up_T[k] = k; up_touch[k] = up_touch[k] + 1; } } For k = 1 to line_num { uptext[k] = Text_New(NextBarSdate,NextBarStime,up_line[k],NumToStr(up_touch[k],0)); dntext[k] = Text_New(NextBarSdate,NextBarStime,dn_line[k],NumToStr(dn_touch[k],0)); } }