커뮤니티

수식오류 정정부탁

프로필 이미지
앙이
2017-08-09 23:39:56
162
글번호 111914
답변완료
*삼성 sdi 월봉 price:170500 per:40 n:4 로 놓으면 4번째봉 의 추세선이 이상하게 나와요 엉클어져 나오는대 고가가 밑에 그려지 고 시가도 밑에 그려지고 이런 오류는 왜 나오는지 수정 부탁드립니다. *우리은행 주봉 price:18500 per:20 n:3 으로놓으면 상위 3번째봉 시가가 위에 그려져요 이것두 같은 오류같은대 왜 이런 오류가 만들 어지는지 수정부탁드립니다. *kss해운 월봉 price:10500 per:60 n:3 으로 놓으면 상위 3번째봉 시가와 고가가 그려지질않아요 오류같아요 수정부탁드립니다. *엔알케이 price:2700 per:50 n:3 으로 놓으면 2016년 12월 봉이 첫번째봉인대 포함이 안되요 오류 수정 부탁드립니다. input : Price(10000), Per(10),N(5); var : cnt(0),cnt1(0),cnt2(0),cnt3(0),idx(0),color(0); var : SameO(0),SameH(0),SameL(0),SameC(0); Array : VV[50](0),OO[50](0),HH[50](0),LL[50](0),CC[50](0); Array : OTL[50](0),HTL[50](0),LTL[50](0),CTL[50](0); Array : OTx[50](0),HTx[50](0),LTx[50](0),CTx[50](0),TX[50](0); idx = idx+1; for cnt = 1 to 49{ VV[cnt] = 0; OO[cnt] = 0; HH[cnt] = 0; LL[cnt] = 0; CC[cnt] = 0; } #N개값 출력 for cnt1 = 1 to N{ if cnt1 == 1 Then color = black; if cnt1 == 2 Then color = red; if cnt1 == 3 Then color = blue; if cnt1 == 4 Then color = GREEN; if cnt1 == 4 Then color = YELLOW; #차트 과거봉 전체 스캔 for cnt2 = 0 to idx { #Price대비 +- Per%안에 종가가 형성된 if C[cnt2] <= Price*(1+Per/100) and C[cnt2] >= Price*(1-Per/100) and V[cnt2] > VV[cnt1] and (cnt1 == 1 or (cnt1 >= 2 and V[cnt2] < VV[cnt1-1])) Then{ VV[cnt1] = V[cnt2]; OO[cnt1] = O[cnt2]; HH[cnt1] = H[cnt2]; LL[cnt1] = L[cnt2]; CC[cnt1] = C[cnt2]; #동일값 체크 sameO = 0; sameH = 0; sameL = 0; sameC = 0; for cnt3 = 1 to N{ if OO[cnt1] == OO[cnt3] or OO[cnt1] == HH[cnt3] or OO[cnt1] == LL[cnt3] or OO[cnt1] == CC[cnt3] Then SameO = SameO+1; if HH[cnt1] == HH[cnt3] or HH[cnt1] == OO[cnt3] or HH[cnt1] == LL[cnt3] or HH[cnt1] == CC[cnt3] Then SameH = SameH+1; if LL[cnt1] == LL[cnt3] or LL[cnt1] == OO[cnt3] or LL[cnt1] == HH[cnt3] or LL[cnt1] == CC[cnt3] Then SameL = SameL+1; if CC[cnt1] == CC[cnt3] or CC[cnt1] == OO[cnt3] or CC[cnt1] == LL[cnt3] or OO[cnt1] == LL[cnt3] Then SameC = SameC+1; } #시가선 if SameO == 1 then { #시가선 추세선 출력 TL_Delete(OTL[cnt1]); OTL[cnt1] = TL_New(Sdate[cnt2+1],stime[cnt2+1],O[cnt2],sdate,stime,O[cnt2]); TL_SetExtLeft(OTL[cnt1],true); TL_SetExtRight(OTL[cnt1],true); TL_SetColor(OTL[cnt1],color); #시가선값 텍스트 출력 Text_Delete(OTx[cnt1]); OTx[cnt1] = Text_New(sdate,stime,O[cnt2],"상위"+NumToStr(cnt1,0)+"번째봉 시가:"+NumToStr(O[cnt2],0)); Text_SetStyle(OTx[cnt1],0,0); Text_SetColor(OTx[cnt1],color); } if SameH == 1 then { #고가선 추세선 출력 TL_Delete(HTL[cnt1]); HTL[cnt1] = TL_New(Sdate[cnt2+1],stime[cnt2+1],H[cnt2],sdate,stime,H[cnt2]); TL_SetExtLeft(HTL[cnt1],true); TL_SetExtRight(HTL[cnt1],true); TL_SetColor(HTL[cnt1],color); #고가선값 Text_Delete(HTx[cnt1]); HTx[cnt1] = Text_New(sdate,stime,H[cnt2],"상위"+NumToStr(cnt1,0)+"번째봉 고가:"+NumToStr(H[cnt2],0)); Text_SetStyle(HTx[cnt1],0,0); Text_SetColor(HTx[cnt1],color); } if SameL == 1 then { #저가선 추세선 출력 TL_Delete(LTL[cnt1]); LTL[cnt1] = TL_New(Sdate[cnt2+1],stime[cnt2+1],L[cnt2],sdate,stime,L[cnt2]); TL_SetExtLeft(LTL[cnt1],true); TL_SetExtRight(LTL[cnt1],true); TL_SetColor(LTL[cnt1],color); #저가선값 Text_Delete(LTx[cnt1]); LTx[cnt1] = Text_New(sdate,stime,L[cnt2],"상위"+NumToStr(cnt1,0)+"번째봉 저가:"+NumToStr(L[cnt2],0)); Text_SetStyle(LTx[cnt1],0,0); Text_SetColor(OTx[cnt1],color); } if SameC == 1 then { #종가선 추세선 출력 TL_Delete(CTL[cnt1]); CTL[cnt1] = TL_New(Sdate[cnt2+1],stime[cnt2+1],C[cnt2],sdate,stime,C[cnt2]); TL_SetExtLeft(CTL[cnt1],true); TL_SetExtRight(CTL[cnt1],true); TL_SetColor(CTL[cnt1],color); #종가선값 Text_Delete(CTx[cnt1]); CTx[cnt1] = Text_New(sdate,stime,C[cnt2],"상위"+NumToStr(cnt1,0)+"번째봉 종가:"+NumToStr(C[cnt2],0)); Text_SetStyle(CTx[cnt1],0,0); Text_SetColor(CTx[cnt1],color); #점출력 Text_Delete(Tx[cnt1]); Tx[cnt1] = Text_New(sdate[cnt2],stime[cnt2],C[cnt2],"●"+NumToStr(cnt1,0)); Text_SetStyle(Tx[cnt1],2,2); Text_SetColor(Tx[cnt1],color); Text_SetColor(Tx[cnt1],white); } } } 이 오류가 제생각에는 %범위 안에 일부분만 들어가도 포함으로 간주하고 시,고,저,종가수평선 이 그려지게 해달라고햇엇는대 그것때문인듯한대 그거때문에 오류가 나면 제가 %범위를 변경하 고 %안에 들어간거만 인식해서 그려지게 해도 좋습니다. 하다보니까 결국 %변경을 해야 정확하 드라고요.
사용자 함수
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2017-08-10 13:17:16

