커뮤니티

수식작성이요.

프로필 이미지
타고난스캘퍼
2012-04-20 17:18:56
547
글번호 50297
답변완료
[사용자함수:topvariableband] input:Price(numeric),length(Numeric),leftlen(Numeric),rightlen(Numeric),factor(Numeric); var:Newswing(false),count(0),summ(0),varband(0),highestHi(0); array:TopPoints[19](-1); if factor>1 or Factor<0 Then varband = 1; Else varband = factor; Newswing=false; if swinghighbar(1,price,leftlen,rightlen,leftlen+rightlen+1)==rightlen Then { For count = 19 downto 1 { topPoints[count] = topPoints[count-1]; } topPoints[0]=price[rightlen]; newswing = true; } HighestHi=0; Summ =0; For count = 0 to length - 1 { summ = summ+topPoints[count]; if topPoints[count]>Highesthi Then highestHi=topPoints[count]; } if length<>0 then { if topPoints[length-1]<>-1 Then topvariableband = (summ/length)+(highesthi-summ/length)*varband; else topvariableband = 0; } Else topvariableband =0; 위 작성식해석좀부탁드릴게요. 한줄식 주석으로... 이해안되는 부분이 왜 19 down to 1를 카운트하는지랑이요. topvariableband = (summ/length)+(highesthi-summ/length)*varband; 부분에서 varband 를 왜 곱하는지.... 해석이랑 답변부탁드릴게요 매번감사합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2012-04-20 18:39:37

