예스스탁
예스스탁 답변
2024-08-19 17:21:55
안녕하세요
예스스탁입니다.
1
if CountIf(H >= L*1.13,n) >= 1 Then
{
중간생략
if (lb > hb and hh >= ll*1.35) or (lb < hb and ll <= hh*0.90) Then
{
TL_Delete(TL);
TL = TL_New(sDate[hb],sTime[hb],hh,sDate[lb],sTime[lb],ll);
작성 수식에서 추세선을 그리는 조건은
2개의 if문이 동시 충족될때인데
삭제는 상단의 if문 하나만 만족하면 최근 출력이 지워지게 됩니다.
즉 출력후 다음 추세선이 조건이 충족되지 않았는데 지워버리게 되므로
차트에 1개도 표시되지 않는 경우도 생기게 됩니다.
추세선 삭제를 추세선 출력과 같은 조건으로 만드시면 됩니다.
if CountIf(H >= L*1.13,n) >= 1 Then
{
중간생략
if (lb > hb and hh >= ll*1.35) or (lb < hb and ll <= hh*0.90) Then
{
TL_Delete(TL);
TL = TL_New(sDate[hb],sTime[hb],hh,sDate[lb],sTime[lb],ll);
2
hh나 ll는 for문을 수행하기 전에는 0값이고
for문에 의해 0봉전~19봉전 값을 가져와 비교하게 되는데
처음 0봉전의 값이 들어갈때는 최고나 최저로 비교할 값이 없습니다.
그러므로 0봉전 값이 호출될때는 그 값이 최고값(hh)이나 최고값(ll)으로 셋팅이 되라는 의미로
해당 표현이 사용되었습니다.
단지 2개 지점을 연결하는 선믈 그리면 되므로
TL=TL_New(sDate[lb],sTime[lb],ll,sDate[hb],sTime[hb],hh);
와 같이 변경은 의미없습니다.
3
대상이 되는 n개봉을 수평으로 표시하게 추가해 드립니다.
지정할 Y축값이 모호하여 수평값은 hh값으로 출력되게 추가해 드립니다.
var : n(20);
var : cnt(0),hh(0),hb(0),ll(0),lb(0),TL(0),TX(0),TL1(0);
if CountIf(H >= L*1.13,n) >= 1 Then
{
#"최근봉"만 표시되게 하기위해 "직전에서 출력된 추세선과 텍스트는 삭제"
#n개봉 최고가와 최고가위치(몇봉전인지) 계산
#n개봉 최저가와 최저가위치(몇봉전인지) 계산
hh = 0;
hb = 0;
ll = 0;
lb = 0;
For cnt = 0 to n-1
{
if hh == 0 or (hh > 0 and h[cnt] > hh) Then
{
hh = h[cnt];
hb = cnt;
}
if ll == 0 or (ll > 0 and l[cnt] < ll) Then
{
ll = l[cnt];
lb = cnt;
}
}
if (lb > hb and hh >= ll*1.35) or (lb < hb and ll <= hh*0.90) Then
{
TL_Delete(TL);
Text_Delete(TX);
TL = TL_New(sDate[hb],sTime[hb],hh,sDate[lb],sTime[lb],ll);
TL_SetDrawMode(tl,0);
TL_SetExtRight(tl,true);
#20개봉 수평선
TL_Delete(TL1);
TL1 = TL_New(sDate[n-1],sTime[n-1],hh,sDate[0],sTime[0],hh);
#최고가가 더 가까우면 빨강 아니면 파랑
if lb > hb Then
{
TL_SetColor(TL,Pink);
TL_SetStyle(tl,2);
}
Else
{
TL_SetColor(TL,LightBlue);
TL_SetSize(tl,1);
}
TX = Text_New(TL_GetEndDate(TL),TL_GetEndTime(TL),TL_GetEndVal(TL),NumToStr(abs(hb-lb),0));
}
}
#추세선값 상향돌파
if TL_GetValue(TL,sDate,stime) > 0 then
{
value1 = TL_GetValue(TL,sDate,stime);
if CrossUp(c,Value1) Then
plot3(high,"tlcross",LightGreen,Def,2);
}
4
종가가 추세선을 돌파하는 봉이 어느봉인지 알수 있게 해당 봉에 표시를 하는 것입니다.
해당 점은 점그래프로 보셔야 합니다.
5
별도의 기능은 없습니다.
단지 수식 코딩시에 수식의 특정행을 하일라이트 처럼 표시해서
식작성시 수식이 길때 다른 줄로 갔다가 빨리 찾아보기 위함입니다.
즐거운 하루되세요
> yamu 님이 쓴 글입니다.
> 제목 : 지난 수식 보완 질문 드립니다
> 안녕하세요
지난번에 추세선 관련 지표 문의드렸었고 아래는 작성한 수식입니다
var : n(20);
var : cnt(0),hh(0),hb(0),ll(0),lb(0),TL(0),TX(0);
if CountIf(H >= L*1.13,n) >= 1 Then
{
#"최근봉"만 표시되게 하기위해 "직전에서 출력된 추세선과 텍스트는 삭제"
TL_Delete(TL);
//Text_Delete(TX);
#n개봉 최고가와 최고가위치(몇봉전인지) 계산
#n개봉 최저가와 최저가위치(몇봉전인지) 계산
hh = 0;
hb = 0;
ll = 0;
lb = 0;
For cnt = 0 to n-1
{
if hh == 0 or (hh > 0 and h[cnt] > hh) Then
{
hh = h[cnt];
hb = cnt;
}
if ll == 0 or (ll > 0 and l[cnt] < ll) Then
{
ll = l[cnt];
lb = cnt;
}
}
if (lb > hb and hh >= ll*1.35) or (lb < hb and ll <= hh*0.90) Then
{
TL = TL_New(sDate[hb],sTime[hb],hh,sDate[lb],sTime[lb],ll);
TL_SetDrawMode(tl,0);
TL_SetExtRight(tl,true);
#최고가가 더 가까우면 빨강 아니면 파랑
if lb > hb Then
{
TL_SetColor(TL,Pink);
TL_SetStyle(tl,2);
}
Else
{
TL_SetColor(TL,LightBlue);
TL_SetSize(tl,1);
}
TX = Text_New(TL_GetEndDate(TL),TL_GetEndTime(TL),TL_GetEndVal(TL),NumToStr(abs(hb-lb),0));
}}
#추세선값 상향돌파
if TL_GetValue(TL,sDate,stime) > 0 then
{
value1 = TL_GetValue(TL,sDate,stime);
if CrossUp(c,Value1) Then
plot3(high,"tlcross",LightGreen,Def,2);
}
수식 해석은
20봉안에 봉의 총 길이가 13% 이상인 봉이 한개 이상이어야 하고,
그 기간 동안의 최저점과 최고점을 연결해서, 우상향이면 pink,우하향이면 lightblue로 표현을 한다. 그리고 우상향추세선은 저점 대비 고점이 35% 이상일때고 반대 경우는 고점대비 저점이 10% 떨어져야 한다.
질문1) TL_Delete(TL); 관련된 질문인데요
최근봉만 남기고 추세선을 지우는 조건을 on/off 해가며 검토를 해보고 있는데 일부 종목에서는 최근께 아예 안나오는 경우가 있으며 (스샷에 첨부한 오성첨단 같은경우) on/off 했을때 값이 다르게 나오는 경우도 있습니다. 안나오는건 최근 20봉 이내의 봉이 아니기 때문인거 같은데 맞나요??
질문2)
for 문에서는 0에서 19봉 까지 (총 20봉) 전봉으로 하나씩 이동하면서 고가 저가를 비교하고 봉 번호를 리턴하는거 같은데요
if hh == 0 or (hh > 0 and h[cnt] > hh)
제가 이해한 바로는 0봉을 기준으로 고가 저가를 비교하는데
예를 들어 고가를 비교할때 1봉전이 0봉고가 보다 높지 않으면 패스 하고 2봉전에서 높은게 나오면 그봉이 h[1] 이 되는건가요? hb 카운트가 lb보다 많으면 우하향 추세선이 나오고 그 반대는 우상향이 나오는거죠? 그리고 마지막에 text는 두 봉의 갯수 차이를 나타내는거고요.
뒤에 나오는
if (lb > hb and hh >= ll*1.35) or (lb < hb and ll <= hh*0.90) Then
{
TL=TL_New(sDate[hb],sTime[hb],hh,sDate[lb],sTime[lb],ll);
에서 lb>hb 일때는 우상향 추세선이라서
TL=TL_New(sDate[lb],sTime[lb],ll,sDate[hb],sTime[hb],hh);
이렇게 순서가 바껴야되는건 아닌가요?~
cnt 는 0부터라고 이미 선언이 돼있는데 hh==0 or 의 의미를 잘 모르겠습니다
그리고 hb,lb 는 봉 번호 값을 의미하는거 같고 해석해보고 싶어서 plot해봤는데 0부터 cnt 에 대입하는거면 뒤로(과거로)갈수록 봉 번호가 증가해야되는건 아닌가요?~
질문3)
최저점 최고점을 연결하고 봉갯수만 표현이 되는데
n (20봉) 의 범위도 알 수 있는 방법이 있을까요? 어디서 부터 어디까지 인지 현차트나 지표영역에 표시가 되게끔 하고싶습니다
질문4)
마지막에 추세선 상향돌파식에 대해서요
종가가 추세선을 크로스업 하면 고가를 플롯 하는건데 차트에 적용해보면 무얼 나타내려고 하는건지 이해가 가질 않습니다 (1번 스샷. 초록색 선)
이전 봉 종가가 추세선보다 아래에 있다가 다음봉의 종가가 선보다 위에 있으면 적용이 하라는 의미가 아닌가요??~
질문4) 코드 에디터에서 행 숫자표시된 부분에 왼쪽을 클릭하면 원이 표시되면서 그 행이 전체 선택이 되는데 어떤 기능이 있는걸까요??
번거로우시겠지만 부탁드립니다감사합니다