커뮤니티

검색식문의

프로필 이미지
풍요
2025-06-01 16:26:45
187
글번호 191315
답변완료

첨부 이미지

안녕하세요 빠른 답변 감사합니다. 주봉에서 아래 검색식을 사용자함수를 사용하여 만들었습니다. 그런데 실제 검색을 해보면 검색식과는 다른 종목이 검색이 되어서요(첨부파일참조) 어떻게 수정해야 할지 문의드립니다. Var : conditionMet(false); // 최종 조건 만족 여부 플래그 Var : weekIndex(0); // 이전 주를 순회할 루프 인덱스 Var : matchCount(0); // 조건 만족 주 개수 카운터 Var : highestHigh4Weeks(0); // '최근 4주간의 최고가'를 저장할 변수 highestHigh4Weeks = max(WeekHigh(0), WeekHigh(1), WeekHigh(2), WeekHigh(3)); if (highestHigh4Weeks > Ma(C,5)[0] && highestHigh4Weeks > Ma(C,20)[0] && Ma(C,5)[0] > Ma(C,20)[0] && C[0] > Ma(C,5)[0] && // 현재 종가가 5주선 위에 있을 때 C[0] > Ma(C,20)[0]) Then { // 현재 종가가 20주선 위에 있을 때 // === 2단계: 1단계 조건 만족 시 과거 50주를 스캔 === matchCount = 0; For weekIndex = 0 to 99 Begin if (WeekHigh(weekIndex) >= highestHigh4Weeks * 0.99 && WeekHigh(weekIndex) <= highestHigh4Weeks * 1.01 && Ma(C,5)[weekIndex] > Ma(C,20)[weekIndex] && C[weekIndex] > Ma(C,5)[weekIndex] && // 해당 주의 종가가 5주선 위에 있을 때 C[weekIndex] > Ma(C,20)[weekIndex]) Then { // 해당 주의 종가가 20주선 위에 있을 때 matchCount = matchCount + 1; // 조건이 모두 만족하면 카운트 증가 } End; // 과거 조건 만족 횟수가 2회 이상이면 최종 조건 만족 if (matchCount >= 2) Then { conditionMet = true; } } Else { conditionMet = False; } // 최종 조건이 만족하면 종목 검색 if (conditionMet) Then Find(1); // WeekHigh 사용자 함수 Input : N(Numeric); // 입력: N (숫자) Var : j(0); // 변수: j (초기값 0) Var : 요일(0); // 변수: 요일 (초기값 0) Array: WH[100](0); // 배열: WH (크기 99, 모든 요소 초기값 0) Begin 요일 = DayOfWeek(Date); // 현재 날짜의 요일을 가져옵니다. // 이전 날짜가 현재 날짜보다 이전이고 (날짜가 진행되었고), // 이전 날짜의 요일이 현재 날짜의 요일보다 크거나 같을 때 (새로운 주기 시작 조건) If Date[1] < Date and 요일[1] >= 요일 Then Begin For j = 99 Downto 1 Begin // 배열 요소를 뒤로 한 칸씩 밉니다. WH[j] = WH[j-1]; End; WH[0] = H; // 현재 날짜의 고가(H)를 WH[0]에 저장합니다. End; WeekHigh = WH[N]; // WH 배열의 N번째 요소를 반환합니다. End;
검색
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-06-02 19:52:01