안녕하세요 예스스탁입니다. 식을 수정했습니다. 범위내 가격판단도 기존식은 종가가 기준으로 범위내 봉만 대상으로 했는데 수정한식은 봉이 지정한 범위내에 걸쳐 있으면 포함되게 했습니다. input : Price(10000), Per(10),N(5); var : cnt(0),cnt1(0),cnt2(0),cnt3(0),idx(0),color(0); var : SameO(0),SameH(0),SameL(0),SameC(0); Array : VV[50](0),OO[50](0),HH[50](0),LL[50](0),CC[50](0); Array : OTL[50](0),HTL[50](0),LTL[50](0),CTL[50](0),ii[50](0); Array : OTx[50](0),HTx[50](0),LTx[50](0),CTx[50](0),TX[50](0); idx = idx+1; for cnt = 1 to 49{ VV[cnt] = 0; OO[cnt] = 0; HH[cnt] = 0; LL[cnt] = 0; CC[cnt] = 0; ii[cnt] = 0; } #N개값 출력 for cnt1 = 1 to N{ TL_Delete(OTL[cnt1]); TL_Delete(HTL[cnt1]); TL_Delete(LTL[cnt1]); TL_Delete(CTL[cnt1]); Text_Delete(OTx[cnt1]); Text_Delete(HTx[cnt1]); Text_Delete(LTx[cnt1]); Text_Delete(CTx[cnt1]); Text_Delete(Tx[cnt1]); if cnt1 == 1 Then color = black; if cnt1 == 2 Then color = red; if cnt1 == 3 Then color = blue; if cnt1 == 4 Then color = GREEN; if cnt1 == 5 Then color = YELLOW; #차트 과거봉 전체 스캔 for cnt2 = 0 to idx { #Price대비 +- Per%안에 종가가 형성된 if !(L[cnt2] > Price*(1+Per/100) or H[cnt2] < Price*(1-Per/100)) and V[cnt2] > VV[cnt1] and (cnt1 == 1 or (cnt1 >= 2 and V[cnt2] < VV[cnt1-1])) Then { VV[cnt1] = V[cnt2]; OO[cnt1] = O[cnt2]; HH[cnt1] = H[cnt2]; LL[cnt1] = L[cnt2]; CC[cnt1] = C[cnt2]; ii[cnt1] = cnt2; } } #동일값 체크 sameO = 0; sameH = 0; sameL = 0; sameC = 0; for cnt3 = 1 to N { if OO[cnt1] == OO[cnt3] or OO[cnt1] == HH[cnt3] or OO[cnt1] == LL[cnt3] or OO[cnt1] == CC[cnt3] Then SameO = SameO+1; if HH[cnt1] == OO[cnt3] or HH[cnt1] == HH[cnt3] or HH[cnt1] == LL[cnt3] or HH[cnt1] == CC[cnt3] Then SameH = SameH+1; if LL[cnt1] == OO[cnt3] or LL[cnt1] == HH[cnt3] or LL[cnt1] == LL[cnt3] or LL[cnt1] == CC[cnt3] Then SameL = SameL+1; if CC[cnt1] == OO[cnt3] or CC[cnt1] == HH[cnt3] or CC[cnt1] == LL[cnt3] or CC[cnt1] == CC[cnt3] Then SameC = SameC+1; } #시가선 if SameO == 1 then { if LastBarOnChart == 1 Then MessageLog("O %.2f",color); #시가선 추세선 출력 OTL[cnt1] = TL_New(Sdate[1],stime[1],OO[cnt1],sdate,stime,OO[cnt1]); TL_SetExtLeft(OTL[cnt1],true); TL_SetExtRight(OTL[cnt1],true); TL_SetColor(OTL[cnt1],color); #시가선값 텍스트 출력 OTx[cnt1] = Text_New(sdate,stime,OO[cnt1],"상위"+NumToStr(cnt1,0)+"번째봉 시가:"+NumToStr(OO[cnt1],0)); Text_SetStyle(OTx[cnt1],0,0); Text_SetColor(OTx[cnt1],color); } if SameH == 1 then { #고가선 추세선 출력 HTL[cnt1] = TL_New(Sdate[1],stime[1],HH[cnt1],sdate,stime,HH[cnt1]); TL_SetExtLeft(HTL[cnt1],true); TL_SetExtRight(HTL[cnt1],true); TL_SetColor(HTL[cnt1],color); HTx[cnt1] = Text_New(sdate,stime,HH[cnt1],"상위"+NumToStr(cnt1,0)+"번째봉 고가:"+NumToStr(HH[cnt1],0)); Text_SetStyle(HTx[cnt1],0,0); Text_SetColor(HTx[cnt1],color); } if SameL == 1 then { LTL[cnt1] = TL_New(Sdate[1],stime[1],LL[cnt1],sdate,stime,LL[cnt1]); TL_SetExtLeft(LTL[cnt1],true); TL_SetExtRight(LTL[cnt1],true); TL_SetColor(LTL[cnt1],color); LTx[cnt1] = Text_New(sdate,stime,LL[cnt1],"상위"+NumToStr(cnt1,0)+"번째봉 저가:"+NumToStr(LL[cnt1],0)); Text_SetStyle(LTx[cnt1],0,0); Text_SetColor(OTx[cnt1],color); } if SameC == 1 then { CTL[cnt1] = TL_New(Sdate[1],stime[1],CC[cnt1],sdate,stime,CC[cnt1]); TL_SetExtLeft(CTL[cnt1],true); TL_SetExtRight(CTL[cnt1],true); TL_SetColor(CTL[cnt1],color); CTx[cnt1] = Text_New(sdate,stime,CC[cnt1],"상위"+NumToStr(cnt1,0)+"번째봉 종가:"+NumToStr(CC[cnt1],0)); Text_SetStyle(CTx[cnt1],0,0); Text_SetColor(CTx[cnt1],color); } if CC[cnt1] > 0 then{ Tx[cnt1] = Text_New(sdate[ii[cnt1]],stime[ii[cnt1]],CC[cnt1],"●"+NumToStr(cnt1,0)); Text_SetStyle(Tx[cnt1],2,2); Text_SetColor(Tx[cnt1],color); Text_SetColor(Tx[cnt1],white); } } 즐거운 하루되세요 > 앙이 님이 쓴 글입니다. > 제목 : 수식오류 정정부탁 > *삼성 sdi 월봉 price:170500 per:40 n:4 로 놓으면 4번째봉 의 추세선이 이상하게 나와요 엉클어져 나오는대 고가가 밑에 그려지 고 시가도 밑에 그려지고 이런 오류는 왜 나오는지 수정 부탁드립니다. *우리은행 주봉 price:18500 per:20 n:3 으로놓으면 상위 3번째봉 시가가 위에 그려져요 이것두 같은 오류같은대 왜 이런 오류가 만들 어지는지 수정부탁드립니다. *kss해운 월봉 price:10500 per:60 n:3 으로 놓으면 상위 3번째봉 시가와 고가가 그려지질않아요 오류같아요 수정부탁드립니다. *엔알케이 price:2700 per:50 n:3 으로 놓으면 2016년 12월 봉이 첫번째봉인대 포함이 안되요 오류 수정 부탁드립니다. input : Price(10000), Per(10),N(5); var : cnt(0),cnt1(0),cnt2(0),cnt3(0),idx(0),color(0); var : SameO(0),SameH(0),SameL(0),SameC(0); Array : VV[50](0),OO[50](0),HH[50](0),LL[50](0),CC[50](0); Array : OTL[50](0),HTL[50](0),LTL[50](0),CTL[50](0); Array : OTx[50](0),HTx[50](0),LTx[50](0),CTx[50](0),TX[50](0); idx = idx+1; for cnt = 1 to 49{ VV[cnt] = 0; OO[cnt] = 0; HH[cnt] = 0; LL[cnt] = 0; CC[cnt] = 0; } #N개값 출력 for cnt1 = 1 to N{ if cnt1 == 1 Then color = black; if cnt1 == 2 Then color = red; if cnt1 == 3 Then color = blue; if cnt1 == 4 Then color = GREEN; if cnt1 == 4 Then color = YELLOW; #차트 과거봉 전체 스캔 for cnt2 = 0 to idx { #Price대비 +- Per%안에 종가가 형성된 if C[cnt2] <= Price*(1+Per/100) and C[cnt2] >= Price*(1-Per/100) and V[cnt2] > VV[cnt1] and (cnt1 == 1 or (cnt1 >= 2 and V[cnt2] < VV[cnt1-1])) Then{ VV[cnt1] = V[cnt2]; OO[cnt1] = O[cnt2]; HH[cnt1] = H[cnt2]; LL[cnt1] = L[cnt2]; CC[cnt1] = C[cnt2]; #동일값 체크 sameO = 0; sameH = 0; sameL = 0; sameC = 0; for cnt3 = 1 to N{ if OO[cnt1] == OO[cnt3] or OO[cnt1] == HH[cnt3] or OO[cnt1] == LL[cnt3] or OO[cnt1] == CC[cnt3] Then SameO = SameO+1; if HH[cnt1] == HH[cnt3] or HH[cnt1] == OO[cnt3] or HH[cnt1] == LL[cnt3] or HH[cnt1] == CC[cnt3] Then SameH = SameH+1; if LL[cnt1] == LL[cnt3] or LL[cnt1] == OO[cnt3] or LL[cnt1] == HH[cnt3] or LL[cnt1] == CC[cnt3] Then SameL = SameL+1; if CC[cnt1] == CC[cnt3] or CC[cnt1] == OO[cnt3] or CC[cnt1] == LL[cnt3] or OO[cnt1] == LL[cnt3] Then SameC = SameC+1; } #시가선 if SameO == 1 then { #시가선 추세선 출력 TL_Delete(OTL[cnt1]); OTL[cnt1] = TL_New(Sdate[cnt2+1],stime[cnt2+1],O[cnt2],sdate,stime,O[cnt2]); TL_SetExtLeft(OTL[cnt1],true); TL_SetExtRight(OTL[cnt1],true); TL_SetColor(OTL[cnt1],color); #시가선값 텍스트 출력 Text_Delete(OTx[cnt1]); OTx[cnt1] = Text_New(sdate,stime,O[cnt2],"상위"+NumToStr(cnt1,0)+"번째봉 시가:"+NumToStr(O[cnt2],0)); Text_SetStyle(OTx[cnt1],0,0); Text_SetColor(OTx[cnt1],color); } if SameH == 1 then { #고가선 추세선 출력 TL_Delete(HTL[cnt1]); HTL[cnt1] = TL_New(Sdate[cnt2+1],stime[cnt2+1],H[cnt2],sdate,stime,H[cnt2]); TL_SetExtLeft(HTL[cnt1],true); TL_SetExtRight(HTL[cnt1],true); TL_SetColor(HTL[cnt1],color); #고가선값 Text_Delete(HTx[cnt1]); HTx[cnt1] = Text_New(sdate,stime,H[cnt2],"상위"+NumToStr(cnt1,0)+"번째봉 고가:"+NumToStr(H[cnt2],0)); Text_SetStyle(HTx[cnt1],0,0); Text_SetColor(HTx[cnt1],color); } if SameL == 1 then { #저가선 추세선 출력 TL_Delete(LTL[cnt1]); LTL[cnt1] = TL_New(Sdate[cnt2+1],stime[cnt2+1],L[cnt2],sdate,stime,L[cnt2]); TL_SetExtLeft(LTL[cnt1],true); TL_SetExtRight(LTL[cnt1],true); TL_SetColor(LTL[cnt1],color); #저가선값 Text_Delete(LTx[cnt1]); LTx[cnt1] = Text_New(sdate,stime,L[cnt2],"상위"+NumToStr(cnt1,0)+"번째봉 저가:"+NumToStr(L[cnt2],0)); Text_SetStyle(LTx[cnt1],0,0); Text_SetColor(OTx[cnt1],color); } if SameC == 1 then { #종가선 추세선 출력 TL_Delete(CTL[cnt1]); CTL[cnt1] = TL_New(Sdate[cnt2+1],stime[cnt2+1],C[cnt2],sdate,stime,C[cnt2]); TL_SetExtLeft(CTL[cnt1],true); TL_SetExtRight(CTL[cnt1],true); TL_SetColor(CTL[cnt1],color); #종가선값 Text_Delete(CTx[cnt1]); CTx[cnt1] = Text_New(sdate,stime,C[cnt2],"상위"+NumToStr(cnt1,0)+"번째봉 종가:"+NumToStr(C[cnt2],0)); Text_SetStyle(CTx[cnt1],0,0); Text_SetColor(CTx[cnt1],color); #점출력 Text_Delete(Tx[cnt1]); Tx[cnt1] = Text_New(sdate[cnt2],stime[cnt2],C[cnt2],"●"+NumToStr(cnt1,0)); Text_SetStyle(Tx[cnt1],2,2); Text_SetColor(Tx[cnt1],color); Text_SetColor(Tx[cnt1],white); } } } 이 오류가 제생각에는 %범위 안에 일부분만 들어가도 포함으로 간주하고 시,고,저,종가수평선 이 그려지게 해달라고햇엇는대 그것때문인듯한대 그거때문에 오류가 나면 제가 %범위를 변경하 고 %안에 들어간거만 인식해서 그려지게 해도 좋습니다. 하다보니까 결국 %변경을 해야 정확하 드라고요.