커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1535
글번호 230811
답변완료
box에서 높이 찾기
더운데 수고 많으시죠!
틱 봉에서 위 그림과 같이 5분봉의 높낮이를 찾아 보고 싶습니다.
1. 첫 번째 왼쪽의 노란색 번호 같이 이전 봉들에서 최초의 음봉box과 현재의 음봉box중 낮을 경우 이를 더 진하게 표시하고자 합니다
2. 중앙에 보이는 붉은색 번호와 같이 이전 봉의 양봉box와 현재 양봉box가 높을 경우 더 진하게 표시하고자 합니다. 1번의 완전 반대되는 내용입니다.
3. 오른쪽의 노란색 연속 번호에서 연속으로 표시된 경우 1번은 음봉box의 최고 음봉box인데 이후 양봉box이후 나타난 음봉box의 높이가 최고봉 음봉box보다 낮을 경우를 표시해보고 싶습니다. -> 양봉box의 경우도 이것의 반대로 만들 수 있음 좋겠습니다.
항상 감사드립니다!
input : ntime1(5);
var : SS1(0),DD1(0),TTM(0),TTF(0);
var : SM1(0),m3var(0), m3L(0), cnt(0);
Array : Mb30[100](0);
var : M3date(0),M3time(0), StrtV(0), m3UD(0), mrCl(0);
var : idx2(0), HH(0),LL(0),HTL(0),LTL(0),bb(0),box(0);
if Bdate != Bdate[1] Then
{
SS1 = TimeToMinutes(0);
DD1 = sdate;
}
if DD1 > 0 then
{
if sdate == DD1 Then
TTM = TimeToMinutes(stime)-SS1;
Else
TTM = TimeToMinutes(stime)+1440-SS1;
TTF = TTM%ntime1;
if Bdate != Bdate[1] or sTime == 90000 or // 90000
(Bdate == Bdate[1] && ntime1 > 1 && TTF < TTF[1]) or
(Bdate == Bdate[1] && ntime1 > 1 && TTM >= TTM[1]+ntime1) or
(Bdate == Bdate[1] && ntime1 == 1 && TTM > TTM[1]) Then
{
m3L = 1;
}
else
m3L = 0;
if m3L == 1 Then
{
idx2 = 0;
StrtV = O;
M3date = sdate;
M3time = stime;
HH = H;
LL = L;
HTL = TL_New(sDate,sTime,max(C,StrtV),sDate,sTime,HH);
LTL = TL_New(sDate,sTime,min(C,StrtV),sDate,sTime,LL);
box = Box_New(sDate,sTime,StrtV,NextBarSdate,NextBarStime,C);
Box_SetFill(box,true);
}
else
{
idx2 = idx2+1;
if H > HH Then
HH = H;
if L < LL Then
LL = L;
bb = Floor(idx2/2);
TL_SetBegin(HTL,sDate[bb],sTime[bb],max(C,StrtV));
TL_SetEnd(HTL,sDate[bb],sTime[bb],HH);
TL_SetBegin(LTL,sDate[bb],sTime[bb],min(C,StrtV));
TL_SetEnd(LTL,sDate[bb],sTime[bb],LL);
Box_SetEnd(Box,sDate,sTime,C);
}
if C > StrtV Then
{
box_SetColor(box,RGB(235,000,000));
TL_SetColor(HTL,RGB(235,000,000));
TL_SetColor(LTL,RGB(235,000,000));
}
Else
{
box_SetColor(box,RGB(000,000,235));
TL_SetColor(HTL,RGB(000,000,235));
TL_SetColor(LTL,RGB(000,000,235));
}
}
2025-07-28
237
글번호 192817
답변완료
지표식,,검색식.. 종목검색
a=avg(c,5);
highest( a,10)
이수식의지표식과 ,
오늘종가가위선을넘였을때의
검색식 과, 종목검색 을 알고싶습니다.
부탁드립니다.
2025-07-28
183
글번호 192816
답변완료
몸통고가만의 swinghigh 추가문의
답변주신 SwingHigh 다음 검색식에서 여러 다른 수치를 넣어봤는데요
input : left(30),right(60);
var1 = max(c,o);
if SwingHigh(1,var1,left,right,left+right+1) != -1 Then
value1 = var1[right];
if countif( CrossUp(var1,value1) , 20) >= 1 Then
Find(1); 에서
countif( CrossUp(var1,value1) , 20) >= 1 함수에서 20이하의 숫자를 넣어보면 작동이 잘되는데 20이상 숫자를 넣으면 안되는 것 같습니다.
if SwingHigh(1,var1,left,right,left+right+1) != -1 Then
value1 = var1[right];
if countif( CrossUp(var1,value1) ,30) >= 1 Then
Find(1); -----> 20이하에서는 5, 10등 다른 숫자 대입시 다른 결과가 나오는데 20이상의 숫자로는 30, 50, 100으로 늘려도 같은 결과가 나오는 걸 보면 작동이 제대로 안되는지 20 대입결과와 같습니다. 500봉 검색제한과 관련이 있는지요.이유를 모르겠습니다.
2025-07-28
189
글번호 192815
답변완료
문의
답변수식을 해당수식에 적용해보았는데
변수가 겹치는 것도 있고...제가 잘못 적용했는지 파라미터값에 변화가 없습니다.
사용수식에 직접 추가해주셨으면 합니다.
진입필터 추가할 수식입니다.
input : 진입시간(084500),진입제한시간(141500);
input : 거래횟수(2);
input : b1(80),진입눌림1(4),진입돌파1(1);
input : b2(90),진입눌림2(4),진입돌파2(1);
var : T1(0),entry(0),LL(0),EH(0),E1(0),H1(0),i1(0),S1(0),L1(0),V1(0);
var : Tcond(false);
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) Then
Tcond = true;
if (sdate != sdate[1] and stime >= 진입제한시간) or
(sdate == sdate[1] and stime >= 진입제한시간 and stime[1] < 진입제한시간) Then
Tcond = false;
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) Then{
T1 = TotalTrades;
E1 = 0;
LL = L;
}
if stime >= 진입시간 then{
if L < LL Then
LL = L;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if MarketPosition == 0 and entry == 0 Then{
if E1 == 0 and C >= LL+PriceScale*B1 Then{
E1 = 1;
H1 = H;
i1 = index;
V1 = LL; //시작점 종가
}
if E1 == 1 and index > i1 then{
if H > H1 Then
H1 = H;
#저가가 시작봉종가보다 클때만 눌림체크
if L >= V1 and L <= H1-PriceScale*진입눌림1 Then{
E1 = 2;
i1 = index;
S1 = H1;
}
}
//시작점 종가보다 낮은 가격이 발생하면 초기화
if E1 >= 1 and L < V1 Then{
E1 = 0;
LL = L;
}
if E1 == 2 and index > i1 and C >= S1+PriceScale*진입돌파1 and Tcond == true Then{
buy("b1");
}
}
if TotalTrades > TotalTrades[1] Then{
E1 = 0;
LL = L;
}
if L < LL Then
LL = L;
if MarketPosition == 0 and entry >= 1 and entry < 거래횟수 Then{
if E1 == 0 and C >= LL+PriceScale*B2 Then{
E1 = 1;
H1 = H;
i1 = index;
V1 = LL; //시작점 종가
}
if E1 == 1 and index > i1 then{
if H > H1 Then
H1 = H;
#저가가 시작봉종가보다 클때만 눌림체크
if L >= V1 and L <= H1-PriceScale*진입눌림2 Then{
E1 = 2;
i1 = index;
S1 = H1;
}
}
//시작점 종가보다 낮은 가격이 발생하면 초기화
if E1 >= 1 and L < V1 Then{
E1 = 0;
LL = L;
}
if E1 == 2 and index > i1 and C >= S1+PriceScale*진입돌파2 and Tcond == true Then{
buy("b2");
}
}
}
**********************************************************************************
안녕하세요
예스스탁입니다.
var : tt(0,Data1),t1(0,Data1),entry(0,Data1);
var : cond(False,Data2),x2(0,Data2);
tt = TotalTrades;
if bdate != Bdate[1] Then
{
t1 = tt[1];
cond = False;
}
entry = tt-t1 + IFF(MarketPosition != 0,1,0);
if tt > tt[1] Then
{
cond = False;
x2 = Data2(Index);
}
if entry == 1
and Data2(Index) >= x2+5
and Data2(CountIf(C>O,5)== 5 and AccumN(C-O,5) >= 2) Then
cond = true;
if MarketPosition == 0 and entry == 0 and 진입수식a then
buy("b1");
if MarketPosition == 0
and entry == 1
and cond == False
and 진입수식b then
buy("b2");
즐거운 하루되세요
> 목마와숙녀 님이 쓴 글입니다.
> 제목 : 문의
> 주간거래
data1 미니선물 30틱
data2 외인주식 5분봉(진입필터용)
하루 2번 진입하는 수식입니다.
첫번째 진입하고 청산.
두번째 진입할 때 필터를 추가하는 건입니다.
if 진입수식a then
buy("b1");
if b1청산 이후부터 발생한 !(data2 연속된 양봉 5개,몸통합 2) and 진입수식b then
buy("b2");
b1 청산 이후부터 발생한 봉부터 계산했다는 점이 중요합니다.
수식 작성 부탁드립니다.
항상 고맙습니다.
2025-07-29
198
글번호 192814
답변완료
거래량 관련 사용자함수 요청
안녕하세요.
1. n주 전 거래량
2. n월 전 거래량
3. 당일 누적 거래량(분봉 차트에서 활용)
사용자함수 작성 부탁드립니다.
감사합니다~
2025-07-28
212
글번호 192811
답변완료
분봉에서 일봉최고값
하기 답변 감사합니다.
1분봉 아닌 60분봉차트로 하면 실전에서 최대 10000봉까지니까 264일전의 값도 참조할수 있을 것 같은데요..
혹시 60분봉차트에서 최근 264일간의 최고 값을 구하는 수식으로 알려주시면 감사하겠습니다.
-------------------------------------------------------------------------------
안녕하세요
예스스탁입니다.
22*12이면 264일입니다.
분봉차트에 일봉데이터가 내부적으로 제공되지만
차트 첫봉 기준 +99일 정도입니다.
264일을 계산하기에는 데이터가 부족합니다.
주석과 같이 12일이면 22*12은 12로 변경하시면 됩니다.
var : cnt(0),hh(0);
hh = 0;
For cnt = 1 to (22*12)
{
if hh == 0 or (hh > 0 and DayHigh(cnt) > hh) Then
hh = DayHigh(cnt);
}
if hh > 0 and c > hh Then
즐거운 하루되세요
> 건곤대 님이 쓴 글입니다.
> 제목 : 분봉차트에서 일봉최고값
> 안녕하세요.
한투 해외선물운용중입니다.
일봉차트 전략에서 몇일동안의 최고값을 돌파하는 수식을 분봉차트로 변형하고 싶은데,
C >= Highest(H,22*12)[1] //12일동안의 최고값을 돌파
를 어떻게 바꿀 수 있을까요?
2025-07-28
205
글번호 192810
사공하늘 님에 의해서 삭제되었습니다.
2025-07-28
69
글번호 192809
답변완료
검색식 부탁드립니다~
오늘의 중심값 (H+L)/2 을 깨고 내려갔다가
다시 돌파할 때 or 다시 돌파 했다가 +,_ 0.5% 근처까지 눌릴 때
검색되게 부탁드립니다.
2025-07-28
216
글번호 192805
답변완료
시스템 매매 관련 문의 입니다...
불볕더위에 수고 많으세요...
아래수식은 예스 시스템 매매수식입니다..
시가 갭상승2% 이상에서는 매수하지 않도록 시스템 수정 부탁드립니다...
이부분도 변수로 % 조정할수 있도록 해주셨으면 감사하겠습니다...
input : short(12),long(26),P(60),시작일(20250714);
var : macdv(0),mav(0);
macdv = macd(short,long);
mav = ma(C,P);
if sDate >= 시작일 Then
{
if TotalTrades == TotalTrades[1] and macdv > 0 and C > mav Then
buy();
if TotalTrades == TotalTrades[1] and macdv < 0 and C < mav Then
sell();
}
2025-07-28
244
글번호 192795