예스스탁
예스스탁 답변
2025-05-22 10:59:07
안녕하세요
예스스탁입니다.
if dir = 0 then
if dir = 1 then
if dir = -1 then
예스랭귀지에서 같다라는 표현은 == 입니다.
A == B --> A와 B가 같다
A = B --> A에 B를 저장
올리신 수식에서 다른 부분은 문법상 에러가 없고
위 부분만 수정해 드립니다.
input : len(100), th(3.0); // ZigZag 기준 변동폭(%)
var :
i(0),
dir(0),
ptCnt(0),
zzIdx(0),
zzPrice(0),
zzDir(0),
rise1(0), rise2(0),
valid(false);
// 배열 변수는 'Array :' 키워드를 사용하여 별도로 선언해야 합니다.
// 여기서 100은 배열의 최대 크기입니다. len의 최대값에 따라 적절히 조정하세요.
Array : zigzagPt[100](0);
Array : zigzagIdx[100](0);
// ZigZag 포인트 탐지
for i = 1 to len - 1 begin
if dir == 0 then begin // 초기 방향 설정
if H[i] > H[0] * (1 + th / 100.0) then begin // 상승 방향 시작
dir = 1;
zzPrice = H[i];
zzIdx = i;
zzDir = 1; // 상승
zigzagPt[0] = zzPrice;
zigzagIdx[0] = zzIdx;
ptCnt = 1;
end
else if L[i] < L[0] * (1 - th / 100.0) then begin // 하락 방향 시작
dir = -1;
zzPrice = L[i];
zzIdx = i;
zzDir = -1; // 하락
zigzagPt[0] = zzPrice;
zigzagIdx[0] = zzIdx;
ptCnt = 1;
end;
end
else if dir == 1 then begin // 현재 상승 중
if L[i] < zzPrice * (1 - th / 100.0) then begin // 하락 반전
dir = -1;
zzPrice = L[i];
zzIdx = i;
zzDir = -1;
if ptCnt < 100 then begin // 배열 범위 체크: 100은 zigzagPt 배열의 최대 크기
zigzagPt[ptCnt] = zzPrice;
zigzagIdx[ptCnt] = zzIdx;
ptCnt = ptCnt + 1; // <-- 이 부분을 수정했습니다. (이전 49줄 에러 관련)
end;
end;
end
else if dir == -1 then begin // 현재 하락 중
if H[i] > zzPrice * (1 + th / 100.0) then begin // 상승 반전
dir = 1;
zzPrice = H[i];
zzIdx = i;
zzDir = 1;
if ptCnt < 100 then begin // 배열 범위 체크: 100은 zigzagPt 배열의 최대 크기
zigzagPt[ptCnt] = zzPrice;
zigzagIdx[ptCnt] = zzIdx;
ptCnt = ptCnt + 1; // <-- 이 부분을 수정했습니다. (이전 62줄 에러 관련)
end;
end;
end;
end;
// 5파 시작점 (4파 저점) 탐색 조건
// 최소 5개의 ZigZag 포인트가 있어야 조건 검증 가능 (ptCnt >= 5)
// zigzagPt[0], zigzagPt[1], zigzagPt[2], zigzagPt[3], zigzagPt[4]까지 필요
if ptCnt >= 5 then begin
// 상승 5파동 구조 검증
if zigzagPt[0] < zigzagPt[1] and
zigzagPt[1] > zigzagPt[2] and
zigzagPt[2] < zigzagPt[3] and
zigzagPt[3] > zigzagPt[4] then begin
// 주어진 조건 1, 2, 3 적용
if (zigzagPt[1] < zigzagPt[2] and // 조건 1a (1파 고점 < 2파 저점 - 사용자 조건)
zigzagPt[2] < zigzagPt[3] and // 조건 1b (2파 저점 < 3파 고점)
zigzagPt[2] > zigzagPt[0] and // 조건 2 (2파 저점 > 1파 시작점)
zigzagPt[1] <= zigzagPt[4]) then begin // 조건 3 (1파 고점 <= 4파 저점)
valid = true;
end;
end;
end;
if valid then
find(1); // 조건 만족 시 검색
즐거운 하루되세요
> 갈랑교 님이 쓴 글입니다.
> 제목 : 부탁드립니다
> 수식이 맞는지 확인 부탁합니다
input : len(100), th(3.0); // ZigZag 기준 변동폭(%)
var :
i(0),
dir(0),
ptCnt(0),
zzIdx(0),
zzPrice(0),
zzDir(0),
rise1(0), rise2(0),
valid(false);
// 배열 변수는 'Array :' 키워드를 사용하여 별도로 선언해야 합니다.
// 여기서 100은 배열의 최대 크기입니다. len의 최대값에 따라 적절히 조정하세요.
Array : zigzagPt[100](0);
Array : zigzagIdx[100](0);
// ZigZag 포인트 탐지
for i = 1 to len - 1 begin
if dir = 0 then begin // 초기 방향 설정
if H[i] > H[0] * (1 + th / 100.0) then begin // 상승 방향 시작
dir = 1;
zzPrice = H[i];
zzIdx = i;
zzDir = 1; // 상승
zigzagPt[0] = zzPrice;
zigzagIdx[0] = zzIdx;
ptCnt = 1;
end
else if L[i] < L[0] * (1 - th / 100.0) then begin // 하락 방향 시작
dir = -1;
zzPrice = L[i];
zzIdx = i;
zzDir = -1; // 하락
zigzagPt[0] = zzPrice;
zigzagIdx[0] = zzIdx;
ptCnt = 1;
end;
end
else if dir = 1 then begin // 현재 상승 중
if L[i] < zzPrice * (1 - th / 100.0) then begin // 하락 반전
dir = -1;
zzPrice = L[i];
zzIdx = i;
zzDir = -1;
if ptCnt < 100 then begin // 배열 범위 체크: 100은 zigzagPt 배열의 최대 크기
zigzagPt[ptCnt] = zzPrice;
zigzagIdx[ptCnt] = zzIdx;
ptCnt = ptCnt + 1; // <-- 이 부분을 수정했습니다. (이전 49줄 에러 관련)
end;
end;
end
else if dir = -1 then begin // 현재 하락 중
if H[i] > zzPrice * (1 + th / 100.0) then begin // 상승 반전
dir = 1;
zzPrice = H[i];
zzIdx = i;
zzDir = 1;
if ptCnt < 100 then begin // 배열 범위 체크: 100은 zigzagPt 배열의 최대 크기
zigzagPt[ptCnt] = zzPrice;
zigzagIdx[ptCnt] = zzIdx;
ptCnt = ptCnt + 1; // <-- 이 부분을 수정했습니다. (이전 62줄 에러 관련)
end;
end;
end;
end;
// 5파 시작점 (4파 저점) 탐색 조건
// 최소 5개의 ZigZag 포인트가 있어야 조건 검증 가능 (ptCnt >= 5)
// zigzagPt[0], zigzagPt[1], zigzagPt[2], zigzagPt[3], zigzagPt[4]까지 필요
if ptCnt >= 5 then begin
// 상승 5파동 구조 검증
if zigzagPt[0] < zigzagPt[1] and
zigzagPt[1] > zigzagPt[2] and
zigzagPt[2] < zigzagPt[3] and
zigzagPt[3] > zigzagPt[4] then begin
// 주어진 조건 1, 2, 3 적용
if (zigzagPt[1] < zigzagPt[2] and // 조건 1a (1파 고점 < 2파 저점 - 사용자 조건)
zigzagPt[2] < zigzagPt[3] and // 조건 1b (2파 저점 < 3파 고점)
zigzagPt[2] > zigzagPt[0] and // 조건 2 (2파 저점 > 1파 시작점)
zigzagPt[1] <= zigzagPt[4]) then begin // 조건 3 (1파 고점 <= 4파 저점)
valid = true;
end;
end;
end;
if valid then
find(1); // 조건 만족 시 검색