안녕하세요 예스스탁입니다. 1 특정함수의 이전봉의 값을 호출시 해당 함수를 변수처리하신 후에 과거값을 가져오게 작성하셔야 합니다. if문에서 함수가 호출되면 매봉 호출되는 것이 아니므로 과거봉의 값을 충분히 리턴되게 만들어 지지 않게 됩니다. 2 if (matchCount >= 2) Then 조건이 만족하지 않으면 conditionMet이 false가 되게 추가해 주셔야 합니다. 3 Var : conditionMet(false); // 최종 조건 만족 여부 플래그 Var : weekIndex(0); // 이전 주를 순회할 루프 인덱스 Var : matchCount(0); // 조건 만족 주 개수 카운터 Var : highestHigh4Weeks(0); // '최근 4주간의 최고가'를 저장할 변수 var : ma5(0),ma20(0); highestHigh4Weeks = max(WeekHigh(0), WeekHigh(1), WeekHigh(2), WeekHigh(3)); MA5 = ma(C,5); MA20 = ma(c,20); if (highestHigh4Weeks > MA5 && highestHigh4Weeks > MA20 && MA5 > MA20 && C[0] > MA5 && // 현재 종가가 5주선 위에 있을 때 C[0] > MA20) Then // 현재 종가가 20주선 위에 있을 때 { // === 2단계: 1단계 조건 만족 시 과거 50주를 스캔 === matchCount = 0; For weekIndex = 0 to 99 { if (WeekHigh(weekIndex) >= highestHigh4Weeks * 0.99 && WeekHigh(weekIndex) <= highestHigh4Weeks * 1.01 && Ma(C,5)[weekIndex] > Ma(C,20)[weekIndex] && C[weekIndex] > MA5[weekIndex] && // 해당 주의 종가가 5주선 위에 있을 때 C[weekIndex] > MA20[weekIndex]) Then // 해당 주의 종가가 20주선 위에 있을 때 { matchCount = matchCount + 1; // 조건이 모두 만족하면 카운트 증가 } } // 과거 조건 만족 횟수가 2회 이상이면 최종 조건 만족 if (matchCount >= 2) Then conditionMet = true; Else conditionMet = False; } Else { conditionMet = False; } // 최종 조건이 만족하면 종목 검색 if (conditionMet) Then Find(1); 3 Var : conditionMet(false); // 최종 조건 만족 여부 플래그 Var : weekIndex(0); // 이전 주를 순회할 루프 인덱스 Var : matchCount(0); // 조건 만족 주 개수 카운터 Var : highestHigh4Weeks(0); // '최근 4주간의 최고가'를 저장할 변수 var : ma5(0),ma20(0); highestHigh4Weeks = max(WeekHigh(0), WeekHigh(1), WeekHigh(2), WeekHigh(3)); MA5 = ma(C,5); MA20 = ma(c,20); if (highestHigh4Weeks > MA5 && highestHigh4Weeks > MA20 && MA5 > MA20 && C[0] > MA5 && // 현재 종가가 5주선 위에 있을 때 C[0] > MA20) Then // 현재 종가가 20주선 위에 있을 때 { // === 2단계: 1단계 조건 만족 시 과거 50주를 스캔 === matchCount = 0; For weekIndex = 0 to 99 { if (WeekHigh(weekIndex) >= highestHigh4Weeks * 0.99 && WeekHigh(weekIndex) <= highestHigh4Weeks * 1.01 && Ma(C,5)[weekIndex] > Ma(C,20)[weekIndex] && C[weekIndex] > MA5[weekIndex] && // 해당 주의 종가가 5주선 위에 있을 때 C[weekIndex] > MA20[weekIndex]) Then // 해당 주의 종가가 20주선 위에 있을 때 { matchCount = matchCount + 1; // 조건이 모두 만족하면 카운트 증가 } } // 과거 조건 만족 횟수가 2회 이상이면 최종 조건 만족 if (matchCount >= 2) Then conditionMet = true; Else conditionMet = False; } Else { conditionMet = False; } // 최종 조건이 만족하면 종목 검색 if (conditionMet) Then Find(1); 즐거운 하루되세요 > 풍요 님이 쓴 글입니다. > 제목 : 검색식문의 > 안녕하세요 빠른 답변 감사합니다. 주봉에서 아래 검색식을 사용자함수를 사용하여 만들었습니다. 그런데 실제 검색을 해보면 검색식과는 다른 종목이 검색이 되어서요(첨부파일참조) 어떻게 수정해야 할지 문의드립니다. Var : conditionMet(false); // 최종 조건 만족 여부 플래그 Var : weekIndex(0); // 이전 주를 순회할 루프 인덱스 Var : matchCount(0); // 조건 만족 주 개수 카운터 Var : highestHigh4Weeks(0); // '최근 4주간의 최고가'를 저장할 변수 highestHigh4Weeks = max(WeekHigh(0), WeekHigh(1), WeekHigh(2), WeekHigh(3)); if (highestHigh4Weeks > Ma(C,5)[0] && highestHigh4Weeks > Ma(C,20)[0] && Ma(C,5)[0] > Ma(C,20)[0] && C[0] > Ma(C,5)[0] && // 현재 종가가 5주선 위에 있을 때 C[0] > Ma(C,20)[0]) Then { // 현재 종가가 20주선 위에 있을 때 // === 2단계: 1단계 조건 만족 시 과거 50주를 스캔 === matchCount = 0; For weekIndex = 0 to 99 Begin if (WeekHigh(weekIndex) >= highestHigh4Weeks * 0.99 && WeekHigh(weekIndex) <= highestHigh4Weeks * 1.01 && Ma(C,5)[weekIndex] > Ma(C,20)[weekIndex] && C[weekIndex] > Ma(C,5)[weekIndex] && // 해당 주의 종가가 5주선 위에 있을 때 C[weekIndex] > Ma(C,20)[weekIndex]) Then { // 해당 주의 종가가 20주선 위에 있을 때 matchCount = matchCount + 1; // 조건이 모두 만족하면 카운트 증가 } End; // 과거 조건 만족 횟수가 2회 이상이면 최종 조건 만족 if (matchCount >= 2) Then { conditionMet = true; } } Else { conditionMet = False; } // 최종 조건이 만족하면 종목 검색 if (conditionMet) Then Find(1); // WeekHigh 사용자 함수 Input : N(Numeric); // 입력: N (숫자) Var : j(0); // 변수: j (초기값 0) Var : 요일(0); // 변수: 요일 (초기값 0) Array: WH[100](0); // 배열: WH (크기 99, 모든 요소 초기값 0) Begin 요일 = DayOfWeek(Date); // 현재 날짜의 요일을 가져옵니다. // 이전 날짜가 현재 날짜보다 이전이고 (날짜가 진행되었고), // 이전 날짜의 요일이 현재 날짜의 요일보다 크거나 같을 때 (새로운 주기 시작 조건) If Date[1] < Date and 요일[1] >= 요일 Then Begin For j = 99 Downto 1 Begin // 배열 요소를 뒤로 한 칸씩 밉니다. WH[j] = WH[j-1]; End; WH[0] = H; // 현재 날짜의 고가(H)를 WH[0]에 저장합니다. End; WeekHigh = WH[N]; // WH 배열의 N번째 요소를 반환합니다. End;