커뮤니티

호가 round 수식 검증과 보완 부탁합니다.

프로필 이미지
목포댁
2021-07-01 21:43:56
1772
글번호 150465
답변완료
항상 감사드립니다. 친절히 잘 알려주시고 도움 주시는데 너무 귀찮게 해드리는 것 같아서 죄송합니다. 어제 통화했던 수정주가 호가 라운딩 건을 사용자 함수로 구현하여 보았습니다. 수식검증과 부족한 부분 수정 부탁 드립니다. 2번. 사용자 함수의 주석처리도 검토 부탁 드립니다. 게시판 글 작성 도중 생각난 것인데, 상한가는 round 처리가 된 것 같은데, 하한가는 이 식대로 하면 제대로 처리가 되는지 의문이 듭니다. 무언가 꼭 빠진 것 같은 기분이 듭니다. 상한가,하한가 round 처리가 틀린 것으로 아는데요 하한가 round 검증이 꼭 필요할 것 같습니다.(Mod함수가 아니고 Round함수를 써야 하는 건지요) 보성파워텍으로 검증하니 잘 맞아 떨어지는 것 같은데 수식에 확신을 갖기에는 조건에 맞는 데이타 봉이 부족한 듯 합니다. 수정주가가 적용된 종목과 일자와 조건에 맞는 데이타 봉을 찾기가 어렵습니다. 보성파워텍이 2016.07.01 까지의 과거 봉이 수정주가가 적용이 되어 있는 것 같습니다. 검증한 데이타 봉 보성파워텍 호가단위 틀린 수정주가(상한가) 2014.10.27(28,29,30), 2014.11.07(21), 2012.12.11,2011.11.07 보성파워텍 호가단위 틀린 수정주가(하한가) 2003.03.21, 2000.4.11, 1999.11.09 ============================================================= 1번. # data1 이용 상하한가에 추가 S 와 추가 E 사이에 2줄에 사용자 함수 호출했습니다. var : 하한가(0,Data1), DnLimit(0,Data1); var : dn1(0,Data1), dn2(0,Data1), dn3(0,Data1), dn4(0,Data1), dn5(0,Data1),dn6(0,Data1),dn7(0,Data1); var : 상한가(0,Data1), UpLimit(0,Data1); var : up1(0,Data1), up2(0,Data1), up3(0,Data1), up4(0,Data1), up5(0,Data1),up6(0,Data1),Up7(0,Data1); var : base(0,Data1); base = Data1(BP); #---------------------------------------------------추가 S Value1 = _수정주가_round(base); #사용자함수 호출 if Value1 != base Then base = Value1; #---------------------------------------------------추가 E if Data1(date >= 19981207) then 이하 길어서 생략 ============================================================= 2번. #사용자 함수 : _수정주가_round = Round_v; input : chk_v(Numeric); var : 호가단위(0),Mod_v(0),Round_v(0); #현행 호가단위가 맞는지 체크 if chk_v < 1000 Then 호가단위 = 1; #할 필요가 있나? 같잔아! if 1000 <= chk_v and chk_v < 5000 Then 호가단위 = 5; if 5000 <= chk_v and chk_v < 10000 Then 호가단위 = 10; if 10000 <= chk_v and chk_v < 50000 Then 호가단위 = 50; if 50000 <= chk_v and chk_v < 100000 Then 호가단위 = 100; if 100000 <= chk_v and chk_v < 500000 Then if CodeCategory() == 1 Then 호가단위 = 500; Else if codeCategory() == 2 Then 호가단위 = 100; if 500000 <= chk_v Then if CodeCategory() == 1 Then 호가단위 = 1000; Else if codeCategory() == 2 Then 호가단위 = 100; #호가단위 체크 끝, 제대로 찾은건지 모르겟네. 전에 호가단위는 지금과 같았을까? 확인필요!!!! #만약 금액별 호가 단위가 틀리면 금액별&날짜 체크까지 해야하는데 ㅠㅠㅠ pass!!! #수정주가여부 : 나머지가 0이 아니면 수정주가, <우연히 0인 경우는 pass!!! 상하한만 알면 되지! 방법이 있나 모르겠다.> # Round 함수를 쓰고 호가단위 반올림,반내림해야 하나?? Mod_v = Mod(chk_v,호가단위); if Mod_v != 0 Then Round_v = chk_v - Mod_v; #iff 를 써야 하는데... Else Round_v = chk_v; _수정주가_round = Round_v;
검색
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-07-02 11:40:48

