커뮤니티

다시한번 수식 문의드립니다!

프로필 이미지
민서홧팅
2023-07-19 14:35:17
993
글번호 170760
답변완료
늘 친절하신 설명 감사합니다. 수식은 가능하지만, 조건검색 봉수 제한 때문에 어렵다고 말씀하셔서 스윙하이 값을 조정하여 다시 여쭤봅니다. 예스수식 초보자이다 보니,, 스윙하이 값을 배열로 넣는 부분을 어떻게 구성할지 감이 잡히지 않아 여쭤봅니다. 대략 스윙하이 결과를 for문이나 while로 반복해서 array로 넣고, if 조건을 걸면 될 것 같은데, 배열로 넣는 부분에 대한 설명이 어디에서도 찾지 못해서 여쭤봅니다... 조건수식 정의를 순서대로 말씀드리면, 1. 일봉 20일 이동평균보다 종가가 높은 경우의 스윙하이 값들을 배열로 변수에 넣은 다음, (이 때 스윙하이는 왼쪽 5봉, 오른쪽 5봉을 기준으로 합니다.) 2. 스윙하이 값들 중 표준편차 95% 범위 내의 값으로만 배열을 재정의한 후, 3. 재정의된 스윙하이 값의 최고가와 봉번호, 2번째 고가와 봉번호를 구하고, 4. 최고가 - ((최고가 - 2번째 고가)/(최고가 봉번호 - 2번째 고가 봉번호))와 같이 선형방정식을 변수로 할당하고, 5. 최근 100봉 이내 일일 종가가 선형방정식의 값을 1회 이상 상향돌파한 경우, 6. 금일 종가가 해당 종가의 시가에 3% 범위 내에 수렴하는 종목을 검색하는 검색식이 구현 가능한가요? 스윙하이 값을 배열 형태로 변수에 넣는 것에서 계속 에러가 나서 문의드립니다....
검색
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2023-07-20 13:48:44

