커뮤니티
이런 함수가 있으면 좋겠읍니다.
2005-10-14 20:52:36
1034
글번호 8536
당일의 마지막 봉임을 return하는 함수가 있으면 검증할 때 편하겠읍니다.
첫 봉은 dayindex()로 구할 수가 있지만 마직막 봉은 이게 안됩니다.
봉 수가 다른 날이 있고, 그렇다고 시간 함수로 구하려면 끝나는 시간이 다른 날이 있기 때문이죠.
설정 부분에 종가에 청산을 하게 하는 기능이 있는 걸로 보아 내부적으로는 마지막 봉을 return하는 함수가 있는 거 같은데요.
일반 사용자들도 좀 쓸 수 있게 되면 좋겠읍니다.
그럼 수고 하세요.
답변 1
수식지왕
2005-10-15 02:14:25
로직으로 구현 가능한 범위내에서 사용자함수로 만들어보았습니다.
로직으로 구현 가능한 범위라고 단서를 달은 이유는
사용자가 생각해 낼 수 있는 로직은 장종료 예정시각을 기준으로 마지막 봉인지 체크하는 것인데 더 이상 거래가 발생하지 않아 수신 데이터가 안 오면 14:00가 마지막봉일 수도 있고 13:00가 마지막 봉일 수도 있기 때문입니다.
선물의 경우 데이터 누락이 거의 없지만 현물중 특히 유동성이 부족한 경우에는 장개시가 9시가 아닌 10시 이후부터 시가가 나오는 경우도 있고 종가도 15:00에 나오는 게 아니라 장중간부터 아예 데이터가 없는 경우가 많습니다. 매매거래 중지나 정지 등 시장조치 때문일 수도 있기 때문에 현물에 대해서는 로직으로 마지막 봉 여부를 찾는 것은 불가능하고 선물에 대해서는 가능하다고 볼 수 있습니다.
수능일에 1시간 연장하여 장종료하는 것은 경험상으로 반영할 수 있겠으나 장애 등으로 인한 시간 변경이나 설,추석 연휴에 의한 최종거래일 변경은 로직으로 풀 수 없는 문제입니다.
아래 수식을 예스차트에서 선물에 대해 2000년부터 검증을 해보니 4군데만 틀리고 나머지는 정확했습니다.
그중 2000년 1월4일은 13:15이 3월24일과 3월29일은 14:59 봉이 마지막이었는데 데이터의 문제인 것 같고
흔하지 않은 케이스인데 특이하게 2003년 9월 추석연휴 때문에 최종거래일이 앞으로 당겨져서 시간이 바뀐 것 이렇게 4군데에서 오류가 나왔습니다.
찾아보니 911 테러때도 장시간 변동이 없었네요.
마지막봉에서 주문이 불가능한 점을 고려하여 n봉 이전에 체크할 수 있도록 입력변수를 두었습니다.
첨부된 사용자 함수식의 내용
input:n(numeric);
var:mm(0), dd(0), ww(0), tt(0), starttime(0), endtime(0), check_bit(false);
mm = int(date/100)-int(date/10000)*100; //최종거래일 여부를 판단하기 위한 변수들
dd = date - int(date/100)*100;
ww = DayOfWeek(date);
if dayindex()==0 then
{
starttime = TimeToMinutes(stime);
check_bit = false;
}
if CodeCategory() < 4 then //kospi,kosdaq,제3시장
endtime = 900; //장종료 15:00
else if ((mm % 3 == 0 and CodeCategory() == 4) //선물종목일 경우 3,6,9,12월
or CodeCategory() > 4) //옵션종목일 경우 매월
and dd >= 8 and dd <= 14 //두번째
and ww == 4 then //목요일
endtime = 890-BarInterval(); //장종료 14:50, 최종거래일에는 동시마감 없으므로 1450 봉이 없음
else
endtime = 915; //그외는 15:15
if starttime==600 and mm==11 then //수능일 장종료는 1시간 연장
endtime = endtime + 60; //10시에 장개시하고 보통 11월이었으므로
tt = endtime - (n+1)*BarInterval(); //마지막봉의 n봉전 시간
if MinutesToTime(tt) < stime
and check_bit==false then
{
_endofday = true;
check_bit = true;
}
else
_endofday = false;
시스템에 적용 예제 (당일 청산이라면)
if _endofday(3) then exitlong;
//마지막 봉에서는 주문이 안나가므로 5분봉 차트에서 마지막봉 3봉전에 주문이 발생되도록 함
> shinnara 님이 쓴 글입니다.
> 제목 : 이런 함수가 있으면 좋겠읍니다.
> 당일의 마지막 봉임을 return하는 함수가 있으면 검증할 때 편하겠읍니다.
첫 봉은 dayindex()로 구할 수가 있지만 마직막 봉은 이게 안됩니다.
봉 수가 다른 날이 있고, 그렇다고 시간 함수로 구하려면 끝나는 시간이 다른 날이 있기 때문이죠.
설정 부분에 종가에 청산을 하게 하는 기능이 있는 걸로 보아 내부적으로는 마지막 봉을 return하는 함수가 있는 거 같은데요.
일반 사용자들도 좀 쓸 수 있게 되면 좋겠읍니다.
그럼 수고 하세요.