커뮤니티
지표식 수정부탁드립니다.
2015-01-21 22:25:05
206
글번호 82482
수식지왕님 블로그에서 얻은 지표식인데요, 국내선물시간에 맞춰서 만드신거 같아요
해외선물에서도 사용할수있게 수정부탁드리고 어떤부분을 수정하는건지 설명좀 부탁드립니다.
왜냐하면 해외선물은 서머타임때문에 한시간씩 옮기고 하니 그때 스스로 바꿀수있었으면 좋겠습니다.
input:renkoSize(0.5),p1(12),p2(26),p3(9);
var:j(0),k(0),renkoCnt(0),gubun(0),filename("renko2.txt"),printOK(False),
sum(0),ema1_OK(false),ema2_OK(false),sig_OK(False);
array:OO[50](0),HH[50](0),LL[50](0),CC[50](0),ma1[50](0),ma2[50](0),
ema1[50](0),ema2[50](0),macdVal[50](0),macdSig[50](0);
If DayIndex == 0 Then { //break on session에 해당, 즉 일자가 바뀌면 새로 계산
gubun = 0; //방향을 초기화한다. 이후 형성되는 가격에 의해 방향이 계산
For j = 49 DownTo 1 { //금일 시가봉을 신규 추가
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
ema1[j] = ema1[j-1];
ema2[j] = ema2[j-1];
macdVal[j] = macdVal[j-1];
macdSig[j] = macdSig[j-1];
}
OO[0] = C; //분봉의 종가를 기반으로 계산하기 때문에 당일 시초가 아니다
HH[0] = C;
LL[0] = C;
CC[0] = C;
}
Else {
If gubun == 0 and CC[0] > 0 Then { //일 첫봉이 완성되지 않은 시점
If OO[0] - renkoSize >= C Then {
gubun = -1;
CC[0] = OO[0] - renkoSize;
HH[0] = OO[0];
LL[0] = CC[0];
//지수이평을 계산할 수 있을 만큼 렌코가 만들어진 이후 계산 시작
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
j = 0;
if printOK then print(filename,
"1=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
Else If OO[0] + renkoSize <= C Then {
gubun = 1;
CC[0] = OO[0] + renkoSize;
HH[0] = CC[0];
LL[0] = OO[0];
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
j = 0;
if printOK then print(filename,
"2=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
If LL[0] - renkoSize >= C Then {
gubun = -1;
renkoCnt = Int(Round((LL[0]-C)/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
if ema1_OK then ema1[j] = ema1[j-renkoCnt];
if ema2_OK then ema2[j] = ema2[j-renkoCnt];
if ema2_OK then macdVal[j] = macdVal[j-renkoCnt];
if sig_OK then macdSig[j] = macdSig[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = LL[j+1];
CC[j] = LL[j+1] - renkoSize;
HH[j] = OO[j];
LL[j] = CC[j];
if ema1_OK then ema1[j] = (CC[j]-ema1[j+1])*(2/(p1+1))+ema1[j+1];
if ema2_OK then ema2[j] = (CC[j]-ema2[j+1])*(2/(p2+1))+ema2[j+1];
if ema2_OK then macdVal[j] = ema1[j] - ema2[j];
if sig_OK then macdSig[j] = (macdVal[j] - macdSig[j+1])*(2/(P3+1))+macdSig[j+1];
if printOK then print(filename,
"3=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If HH[0] + renkoSize <= C Then {
gubun = 1;
renkoCnt = Int(Round((C-HH[0])/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
ema1[j] = ema1[j-renkoCnt];
ema2[j] = ema2[j-renkoCnt];
macdVal[j] = macdVal[j-renkoCnt];
macdSig[j] = macdSig[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = HH[j+1];
CC[j] = HH[j+1] + renkoSize;
HH[j] = CC[j];
LL[j] = OO[j];
if ema1_OK then ema1[j] = (CC[j]-ema1[j+1])*(2/(p1+1))+ema1[j+1];
if ema2_OK then ema2[j] = (CC[j]-ema2[j+1])*(2/(p2+1))+ema2[j+1];
if ema2_OK then macdVal[j] = ema1[j] - ema2[j];
if sig_OK then macdSig[j] = (macdVal[j] - macdSig[j+1])*(2/(P3+1))+macdSig[j+1];
if printOK then print(filename,
"4=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If Time >= 151500 Then { //당일 종가봉에서
For j = 49 DownTo 1 {
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
ema1[j] = ema1[j-1];
ema2[j] = ema2[j-1];
macdVal[j] = macdVal[j-1];
macdSig[j] = macdSig[j-1];
}
If LL[1] > C Then { //종가가 이전 봉보다 아래 형성
OO[0] = LL[1];
CC[0] = C;
HH[0] = OO[0];
LL[0] = CC[0];
} Else If HH[1] < C Then { //종가가 이전 봉보다 위에 형성
OO[0] = HH[1];
CC[0] = C;
HH[0] = CC[0];
LL[0] = OO[0];
} Else { //종가가 이전 봉의 중간에 형성
OO[0] = C;
CC[0] = C;
HH[0] = C;
LL[0] = C;
}
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
j = 0; //마지막 1봉만 출력
if printOK then print(filename,
"5=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
if ema1_OK == False and CC[p1] > 0 then { //지수이평 계산 가능할 때까지 대기
sum = 0;
for j = 0 to p1 - 1 {
sum = sum + CC[j];
}
ema1[0] = sum/p1; //처음 값은 단순이평값으로
ema1_OK = True; //다음 봉부터 지수이평 계산되도록 설정
}
if ema2_OK == False and CC[p2] > 0 then {
sum = 0;
for j = 0 to p2 - 1 {
sum = sum + CC[j];
}
ema2[0] = sum/p2;
ema2_OK = True;
}
if sig_OK == False and CC[P2+p3] > 0 then {
sum = 0;
for j = 0 to p3 - 1 {
sum = sum + macdVal[j];
}
macdSig[0] = sum/p3;
sig_OK = True;
}
Plot1(macdVal[0],"macd");
Plot2(macdSig[0],"macd signal");
답변 1
예스스탁 예스스탁 답변
2015-01-22 13:49:22
안녕하세요
예스스탁입니다.
해당식이 국내선물 기준으로
해당 수식에서 수정될 부분은 2가지 입니다.
모두 시간과 관계있습니다.
8번줄에 dayindex == 0 는 0시를 기준으로 봉번호가 1씩 증가합니다.
해당부분 bdate != bdate[1]로 변경하시면 됩니다.
위와 같이 표현하시면 섬머타임 관계없이 영업일이 변경되면 값을 초기화 합니다.
114번 줄에 time >= 151500는 해당 종목의 마지막 거래시간입니다.
해당 부분은 사용자분께서 차트에서 마지막봉의 시간 확인하시고
지정해 주셔야 합니다.
예를 들어 5분봉이고 기준시간은 한국시간이고 유로fx이면
마지막봉 시간이 6시55분이므로
stime == 065500 으로 지정해 주시면 됩니다.
아래는 수정한 식입니다.
input:renkoSize(0.5),p1(12),p2(26),p3(9);
var:j(0),k(0),renkoCnt(0),gubun(0),filename("renko2.txt"),printOK(False),
sum(0),ema1_OK(false),ema2_OK(false),sig_OK(False);
array:OO[50](0),HH[50](0),LL[50](0),CC[50](0),ma1[50](0),ma2[50](0),
ema1[50](0),ema2[50](0),macdVal[50](0),macdSig[50](0);
If bdate != bdate[1] Then { //break on session에 해당, 즉 일자가 바뀌면 새로 계산
gubun = 0; //방향을 초기화한다. 이후 형성되는 가격에 의해 방향이 계산
For j = 49 DownTo 1 { //금일 시가봉을 신규 추가
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
ema1[j] = ema1[j-1];
ema2[j] = ema2[j-1];
macdVal[j] = macdVal[j-1];
macdSig[j] = macdSig[j-1];
}
OO[0] = C; //분봉의 종가를 기반으로 계산하기 때문에 당일 시초가 아니다
HH[0] = C;
LL[0] = C;
CC[0] = C;
}
Else {
If gubun == 0 and CC[0] > 0 Then { //일 첫봉이 완성되지 않은 시점
If OO[0] - renkoSize >= C Then {
gubun = -1;
CC[0] = OO[0] - renkoSize;
HH[0] = OO[0];
LL[0] = CC[0];
//지수이평을 계산할 수 있을 만큼 렌코가 만들어진 이후 계산 시작
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
j = 0;
if printOK then print(filename,
"1=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
Else If OO[0] + renkoSize <= C Then {
gubun = 1;
CC[0] = OO[0] + renkoSize;
HH[0] = CC[0];
LL[0] = OO[0];
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
j = 0;
if printOK then print(filename,
"2=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
If LL[0] - renkoSize >= C Then {
gubun = -1;
renkoCnt = Int(Round((LL[0]-C)/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
if ema1_OK then ema1[j] = ema1[j-renkoCnt];
if ema2_OK then ema2[j] = ema2[j-renkoCnt];
if ema2_OK then macdVal[j] = macdVal[j-renkoCnt];
if sig_OK then macdSig[j] = macdSig[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = LL[j+1];
CC[j] = LL[j+1] - renkoSize;
HH[j] = OO[j];
LL[j] = CC[j];
if ema1_OK then ema1[j] = (CC[j]-ema1[j+1])*(2/(p1+1))+ema1[j+1];
if ema2_OK then ema2[j] = (CC[j]-ema2[j+1])*(2/(p2+1))+ema2[j+1];
if ema2_OK then macdVal[j] = ema1[j] - ema2[j];
if sig_OK then macdSig[j] = (macdVal[j] - macdSig[j+1])*(2/(P3+1))+macdSig[j+1];
if printOK then print(filename,
"3=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If HH[0] + renkoSize <= C Then {
gubun = 1;
renkoCnt = Int(Round((C-HH[0])/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
ema1[j] = ema1[j-renkoCnt];
ema2[j] = ema2[j-renkoCnt];
macdVal[j] = macdVal[j-renkoCnt];
macdSig[j] = macdSig[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = HH[j+1];
CC[j] = HH[j+1] + renkoSize;
HH[j] = CC[j];
LL[j] = OO[j];
if ema1_OK then ema1[j] = (CC[j]-ema1[j+1])*(2/(p1+1))+ema1[j+1];
if ema2_OK then ema2[j] = (CC[j]-ema2[j+1])*(2/(p2+1))+ema2[j+1];
if ema2_OK then macdVal[j] = ema1[j] - ema2[j];
if sig_OK then macdSig[j] = (macdVal[j] - macdSig[j+1])*(2/(P3+1))+macdSig[j+1];
if printOK then print(filename,
"4=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If stime == 65500 Then { //당일 종가봉에서
For j = 49 DownTo 1 {
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
ema1[j] = ema1[j-1];
ema2[j] = ema2[j-1];
macdVal[j] = macdVal[j-1];
macdSig[j] = macdSig[j-1];
}
If LL[1] > C Then { //종가가 이전 봉보다 아래 형성
OO[0] = LL[1];
CC[0] = C;
HH[0] = OO[0];
LL[0] = CC[0];
} Else If HH[1] < C Then { //종가가 이전 봉보다 위에 형성
OO[0] = HH[1];
CC[0] = C;
HH[0] = CC[0];
LL[0] = OO[0];
} Else { //종가가 이전 봉의 중간에 형성
OO[0] = C;
CC[0] = C;
HH[0] = C;
LL[0] = C;
}
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
j = 0; //마지막 1봉만 출력
if printOK then print(filename,
"5=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
if ema1_OK == False and CC[p1] > 0 then { //지수이평 계산 가능할 때까지 대기
sum = 0;
for j = 0 to p1 - 1 {
sum = sum + CC[j];
}
ema1[0] = sum/p1; //처음 값은 단순이평값으로
ema1_OK = True; //다음 봉부터 지수이평 계산되도록 설정
}
if ema2_OK == False and CC[p2] > 0 then {
sum = 0;
for j = 0 to p2 - 1 {
sum = sum + CC[j];
}
ema2[0] = sum/p2;
ema2_OK = True;
}
if sig_OK == False and CC[P2+p3] > 0 then {
sum = 0;
for j = 0 to p3 - 1 {
sum = sum + macdVal[j];
}
macdSig[0] = sum/p3;
sig_OK = True;
}
Plot1(macdVal[0],"macd");
Plot2(macdSig[0],"macd signal");
즐거운 하루되세요
> 바쁜후니 님이 쓴 글입니다.
> 제목 : 지표식 수정부탁드립니다.
> 수식지왕님 블로그에서 얻은 지표식인데요, 국내선물시간에 맞춰서 만드신거 같아요
해외선물에서도 사용할수있게 수정부탁드리고 어떤부분을 수정하는건지 설명좀 부탁드립니다.
왜냐하면 해외선물은 서머타임때문에 한시간씩 옮기고 하니 그때 스스로 바꿀수있었으면 좋겠습니다.
input:renkoSize(0.5),p1(12),p2(26),p3(9);
var:j(0),k(0),renkoCnt(0),gubun(0),filename("renko2.txt"),printOK(False),
sum(0),ema1_OK(false),ema2_OK(false),sig_OK(False);
array:OO[50](0),HH[50](0),LL[50](0),CC[50](0),ma1[50](0),ma2[50](0),
ema1[50](0),ema2[50](0),macdVal[50](0),macdSig[50](0);
If DayIndex == 0 Then { //break on session에 해당, 즉 일자가 바뀌면 새로 계산
gubun = 0; //방향을 초기화한다. 이후 형성되는 가격에 의해 방향이 계산
For j = 49 DownTo 1 { //금일 시가봉을 신규 추가
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
ema1[j] = ema1[j-1];
ema2[j] = ema2[j-1];
macdVal[j] = macdVal[j-1];
macdSig[j] = macdSig[j-1];
}
OO[0] = C; //분봉의 종가를 기반으로 계산하기 때문에 당일 시초가 아니다
HH[0] = C;
LL[0] = C;
CC[0] = C;
}
Else {
If gubun == 0 and CC[0] > 0 Then { //일 첫봉이 완성되지 않은 시점
If OO[0] - renkoSize >= C Then {
gubun = -1;
CC[0] = OO[0] - renkoSize;
HH[0] = OO[0];
LL[0] = CC[0];
//지수이평을 계산할 수 있을 만큼 렌코가 만들어진 이후 계산 시작
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
j = 0;
if printOK then print(filename,
"1=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
Else If OO[0] + renkoSize <= C Then {
gubun = 1;
CC[0] = OO[0] + renkoSize;
HH[0] = CC[0];
LL[0] = OO[0];
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
j = 0;
if printOK then print(filename,
"2=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
If LL[0] - renkoSize >= C Then {
gubun = -1;
renkoCnt = Int(Round((LL[0]-C)/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
if ema1_OK then ema1[j] = ema1[j-renkoCnt];
if ema2_OK then ema2[j] = ema2[j-renkoCnt];
if ema2_OK then macdVal[j] = macdVal[j-renkoCnt];
if sig_OK then macdSig[j] = macdSig[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = LL[j+1];
CC[j] = LL[j+1] - renkoSize;
HH[j] = OO[j];
LL[j] = CC[j];
if ema1_OK then ema1[j] = (CC[j]-ema1[j+1])*(2/(p1+1))+ema1[j+1];
if ema2_OK then ema2[j] = (CC[j]-ema2[j+1])*(2/(p2+1))+ema2[j+1];
if ema2_OK then macdVal[j] = ema1[j] - ema2[j];
if sig_OK then macdSig[j] = (macdVal[j] - macdSig[j+1])*(2/(P3+1))+macdSig[j+1];
if printOK then print(filename,
"3=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If HH[0] + renkoSize <= C Then {
gubun = 1;
renkoCnt = Int(Round((C-HH[0])/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
ema1[j] = ema1[j-renkoCnt];
ema2[j] = ema2[j-renkoCnt];
macdVal[j] = macdVal[j-renkoCnt];
macdSig[j] = macdSig[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = HH[j+1];
CC[j] = HH[j+1] + renkoSize;
HH[j] = CC[j];
LL[j] = OO[j];
if ema1_OK then ema1[j] = (CC[j]-ema1[j+1])*(2/(p1+1))+ema1[j+1];
if ema2_OK then ema2[j] = (CC[j]-ema2[j+1])*(2/(p2+1))+ema2[j+1];
if ema2_OK then macdVal[j] = ema1[j] - ema2[j];
if sig_OK then macdSig[j] = (macdVal[j] - macdSig[j+1])*(2/(P3+1))+macdSig[j+1];
if printOK then print(filename,
"4=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If Time >= 151500 Then { //당일 종가봉에서
For j = 49 DownTo 1 {
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
ema1[j] = ema1[j-1];
ema2[j] = ema2[j-1];
macdVal[j] = macdVal[j-1];
macdSig[j] = macdSig[j-1];
}
If LL[1] > C Then { //종가가 이전 봉보다 아래 형성
OO[0] = LL[1];
CC[0] = C;
HH[0] = OO[0];
LL[0] = CC[0];
} Else If HH[1] < C Then { //종가가 이전 봉보다 위에 형성
OO[0] = HH[1];
CC[0] = C;
HH[0] = CC[0];
LL[0] = OO[0];
} Else { //종가가 이전 봉의 중간에 형성
OO[0] = C;
CC[0] = C;
HH[0] = C;
LL[0] = C;
}
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
j = 0; //마지막 1봉만 출력
if printOK then print(filename,
"5=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
if ema1_OK == False and CC[p1] > 0 then { //지수이평 계산 가능할 때까지 대기
sum = 0;
for j = 0 to p1 - 1 {
sum = sum + CC[j];
}
ema1[0] = sum/p1; //처음 값은 단순이평값으로
ema1_OK = True; //다음 봉부터 지수이평 계산되도록 설정
}
if ema2_OK == False and CC[p2] > 0 then {
sum = 0;
for j = 0 to p2 - 1 {
sum = sum + CC[j];
}
ema2[0] = sum/p2;
ema2_OK = True;
}
if sig_OK == False and CC[P2+p3] > 0 then {
sum = 0;
for j = 0 to p3 - 1 {
sum = sum + macdVal[j];
}
macdSig[0] = sum/p3;
sig_OK = True;
}
Plot1(macdVal[0],"macd");
Plot2(macdSig[0],"macd signal");
다음글