커뮤니티
고점 저점 표시...
2009-04-21 11:39:08
1202
글번호 21819
예전에 수식지왕님께서 올려 주신 지표인데, 3.1에 적용하니까 'i'가 선언되어 있지 않다고 오류가 생기네요.
수정 좀 부탁드립니다.^^
/* Swing 파동선.yin */
input:n(5),미완성사용(true);
var:j(0),k(0),고점표시(0),저점표시(0);
array:고[20](0),저[20](0),고bar[20](0),저bar[20](0),
고idx[20](0),저idx[20](0);
#=========================================================#
# 초기처리 (initialize routine)
#=========================================================#
# index()와 마찬가지로 1봉이 바뀔 때마다 1씩 증가
#---------------------------------------------------------#
for j = 1 to 19 {
저bar[j] = 저bar[j] + 1;
고bar[j] = 고bar[j] + 1;
고idx[j] = i - 고bar[j];
저idx[j] = i - 저bar[j];
}
고점표시=(o[n]+c[n])/2;
저점표시=(o[n]+c[n])/2;
#=========================================================#
# 주처리 (Main Routine) 파동선 계산
#=========================================================#
# 전고점(peak) 계산
#---------------------------------------------------------#
//Highest(H,2)[3] <= H[2] && H[2] > Highest(H,2)
if Highest(H,n)[n+1] <= H[n] and H[n] > Highest(H,n) then {
if 미완성사용 == true then {
for j = 18 downto 1 { //배열값을 순차적으로 바꿔준다
고[j+1] = 고[j];
고bar[j+1] = 고bar[j];
고idx[j+1] = 고idx[j];
}
고[1] = h[n];
고bar[1] = n;
고idx[1] = i - 고bar[1];
고점표시 = 고[1]*1.005;
if 저bar[1] > 고bar[2] then {
for j = 18 downto 1 {
저[j+1] = 저[j];
저bar[j+1] = 저bar[j];
저idx[j+1] = 저idx[j];
}
k = n + 1;
for j = n + 2 to 고bar[2]-1 {
if l[k] > l[j] then k = j;
}
저[1] = l[k];
저bar[1] = k;
저idx[1] = i - 저bar[1];
}
}
if 미완성사용 == false then {
if 고bar[1] > 저bar[1] then { //고-저-고 순서로 나올 때
for j = 18 downto 1 { //배열값을 순차적으로 바꿔준다
고[j+1] = 고[j];
고bar[j+1] = 고bar[j];
고idx[j+1] = 고idx[j];
}
고[1] = h[n];
고bar[1] = n;
고idx[1] = i - 고bar[1];
고점표시 = 고[1]*1.005;
} //저-고-고 순서로 발생했을때
else if 고[1] <= h[n] then { //이전고점보다 높으면
고[1] = h[n]; //고점[1]만 바꿔준다. 저-고 순서 유지
고bar[1] = n;
고idx[1] = i -고bar[1];
고점표시 = 고[1]*1.005;
}
}
}
#---------------------------------------------------------#
# 전저점(trough) 계산
#---------------------------------------------------------#
//Lowest(L,2)[3] >= L[2] && L[2] < Lowest(L,2)
if Lowest(L,n)[n+1] >= L[n] and L[n] < Lowest(L,n) then {
if 미완성사용 == true then {
for j = 18 downto 1 {
저[j+1] = 저[j];
저bar[j+1] = 저bar[j];
저idx[j+1] = 저idx[j];
}
저[1] = l[n];
저bar[1] = n;
저idx[1] = i - 저bar[1];
저점표시 = 저[1]*0.995;
if 고bar[1] > 저bar[2] then {
for j = 18 downto 1 {
고[j+1] = 고[j];
고bar[j+1] = 고bar[j];
고idx[j+1] = 고idx[j];
}
k = n + 1;
for j = n + 2 to 저bar[2]-1 {
if h[k] < h[j] then k = j;
}
고[1] = h[k];
고bar[1] = k;
고idx[1] = i - 고bar[1];
}
}
if 미완성사용 == false then {
if 저bar[1] > 고bar[1] then {
for j = 18 downto 1 {
저[j+1] = 저[j];
저bar[j+1] = 저bar[j];
저idx[j+1] = 저idx[j];
}
저[1] = l[n];
저bar[1] = n;
저idx[1] = i - 저bar[1];
저점표시 = 저[1]*0.995;
}
else if 저[1] >= l[n] then {
저[1] = l[n];
저bar[1] = n;
저idx[1] = i - 저bar[1];
저점표시 = 저[1]*0.995;
}
}
}
#---------------------------------------------------------#
# 변곡점의 점 표시
#---------------------------------------------------------#
if 고점표시 > h[n] then plot1(고점표시,"전고점",RED); //점그래프
if 저점표시 < l[n] then plot2(저점표시,"전저점",BLUE); //점그래프
#---------------------------------------------------------#
# 파동선 표시
#---------------------------------------------------------#
if 고bar[1]==n and 고[1] > 0 then plot3(고[1]); //선그래프
if 저bar[1]==n and 저[1] > 0 then plot3(저[1]); //선그래프
if 저bar[1]==n and 저[1] > 0 then plot4(저[1]); //선그래프
if 고bar[1]==n and 고[1] > 0 then plot4(고[1]); //선그래프
답변 1
예스스탁 예스스탁 답변
2009-04-21 14:13:42
안녕하세요
예스스탁입니다.
input:n(5),미완성사용(true);
var:j(0),k(0),고점표시(0),저점표시(0);
array:고[20](0),저[20](0),고bar[20](0),저bar[20](0),
고idx[20](0),저idx[20](0);
#=========================================================#
# 초기처리 (initialize routine)
#=========================================================#
# index()와 마찬가지로 1봉이 바뀔 때마다 1씩 증가
#---------------------------------------------------------#
for j = 1 to 19 {
저bar[j] = 저bar[j] + 1;
고bar[j] = 고bar[j] + 1;
고idx[j] = index - 고bar[j];
저idx[j] = index - 저bar[j];
}
고점표시=(o[n]+c[n])/2;
저점표시=(o[n]+c[n])/2;
#=========================================================#
# 주처리 (Main Routine) 파동선 계산
#=========================================================#
# 전고점(peak) 계산
#---------------------------------------------------------#
//Highest(H,2)[3] <= H[2] && H[2] > Highest(H,2)
if Highest(H,n)[n+1] <= H[n] and H[n] > Highest(H,n) then {
if 미완성사용 == true then {
for j = 18 downto 1 { //배열값을 순차적으로 바꿔준다
고[j+1] = 고[j];
고bar[j+1] = 고bar[j];
고idx[j+1] = 고idx[j];
}
고[1] = h[n];
고bar[1] = n;
고idx[1] = index - 고bar[1];
고점표시 = 고[1]*1.005;
if 저bar[1] > 고bar[2] then {
for j = 18 downto 1 {
저[j+1] = 저[j];
저bar[j+1] = 저bar[j];
저idx[j+1] = 저idx[j];
}
k = n + 1;
for j = n + 2 to 고bar[2]-1 {
if l[k] > l[j] then k = j;
}
저[1] = l[k];
저bar[1] = k;
저idx[1] = index - 저bar[1];
}
}
if 미완성사용 == false then {
if 고bar[1] > 저bar[1] then { //고-저-고 순서로 나올 때
for j = 18 downto 1 { //배열값을 순차적으로 바꿔준다
고[j+1] = 고[j];
고bar[j+1] = 고bar[j];
고idx[j+1] = 고idx[j];
}
고[1] = h[n];
고bar[1] = n;
고idx[1] = index - 고bar[1];
고점표시 = 고[1]*1.005;
} //저-고-고 순서로 발생했을때
else if 고[1] <= h[n] then { //이전고점보다 높으면
고[1] = h[n]; //고점[1]만 바꿔준다. 저-고 순서 유지
고bar[1] = n;
고idx[1] = index -고bar[1];
고점표시 = 고[1]*1.005;
}
}
}
#---------------------------------------------------------#
# 전저점(trough) 계산
#---------------------------------------------------------#
//Lowest(L,2)[3] >= L[2] && L[2] < Lowest(L,2)
if Lowest(L,n)[n+1] >= L[n] and L[n] < Lowest(L,n) then {
if 미완성사용 == true then {
for j = 18 downto 1 {
저[j+1] = 저[j];
저bar[j+1] = 저bar[j];
저idx[j+1] = 저idx[j];
}
저[1] = l[n];
저bar[1] = n;
저idx[1] = index - 저bar[1];
저점표시 = 저[1]*0.995;
if 고bar[1] > 저bar[2] then {
for j = 18 downto 1 {
고[j+1] = 고[j];
고bar[j+1] = 고bar[j];
고idx[j+1] = 고idx[j];
}
k = n + 1;
for j = n + 2 to 저bar[2]-1 {
if h[k] < h[j] then k = j;
}
고[1] = h[k];
고bar[1] = k;
고idx[1] = index - 고bar[1];
}
}
if 미완성사용 == false then {
if 저bar[1] > 고bar[1] then {
for j = 18 downto 1 {
저[j+1] = 저[j];
저bar[j+1] = 저bar[j];
저idx[j+1] = 저idx[j];
}
저[1] = l[n];
저bar[1] = n;
저idx[1] = index - 저bar[1];
저점표시 = 저[1]*0.995;
}
else if 저[1] >= l[n] then {
저[1] = l[n];
저bar[1] = n;
저idx[1] = index - 저bar[1];
저점표시 = 저[1]*0.995;
}
}
}
#---------------------------------------------------------#
# 변곡점의 점 표시
#---------------------------------------------------------#
if 고점표시 > h[n] then plot1(고점표시,"전고점",RED); //점그래프
if 저점표시 < l[n] then plot2(저점표시,"전저점",BLUE); //점그래프
#---------------------------------------------------------#
# 파동선 표시
#---------------------------------------------------------#
if 고bar[1]==n and 고[1] > 0 then plot3(고[1]); //선그래프
if 저bar[1]==n and 저[1] > 0 then plot3(저[1]); //선그래프
if 저bar[1]==n and 저[1] > 0 then plot4(저[1]); //선그래프
if 고bar[1]==n and 고[1] > 0 then plot4(고[1]); //선그래프
즐거운 하루되세요
> 루시 님이 쓴 글입니다.
> 제목 : 고점 저점 표시...
> 예전에 수식지왕님께서 올려 주신 지표인데, 3.1에 적용하니까 'i'가 선언되어 있지 않다고 오류가 생기네요.
수정 좀 부탁드립니다.^^
/* Swing 파동선.yin */
input:n(5),미완성사용(true);
var:j(0),k(0),고점표시(0),저점표시(0);
array:고[20](0),저[20](0),고bar[20](0),저bar[20](0),
고idx[20](0),저idx[20](0);
#=========================================================#
# 초기처리 (initialize routine)
#=========================================================#
# index()와 마찬가지로 1봉이 바뀔 때마다 1씩 증가
#---------------------------------------------------------#
for j = 1 to 19 {
저bar[j] = 저bar[j] + 1;
고bar[j] = 고bar[j] + 1;
고idx[j] = i - 고bar[j];
저idx[j] = i - 저bar[j];
}
고점표시=(o[n]+c[n])/2;
저점표시=(o[n]+c[n])/2;
#=========================================================#
# 주처리 (Main Routine) 파동선 계산
#=========================================================#
# 전고점(peak) 계산
#---------------------------------------------------------#
//Highest(H,2)[3] <= H[2] && H[2] > Highest(H,2)
if Highest(H,n)[n+1] <= H[n] and H[n] > Highest(H,n) then {
if 미완성사용 == true then {
for j = 18 downto 1 { //배열값을 순차적으로 바꿔준다
고[j+1] = 고[j];
고bar[j+1] = 고bar[j];
고idx[j+1] = 고idx[j];
}
고[1] = h[n];
고bar[1] = n;
고idx[1] = i - 고bar[1];
고점표시 = 고[1]*1.005;
if 저bar[1] > 고bar[2] then {
for j = 18 downto 1 {
저[j+1] = 저[j];
저bar[j+1] = 저bar[j];
저idx[j+1] = 저idx[j];
}
k = n + 1;
for j = n + 2 to 고bar[2]-1 {
if l[k] > l[j] then k = j;
}
저[1] = l[k];
저bar[1] = k;
저idx[1] = i - 저bar[1];
}
}
if 미완성사용 == false then {
if 고bar[1] > 저bar[1] then { //고-저-고 순서로 나올 때
for j = 18 downto 1 { //배열값을 순차적으로 바꿔준다
고[j+1] = 고[j];
고bar[j+1] = 고bar[j];
고idx[j+1] = 고idx[j];
}
고[1] = h[n];
고bar[1] = n;
고idx[1] = i - 고bar[1];
고점표시 = 고[1]*1.005;
} //저-고-고 순서로 발생했을때
else if 고[1] <= h[n] then { //이전고점보다 높으면
고[1] = h[n]; //고점[1]만 바꿔준다. 저-고 순서 유지
고bar[1] = n;
고idx[1] = i -고bar[1];
고점표시 = 고[1]*1.005;
}
}
}
#---------------------------------------------------------#
# 전저점(trough) 계산
#---------------------------------------------------------#
//Lowest(L,2)[3] >= L[2] && L[2] < Lowest(L,2)
if Lowest(L,n)[n+1] >= L[n] and L[n] < Lowest(L,n) then {
if 미완성사용 == true then {
for j = 18 downto 1 {
저[j+1] = 저[j];
저bar[j+1] = 저bar[j];
저idx[j+1] = 저idx[j];
}
저[1] = l[n];
저bar[1] = n;
저idx[1] = i - 저bar[1];
저점표시 = 저[1]*0.995;
if 고bar[1] > 저bar[2] then {
for j = 18 downto 1 {
고[j+1] = 고[j];
고bar[j+1] = 고bar[j];
고idx[j+1] = 고idx[j];
}
k = n + 1;
for j = n + 2 to 저bar[2]-1 {
if h[k] < h[j] then k = j;
}
고[1] = h[k];
고bar[1] = k;
고idx[1] = i - 고bar[1];
}
}
if 미완성사용 == false then {
if 저bar[1] > 고bar[1] then {
for j = 18 downto 1 {
저[j+1] = 저[j];
저bar[j+1] = 저bar[j];
저idx[j+1] = 저idx[j];
}
저[1] = l[n];
저bar[1] = n;
저idx[1] = i - 저bar[1];
저점표시 = 저[1]*0.995;
}
else if 저[1] >= l[n] then {
저[1] = l[n];
저bar[1] = n;
저idx[1] = i - 저bar[1];
저점표시 = 저[1]*0.995;
}
}
}
#---------------------------------------------------------#
# 변곡점의 점 표시
#---------------------------------------------------------#
if 고점표시 > h[n] then plot1(고점표시,"전고점",RED); //점그래프
if 저점표시 < l[n] then plot2(저점표시,"전저점",BLUE); //점그래프
#---------------------------------------------------------#
# 파동선 표시
#---------------------------------------------------------#
if 고bar[1]==n and 고[1] > 0 then plot3(고[1]); //선그래프
if 저bar[1]==n and 저[1] > 0 then plot3(저[1]); //선그래프
if 저bar[1]==n and 저[1] > 0 then plot4(저[1]); //선그래프
if 고bar[1]==n and 고[1] > 0 then plot4(고[1]); //선그래프
다음글
이전글