커뮤니티

배열 인수 지정의 문제

프로필 이미지
시스템에러
2012-01-06 22:17:11
489
글번호 46400
답변완료

첨부 이미지

선물 가격별로 외인 순매수량을 기록하기 위한 간단한 코드입니다. 선물 가격별 배열을 만들어 저장하는데, 배열 인덱스를 지정하기 위한 vCnt 값이 701인데 실제로 배열에는 인덱스 700 위치에 적용이 되네요. 다른 배열 인덱스 값에도 이러한 현상이 많이 보입니다. Index:250.10 Cnt:701 Buy:-29 aBuy:88 aSell:-49 vCnt 값이 701이므로 요렇게 aSell:-49로 나와야 정상인데 말이죠. (아래 메시지로그에 aSell[700] 으로 지정했기때문에) 뜬금없이 -49에 -29를 더한 -78값이 aSell[700]에 들어가는거 같습니다... ㅡㅡ;; vCnt가701인데 vSell[701]에 -29가 들어가야 하는데 말이죠 ㅠ.ㅠ 배열을 잘못 쓰고 있는 것인지요... wGetIndexValue() 함수는 240.13 -> 240.15와 같이 0.05 단위로 만들기 위한 사용자 함수입니다. ===== var: vIndex(0), vIndex2(0); var: vBaseIdx(215), vCnt(0), vTmp(0); var: vBuy(0); arrays: aBuy[1050](0), aSell[1050](0); // 215 ~ 267.5, 0.05단위 if data2(sdate) >= 20111208 then { if data2(dayindex) == 0 then { vBuy = data2( close ); } else { vBuy = data2( close ) - data2( close[1] ); } vIndex = (high + low) / 2; vIndex2 = wGetIndexValue( vIndex ); vCnt = ( ( vIndex2 - vBaseIdx ) / 0.05 ) - 1; if vCnt == 700 then MessageLog( "700 ****************************** " ); if vBuy > 0 then { MessageLog( "CNT:%.0f", vCnt ); aBuy[vCnt] = aBuy[vCnt] + vBuy; } else { MessageLog( "CNT:%.0f", vCnt ); aSell[vCnt] = aSell[vCnt] + vBuy; } MessageLog( "Index:%.2f Cnt:%.0f Buy:%.0f aBuy:%.0f aSell:%.0f", vIndex2, vCnt, vBuy, aBuy[700], aSell[700] ); } 기본차트는 선물차트, data2는 외인선물순매수량입니다.
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2012-01-09 10:30:49

안녕하세요 예스스탁입니다. Vcnt값을 %.0f가 아닌 %.2f정도로 출력해 보시기 바랍니다. 가령 Vcnt가 700.5일경우 %.0f로 출력하면 반올림하여 701이라는 값이 디버깅창에 출력이 되고 배열변수의 인수는 정수값만 받아드리므로 700으로 지정이 됩니다. 소숫점 단위가 나오는 값을 배열변수의 인수로 사용하실 경우에는 해당 수숫점 아래단위를 어떻게 처리할것인지 지정하셔야 합니다. 반올림된 값을 이용하시고자 하시면 round(vcnt,0)와 같이 반올림하여 사용하셔야 합니다. 즐거운 하루되세요 > 시스템에러 님이 쓴 글입니다. > 제목 : 배열 인수 지정의 문제 > 선물 가격별로 외인 순매수량을 기록하기 위한 간단한 코드입니다. 선물 가격별 배열을 만들어 저장하는데, 배열 인덱스를 지정하기 위한 vCnt 값이 701인데 실제로 배열에는 인덱스 700 위치에 적용이 되네요. 다른 배열 인덱스 값에도 이러한 현상이 많이 보입니다. Index:250.10 Cnt:701 Buy:-29 aBuy:88 aSell:-49 vCnt 값이 701이므로 요렇게 aSell:-49로 나와야 정상인데 말이죠. (아래 메시지로그에 aSell[700] 으로 지정했기때문에) 뜬금없이 -49에 -29를 더한 -78값이 aSell[700]에 들어가는거 같습니다... ㅡㅡ;; vCnt가701인데 vSell[701]에 -29가 들어가야 하는데 말이죠 ㅠ.ㅠ 배열을 잘못 쓰고 있는 것인지요... wGetIndexValue() 함수는 240.13 -> 240.15와 같이 0.05 단위로 만들기 위한 사용자 함수입니다. ===== var: vIndex(0), vIndex2(0); var: vBaseIdx(215), vCnt(0), vTmp(0); var: vBuy(0); arrays: aBuy[1050](0), aSell[1050](0); // 215 ~ 267.5, 0.05단위 if data2(sdate) >= 20111208 then { if data2(dayindex) == 0 then { vBuy = data2( close ); } else { vBuy = data2( close ) - data2( close[1] ); } vIndex = (high + low) / 2; vIndex2 = wGetIndexValue( vIndex ); vCnt = ( ( vIndex2 - vBaseIdx ) / 0.05 ) - 1; if vCnt == 700 then MessageLog( "700 ****************************** " ); if vBuy > 0 then { MessageLog( "CNT:%.0f", vCnt ); aBuy[vCnt] = aBuy[vCnt] + vBuy; } else { MessageLog( "CNT:%.0f", vCnt ); aSell[vCnt] = aSell[vCnt] + vBuy; } MessageLog( "Index:%.2f Cnt:%.0f Buy:%.0f aBuy:%.0f aSell:%.0f", vIndex2, vCnt, vBuy, aBuy[700], aSell[700] ); } 기본차트는 선물차트, data2는 외인선물순매수량입니다.