커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4812
글번호 230811
답변완료
지표식 좀 부탁드립니다
안녕하세요. 더운날시에 수고하십니다..
시스템식에서 목표가로 청산되고 난 이후 5번째 봉을 지표로 표시할 수 있는 지표식이 가능한지요..
예를 들어 5일선 골든크로스에 진입해서 1포인트 상승하면 청산하도록 목표가를 설정한 이후 목표가로 청산된 봉 이후 5번째 봉을 나타내는 지표식.
수고하세요..
2015-07-07
119
글번호 88079
답변완료
일목균형표
안녕하세요.
틱챠트와 체결챠트에 일목균형표 1분봉 기준선, 전환선, 구름대 표현 부탁드립니다.
1분봉을 설정 변경할수 있도록 해주세요.
감사합니다.
2015-07-07
170
글번호 88076
답변완료
부탁 드립니다.
예스스탁 님~~!
안녕 하세요?
42851번에 재 문의 드린 내용 부탁 드립니다.
2015-07-07
117
글번호 88075
답변완료
문의드립니다
AA 라는 개인적으로 만든 지표가 1부터 99 까지
오르락 내리락 거리는데
AA 가 50 을 돌파할때 마다 매매횟수를 2회로 하고싶습니다
2015-07-07
92
글번호 88074
답변완료
문의드려요.
해외선물에서 오전 10시부터 새벽 3시사이에만 거래하게 해주세요.
10시이후 거래시작 -> 새벽3시면 일괄청산 -> 10시이후 거래시작 ~~~~~
Input : shortPeriod(5), longPeriod(20);
value1 = ma(C, shortPeriod);
value2 = ma(C, longPeriod);
# 매수/매도청산
If CrossUP(value1, value2) Then
{
Buy();
}
# 매도/매수청산
If CrossDown(value1, value2) Then
{
Sell();
}
2015-07-07
100
글번호 88068
답변완료
질문드립니다..
6101 화면에서요..
옵션 행사가를 10종목 겹치기해서 보는대요..
옵션행사가 변경이 잘 안되는대.... ㅠㅠㅠㅠ
어덯게 하면 되죠??
첨부 파일 올립니다
변경 하고자 하는 종목클릭후 녹색 네모 부분을 클릭
하는것 아닌가요??
ㅠㅠㅠㅠ
2015-07-07
136
글번호 88067
답변완료
다시한번 부탁드립니다~
수고 많으십니다.
이전 글에서 아래와 같은 답변을 받았는데 검색결과에서 약간의 다름이 생겼고
이후 수정된 답변을 받았음에도 마찬가지여서 제 나름대로 연구해보기 위해
재답변을 요청드립니다.
아래의 답변내용은 A,B,C,D..각각의 조건을 하나의 틀에 집어넣어
효율적으로 한방에 검색되도록 해주셨는데,
이번엔 번거로우시겠지만 키움처럼 각 조건을 따로따로 만들어 주시면 감사하겠습니다..
이렇게도 해보고 안되면 그냥 키움시스템이랑 트레이더랑 다른가보다하고 포기하려고요ㅠㅠ
---------------------------------------------------------------------------------------
안녕하세요
예스스탁입니다.
1.
종목검색화면에서 주기를 120분봉에서 검색하시면 됩니다.
수식에 일봉조건을 판단하게 수식작성되어 있습니다.
2
봉에 포함된 거래량중 특정 거래량을 제외할수 없습니다.
3
검색대상,제외종목등은 종목검색 설정에서 지정하셔야 합니다.
따로 ETF를 제외하는 설정은 없습니다.
4. 아래 수식 작성하시고 종목검색 속성화면에서
직전 5일치의 데이터가 확보되어야 하므로
검색에 필요한 최소기간에 100이상 넉넉히 지정하고 검색하시기 바랍니다.
input : Bper(110),Cper(200),Dper(200),Eper(200),Fper(200),Gper1(0.01),Gper2(100);
var : cnt(0),sum(0),mavg(0);
Array : MM[10](0),VV[10](0);
if date != date[1] Then{
MM[0] = 0;
VV[0] = 0;
for cnt = 1 to 9{
MM[cnt] = MM[cnt-1][1];
VV[cnt] = VV[cnt-1][1];
}
var1 = 0;
var2 = 0;
var3 = 0;
var11 = var1[1];
var21 = var2[1];
var31 = var3[1];
value1 = sdate[1];
}
MM[0] = MM[0] +M;
VV[0] = VV[0] +M;
if stime >= 90000 and stime < 110000 Then
var1 = var1+V;
if stime >= 110000 and stime < 130000 Then
var2 = var2+V;
if stime >= 130000 Then
var3 = var3+V;
for cnt = 1 to 2000 {
if stime[cnt] <= stime and sdate[cnt] == value1 then{
var4 = DayVolume[cnt];
cnt = 10000;
}
}
if MM[5] > 0 Then{
sum = 0;
for cnt = 1 to 5{
sum = sum+MM[cnt];
}
mavg = sum/5;
if mavg >= 1100000000 and mavg < 99999999000000 And#A
DayVolume >= DayVolume(1)*(1+Bper/100) And#B
( var1 >= var11*(1+Cper/100) or #C
var2 >= var21*(1+Dper/100) or #D
var3 >= var31*(1+Eper/100) or #E
DayVolume >= var4*(1+Fper/100) ) and
DayClose >= dayopen*(1+Gper1/100) and DayClose <= dayopen*(1+Gper2/100) Then
find(1);
}
즐거운 하루되세요
> 이목동 님이 쓴 글입니다.
> 제목 : 검색식 작성 부탁드립니다.
> A. 5일 평균거래대금(단위:백만) 1100이상 99999999이하 (금일제외)
B. 거래량비율(n봉):[일]1봉전 거래량 대비 0봉전 거래량 비율 110%이상
C. 거래량비율(n봉):[120분]7봉전 거래량 대비 3봉전 거래량 비율 200.0%이상
(전일당일 9시~11시 거래량 비교를 의미합니다.)
D. 거래량비율(n봉):[120분]6봉전 거래량 대비 2봉전 거래량 비율 200.0%이상
(전일당일 11시~13시 거래량 비교를 의미합니다.)
E. 거래량비율(n봉):[120분]5봉전 거래량 대비 1봉전 거래량 비율 200.0%이상
(전일당일 13시~15시 거래량 비교를 의미합니다.
장후 동시호가를 포함해서 이후 일어난 거래량은 포함안되게 해주시면 감사하겠습니다.)
F. 전일동시간대 대비 거래량비율 200.0%이상
(B,C,D와 겹치겠지만 키움에서 해보니 종목이 좀 다르게 검색돼서 추가했습니다.
구현 가능하시면 부탁드리겠습니다.)
G. 주가등락률:[일]0봉전 시가대비 0봉전 종가등락률 0.01%이상 100%이하
(당일 봉이 양봉이 되는 것을 의미합니다.)
위의 조건을 이용하여 "A and B and (C or D or E or F) and G" 검색식을 구현하고 싶습니다.
그리고 첨부파일에 보시면 아실 수 있듯이 대상도 지정을 했는데요..
이것도 가능하시면 부탁드립니다.
아참 저는 NH트레이더 4.0 이용하고 있습니다.
그럼 수고하세요~!
2015-07-07
219
글번호 88066
답변완료
지표문의
1.수식지님 파동선 atr 인데,2 예제처럼 고점 대신 볼린저밴드 상단 대입,저점 대신 볼린저밴드 하단을 넣으니
지표표현이 안되어서요.
검토해서 수정 좀 해주세요.
Input:atrLength(14),multi(1);
Var:j(0),dayATR(0),sum(0),upTr(100),dnTr(-100),trnd(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]은 반대 개념
sum = 0;
for j = 1 to atrLength {
sum = sum + Max(DayClose(j+1),DayHigh(j)) - Min(DayClose(j+1),DayLow(j));
}
dayATR = sum/atrLength; //일봉기준으로 ATR 산출
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] - (dayATR * multi) > L then trnd = dnTr;
//저가가 고가 대비 변동률보다 밑으로 떨어지면 하락추세로 설정
//단, 현재봉의 고가가 변곡점 이후 최고가이면 상승 추세가 진행중이라고 본다.
//그래서 현재봉의 고가가 hiVal[0]보다 작다는 조건이 추가되었다.
else if trnd != upTr && loVal[0] < L && loVal[0] + (dayATR * multi) < 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] then { //전고점보다 더 높은 고점이 출현했다면
if loVal[1] <= loVal[0] 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로 추세선을 추가해도 된다.
}
else { //전저점도 갱신되었다면
for j = 8 downto 1 { //전고점, 전저점을 새로이 추기
hiVal[j+1] = hiVal[j]; //전고점을 하나씩 뒤로 보낸다.
hiBar[j+1] = hiBar[j]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다.
loVal[j+1] = loVal[j]; //전저점을 하나씩 뒤로 보낸다.
loBar[j+1] = loBar[j]; //전저점은 전전저점이 되고, 전전저점은 전전전저점이 된다.
}
hiVal[1] = hiVal[0]; //새로운 전고점에 현재 고점을 대입
hiBar[1] = hiBar[0];
loVal[1] = loVal[0]; //새로운 전저점에 현재 저점을 대입
loBar[1] = loBar[0];
hiVal[0] = H; //전고점 이후 최고가는 현재봉의 고가
hiBar[0] = 0;
loVal[0] = L;
loBar[0] = 0;
//전저,전고점이 새로 생긴 것이니까 전전고점에서 전저점까지
//그리고 전저점에서 전고점까지 추세선 2개를 생성한다.
date11 = date[hiBar[2]]; //추세선 시작일. 전전고점의 날짜
time11 = stime[hiBar[2]]; //추세선 시작시간
Value11 = hiVal[2]; //추세선 시작가격
date12 = date[loBar[1]]; //추세선 종료일. 전저점의 날짜
time12 = stime[loBar[1]]; //추세선 종료시간
Value12 = loVal[1]; //추세선 종료가격
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
TL_SetSize(TL1,2);
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);
}
}
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] then { //전저점보다 낮은 저가가 출현했다면
if hiVal[1] >= hiVal[0] 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);
}
else { //고점도 이전고점보다 높다면
for j = 8 downto 1 { //전고점,전저점을 새로이 생성
hiVal[j+1] = hiVal[j];
hiBar[j+1] = hiBar[j];
loVal[j+1] = loVal[j];
loBar[j+1] = loBar[j];
}
hiVal[1] = hiVal[0];
hiBar[1] = hiBar[0];
loVal[1] = loVal[0];
loBar[1] = loBar[0];
loVal[0] = L;
loBar[0] = 0;
hiVal[0] = H;
hiBar[0] = 0;
date11 = date[loBar[2]]; //시작점이 전전저점
time11 = stime[loBar[2]];
Value11 = loVal[2];
date12 = date[hiBar[1]]; //종료는 전고점
time12 = stime[hiBar[1]];
Value12 = hiVal[1];
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
TL_SetSize(TL1,2);
date11 = date[hiBar[1]]; //2번째 시작은 전고점이 된다.
time11 = stime[hiBar[1]];
Value11 = hiVal[1];
date12 = date[loBar[1]]; //2번째 종료는 전저점
time12 = stime[loBar[1]];
Value12 = loVal[1];
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
}
}
//여기까지가 파동선이고 아래는 추세선이다.
if loVal[2] < loVal[1] then {
//전전저점보다 전저점이 높을 경우
//전전저점으로부터 전저점까지 지지추세선을 긋는데
//시작점인 전전저점이 바뀌면 신규추세선을 긋고(TL_New)
//시작점이 바뀌지 않았다면 종료지점만 변경해준다(TL_SetEnd)
if loBar[2][1] + 1 != loBar[2][0] then {
//시작점이 바뀌었는지 여부는 가격은 동일할 수 있으므로 위치값으로 판별한다.
//위치값은 1씩 증가시켜왔으므로 이전 봉에서의 위치값이 1 차이나는지로 확인
//1 이상 차이가 나면 전전고점이 바뀐 것으로 보고 추세선을 추가로 그린다.
date21 = date[loBar[2]];
time21 = stime[loBar[2]];
Value21 = loVal[2];
date22 = date[0]; //추세선이므로 현재 봉까지 그려준다.
time22 = stime[0];
Value22 = (loVal[1]-loVal[2])/(loBar[2]-loBar[1])*loBar[2]+LoVal[2];
//종료시점의 가격은 직선의 기울기와 절편을 계산해서 구한다.
TL2 = TL_New(date21,time21,Value21,date22,time22,Value22);
}
else {
//전전저점이 바뀌지 않았다면 종료시점만 변경하면 된다.
date22 = date[0];
time22 = stime[0];
Value22 = (loVal[1]-loVal[2])/(loBar[2]-loBar[1])*loBar[2]+LoVal[2];
TL_SetEnd(TL2, date22,time22,Value22);
//TL_SetExtRight 함수는 추세선을 오른쪽으로 연장하는 함수인데
//이 함수를 사용하면 모든 추세선이 현재봉까지 연장되어 알아볼 수가 없다.
}
}
if hiVal[2] > hiVal[1] then {
if hiBar[2][1] + 1 != hiBar[2][0] then {
date31 = date[hiBar[2]];
time31 = stime[hiBar[2]];
Value31 = hiVal[2];
date32 = date[0];
time32 = stime[0];
Value32 = (hiVal[1]-hiVal[2])/(hiBar[2]-hiBar[1])*hiBar[2]+hiVal[2];
TL3 = TL_New(date31,time31,Value31,date32,time32,Value32);
}
else {
date32 = date[0];
time32 = stime[0];
Value32 = (hiVal[1]-hiVal[2])/(hiBar[2]-hiBar[1])*hiBar[2]+hiVal[2];
TL_SetEnd(TL3, date32,time32,Value32);
}
}
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);
[
2.예제
Input:atrLength(14),multi(1),ma1(2);
Input : Period(20), MultiD(2);
Var:j(0),dayATR(0),sum(0),upTr(100),dnTr(-100),trnd(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),HO(0),LO(0);
var : MAv(0),BBup(0),BBdn(0);
Array:hiVal[10](0),loVal[10](0),hiBar[10](0),loBar[10](0);
//hiVal[1]은 전고점, hiVal[2]는 전전고점, hiVal[3]은 전전전고점
//hiVal[0]은 변곡점 이후 현재봉까지의 고점. 현재 고점은 진행중이므로 계속 바뀐다.
//loVal[0]은 반대 개념
HO= BollBandUp(Period,MultiD);
LO= BollBandDown(Period,MultiD);
sum = 0;
for j = 1 to atrLength {
sum = sum + Max(C[j+1],H[j]) - Min(C[j+1],L[j]);
}
dayATR = sum/atrLength; //일봉기준으로 ATR 산출
for j = 1 to 9 { //전고,전저점을 9개까지 보관
loBar[j] = loBar[j] + 1; //전저점의 위치. 현재 봉으로부터 떨어져 있는 거리
hiBar[j] = hiBar[j] + 1; //전고점의 위치
}
if hiVal[0] <= HO or hiVal[0] == 0 then { //전고,전저점 이후 현재까지의 고점
hiVal[0] = HO; //0을 체크한 이유는 초기에 값이 없는 구간이 생기기 때문
hiBar[0] = 0; //현재 고점의 위치가 0이란 것은 현재봉의 고가가 구간 고점이라는 의미
}
else {
hiBar[0] = hiBar[0] + 1; //현재 고점의 위치
}
if loVal[0] >= LO or loVal[0] == 0 then { //전고,전저점 이후 현재까지 저점
loVal[0] = LO;
loBar[0] = 0;
}
else {
loBar[0] = loBar[0] + 1; //현재 구간 저점의 위치
}
if trnd != dnTr && hiVal[0] > HO && hiVal[0] - (dayATR * multi) > LO then trnd = dnTr;
//저가가 고가 대비 변동률보다 밑으로 떨어지면 하락추세로 설정
//단, 현재봉의 고가가 변곡점 이후 최고가이면 상승 추세가 진행중이라고 본다.
//그래서 현재봉의 고가가 hiVal[0]보다 작다는 조건이 추가되었다.
else if trnd != upTr && loVal[0] < LO && loVal[0] + (dayATR * multi) < HO 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] = HO; //전고점이 확정되었으므로 전고점 이후 최고가는 현재봉의 고가
hiBar[0] = 0;
loVal[0] = LO;
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] then { //전고점보다 더 높은 고점이 출현했다면
if loVal[1] <= loVal[0] then { //전저점은 갱신되지 않았다면
hiVal[1] = hiVal[0]; //전고점을 현재의 고점으로 바꿔준다.
hiBar[1] = hiBar[0];
hiVal[0] = HO;
hiBar[0] = 0;
loVal[0] = LO;
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로 추세선을 추가해도 된다.
}
else { //전저점도 갱신되었다면
for j = 8 downto 1 { //전고점, 전저점을 새로이 추기
hiVal[j+1] = hiVal[j]; //전고점을 하나씩 뒤로 보낸다.
hiBar[j+1] = hiBar[j]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다.
loVal[j+1] = loVal[j]; //전저점을 하나씩 뒤로 보낸다.
loBar[j+1] = loBar[j]; //전저점은 전전저점이 되고, 전전저점은 전전전저점이 된다.
}
hiVal[1] = hiVal[0]; //새로운 전고점에 현재 고점을 대입
hiBar[1] = hiBar[0];
loVal[1] = loVal[0]; //새로운 전저점에 현재 저점을 대입
loBar[1] = loBar[0];
hiVal[0] = HO; //전고점 이후 최고가는 현재봉의 고가
hiBar[0] = 0;
loVal[0] = LO;
loBar[0] = 0;
//전저,전고점이 새로 생긴 것이니까 전전고점에서 전저점까지
//그리고 전저점에서 전고점까지 추세선 2개를 생성한다.
date11 = date[hiBar[2]]; //추세선 시작일. 전전고점의 날짜
time11 = stime[hiBar[2]]; //추세선 시작시간
Value11 = hiVal[2]; //추세선 시작가격
date12 = date[loBar[1]]; //추세선 종료일. 전저점의 날짜
time12 = stime[loBar[1]]; //추세선 종료시간
Value12 = loVal[1]; //추세선 종료가격
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
TL_SetSize(TL1,2);
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);
}
}
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] = LO;
loBar[0] = 0;
hiVal[0] = HO;
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] then { //전저점보다 낮은 저가가 출현했다면
if hiVal[1] >= hiVal[0] then { //고점 갱신이 되지 않았다면
loVal[1] = loVal[0]; //직전의 전저점만 바꿔준다.
loBar[1] = loBar[0];
loVal[0] = LO;
loBar[0] = 0;
hiVal[0] = HO;
hiBar[0] = 0;
date12 = date[loBar[1]];
time12 = stime[loBar[1]];
Value12 = loVal[1];
TL_SetEnd(TL1, date12,time12,Value12);
}
else { //고점도 이전고점보다 높다면
for j = 8 downto 1 { //전고점,전저점을 새로이 생성
hiVal[j+1] = hiVal[j];
hiBar[j+1] = hiBar[j];
loVal[j+1] = loVal[j];
loBar[j+1] = loBar[j];
}
hiVal[1] = hiVal[0];
hiBar[1] = hiBar[0];
loVal[1] = loVal[0];
loBar[1] = loBar[0];
loVal[0] = LO;
loBar[0] = 0;
hiVal[0] = HO;
hiBar[0] = 0;
date11 = date[loBar[2]]; //시작점이 전전저점
time11 = stime[loBar[2]];
Value11 = loVal[2];
date12 = date[hiBar[1]]; //종료는 전고점
time12 = stime[hiBar[1]];
Value12 = hiVal[1];
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
TL_SetSize(TL1,2);
date11 = date[hiBar[1]]; //2번째 시작은 전고점이 된다.
time11 = stime[hiBar[1]];
Value11 = hiVal[1];
date12 = date[loBar[1]]; //2번째 종료는 전저점
time12 = stime[loBar[1]];
Value12 = loVal[1];
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
}
}
if loVal[2] < loVal[1] then {
if loBar[2][1] + 1 != loBar[2][0] then {
date21 = date[loBar[2]];
time21 = stime[loBar[2]];
Value21 = loVal[2];
date22 = date[0]; //추세선이므로 현재 봉까지 그려준다.
time22 = stime[0];
Value22 = (loVal[1]-loVal[2])/(loBar[2]-loBar[1])*loBar[2]+LoVal[2];
//종료시점의 가격은 직선의 기울기와 절편을 계산해서 구한다.
TL2 = TL_New(date21,time21,Value21,date22,time22,Value22);
}
else {
//전전저점이 바뀌지 않았다면 종료시점만 변경하면 된다.
date22 = date[0];
time22 = stime[0];
Value22 = (loVal[1]-loVal[2])/(loBar[2]-loBar[1])*loBar[2]+LoVal[2];
TL_SetEnd(TL2, date22,time22,Value22);
//TL_SetExtRight 함수는 추세선을 오른쪽으로 연장하는 함수인데
//이 함수를 사용하면 모든 추세선이 현재봉까지 연장되어 알아볼 수가 없다.
}
}
if hiVal[2] > hiVal[1] then {
if hiBar[2][1] + 1 != hiBar[2][0] then {
date31 = date[hiBar[2]];
time31 = stime[hiBar[2]];
Value31 = hiVal[2];
date32 = date[0];
time32 = stime[0];
Value32 = (hiVal[1]-hiVal[2])/(hiBar[2]-hiBar[1])*hiBar[2]+hiVal[2];
TL3 = TL_New(date31,time31,Value31,date32,time32,Value32);
}
else {
date32 = date[0];
time32 = stime[0];
Value32 = (hiVal[1]-hiVal[2])/(hiBar[2]-hiBar[1])*hiBar[2]+hiVal[2];
TL_SetEnd(TL3, date32,time32,Value32);
}
}
if trnd == upTr and loVal[2] > loVal[1] then
TL_SetColor(TL1,RGB(128,128,128));
else if trnd == dnTr and hiVal[2] < hiVal[1] then
TL_SetColor(TL1,RGB(128,128,128));
else
TL_SetColor(TL1,RGB(128,128,128));
TL_SetSize(TL1,0.5);
TL_SetColor(TL2,YELLOW);
TL_SetSize(TL2,1);
TL_SetColor(TL3,GREEN);
TL_SetSize(TL3,1);
3.그럼 수고하세요
2015-07-07
196
글번호 88065
2wnwn 님에 의해서 삭제되었습니다.
2015-07-07
10
글번호 88064