커뮤니티

문의 드립니다

프로필 이미지
zmfha
2026-03-06 16:28:34
194
글번호 230964
답변완료

제목


예스랭귀지에서 C,O 값 기준 도지 판정 / CountIf 동작 / TL_New 수평선 종가 돌파 / 경과봉 숫자표시 구현 관련 문의


본문


안녕하세요.


현재 예스랭귀지로 패턴 기반 지표를 작성하면서 몇 가지 동작 방식이 궁금해 문의드립니다.


아래 네 가지 부분에 대해 확인 부탁드립니다.


1. C,O 값 기준 도지 판단 시 계산 기준


몸통 크기를 기준으로 도지를 판단하려고 아래와 같이 작성했습니다.


body = Abs(C - O)


// 예: 10틱 이하 도지

if body <= PriceScale*10 then

isDoji = 1;


그런데 실제 차트에서는 몸통이 비교적 큰 봉도 간혹 도지로 판정되는 경우가 있습니다.


그래서 궁금한 점은


예스랭귀지에서


C

O


값이


현재 형성 중인 봉 기준으로 실시간 업데이트 되는지


아니면 항상 완성된 봉 기준으로 계산되는지


입니다.


만약 진행 중인 봉 값이 반영될 수 있다면

완성된 봉 기준으로 계산하려면 다음과 같은 방법을 사용하는 것이 맞는지 궁금합니다.


예)


C[0], O[0]

BarStatus


또는 다른 권장 방법이 있는지도 문의드립니다.


2. CountIf 함수의 정확한 의미


관리자님 예제에서 아래와 같은 코드가 있었습니다.


CountIf(C>O,3) == 3


이 조건이 의미하는 것이


최근 3봉이 모두 양봉이라는 의미인지


또는


최근 3봉 중 양봉이 3개라는 의미인지


정확한 동작 방식이 궁금합니다.


즉,


최근 3개의 봉이 모두 양봉일 때만 참이 되는지 확인 부탁드립니다.


3. TL_New 수평선 기준 종가 돌파 판정 구현


지표에서 TL_New로 생성한 수평선을 여러 개 누적 관리하고 있습니다.


이 수평선을 기준으로


종가가 수평선 가격 + N틱 이상 상향 돌파 → 표시


종가가 수평선 가격 - N틱 이상 하향 돌파 → 표시


같은 기능을 구현하려고 합니다.


이와 관련하여 궁금한 점은 다음 두 가지입니다.


(1) 가장 최근 수평선 1개만 기준으로 판정하는 방법


예를 들어


TL1, TL2, TL3 ...


같이 여러 개의 수평선을 관리할 때

가장 최근에 생성된 수평선 1개만 기준으로 비교하는 일반적인 구현 방법이 있는지 궁금합니다.


예스랭귀지에서 권장되는 방식이나 간단한 예제가 있는지도 문의드립니다.


(2) 종가 돌파 판정 시 일반적으로 사용하는 조건식


수평선 기준 돌파 판정을 아래와 같은 방식으로 작성하는 것이 일반적인지 궁금합니다.


C >= 기준값 and C[1] < 기준값

C <= 기준값 and C[1] > 기준값


또는 TL 오브젝트와 함께 사용할 때

더 안정적인 구현 방식이 따로 있는지도 문의드립니다.


4. TL_New 수평선 생성 후 특정 경과봉(6,12,18,23) 자체에 숫자 표시하는 방법


TL_New로 생성한 수평선마다 생성 후 봉수를 AG1, AG2, AG3 ... 같은 변수로 관리하고 있습니다.


수평선 위치가 아니라 해당 경과봉 자체에 숫자를 표시하고 싶습니다.


예를 들어 수평선 생성 후


6번째 봉 → 그 6번째 봉에 "6" 표시


12번째 봉 → 그 12번째 봉에 "12" 표시


18번째 봉 → 그 18번째 봉에 "18" 표시


23번째 봉 → 그 23번째 봉에 "23" 표시


표시 위치는


양봉이면 봉 아래


음봉이면 봉 위


로 표시하려고 합니다.


예를 들어 아래와 같은 방식으로 구현하려고 하는데


if AG1 = 6 then

Text_New(sDate, sTime, L - PriceScale*10, "6");


이와 같은 방식이 일반적인 구현 방법인지 궁금합니다.