안녕하세요 예스스탁입니다. 아래 내용 참고하시기 바랍니다. input : left(5),right(5); var : mav(0),cnt(0),count(0); var : sumv(0),sumi(0),avgv(0),sumsqrt(0),stdv(0),ii(0),upv(0),dnv(0); var : h1(0),h2(0),i1(0),i2(0); Array : sh[100](0),shi[100](0),hh[100](0),hi[100](0); mav = ma(c,20); if SwingHigh(1,h,left,right,left+right+1) != -1 and c[right] > mav[right] Then { //전체 발생 횟수 count = count+1; //스윙하이값과 인덱스 배열에 저장 (최근이 0으로 시작) For cnt = 99 downto 1 { sh[cnt] = sh[cnt-1]; shi[cnt] = shi[cnt-1]; } sh[0] = h[right]; shi[0] = Index[right]; #최소 저장된 값이 2개 이상 if count >= 2 Then { #평균 sumv = 0; sumi = 0; For cnt = 0 to min(count,100)-1 { if sh[cnt] > 0 then { sumv = sumv + sh[cnt]; sumi = sumi + 1; } } avgv = sumv/sumi; #표준편차 SumSqrt = 0; For cnt = 0 To sumi - 1 { SumSqrt = SumSqrt + (SH[cnt] - Avgv)^2; } Stdv = SquareRoot(SumSqrt/sumi); #표준편차 2배 상하단 upv = avgv+stdv*2; dnv = avgv-stdv*2; #기존 저장값 0으로 초기화 For cnt = 0 to 99 { hh[cnt] = 0; hi[cnt] = 0; } #상하단내 스윙하이만 다른배열에 저장 ii = 0; For cnt = 0 to count-1 { //상하단내 스윙하이값만 hh,hi배열에 순서대로 저장 if upv >= sh[cnt] and sh[cnt] >= dnv Then { hh[ii] = sh[cnt]; hi[ii] = shi[cnt]; ii = ii +1; } } if ii >= 2 Then { nthHighestArray(hh,ii,1,h1,var1); nthHighestArray(hh,ii,2,h2,Var2); i1 = hi[var1]; i2 = hi[var2]; value1 = h1 - ((h1 - h2)/(i1 - i2)); } } } Else { if value1 > 0 and CrossUp(C,value1) Then { Value2 = c; Value3 = Index; } if Value2 > 0 and Index <= Value2+100 and C >= Value2*1.03 and C <= Value2*0.97 Then Find(1); } 즐거운 하루되세요 > 민서홧팅 님이 쓴 글입니다. > 제목 : 다시한번 수식 문의드립니다! > 늘 친절하신 설명 감사합니다. 수식은 가능하지만, 조건검색 봉수 제한 때문에 어렵다고 말씀하셔서 스윙하이 값을 조정하여 다시 여쭤봅니다. 예스수식 초보자이다 보니,, 스윙하이 값을 배열로 넣는 부분을 어떻게 구성할지 감이 잡히지 않아 여쭤봅니다. 대략 스윙하이 결과를 for문이나 while로 반복해서 array로 넣고, if 조건을 걸면 될 것 같은데, 배열로 넣는 부분에 대한 설명이 어디에서도 찾지 못해서 여쭤봅니다... 조건수식 정의를 순서대로 말씀드리면, 1. 일봉 20일 이동평균보다 종가가 높은 경우의 스윙하이 값들을 배열로 변수에 넣은 다음, (이 때 스윙하이는 왼쪽 5봉, 오른쪽 5봉을 기준으로 합니다.) 2. 스윙하이 값들 중 표준편차 95% 범위 내의 값으로만 배열을 재정의한 후, 3. 재정의된 스윙하이 값의 최고가와 봉번호, 2번째 고가와 봉번호를 구하고, 4. 최고가 - ((최고가 - 2번째 고가)/(최고가 봉번호 - 2번째 고가 봉번호))와 같이 선형방정식을 변수로 할당하고, 5. 최근 100봉 이내 일일 종가가 선형방정식의 값을 1회 이상 상향돌파한 경우, 6. 금일 종가가 해당 종가의 시가에 3% 범위 내에 수렴하는 종목을 검색하는 검색식이 구현 가능한가요? 스윙하이 값을 배열 형태로 변수에 넣는 것에서 계속 에러가 나서 문의드립니다....
프로필 이미지

민서홧팅

2023-07-21 15:10:21

감사합니다! 몇 가지 확인하려고 추가 문의드립니다. 1. 첫번째 if문의 "if SwingHigh(1,h,left,right,left+right+1) != -1 and c[right] > mav[right] Then"은 스윙하이 시작점이 20이평 보다 높은 경우를 상정한 것이 같은데, 만약 스윙하이 최고값이 20이평 보다 높은 경우로 변경하려면, "if SwingHigh(1,h,left,right,left+right+1)!= -1 and SwingHigh(1,h,left,right,left+right+1) > mav[right] Then"으로 변경하면 될까요? 2. sh[0] = h[right]; 부분은 스윙하이 완성시점에서 포착되기 때문에 5봉전 값 = 스윙하이 최고점으로 계산되는 것이죠? 3. 마지막 Else는 스윙하이 완성되지 않고 20이평보다 높을 때 실행 되는 의미인가요? 4. 만약 파워종목검색에서 검색하면 검색주기를 "주"로 두고 "left(5),right(5);"와 "mav = ma(c,20);"의 변수를 각각 "left(3),right(3);"와 "mav = ma(c,10);"으로 변경해서 수식을 적용하면, 주봉에서 주봉 10이평 보다 높고 좌우 3개 봉을 비교한 스윙하이 값으로 변경되는 것이 맞나요? 5. 만약 "SwingHigh(1,h,left,right,left+right+1)"에서 스윙하이 값을 h가 아닌 종가 C나 제가 임의로 지정한 변수로 넣어도 스윙하이 값이 정상 작동하는거죠? 예를 들어, A = LRL(C, 20); A1 = LRL(A,20); eq= A-A1; ZZ =A+eq; if SwingHigh(1,zz,left,right,left+right+1) != -1 and c[right] > mav[right] Then 으로 수정하면 고가 스윙하이가 아니라 제가 정한 zl 값으로 스윙하이 값을 구하는건가요? 6. 마지막에 일봉에서 "if Value2 > 0 and Index <= Value2+100 and C >= Value2*1.03 and C <= Value2*0.97 Then" 의 조건검색식을 아래와 같이 수정하면, 일봉 5봉 이내 조건 만족한 경우를 결과로 받는거죠? con1 = Value2 > 0 and Index <= Value2+100 and C >= Value2*1.03 and C <= Value2*0.97 if countif(con1, 5) > 0 then Find(1); 질문이 많아서 정말 죄송합니다. 답변 부탁드립니다! ===================================== > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 다시한번 수식 문의드립니다! > 안녕하세요 예스스탁입니다. 아래 내용 참고하시기 바랍니다. input : left(5),right(5); var : mav(0),cnt(0),count(0); var : sumv(0),sumi(0),avgv(0),sumsqrt(0),stdv(0),ii(0),upv(0),dnv(0); var : h1(0),h2(0),i1(0),i2(0); Array : sh[100](0),shi[100](0),hh[100](0),hi[100](0); mav = ma(c,20); if SwingHigh(1,h,left,right,left+right+1) != -1 and c[right] > mav[right] Then { //전체 발생 횟수 count = count+1; //스윙하이값과 인덱스 배열에 저장 (최근이 0으로 시작) For cnt = 99 downto 1 { sh[cnt] = sh[cnt-1]; shi[cnt] = shi[cnt-1]; } sh[0] = h[right]; shi[0] = Index[right]; #최소 저장된 값이 2개 이상 if count >= 2 Then { #평균 sumv = 0; sumi = 0; For cnt = 0 to min(count,100)-1 { if sh[cnt] > 0 then { sumv = sumv + sh[cnt]; sumi = sumi + 1; } } avgv = sumv/sumi; #표준편차 SumSqrt = 0; For cnt = 0 To sumi - 1 { SumSqrt = SumSqrt + (SH[cnt] - Avgv)^2; } Stdv = SquareRoot(SumSqrt/sumi); #표준편차 2배 상하단 upv = avgv+stdv*2; dnv = avgv-stdv*2; #기존 저장값 0으로 초기화 For cnt = 0 to 99 { hh[cnt] = 0; hi[cnt] = 0; } #상하단내 스윙하이만 다른배열에 저장 ii = 0; For cnt = 0 to count-1 { //상하단내 스윙하이값만 hh,hi배열에 순서대로 저장 if upv >= sh[cnt] and sh[cnt] >= dnv Then { hh[ii] = sh[cnt]; hi[ii] = shi[cnt]; ii = ii +1; } } if ii >= 2 Then { nthHighestArray(hh,ii,1,h1,var1); nthHighestArray(hh,ii,2,h2,Var2); i1 = hi[var1]; i2 = hi[var2]; value1 = h1 - ((h1 - h2)/(i1 - i2)); } } } Else { if value1 > 0 and CrossUp(C,value1) Then { Value2 = c; Value3 = Index; } if Value2 > 0 and Index <= Value2+100 and C >= Value2*1.03 and C <= Value2*0.97 Then Find(1); } 즐거운 하루되세요 > 민서홧팅 님이 쓴 글입니다. > 제목 : 다시한번 수식 문의드립니다! > 늘 친절하신 설명 감사합니다. 수식은 가능하지만, 조건검색 봉수 제한 때문에 어렵다고 말씀하셔서 스윙하이 값을 조정하여 다시 여쭤봅니다. 예스수식 초보자이다 보니,, 스윙하이 값을 배열로 넣는 부분을 어떻게 구성할지 감이 잡히지 않아 여쭤봅니다. 대략 스윙하이 결과를 for문이나 while로 반복해서 array로 넣고, if 조건을 걸면 될 것 같은데, 배열로 넣는 부분에 대한 설명이 어디에서도 찾지 못해서 여쭤봅니다... 조건수식 정의를 순서대로 말씀드리면, 1. 일봉 20일 이동평균보다 종가가 높은 경우의 스윙하이 값들을 배열로 변수에 넣은 다음, (이 때 스윙하이는 왼쪽 5봉, 오른쪽 5봉을 기준으로 합니다.) 2. 스윙하이 값들 중 표준편차 95% 범위 내의 값으로만 배열을 재정의한 후, 3. 재정의된 스윙하이 값의 최고가와 봉번호, 2번째 고가와 봉번호를 구하고, 4. 최고가 - ((최고가 - 2번째 고가)/(최고가 봉번호 - 2번째 고가 봉번호))와 같이 선형방정식을 변수로 할당하고, 5. 최근 100봉 이내 일일 종가가 선형방정식의 값을 1회 이상 상향돌파한 경우, 6. 금일 종가가 해당 종가의 시가에 3% 범위 내에 수렴하는 종목을 검색하는 검색식이 구현 가능한가요? 스윙하이 값을 배열 형태로 변수에 넣는 것에서 계속 에러가 나서 문의드립니다....