커뮤니티

지표값을 Tick Size 단위로 변환시 이상현상 문의합니다.

프로필 이미지
김상
2021-06-30 11:19:33.0
2511
글번호 225509
답변완료

첨부 이미지

문의에 항상 빠른 답변에 감사드립니다. 제가 하고자 하는 것은 지표값을 구하여 그 지표값을 주문 가격에 이용하고자 틱 사이즈 단위로 변환하여 수치을 구하고자 합니다. GetTickSize 함수로 마이크로 골드 종목을 구하면 0.1000000... 소수점 이하 많은 양이 나오네요. 그래서 0.1로 조정을 했습니다. 그런데 TickSize 값은 0.1로 잘 나오는데, BBC1, BBU1, BBD1 등 값은 0.1단위로 나올때도 있고 수수점 이하 많은 자리가 나올때도 있는 등 들쑥날쑥이네요. 제가 무엇을 잘못 했나요?! 아래 식은 제가 일부분을 발췌하였습니다. var TickSize = F1.GetTickSize();//: 호가단위 : NH 실제:소수점 이하 10이상 존재 TickSize = Math.floor(TickSize*1000000)/1000000; // 종목 적용시 소수점 이하 6자리까지 적용가능 var BBC1 = C1.GetIndicatorData("Bollinger Bands", 1,0); //BB지표 var BBU1 = C1.GetIndicatorData("Bollinger Bands", 2,0); var BBD1 = C1.GetIndicatorData("Bollinger Bands", 3,0); Main.MessageList("상단 : " + BBU1 + ", 하단 : "+ BBD1 + ", 중심선 : "+ BBC1 ); //TickSize로 Price 변경 Math.floor(A / TickSize)*TickSize Main.MessageList("틱 사이즈 : " + TickSize); BBC1 = Math.floor(BBC1 / TickSize)*TickSize; //TickSize 단위로 내림 BBU1 = Math.floor(BBU1 / TickSize)*TickSize; BBD1 = Math.floor(BBD1 / TickSize)*TickSize; Main.MessageList("1분봉 틱 조정 상단 : " + BBU1 + ", 하단 : "+ BBD1 + ", 중심선 : "+ BBC1 ); 갑사합니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-07-27 13:32:09.0

안녕하세요 예스스탁입니다. 사용자분이 별도로 실수하신 부분은 아닙니다. 해당부분은 컴퓨터의 부동소숫점 오류때문입니다. 컴퓨터의 CPU가 값을 계산시에 10진수를 2진수로 변형해서 계산하고 다시 10진수로 값을 돌려주는데 이때 부동소숫점 오류가 발생할 수 있습니다. 예를 들어 계산값이 1.5이데 1.499999999나 1.5000000001과 같이 리턴이 되게 됩니다. 모든 프로그램에서 발생하는 내용입니다. C1.GetIndicatorData("Bollinger Bands", 1,0); GetIndicatorData는 차트지표의 값을 가져오는 내용인데 이미 차트에서 계산된 지표값이 부동소숫점 오류가 있는 값이면 그대로 값을 가져오게 됩니다. 이때는 올리신 TickSize 내용과 같이 소숫점 일정자리 이하에서 자르시거나 반올림해서 계산처리를 하시는 방법뿐이 없습니다. 즐거운 하루되세요 > 김상 님이 쓴 글입니다. > 제목 : 지표값을 Tick Size 단위로 변환시 이상현상 문의합니다. > 문의에 항상 빠른 답변에 감사드립니다. 제가 하고자 하는 것은 지표값을 구하여 그 지표값을 주문 가격에 이용하고자 틱 사이즈 단위로 변환하여 수치을 구하고자 합니다. GetTickSize 함수로 마이크로 골드 종목을 구하면 0.1000000... 소수점 이하 많은 양이 나오네요. 그래서 0.1로 조정을 했습니다. 그런데 TickSize 값은 0.1로 잘 나오는데, BBC1, BBU1, BBD1 등 값은 0.1단위로 나올때도 있고 수수점 이하 많은 자리가 나올때도 있는 등 들쑥날쑥이네요. 제가 무엇을 잘못 했나요?! 아래 식은 제가 일부분을 발췌하였습니다. var TickSize = F1.GetTickSize();//: 호가단위 : NH 실제:소수점 이하 10이상 존재 TickSize = Math.floor(TickSize*1000000)/1000000; // 종목 적용시 소수점 이하 6자리까지 적용가능 var BBC1 = C1.GetIndicatorData("Bollinger Bands", 1,0); //BB지표 var BBU1 = C1.GetIndicatorData("Bollinger Bands", 2,0); var BBD1 = C1.GetIndicatorData("Bollinger Bands", 3,0); Main.MessageList("상단 : " + BBU1 + ", 하단 : "+ BBD1 + ", 중심선 : "+ BBC1 ); //TickSize로 Price 변경 Math.floor(A / TickSize)*TickSize Main.MessageList("틱 사이즈 : " + TickSize); BBC1 = Math.floor(BBC1 / TickSize)*TickSize; //TickSize 단위로 내림 BBU1 = Math.floor(BBU1 / TickSize)*TickSize; BBD1 = Math.floor(BBD1 / TickSize)*TickSize; Main.MessageList("1분봉 틱 조정 상단 : " + BBU1 + ", 하단 : "+ BBD1 + ", 중심선 : "+ BBC1 ); 갑사합니다.