또한 같은 봉에서 조건이 여러 번 평가될 경우

Text_New가 중복 생성될 수 있는지 궁금합니다.


이 경우 보통


별도의 표시 여부 변수를 두는 방식


또는 봉 마감 시점 기준 실행


중 어떤 방식이 권장되는지도 문의드립니다.


확인 부탁드립니다.

감사합니다.

지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-03-09 10:55:45

안녕하세요 예스스탁입니다. 1 지표식의 경우 봉 미완성시라도 실시간으로 조건에 만족하면 그렸다가 만족하지 않으면 그리지 않는 것을 반복합니다, 하지만 랭귀지에서 if조건을 체크하고 변수에 값을 할당하고 사용하는 최종 기준은 봉완성시이므로 봉완성이 기준이라고 보셔야 합니다. 미완성시에 임시로 그려주는 것을 막고자 하시면 아래와 같이 plot출력을 다음봉시가(NextBarOpen) 가 수신될때로 지정해 주시면 됩니다. if NextBarOpen > 0 Then { Plot1(~~~~); } 2 countif는 봉수를 지정해 조건 만족횟수를 카운트하는 함수입니다. CountIf(C>O,3) == 3 최근 3봉동안 양봉인 횟수가 3회라는 내용으로 3개봉 연속 양봉이라는 의미입니다. 최근 3봉이 모두 양봉 최근 3봉 중 양봉이 3개 언급하신 위 2개가 모두 맞습니다. 2개 내용은 어떤 의미상 차이가 있는지 모르겠습니다. 3 올려주신 내용만으로 정확한 답변이 어렵습니다. 추세선은 변수에 아이디를 저장해 관리하고 이용하게 되는데 작성하신 수식에서 어떤 방식으로 관리가 되는지 알수 없습니다. TL1,TL2,TL3 만약 위 추세선 아이디가 아래와 같이 TL1이 가장 최근 수평선 값을 저장하는 내용이면 if 조건 then { TL1 = TL_new(~~~~); TL2 = TL1[1]; TL3 = TL2[1]; } if C > TL_GetValue(TL1,sDate,sTime) and C[1] <= TL_GetValue(TL1,sDate[1],sTime[1]) then 과 같이 조건을 지정합니다. TL1,TL2,TL3이 각 별도의 추세선이 항상 최근 추세선 아이디가 저장된다면 해당 변수를 그대로 TL_GetValue에 사용해서 값가져와 사용하시면 됩니다. 3-1 돌파는 예스랭귀지에서는 보통 A > B and A [1]<= B[1], A < B and A[1] >= B[1]을 사용합니다. 하지만 올리신 내용과 같이 현재값에 =을 포함하셔도 됩니다. 해당 부분은 선택의 문제입니다. 4 조건만족 후 경과한 봉수를 N봉 간격으로 표시하고자 하시면 아래식 참고하시기 바랍니다. var : TL(0),TX(0); var1 = ma(c,5); var2 = ma(c,20); if CrossUp(var1,var2) Then { value1 = c; Value2 = 0; TL = TL_New(sDate,sTime,value1,NextBarSdate,NextBarStime,value1); } Else { Value2 = Value2+1;   TL_SetEnd(TL,NextBarSdate,NextBarStime,value1); if Value2%6 == 0 Then tx = Text_New(sDate,sTime,IFF(C>O,H,L),NumToStr(value2,0)); Text_SetStyle(tx,2,IFF(C>O,1,0)); } N봉 간격이 아닌 봉수를 직접 지정할때는 아래와 같이 봉수 조건을 나열해 작성하시면 됩니다. var : TL(0),TX(0); var1 = ma(c,5); var2 = ma(c,20); if CrossUp(var1,var2) Then { value1 = c; Value2 = 0; TL = TL_New(sDate,sTime,value1,NextBarSdate,NextBarStime,value1); } Else { Value2 = Value2+1; TL_SetEnd(TL,NextBarSdate,NextBarStime,value1); if Value2 == 6 or Value2 == 12 or Value2 == 18 or Value2 == 23 Then tx = Text_New(sDate,sTime,IFF(C>O,H,L),NumToStr(value2,0)); Text_SetStyle(tx,2,IFF(C>O,1,0)); } Plot1(Value2); 즐거운 하루되세요