안녕하세요 예스스탁입니다. 1번(올리신 식에 있는 for문) For count = 19 downto 1 { topPoints[count] = topPoints[count-1]; } 2번 For count = 1 to 19 { topPoints[count] = topPoints[count-1][1]; } 위 2개의 for문은 모두 같은 내용입니다. 조건만족하면 topPoints[0]번방에 새로운 값을 넣게 되므로 기존에 저장된 값을 다음방으로 옮겨서 사용하고자 할때 사용되는 내용입니다. 1번식은 19번방에는 기존의 18번방에 있던값을 가져와 저장하고 18번방에는 기존의 17번방에 있던값을 가져와 저장하고 17번방에는 기존의 16번방에 있던값을 가져와 저장하고 16번방에는 기존의 15번방에 있던값을 가져와 저장하고 15번방에는 기존의 14번방에 있던값을 가져와 저장하고 14번방에는 기존의 13번방에 있던값을 가져와 저장하고 13번방에는 기존의 12번방에 있던값을 가져와 저장하고 12번방에는 기존의 11번방에 있던값을 가져와 저장하고 11번방에는 기존의 10번방에 있던값을 가져와 저장하고 10번방에는 기존의 9번방에 있던값을 가져와 저장하고 9번방에는 기존의 8번방에 있던값을 가져와 저장하고 8번방에는 기존의 7번방에 있던값을 가져와 저장하고 7번방에는 기존의 6번방에 있던값을 가져와 저장하고 6번방에는 기존의 5번방에 있던값을 가져와 저장하고 5번방에는 기존의 4번방에 있던값을 가져와 저장하고 4번방에는 기존의 3번방에 있던값을 가져와 저장하고 3번방에는 기존의 2번방에 있던값을 가져와 저장하고 2번방에는 기존의 1번방에 있던값을 가져와 저장하고 1번방에는 기존의 0번방에 있던값을 가져와 저장하게 하는 것입니다. 2번식은 기존에 0번방의 한봉전에 있던 값은 1번방에 저장하고 기존에 1번방에 한봉전에 있던 값은 2번방에 저장하고 기존에 2번방에 한봉전에 있던 값은 3번방에 저장하고 기존에 3번방에 한봉전에 있던 값은 4번방에 저장하고 기존에 4번방에 한봉전에 있던 값은 5번방에 저장하고 기존에 5번방에 한봉전에 있던 값은 6번방에 저장하고 기존에 6번방에 한봉전에 있던 값은 7번방에 저장하고 기존에 7번방에 한봉전에 있던 값은 8번방에 저장하고 기존에 8번방에 한봉전에 있던 값은 9번방에 저장하고 기존에 9번방에 한봉전에 있던 값은 10번방에 저장하고 기존에 10번방에 한봉전에 있던 값은 11번방에 저장하고 기존에 11번방에 한봉전에 있던 값은 12번방에 저장하고 기존에 12번방에 한봉전에 있던 값은 13번방에 저장하고 기존에 13번방에 한봉전에 있던 값은 14번방에 저장하고 기존에 14번방에 한봉전에 있던 값은 15번방에 저장하고 기존에 15번방에 한봉전에 있던 값은 16번방에 저장하고 기존에 16번방에 한봉전에 있던 값은 17번방에 저장하고 기존에 17번방에 한봉전에 있던 값은 18번방에 저장하고 기존에 18번방에 한봉전에 있던 값은 19번방에 저장하게 하는 것입니다. 결과적으로 같은 내용이고 0번방에 새로운 조건이 만족하면 새로운 값을 넣을 것이기 때문에 기존의 값을 뒷방으로 옮기는 것입니다. 단지 뒤방부터 수행하는냔 앞방부터 수행하는냐의 차이일 뿐입니다. 일반적인 볼린져밴드의 계산식을 보시면 이동평균에 최근 N개봉의 표준편차의 몇배를 더해서 밴드상단을 만듭니다. varband도 이런 몇배를 지정하는것과 같다고 보시면 됩니다. if factor > 1 or Factor<0 Then varband = 1; Else varband = factor; 로 만약 외부변수 factor에 사용자가 너무 큰값이나 -값을 넣지 못하게 하는 것이고 topPoints에 저장된 값의 평균과 제일큰값의 차이 이상으로는 값을 설정하지 못하게 하는 내용이고 -로 입력하지 말라는 의미입니다. 0이상 1이하로만 설정하라는 의미입니다. 아래는 주석입니다. input:Price(numeric),length(Numeric),leftlen(Numeric),rightlen(Numeric),factor(Numeric); var:Newswing(false),count(0),summ(0),varband(0),highestHi(0); array:TopPoints[19](-1);#배열방수 19개(0~18번방까지) # 사용자가 총 19개(0번~18번방)만 사용하므로 해당 함수는 Length도 19이상 사용하시면 안됩니다. #factor가 1보다 크거나 0보다 작으면 varband은 1 아니면 Factor if factor > 1 or Factor<0 Then varband = 1; Else varband = factor; #Newswing은 매봉 false로 초기화 Newswing=false; #스윙하이가 발생하면 if swinghighbar(1,price,leftlen,rightlen,leftlen+rightlen+1)==rightlen Then { # topPoints의 지정한 방에 지정한 방보다 1작은 방번호에 저장된 값을 저장한다. For count = 18 downto 1 { topPoints[count] = topPoints[count-1]; } #topPoints의 0번방은 rightlen봉전 가격 topPoints[0]=price[rightlen]; #Newswing을 true로 변경 newswing = true; } #for문이 수행되기전에 HighestHi를 0으로 초기화 HighestHi=0; #for문이 수행되기전에 Summ을 0으로 초기화 Summ =0; For count = 0 to length - 1 {#0번방~(length-1)번방까지의 값을 sumn에 누적 summ = summ+topPoints[count]; #0번방~length번방까지의 값 중 가장 큰 값을 highestHi에 저장 if topPoints[count]> Highesthi Then highestHi=topPoints[count]; } #length가 0이 아닐때 if length<>0 then { if topPoints[length-1]<>-1 Then#topPoints의 (length-1)번방에 값이 저장이 되어 있을때만 topvariableband = (summ/length)+(highesthi-summ/length)*varband;#지정한 계산 수행해서 topvariableband에 저장 else #topPoints의 (length-1)번방에 값이 없으면(계산에 필요한 데이터가 모자라므로) topvariableband = 0;#topvariableband에 0 저장 } Else#length가 0이면 topvariableband는 0을 리턴 topvariableband =0; 즐거운 하루되세요 > 타고난스캘퍼 님이 쓴 글입니다. > 제목 : 수식작성이요. > [사용자함수:topvariableband] input:Price(numeric),length(Numeric),leftlen(Numeric),rightlen(Numeric),factor(Numeric); var:Newswing(false),count(0),summ(0),varband(0),highestHi(0); array:TopPoints[19](-1); if factor>1 or Factor<0 Then varband = 1; Else varband = factor; Newswing=false; if swinghighbar(1,price,leftlen,rightlen,leftlen+rightlen+1)==rightlen Then { For count = 19 downto 1 { topPoints[count] = topPoints[count-1]; } topPoints[0]=price[rightlen]; newswing = true; } HighestHi=0; Summ =0; For count = 0 to length - 1 { summ = summ+topPoints[count]; if topPoints[count]>Highesthi Then highestHi=topPoints[count]; } if length<>0 then { if topPoints[length-1]<>-1 Then topvariableband = (summ/length)+(highesthi-summ/length)*varband; else topvariableband = 0; } Else topvariableband =0; 위 작성식해석좀부탁드릴게요. 한줄식 주석으로... 이해안되는 부분이 왜 19 down to 1를 카운트하는지랑이요. topvariableband = (summ/length)+(highesthi-summ/length)*varband; 부분에서 varband 를 왜 곱하는지.... 해석이랑 답변부탁드릴게요 매번감사합니다.