답변완료
문의드립니다
Input:전환율(0.5),선두께(4),선색(green); //전환율 또는 변동률
Var:j(0),upTr(100),dnTr(-100),upRate(0),dnRate(0),trnd(0),
date11(0),date12(0),time11(0),time12(0),TL1(0),
date21(0),date22(0),time21(0),time22(0),TL2(0);
Array:hiVal[2](0),loVal[2](0),hiBar[2](0),loBar[2](0);
upRate = 1 + (전환율/100); //상승률
dnRate = 1 - (전환율/100); //하락률
loBar[1] = loBar[1] + 1; //전저점의 위치. 현재 봉으로부터 떨어져 있는 거리
hiBar[1] = hiBar[1] + 1; //전고점의 위치
if DayIndex == 0 then {
if trnd == upTr then {
date11 = date[loBar[1]]; //추세선 시작일
time11 = stime[loBar[1]]; //추세선 시작시간
Value11 = loVal[1]; //추세선 시작가격
}
else {
date11 = date[hiBar[1]]; //추세선 시작일
time11 = stime[hiBar[1]]; //추세선 시작시간
Value11 = hiVal[1]; //추세선 시작가격
}
date12 = date[1]; //추세선 종료일
time12 = stime[1]; //추세선 종료시간
Value12 = C[1]; //추세선 종료가격
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12); //TL_New는 신규 추세선을 그려주는 함수
TL_SetSize(TL1,선두께);
TL_SetColor(TL1,선색);
hiVal[1] = O;
hiBar[1] = 0;
loVal[1] = O;
loBar[1] = 0;
hiVal[0] = C;
hiBar[0] = 0;
loVal[0] = C;
loBar[0] = 0;
trnd = 0;
if hiVal[1] * dnRate > C then trnd = dnTr;
else if loVal[1] * upRate < C then trnd = upTr;
}
if hiVal[0] <= C then {
hiVal[0] = C;
hiBar[0] = 0;
}
else {
hiBar[0] = hiBar[0] + 1;
}
if loVal[0] >= C then {
loVal[0] = C;
loBar[0] = 0;
}
else {
loBar[0] = loBar[0] + 1;
}
if trnd != dnTr && hiVal[0] * dnRate > C then trnd = dnTr;
else if trnd != upTr && loVal[0] * upRate < C then trnd = upTr;
if trnd[1] != dnTr and trnd == dnTr then { //상승추세였다가 하락추세로 바뀌었다면
hiVal[1] = hiVal[0]; //새로운 전고점에 현재 고점을 대입
hiBar[1] = hiBar[0];
hiVal[0] = C; //전고점이 확정되었으므로 전고점 이후 최고가는 현재봉의 고가
hiBar[0] = 0;
loVal[0] = C;
loBar[0] = 0;
//전고점이 새로 생긴 것이니까 전저점에서 전고점까지 추세선을 긋는다.
date11 = date[loBar[1]]; //추세선 시작일. 전저점의 날짜
time11 = stime[loBar[1]]; //추세선 시작시간
Value11 = loVal[1]; //추세선 시작가격
date12 = date[hiBar[1]]; //추세선 종료일. 전고점의 날짜
time12 = stime[hiBar[1]]; //추세선 종료시간
Value12 = hiVal[1]; //추세선 종료가격
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
//TL_New는 신규 추세선을 그려주는 함수
}
if trnd[1] == dnTr and trnd == dnTr and //추세는 하락 상태에서 바뀌지 않았는데
hiVal[1] < hiVal[0] and //전고점보다 더 높은 고점이 출현했다면
hiVal[0] * dnRate > C then {
hiVal[1] = hiVal[0]; //전고점을 현재의 고점으로 바꿔준다.
hiBar[1] = hiBar[0];
hiVal[0] = C;
hiBar[0] = 0;
loVal[0] = C;
loBar[0] = 0;
//전고점이 추가된 게 아니고 바뀐 것이므로 종료일,종료시간,종료가격만 바꿔준다.
date12 = date[hiBar[1]]; //추세선 종료일
time12 = stime[hiBar[1]];
Value12 = hiVal[1];
TL_SetEnd(TL1, date12,time12,Value12);
//TL_SetEnd는 기존추세선의 종료지점을 변경해주는 추세선 함수이다.
//TL_Delete 함수를 써서 직전의 추세선을 지우고 다시 TL_New로 추세선을 추가해도 된다.
}
if trnd[1] != upTr and trnd == upTr then { //추세가 하락에서 상승으로 바뀌었을 경우
loVal[1] = loVal[0];
loBar[1] = loBar[0];
loVal[0] = C;
loBar[0] = 0;
hiVal[0] = C;
hiBar[0] = 0;
date11 = date[hiBar[1]];
time11 = stime[hiBar[1]];
Value11 = hiVal[1];
date12 = date[loBar[1]];
time12 = stime[loBar[1]];
Value12 = loVal[1];
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
}
if trnd[1] == upTr and trnd == upTr and //추세는 상승을 유지하고 있는데
loVal[1] > loVal[0] and //전저점보다 낮은 저가가 출현했다면
loVal[0] * upRate < C then {
loVal[1] = loVal[0]; //직전의 전저점만 바꿔준다.
loBar[1] = loBar[0];
loVal[0] = C;
loBar[0] = 0;
hiVal[0] = C;
hiBar[0] = 0;
date12 = date[loBar[1]];
time12 = stime[loBar[1]];
Value12 = loVal[1];
TL_SetEnd(TL1, date12,time12,Value12);
}
TL_SetSize(TL1,선두께);
TL_SetColor(TL1,선색);
if trnd == upTr then {
date21 = date[loBar[1]]; //추세선 시작일
time21 = stime[loBar[1]]; //추세선 시작시간
Value21 = loVal[1]; //추세선 시작가격
}
else {
date21 = date[hiBar[1]]; //추세선 시작일
time21 = stime[hiBar[1]]; //추세선 시작시간
Value21 = hiVal[1]; //추세선 시작가격
}
date22 = date; //추세선 종료일
time22 = stime; //추세선 종료시간
Value22 = C; //추세선 종료가격
TL_Delete(TL2);
TL2 = TL_New(date21,time21,Value21,date22,time22,Value22);
TL_SetSize(TL2,선두께);
TL_SetColor(TL2,선색);
TL_SetExtRight(TL2,true);
위수식에서 상승선은레드색 하락선은 그린색으로 표현하고십습니다추가 수정부탁드립니다~~미리감사드립니다
2020-07-03
1650
글번호 140362
지표