안녕하세요 예스스탁입니다. 호가단위만 수정해 드립니다. round 검증부분은 잘 모르겠습니다. 도움을 드리지 못해 죄송합니다 코스닥은 2003년 7월 21일 기준으로 10원, 50원, 100원, 500원, 1000원의 5단계에서 5원, 10원, 50원, 100원의 4단계로 축소되었고 이후 2010년 10월 4일 부로 1000원이하 1원이 추가되어 5단계가 되었습니다. 코스피는 2010년 10월 4일 부로 1000원이하 1원이 추가되어 기존 6단계에서 7단계가 되었습니다. input : chk_v(Numeric); var : 호가단위(0),Mod_v(0),Round_v(0); if CodeCategory == 1 Then { if sDate >= 20101004 Then { if chk_v < 1000 Then 호가단위 = 1; if 1000 <= chk_v and chk_v < 5000 Then 호가단위 = 5; if 5000 <= chk_v and chk_v < 10000 Then 호가단위 = 10; if 10000 <= chk_v and chk_v < 50000 Then 호가단위 = 50; if 50000 <= chk_v and chk_v < 100000 Then 호가단위 = 100; if 100000 <= chk_v and chk_v < 500000 Then 호가단위 = 500; if 500000 <= chk_v Then 호가단위 = 1000; } Else { if chk_v < 5000 Then 호가단위 = 5; if 5000 <= chk_v and chk_v < 10000 Then 호가단위 = 10; if 10000 <= chk_v and chk_v < 50000 Then 호가단위 = 50; if 50000 <= chk_v and chk_v < 100000 Then 호가단위 = 100; if 100000 <= chk_v and chk_v < 500000 Then 호가단위 = 500; if 500000 <= chk_v Then 호가단위 = 1000; } } if CodeCategory == 2 Then { if sDate >= 20101004 Then { if chk_v < 1000 Then 호가단위 = 1; if 1000 <= chk_v and chk_v < 5000 Then 호가단위 = 5; if 5000 <= chk_v and chk_v < 10000 Then 호가단위 = 10; if 10000 <= chk_v and chk_v < 50000 Then 호가단위 = 50; if 50000 <= chk_v Then 호가단위 = 100; } Else { if sDate >= 20030721 Then { if chk_v < 5000 Then 호가단위 = 5; if 5000 <= chk_v and chk_v < 10000 Then 호가단위 = 10; if 10000 <= chk_v and chk_v < 50000 Then 호가단위 = 50; if 50000 <= chk_v Then 호가단위 = 100; } Else { if chk_v < 10000 Then 호가단위 = 10; if 10000 <= chk_v and chk_v < 50000 Then 호가단위 = 50; if 50000 <= chk_v and chk_v < 100000 Then 호가단위 = 100; if 100000 <= chk_v and chk_v < 500000 Then 호가단위 = 500; if 500000 <= chk_v Then 호가단위 = 1000; } } } Mod_v = Mod(chk_v,호가단위); if Mod_v != 0 Then Round_v = chk_v - Mod_v; #iff 를 써야 하는데... Else Round_v = chk_v; _수정주가_round = Round_v; 즐거운 하루되세요 > 목포댁 님이 쓴 글입니다. > 제목 : 호가 round 수식 검증과 보완 부탁합니다. > 항상 감사드립니다. 친절히 잘 알려주시고 도움 주시는데 너무 귀찮게 해드리는 것 같아서 죄송합니다. 어제 통화했던 수정주가 호가 라운딩 건을 사용자 함수로 구현하여 보았습니다. 수식검증과 부족한 부분 수정 부탁 드립니다. 2번. 사용자 함수의 주석처리도 검토 부탁 드립니다. 게시판 글 작성 도중 생각난 것인데, 상한가는 round 처리가 된 것 같은데, 하한가는 이 식대로 하면 제대로 처리가 되는지 의문이 듭니다. 무언가 꼭 빠진 것 같은 기분이 듭니다. 상한가,하한가 round 처리가 틀린 것으로 아는데요 하한가 round 검증이 꼭 필요할 것 같습니다.(Mod함수가 아니고 Round함수를 써야 하는 건지요) 보성파워텍으로 검증하니 잘 맞아 떨어지는 것 같은데 수식에 확신을 갖기에는 조건에 맞는 데이타 봉이 부족한 듯 합니다. 수정주가가 적용된 종목과 일자와 조건에 맞는 데이타 봉을 찾기가 어렵습니다. 보성파워텍이 2016.07.01 까지의 과거 봉이 수정주가가 적용이 되어 있는 것 같습니다. 검증한 데이타 봉 보성파워텍 호가단위 틀린 수정주가(상한가) 2014.10.27(28,29,30), 2014.11.07(21), 2012.12.11,2011.11.07 보성파워텍 호가단위 틀린 수정주가(하한가) 2003.03.21, 2000.4.11, 1999.11.09 ============================================================= 1번. # data1 이용 상하한가에 추가 S 와 추가 E 사이에 2줄에 사용자 함수 호출했습니다. var : 하한가(0,Data1), DnLimit(0,Data1); var : dn1(0,Data1), dn2(0,Data1), dn3(0,Data1), dn4(0,Data1), dn5(0,Data1),dn6(0,Data1),dn7(0,Data1); var : 상한가(0,Data1), UpLimit(0,Data1); var : up1(0,Data1), up2(0,Data1), up3(0,Data1), up4(0,Data1), up5(0,Data1),up6(0,Data1),Up7(0,Data1); var : base(0,Data1); base = Data1(BP); #---------------------------------------------------추가 S Value1 = _수정주가_round(base); #사용자함수 호출 if Value1 != base Then base = Value1; #---------------------------------------------------추가 E if Data1(date >= 19981207) then 이하 길어서 생략 ============================================================= 2번. #사용자 함수 : _수정주가_round = Round_v; input : chk_v(Numeric); var : 호가단위(0),Mod_v(0),Round_v(0); #현행 호가단위가 맞는지 체크 if chk_v < 1000 Then 호가단위 = 1; #할 필요가 있나? 같잔아! if 1000 <= chk_v and chk_v < 5000 Then 호가단위 = 5; if 5000 <= chk_v and chk_v < 10000 Then 호가단위 = 10; if 10000 <= chk_v and chk_v < 50000 Then 호가단위 = 50; if 50000 <= chk_v and chk_v < 100000 Then 호가단위 = 100; if 100000 <= chk_v and chk_v < 500000 Then if CodeCategory() == 1 Then 호가단위 = 500; Else if codeCategory() == 2 Then 호가단위 = 100; if 500000 <= chk_v Then if CodeCategory() == 1 Then 호가단위 = 1000; Else if codeCategory() == 2 Then 호가단위 = 100; #호가단위 체크 끝, 제대로 찾은건지 모르겟네. 전에 호가단위는 지금과 같았을까? 확인필요!!!! #만약 금액별 호가 단위가 틀리면 금액별&날짜 체크까지 해야하는데 ㅠㅠㅠ pass!!! #수정주가여부 : 나머지가 0이 아니면 수정주가, <우연히 0인 경우는 pass!!! 상하한만 알면 되지! 방법이 있나 모르겠다.> # Round 함수를 쓰고 호가단위 반올림,반내림해야 하나?? Mod_v = Mod(chk_v,호가단위); if Mod_v != 0 Then Round_v = chk_v - Mod_v; #iff 를 써야 하는데... Else Round_v = chk_v; _수정주가_round = Round_v;