커뮤니티

수식지왕님 day()사용자 함수

프로필 이미지
베지타
2003-07-13 00:00:00
2385
글번호 382
수식지왕님 글 보니 제가 구하고자하는 주봉 값을 함수화 시킨게 있어서 연구하고 있습니다. 몇주전에 예스에 문의하니 검토해주신다고 하여서 이번에 기대했는데 기간이 짧아서 반영이 안된 모양입니다. 지금 기능으로도 만족하며 열심히 공부하고 있습니다. 다름이 아니고, 님께서 연구하신 주봉수치(weekhigh,weeklow,weekopen,weeklow)구하는 함수를 적용하려니 day()함수를 사용자 함수로 만드신거 같더군요. day()함수에 대하여 궁금점이 있어서 이렇게 질문드립니다. 함수를 오픈하시기 힘드시면 님의 홈페이지를 알려주시면 방문하도록 하겠습니다. 주봉수치가 필요한 이유는 분봉에서와 같은 시스템을 주봉을 참조하여 일봉트랜드로 구현해보려고 합니다. 그럼,심혈을 기울여 연구하신 작품을 기대하면서... 미리 감사드립니다. =================================================================================== 주봉데이터 참조할 수 있는 사용자 함수를 의뢰하셨는데 이미 뒷페이지로 넘어갔기에 답변 글로 올리지 않고 새로이 올립니다. 풀이를 생각해보니 재미있을 것 같아 만들어 보았습니다. 원리는 월요일부터 금요일까지 1~5로 표시하면 분봉에서 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 1 1 1 로 표시됩니다. 위 배열에서 주가 바뀐 것을 어떻게 알 수 있을까요? 5에서 1로 바뀌는 시점이 주종과 주초입니다. 제가 얼마 전에 소개한 요일 체크 함수를 이용하여 day()[1] > day()를 만족하는 시점을 찾으면 그것이 주초의 좌표가 됩니다. MRO함수의 사용법은 지난 번 글에서 이미 소개하였습니다. 전주 종가는 지금의 주초에서 한개 이전봉의 종가가 될 것이고 전주 시가는 day()[1] > day()를 만족하는 두번째 좌표가 됩니다. 이런 식으로 전주 시가와 전주 종가를 구하고 전주 시가 좌표에서 전주 종가 좌표까지의 고저가를 체크하여 주봉 고가와 주봉 저가를 구합니다. highest함수를 사용해서 간단하게 구해질 줄 알았는데 지표식을 적용하면 에러가 발생해서 for문으로 계산해야만 했습니다. 해당 기간을 비교 검색해야 하기 때문에 연산 시간이 걸리는 흠이 있습니다. 글로는 쉬운데 저도 시행착오를 겪으면서 장장 3시간째 작업중입니다. 우선 지표식으로 만들어 테스트하고 다시 사용자함수로 만드는 과정에서 예트 프로가 아직은 사용자함수에서 사용자함수를 불러 쓰질 못해 다시 재정의해줘야 되더군요. 다음은 사용자함수로 만들기 전에 지표식으로 만들어 테스트하던 수식입니다. 검증을 위해서는 day()라는 사용자함수가 있어야 하며 제 홈피에 올렸져 있습니다. input:n(1); var:period(0),cnt(0),occ1(0),occ2(0),x1(0),x2(0),WeekClose(0),WeekOpen(0),WeekHigh(0),WeekLow(0); period = ceiling(375/BarInterval())*5*(n+1); occ1 = n + 1; x1 = mro(day()[1] > day(),period,occ1); if n == 0 then { occ2 = 1; x2 = 0; } else { occ2 = n; x2 = mro(day()[1] > day(),period,occ2)+1; } WeekOpen = o[x1]; WeekClose = c[x2]; weekhigh = 0; for cnt = x2 to x1 begin if WeekHigh < h[cnt] then WeekHigh = h[cnt]; end; weeklow = 10000000000; for cnt = x2 to x1 begin if Weeklow > l[cnt] then Weeklow = l[cnt]; end; plot1(WeekOpen,"o"); plot2(WeekClose,"c"); plot3(Weekhigh,"h"); plot4(Weeklow,"l"); 위 내용을 분리해서 각각의 사용자 함수로 만듭니다. day() 사용자 함수를 불러 쓸 수 없어 재정의해야 하는 불편함은 있습니다. 완성된 사용자함수식과 위 수식 설명은 제 홈피에서 확인하시기 바랍니다. 조회 횟수라도 많아야 글 올리는 맛이 나는 법이니까요. ======================================================================
지표
답변 1
프로필 이미지

수식지왕

2003-07-14 00:00:00

연산에 오류가 있다고 신고한 후 예스에서 수정을 하여 제 수식도 그에 맞춰 다시 수정했습니다. 덕분에 군더더기를 줄일 수 있었습니다. 요일을 구하는 구간에 대한 설명을 일전에 시스템 시장 묻고답하기 게시판에 올려 놓았으니 참조하세요. 그리고, 아래 예제 수식은 설명을 위해 4개의 사용자 함수식을 합쳐 놓은 것입니다. input:n(numeric); var:period(0),cnt(0),x1(0),x2(0), yyyy(0),yy00(0),yy(0),mm(0),dd(0),dday(0); //////////////// 요일값을 구하는 구간 /////////////// yyyy = int(date/10000); mm = int(date/100)-int(date/10000)*100; dd = date - int(date/100)*100; if mm <= 2 then { yyyy = yyyy - 1; mm = mm + 12; } yy00 = int(yyyy/100); yy = yyyy%100; dday = (int(21*yy00/4)+int(5*yy/4)+int(26*(mm+1)/10)+dd-1)%7; //////////// 요일값 구하는 구간 끝 /////////////////////// period = ceiling(375/BarInterval())*5*(n+1); x1 = mro(dday[1] > dday,period,n+1); // 주봉의 최초 좌표 if n == 0 then // 예트 프로에서 이번에 수정된 부분 x2 = 0; else x2 = mro(dday[1] > dday,period,n)+1; // 주봉의 마지막 좌표 WeekOpen = o[x1]; WeekClose = c[x2]; WeekHigh = highest(h,x1-x2+1)[x2]; // for문으로 구현했었는데 예트프로 수정함에 // 따라 변경 WeekLow = lowest(l,x1-x2+1)[x2]; // 2부터 10까지일때 봉 갯수는 10-2+1=9개 마지막으로 제 홈피 주소는 http://systrader.cyworld.com/ 입니다. 방문은 환영합니다만 가입은 안하셔도 됩니다. 즐투하세요.