커뮤니티
문의드립니다
2016-10-03 22:42:39
119
글번호 102438
Input:chRate(0.5); //전환율 또는 변동률
Var:j(0),upTr(100),dnTr(-100),upRate(0),dnRate(0),trnd(0),TL(0),
date11(0),date12(0),time11(0),time12(0),TL1(0),
date21(0),date22(0),time21(0),time22(0),TL2(0),
date31(0),date32(0),time31(0),time32(0),TL3(0);
Array:hiVal[10](0),loVal[10](0),hiBar[10](0),loBar[10](0);
//hiVal[1]은 전고점, hiVal[2]는 전전고점, hiVal[3]은 전전전고점
//hiVal[0]은 변곡점 이후 현재봉까지의 고점. 현재 고점은 진행중이므로 계속 바뀐다.
//loVal[0]은 반대 개념
upRate = 1 + (chRate/100); //상승률
dnRate = 1 - (chRate/100); //하락률
for j = 1 to 9 { //전고,전저점을 9개까지 보관
loBar[j] = loBar[j] + 1; //전저점의 위치. 현재 봉으로부터 떨어져 있는 거리
hiBar[j] = hiBar[j] + 1; //전고점의 위치
}
if hiVal[0] <= H or hiVal[0] == 0 then { //전고,전저점 이후 현재까지의 고점
hiVal[0] = H; //0을 체크한 이유는 초기에 값이 없는 구간이 생기기 때문
hiBar[0] = 0; //현재 고점의 위치가 0이란 것은 현재봉의 고가가 구간 고점이라는 의미
}
else {
hiBar[0] = hiBar[0] + 1; //현재 고점의 위치
}
if loVal[0] >= L or loVal[0] == 0 then { //전고,전저점 이후 현재까지 저점
loVal[0] = L;
loBar[0] = 0;
}
else {
loBar[0] = loBar[0] + 1; //현재 구간 저점의 위치
}
if trnd != dnTr && hiVal[0] > H && hiVal[0] * dnRate > L then trnd = dnTr;
//저가가 고가 대비 변동률보다 밑으로 떨어지면 하락추세로 설정
//단, 현재봉의 고가가 변곡점 이후 최고가이면 상승 추세가 진행중이라고 본다.
//그래서 현재봉의 고가가 hiVal[0]보다 작다는 조건이 추가되었다.
else if trnd != upTr && loVal[0] < L && loVal[0] * upRate < H then trnd = upTr;
//고가가 저가 대비 변동률보다 높으면 상승추세로 설정
if trnd[1] == upTr and trnd == dnTr then { //상승추세였다가 하락추세로 바뀌었다면
for j = 8 downto 1 { //새로운 전고점이 생기는 것이므로
hiVal[j+1] = hiVal[j]; //전고점을 하나씩 뒤로 보낸다.
hiBar[j+1] = hiBar[j]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다.
}
hiVal[1] = hiVal[0]; //새로운 전고점에 현재 고점을 대입
hiBar[1] = hiBar[0];
hiVal[0] = H; //전고점이 확정되었으므로 전고점 이후 최고가는 현재봉의 고가
hiBar[0] = 0;
loVal[0] = L;
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 > L then {
hiVal[1] = hiVal[0]; //전고점을 현재의 고점으로 바꿔준다.
hiBar[1] = hiBar[0];
hiVal[0] = H;
hiBar[0] = 0;
loVal[0] = L;
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] == dnTr and trnd == upTr then { //추세가 하락에서 상승으로 바뀌었을 경우
for j = 8 downto 1 {
//이전저점은 전전저점으로, 전전저점은 전전전저점으로 번호를 부여
loVal[j+1] = loVal[j];
loBar[j+1] = loBar[j];
}
loVal[1] = loVal[0];
loBar[1] = loBar[0];
loVal[0] = L;
loBar[0] = 0;
hiVal[0] = H;
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 < H then {
loVal[1] = loVal[0]; //직전의 전저점만 바꿔준다.
loBar[1] = loBar[0];
loVal[0] = L;
loBar[0] = 0;
hiVal[0] = H;
hiBar[0] = 0;
date12 = date[loBar[1]];
time12 = stime[loBar[1]];
Value12 = loVal[1];
TL_SetEnd(TL1, date12,time12,Value12);
}
if trnd == upTr and loVal[2] > loVal[1] then
TL_SetColor(TL1,BLUE);
else if trnd == dnTr and hiVal[2] < hiVal[1] then
TL_SetColor(TL1,RED);
else
TL_SetColor(TL1,BLACK);
TL_SetSize(TL1,2);
TL_SetColor(TL2,RED);
TL_SetColor(TL3,BLUE);
if var1 <= 0 and Trnd == uptr and Trnd != Trnd[1] Then{
var1 = 1;
value1 = loval[1];
TL1 = Text_New(sdate[lobar[1]],stime[lobar[1]],value1-PriceScale*2,"●");
TL_SetColor(TL,RED);
TL_SetSize(TL,2);
Text_SetStyle(TL1,2,2);
Text_SetColor(TL1,RED);#텍스트 색상
TL= Text_New(sdate[lobar[1]],stime[lobar[1]],L,"상승");
Text_SetColor(TL,RED);#텍스트 색상
}
if var1 >= 0 and Trnd == dntr and Trnd != Trnd[1] then{
var1 = -1;
value1 = hival[1];
TL2 = Text_New(sdate[hibar[1]],stime[hibar[1]],value1+PriceScale*2,"●");
TL_SetColor(TL,BLUE);
TL_SetSize(TL,2);
Text_SetStyle(TL2,2,2);#텍스트 좌우 상하 정렬
Text_SetColor(TL2,BLUE);#텍스트 색상
TL= Text_New(sdate[hibar[1]],stime[hibar[1]],H,"하락");
Text_SetColor(TL,BLUE);#텍스트 색상
}
안녕하세요
위 수식에 일치하는 부분을 신호로 나타내고싶습니다
1. 예시: 위 0.5 에 변수와 0.4 변수가 상승,하락 부분이 일차할경우
매수,매도 신호 발생을 원합니다
외부변수로 조절 가능하게 좀 부탁드립니다
답변 1
예스스탁 예스스탁 답변
2016-10-04 18:07:13
안녕하세요
예스스탁입니다.
Input:chRateA(0.5); //전환율 또는 변동률
Var:jA(0),upTrA(100),dnTrA(-100),upRateA(0),dnRateA(0),trndA(0),TLA(0),
date11A(0),date12A(0),time11A(0),time12A(0),TL1A(0),
date21A(0),date22A(0),time21A(0),time22A(0),TL2A(0),
date31A(0),date32A(0),time31A(0),time32A(0),TL3A(0);
var : val1A(0),val11A(0),val12A(0),v1A(0),v2A(0);
Array:hiValA[10](0),loValA[10](0),hiBarA[10](0),loBarA[10](0);
//hiVal[1]은 전고점, hiVal[2]는 전전고점, hiVal[3]은 전전전고점
//hiVal[0]은 변곡점 이후 현재봉까지의 고점. 현재 고점은 진행중이므로 계속 바뀐다.
//loVal[0]은 반대 개념
upRateA = 1 + (chRateA/100); //상승률
dnRateA = 1 - (chRateA/100); //하락률
for jA = 1 to 9 { //전고,전저점을 9개까지 보관
loBarA[jA] = loBarA[jA] + 1; //전저점의 위치. 현재 봉으로부터 떨어져 있는 거리
hiBarA[jA] = hiBarA[jA] + 1; //전고점의 위치
}
if hiValA[0] <= H or hiValA[0] == 0 then { //전고,전저점 이후 현재까지의 고점
hiValA[0] = H; //0을 체크한 이유는 초기에 값이 없는 구간이 생기기 때문
hiBarA[0] = 0; //현재 고점의 위치가 0이란 것은 현재봉의 고가가 구간 고점이라는 의미
}
else {
hiBarA[0] = hiBarA[0] + 1; //현재 고점의 위치
}
if loValA[0] >= L or loValA[0] == 0 then { //전고,전저점 이후 현재까지 저점
loValA[0] = L;
loBarA[0] = 0;
}
else {
loBarA[0] = loBarA[0] + 1; //현재 구간 저점의 위치
}
if trndA != dnTrA && hiValA[0] > H && hiValA[0] * dnRateA > L then trndA = dnTrA;
//저가가 고가 대비 변동률보다 밑으로 떨어지면 하락추세로 설정
//단, 현재봉의 고가가 변곡점 이후 최고가이면 상승 추세가 진행중이라고 본다.
//그래서 현재봉의 고가가 hiVal[0]보다 작다는 조건이 추가되었다.
else if trndA != upTrA && loValA[0] < L && loValA[0] * upRateA < H then trndA = upTrA;
//고가가 저가 대비 변동률보다 높으면 상승추세로 설정
if trndA[1] == upTrA and trndA == dnTrA then { //상승추세였다가 하락추세로 바뀌었다면
for jA = 8 downto 1 { //새로운 전고점이 생기는 것이므로
hiValA[jA+1] = hiValA[jA]; //전고점을 하나씩 뒤로 보낸다.
hiBarA[jA+1] = hiBarA[jA]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다.
}
hiValA[1] = hiValA[0]; //새로운 전고점에 현재 고점을 대입
hiBarA[1] = hiBarA[0];
hiValA[0] = H; //전고점이 확정되었으므로 전고점 이후 최고가는 현재봉의 고가
hiBarA[0] = 0;
loValA[0] = L;
loBarA[0] = 0;
//전고점이 새로 생긴 것이니까 전저점에서 전고점까지 추세선을 긋는다.
date11A = date[loBarA[1]]; //추세선 시작일. 전저점의 날짜
time11A = stime[loBarA[1]]; //추세선 시작시간
val11A = loValA[1]; //추세선 시작가격
date12A = date[hiBarA[1]]; //추세선 종료일. 전고점의 날짜
time12A = stime[hiBarA[1]]; //추세선 종료시간
val12A = hiValA[1]; //추세선 종료가격
TL1A = TL_New(date11A,time11A,val11A,date12A,time12A,val12A);
//TL_New는 신규 추세선을 그려주는 함수
}
if trndA[1] == dnTrA and trndA == dnTrA and //추세는 하락 상태에서 바뀌지 않았는데
hiValA[1] < hiValA[0] and //전고점보다 더 높은 고점이 출현했다면
hiValA[0] * dnRateA > L then {
hiValA[1] = hiValA[0]; //전고점을 현재의 고점으로 바꿔준다.
hiBarA[1] = hiBarA[0];
hiValA[0] = H;
hiBarA[0] = 0;
loValA[0] = L;
loBarA[0] = 0;
//전고점이 추가된 게 아니고 바뀐 것이므로 종료일,종료시간,종료가격만 바꿔준다.
date12A = date[hiBarA[1]]; //추세선 종료일
time12A = stime[hiBarA[1]];
val12A = hiValA[1];
TL_SetEnd(TL1A, date12A,time12A,val12A);
//TL_SetEnd는 기존추세선의 종료지점을 변경해주는 추세선 함수이다.
//TL_Delete 함수를 써서 직전의 추세선을 지우고 다시 TL_New로 추세선을 추가해도 된다.
}
if trndA[1] == dnTrA and trndA == upTrA then { //추세가 하락에서 상승으로 바뀌었을 경우
for jA = 8 downto 1 {
//이전저점은 전전저점으로, 전전저점은 전전전저점으로 번호를 부여
loValA[jA+1] = loValA[jA];
loBarA[jA+1] = loBarA[jA];
}
loValA[1] = loValA[0];
loBarA[1] = loBarA[0];
loValA[0] = L;
loBarA[0] = 0;
hiValA[0] = H;
hiBarA[0] = 0;
date11A = date[hiBarA[1]]; //전저점이 새로이 생긴 것이므로 시작점은 전고점이 된다.
time11A = stime[hiBarA[1]];
val11A = hiValA[1];
date12A = date[loBarA[1]];
time12A = stime[loBarA[1]];
val12A = loValA[1];
TL1A = TL_New(date11A,time11A,val11A,date12A,time12A,val12A);
}
if trndA[1] == upTrA and trndA == upTrA and //추세는 상승을 유지하고 있는데
loValA[1] > loValA[0] and //전저점보다 낮은 저가가 출현했다면
loValA[0] * upRateA < H then {
loValA[1] = loValA[0]; //직전의 전저점만 바꿔준다.
loBarA[1] = loBarA[0];
loValA[0] = L;
loBarA[0] = 0;
hiValA[0] = H;
hiBarA[0] = 0;
date12A = date[loBarA[1]];
time12A = stime[loBarA[1]];
val12A = loValA[1];
TL_SetEnd(TL1A, date12A,time12A,val12A);
}
if trndA == upTrA and loValA[2] > loValA[1] then
TL_SetColor(TL1A,BLUE);
else if trndA == dnTrA and hiValA[2] < hiValA[1] then
TL_SetColor(TL1A,RED);
else
TL_SetColor(TL1A,BLACK);
TL_SetSize(TL1A,2);
TL_SetColor(TL2A,RED);
TL_SetColor(TL3A,BLUE);
Input:chRateB(0.4); //전환율 또는 변동률
Var:JB(0),upTrB(100),dnTrB(-100),upRateB(0),dnRateB(0),trndB(0),TLB(0),
date11B(0),date12B(0),time11B(0),time12B(0),TL1B(0),
date21B(0),date22B(0),time21B(0),time22B(0),TL2B(0),
date31B(0),date32B(0),time31B(0),time32B(0),TL3B(0);
var : val1B(0),val11B(0),val12B(0),v1B(0),v2B(0);
Array:hiValB[10](0),loValB[10](0),hiBarB[10](0),loBarB[10](0);
//hiVal[1]은 전고점, hiVal[2]는 전전고점, hiVal[3]은 전전전고점
//hiVal[0]은 변곡점 이후 현재봉까지의 고점. 현재 고점은 진행중이므로 계속 바뀐다.
//loVal[0]은 반대 개념
upRateB = 1 + (chRateB/100); //상승률
dnRateB = 1 - (chRateB/100); //하락률
for JB = 1 to 9 { //전고,전저점을 9개까지 보관
loBarB[JB] = loBarB[JB] + 1; //전저점의 위치. 현재 봉으로부터 떨어져 있는 거리
hiBarB[JB] = hiBarB[JB] + 1; //전고점의 위치
}
if hiValB[0] <= H or hiValB[0] == 0 then { //전고,전저점 이후 현재까지의 고점
hiValB[0] = H; //0을 체크한 이유는 초기에 값이 없는 구간이 생기기 때문
hiBarB[0] = 0; //현재 고점의 위치가 0이란 것은 현재봉의 고가가 구간 고점이라는 의미
}
else {
hiBarB[0] = hiBarB[0] + 1; //현재 고점의 위치
}
if loValB[0] >= L or loValB[0] == 0 then { //전고,전저점 이후 현재까지 저점
loValB[0] = L;
loBarB[0] = 0;
}
else {
loBarB[0] = loBarB[0] + 1; //현재 구간 저점의 위치
}
if trndB != dnTrB && hiValB[0] > H && hiValB[0] * dnRateB > L then trndB = dnTrB;
//저가가 고가 대비 변동률보다 밑으로 떨어지면 하락추세로 설정
//단, 현재봉의 고가가 변곡점 이후 최고가이면 상승 추세가 진행중이라고 본다.
//그래서 현재봉의 고가가 hiVal[0]보다 작다는 조건이 추가되었다.
else if trndB != upTrB && loValB[0] < L && loValB[0] * upRateB < H then trndB = upTrB;
//고가가 저가 대비 변동률보다 높으면 상승추세로 설정
if trndB[1] == upTrB and trndB == dnTrB then { //상승추세였다가 하락추세로 바뀌었다면
for JB = 8 downto 1 { //새로운 전고점이 생기는 것이므로
hiValB[JB+1] = hiValB[JB]; //전고점을 하나씩 뒤로 보낸다.
hiBarB[JB+1] = hiBarB[JB]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다.
}
hiValB[1] = hiValB[0]; //새로운 전고점에 현재 고점을 대입
hiBarB[1] = hiBarB[0];
hiValB[0] = H; //전고점이 확정되었으므로 전고점 이후 최고가는 현재봉의 고가
hiBarB[0] = 0;
loValB[0] = L;
loBarB[0] = 0;
//전고점이 새로 생긴 것이니까 전저점에서 전고점까지 추세선을 긋는다.
date11B = date[loBarB[1]]; //추세선 시작일. 전저점의 날짜
time11B = stime[loBarB[1]]; //추세선 시작시간
val11B = loValB[1]; //추세선 시작가격
date12B = date[hiBarB[1]]; //추세선 종료일. 전고점의 날짜
time12B = stime[hiBarB[1]]; //추세선 종료시간
val12B = hiValB[1]; //추세선 종료가격
TL1B = TL_New(date11B,time11B,val11B,date12B,time12B,val12B);
//TL_New는 신규 추세선을 그려주는 함수
}
if trndB[1] == dnTrB and trndB == dnTrB and //추세는 하락 상태에서 바뀌지 않았는데
hiValB[1] < hiValB[0] and //전고점보다 더 높은 고점이 출현했다면
hiValB[0] * dnRateB > L then {
hiValB[1] = hiValB[0]; //전고점을 현재의 고점으로 바꿔준다.
hiBarB[1] = hiBarB[0];
hiValB[0] = H;
hiBarB[0] = 0;
loValB[0] = L;
loBarB[0] = 0;
//전고점이 추가된 게 아니고 바뀐 것이므로 종료일,종료시간,종료가격만 바꿔준다.
date12B = date[hiBarB[1]]; //추세선 종료일
time12B = stime[hiBarB[1]];
val12B = hiValB[1];
TL_SetEnd(TL1B, date12B,time12B,val12B);
//TL_SetEnd는 기존추세선의 종료지점을 변경해주는 추세선 함수이다.
//TL_Delete 함수를 써서 직전의 추세선을 지우고 다시 TL_New로 추세선을 추가해도 된다.
}
if trndB[1] == dnTrB and trndB == upTrB then { //추세가 하락에서 상승으로 바뀌었을 경우
for JB = 8 downto 1 {
//이전저점은 전전저점으로, 전전저점은 전전전저점으로 번호를 부여
loValB[JB+1] = loValB[JB];
loBarB[JB+1] = loBarB[JB];
}
loValB[1] = loValB[0];
loBarB[1] = loBarB[0];
loValB[0] = L;
loBarB[0] = 0;
hiValB[0] = H;
hiBarB[0] = 0;
date11B = date[hiBarB[1]]; //전저점이 새로이 생긴 것이므로 시작점은 전고점이 된다.
time11B = stime[hiBarB[1]];
val11B = hiValB[1];
date12B = date[loBarB[1]];
time12B = stime[loBarB[1]];
val12B = loValB[1];
TL1B = TL_New(date11B,time11B,val11B,date12B,time12B,val12B);
}
if trndB[1] == upTrB and trndB == upTrB and //추세는 상승을 유지하고 있는데
loValB[1] > loValB[0] and //전저점보다 낮은 저가가 출현했다면
loValB[0] * upRateB < H then {
loValB[1] = loValB[0]; //직전의 전저점만 바꿔준다.
loBarB[1] = loBarB[0];
loValB[0] = L;
loBarB[0] = 0;
hiValB[0] = H;
hiBarB[0] = 0;
date12B = date[loBarB[1]];
time12B = stime[loBarB[1]];
val12B = loValB[1];
TL_SetEnd(TL1B, date12B,time12B,val12B);
}
if trndB == upTrB and loValB[2] > loValB[1] then
TL_SetColor(TL1B,BLUE);
else if trndB == dnTrB and hiValB[2] < hiValB[1] then
TL_SetColor(TL1B,RED);
else
TL_SetColor(TL1B,BLACK);
TL_SetSize(TL1B,2);
TL_SetColor(TL2B,RED);
TL_SetColor(TL3B,BLUE);
if v1A <= 0 and TrndA == uptrA and TrndA != TrndA[1] Then{
v1A = 1;
val1A = lovalA[1];
TL1A = Text_New(sdate[lobarA[1]],stime[lobarA[1]],val1A-PriceScale*2,"●");
TL_SetColor(TLA,RED);
TL_SetSize(TLA,2);
Text_SetStyle(TL1A,2,2);
Text_SetColor(TL1A,RED);#텍스트 색상
TLA= Text_New(sdate[lobarA[1]],stime[lobarA[1]],L,"상승");
Text_SetColor(TLA,RED);#텍스트 색상
}
if v1A >= 0 and TrndA == dntrA and TrndA != TrndA[1] then{
v1A = -1;
val1A = hivalA[1];
TL2A = Text_New(sdate[hibarA[1]],stime[hibarA[1]],val1A+PriceScale*2,"●");
TL_SetColor(TLA,BLUE);
TL_SetSize(TLA,2);
Text_SetStyle(TL2A,2,2);#텍스트 좌우 상하 정렬
Text_SetColor(TL2A,BLUE);#텍스트 색상
TLA= Text_New(sdate[hibarA[1]],stime[hibarA[1]],H,"하락");
Text_SetColor(TLA,BLUE);#텍스트 색상
}
if v1B <= 0 and TrndB == uptrB and TrndB != TrndB[1] Then{
v1B = 1;
val1B = lovalB[1];
TL1B = Text_New(sdate[lobarB[1]],stime[lobarB[1]],val1B-PriceScale*4,"●");
TL_SetColor(TLB,RED);
TL_SetSize(TLB,2);
Text_SetStyle(TL1B,2,2);
Text_SetColor(TL1B,RED);#텍스트 색상
TLB= Text_New(sdate[lobarB[1]],stime[lobarB[1]],L,"상승");
Text_SetColor(TLB,RED);#텍스트 색상
}
if v1B >= 0 and TrndB == dntrB and TrndB != TrndB[1] then{
v1B = -1;
val1B = hivalB[1];
TL2B = Text_New(sdate[hibarB[1]],stime[hibarB[1]],val1B+PriceScale*4,"●");
TL_SetColor(TLB,BLUE);
TL_SetSize(TLB,2);
Text_SetStyle(TL2B,2,2);#텍스트 좌우 상하 정렬
Text_SetColor(TL2B,BLUE);#텍스트 색상
TLB= Text_New(sdate[hibarB[1]],stime[hibarB[1]],H,"하락");
Text_SetColor(TLB,BLUE);#텍스트 색상
}
if v1A == 1 and v1A[1] != 1 and
v1B == 1 and v1B[1] != 1 and
lobarB[1] == lobarA[1] Then
buy();
if v1A == -1 and v1A[1] != -1 and
v1B == -1 and v1B[1] != -1 and
hibarA[1] == hibarB[1] Then
sell();
즐거운 하루되세요
> 곽민수 님이 쓴 글입니다.
> 제목 : 문의드립니다
> Input:chRate(0.5); //전환율 또는 변동률
Var:j(0),upTr(100),dnTr(-100),upRate(0),dnRate(0),trnd(0),TL(0),
date11(0),date12(0),time11(0),time12(0),TL1(0),
date21(0),date22(0),time21(0),time22(0),TL2(0),
date31(0),date32(0),time31(0),time32(0),TL3(0);
Array:hiVal[10](0),loVal[10](0),hiBar[10](0),loBar[10](0);
//hiVal[1]은 전고점, hiVal[2]는 전전고점, hiVal[3]은 전전전고점
//hiVal[0]은 변곡점 이후 현재봉까지의 고점. 현재 고점은 진행중이므로 계속 바뀐다.
//loVal[0]은 반대 개념
upRate = 1 + (chRate/100); //상승률
dnRate = 1 - (chRate/100); //하락률
for j = 1 to 9 { //전고,전저점을 9개까지 보관
loBar[j] = loBar[j] + 1; //전저점의 위치. 현재 봉으로부터 떨어져 있는 거리
hiBar[j] = hiBar[j] + 1; //전고점의 위치
}
if hiVal[0] <= H or hiVal[0] == 0 then { //전고,전저점 이후 현재까지의 고점
hiVal[0] = H; //0을 체크한 이유는 초기에 값이 없는 구간이 생기기 때문
hiBar[0] = 0; //현재 고점의 위치가 0이란 것은 현재봉의 고가가 구간 고점이라는 의미
}
else {
hiBar[0] = hiBar[0] + 1; //현재 고점의 위치
}
if loVal[0] >= L or loVal[0] == 0 then { //전고,전저점 이후 현재까지 저점
loVal[0] = L;
loBar[0] = 0;
}
else {
loBar[0] = loBar[0] + 1; //현재 구간 저점의 위치
}
if trnd != dnTr && hiVal[0] > H && hiVal[0] * dnRate > L then trnd = dnTr;
//저가가 고가 대비 변동률보다 밑으로 떨어지면 하락추세로 설정
//단, 현재봉의 고가가 변곡점 이후 최고가이면 상승 추세가 진행중이라고 본다.
//그래서 현재봉의 고가가 hiVal[0]보다 작다는 조건이 추가되었다.
else if trnd != upTr && loVal[0] < L && loVal[0] * upRate < H then trnd = upTr;
//고가가 저가 대비 변동률보다 높으면 상승추세로 설정
if trnd[1] == upTr and trnd == dnTr then { //상승추세였다가 하락추세로 바뀌었다면
for j = 8 downto 1 { //새로운 전고점이 생기는 것이므로
hiVal[j+1] = hiVal[j]; //전고점을 하나씩 뒤로 보낸다.
hiBar[j+1] = hiBar[j]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다.
}
hiVal[1] = hiVal[0]; //새로운 전고점에 현재 고점을 대입
hiBar[1] = hiBar[0];
hiVal[0] = H; //전고점이 확정되었으므로 전고점 이후 최고가는 현재봉의 고가
hiBar[0] = 0;
loVal[0] = L;
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 > L then {
hiVal[1] = hiVal[0]; //전고점을 현재의 고점으로 바꿔준다.
hiBar[1] = hiBar[0];
hiVal[0] = H;
hiBar[0] = 0;
loVal[0] = L;
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] == dnTr and trnd == upTr then { //추세가 하락에서 상승으로 바뀌었을 경우
for j = 8 downto 1 {
//이전저점은 전전저점으로, 전전저점은 전전전저점으로 번호를 부여
loVal[j+1] = loVal[j];
loBar[j+1] = loBar[j];
}
loVal[1] = loVal[0];
loBar[1] = loBar[0];
loVal[0] = L;
loBar[0] = 0;
hiVal[0] = H;
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 < H then {
loVal[1] = loVal[0]; //직전의 전저점만 바꿔준다.
loBar[1] = loBar[0];
loVal[0] = L;
loBar[0] = 0;
hiVal[0] = H;
hiBar[0] = 0;
date12 = date[loBar[1]];
time12 = stime[loBar[1]];
Value12 = loVal[1];
TL_SetEnd(TL1, date12,time12,Value12);
}
if trnd == upTr and loVal[2] > loVal[1] then
TL_SetColor(TL1,BLUE);
else if trnd == dnTr and hiVal[2] < hiVal[1] then
TL_SetColor(TL1,RED);
else
TL_SetColor(TL1,BLACK);
TL_SetSize(TL1,2);
TL_SetColor(TL2,RED);
TL_SetColor(TL3,BLUE);
if var1 <= 0 and Trnd == uptr and Trnd != Trnd[1] Then{
var1 = 1;
value1 = loval[1];
TL1 = Text_New(sdate[lobar[1]],stime[lobar[1]],value1-PriceScale*2,"●");
TL_SetColor(TL,RED);
TL_SetSize(TL,2);
Text_SetStyle(TL1,2,2);
Text_SetColor(TL1,RED);#텍스트 색상
TL= Text_New(sdate[lobar[1]],stime[lobar[1]],L,"상승");
Text_SetColor(TL,RED);#텍스트 색상
}
if var1 >= 0 and Trnd == dntr and Trnd != Trnd[1] then{
var1 = -1;
value1 = hival[1];
TL2 = Text_New(sdate[hibar[1]],stime[hibar[1]],value1+PriceScale*2,"●");
TL_SetColor(TL,BLUE);
TL_SetSize(TL,2);
Text_SetStyle(TL2,2,2);#텍스트 좌우 상하 정렬
Text_SetColor(TL2,BLUE);#텍스트 색상
TL= Text_New(sdate[hibar[1]],stime[hibar[1]],H,"하락");
Text_SetColor(TL,BLUE);#텍스트 색상
}
안녕하세요
위 수식에 일치하는 부분을 신호로 나타내고싶습니다
1. 예시: 위 0.5 에 변수와 0.4 변수가 상승,하락 부분이 일차할경우
매수,매도 신호 발생을 원합니다
외부변수로 조절 가능하게 좀 부탁드립니다