커뮤니티
예스랭귀지 Q&A
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1314
글번호 230811
답변완료
질문 부탁드립니다
수고하십니다
몇 가지 여쭤보겠습니다
질문1)
aa[cnt]<h*1.15 and aa[cnt]>l*0.85
조건에 해당되는 aa[ ] 배열값을
ab[ ] 배열에 순서대로 넣으려고 하는데요
값이 제대로 안들어가는거 같네요
예를들어 aa[3], aa[5] 가 조건에 해당되면
ab[0] 에 aa[3] 값이, ab[1] 에 aa[5] 값이 들어가게 하려고 합니다
혹시 첫번째 for 문에서 aa[cnt] 에 사용됐던 cnt 변수가 이후에 중복 사용되면서 발생하는 문제일까요? cnt 대신 다른 변수를 사용했는데도 배열에 값이 안들어가긴 합니다
For cnt = 49 DownTo 1
{
aa[cnt] = aa[cnt-1];
}
aa[0] = value1;
For cnt=0 to 15
{
ab[cnt]=0;
}
For cnt=0 to 5
{
if aa[cnt]<h*1.15 and aa[cnt]>l*0.85 Then
{
For cns= 0 to 15
{
ab[cns]=aa[cnt];}
}
}
질문2)
질문2번 3번 수식은 가장 아래에 첨부했습니다
(작성한 식이 x가 0~3일때 각 경우의 갯수를 구하고 그 중에서 최대값을 구하는 식이 맞죠?)
수식에서 aa[x] 값 (value4) 을 배열 ac[] 에 넣으려고 합니다
아래와 같이 작성하면 될까요??
value4 에 aa[x] 값을 저장한다음에 배열에 넣기 때문에
For cnt = 49 DownTo 1
{
ac[cnt] = ac[cnt-1];
}
ac[0]=value4;
를 가장 아래에 다시 작성하는게 맞을까요?
그리고
aa[cnt]=aa[cnt-1]; 할때 cnt 를 썼기 때문에
밑에서 x 를 사용한것 처럼 cnt와는 다른 변수를 사용해야되는게 맞나요??
밑에서도 aa[] 에 cnt 를 쓰면 충돌을 하게 되나요?
질문3)
혹시 아래와 같이 작성해도 같은 의미가 되나요?
For cnt = 49 DownTo 1
{
For x = 0 to 3
{
For y = 1 to (id[0]-id[1])
{
if h[y]>aa[x] and l[y]<aa[x] then
value2 = value2+1;
}
if Value3 == 0 or (Value3 > 0 and Value2 > Value3) Then
{
Value3 = Value2;
Value4 = aa[x];
}
}
ac[cnt] = ac[cnt-1];
}
ac[0]=value4;
감사합니다
아래는 수식입니다
For cnt = 49 DownTo 1
{
aa[cnt] = aa[cnt-1];
ac[cnt] = ac[cnt-1];
}
aa[0] = value1;
ac[0]=value4;
Value2 = 0;
Value3 = 0;
Value4 = 0;
For x = 0 to 3
{
For y = 1 to (id[0]-id[1])
{
if h[y]>aa[x] and l[y]<aa[x] then
value2 = value2+1;
}
if Value3 == 0 or (Value3 > 0 and Value2 > Value3) Then
{
Value3 = Value2;
Value4 = aa[x];
}
}
2025-06-09
299
글번호 191465
yamu 님에 의해서 삭제되었습니다.
2025-06-05
1
글번호 191464
답변완료
조건검색식 문의드립니다.
input : 기간(200),a(70),b(11);
var : hull(0);
hull = WMa(WMa(c,기간/2)*2 - WMa(c, 기간), floor(sqrt(기간)));
if CrossUp(C,EnvelopeDown(a,b)) Then
var1 = O;
if sDate != sDate[1] Then
var2 = 0;
if CrossDown(hull,var1) Then
var2 = var2+1;
if var2 >= 1 and c > var1 and C <= var1*1.15 Then
Find(1);
위 수식은 일전에 만들어준 수식인데,
위 수식에서
b=ValueWhen(1,(crossup(c,envelopedown(a,b))),L);
위 지표라인으로 해당 부분을 변경(대체) 해주시면 감사드리겠습니다(___)
2025-06-05
305
글번호 191456
답변완료
부탁드립니다
수고하십니다
아래수식을 예스로 부탁드립니다
// INPUTS ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
int length = input(50)
float factor = input.float(1.0, "Factor", step = 0.1)
// Color
color col_up = input(color.lime, "", inline = "col")
color col_dn = input(color.rgb(221, 26, 26), "", inline = "col")
color col_ul = input(color.aqua, "", inline = "col")
// }
// CALCULATIONS――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
trend(length)=>
var direction = 0
var count_up = 0.
var count_dn = 0.
float volatility = ta.sma(high-low, 70) * factor
float upper = ta.highest(ta.sma(close, 25) + volatility, int(length/2))
float lower = ta.lowest(ta.sma(close, length) - volatility, int(length/2))
bool sig_up = ta.crossover(hlc3, upper) and barstate.isconfirmed
bool sig_dn = ta.crossunder(hlc3, lower) and barstate.isconfirmed
switch
sig_up => direction := 1
sig_dn => direction := -1
upper := direction == 1 ? float(na) : upper
lower := direction == -1 ? float(na) : lower
// Trends Duration
if direction == 1
count_up += 0.5
count_dn := 0
if direction == -1
count_dn += 0.5
count_up := 0
count_up := count_up > 70 ? 70 : count_up
count_dn := count_dn > 70 ? 70 : count_dn
[upper, lower, direction, count_up, count_dn]
[upper, lower, direction, count_up, count_dn] = trend(length)
float upper_band = lower + ta.atr(100)*5
float lower_band = upper - ta.atr(100)*5
color upper_col = color.new(col_dn, int(count_dn))
color lower_col = color.new(col_up, int(count_up))
color upper_band_col = color.new(col_ul, 70 - int(count_up))
color lower_band_col = color.new(col_ul, 70 - int(count_dn))
// }
// PLOT ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
plot(upper_band, "Upper Wave", style = plot.style_linebr, color = bar_index % 2 == 0 ? na : upper_band_col, linewidth = 1)
plot(lower_band, "Lower Wave", style = plot.style_linebr, color = bar_index % 2 == 0 ? na : lower_band_col, linewidth = 1)
plot(upper, "Upper Band", style = plot.style_linebr, color = upper_col, linewidth = 2)
plot(lower, "Lower Band", style = plot.style_linebr, color = lower_col, linewidth = 2)
plot(upper, "Upper Band Shadow", style = plot.style_linebr, color = color.new(col_dn, int(count_dn*2)), linewidth = 6)
plot(lower, "Lower Band Shadow", style = plot.style_linebr, color = color.new(col_up, int(count_up*2)), linewidth = 6)
plotshape(direction != direction[1] and direction == 1 ? lower : na, "Trend Up", shape.circle, location.absolute, size = size.tiny, color = col_up)
plotshape(direction != direction[1] and direction == 1 ? lower : na, "Trend Up", shape.circle, location.absolute, size = size.small, color = color.new(col_up, 70))
plotshape(direction != direction[1] and direction == -1 ? upper : na, "Trend Down", shape.circle, location.absolute, size = size.tiny, color = col_dn)
plotshape(direction != direction[1] and direction == -1 ? upper : na, "Trend Down", shape.circle, location.absolute, size = size.small, color = color.new(col_dn, 70))
// Trend Duration (70 max)
// if barstate.islast
// if direction == 1
// label.delete(label.new(bar_index, lower, str.tostring(count_up), color = color(na), style = label.style_label_left, textcolor = chart.fg_color)[1])
// if direction == -1
// label.delete(label.new(bar_index, upper, str.tostring(count_dn), color = color(na), style = label.style_label_left, textcolor = chart.fg_color)[1])
// }
2025-06-05
334
글번호 191449
답변완료
조건검색식 문의드립니다.
첫번째 수식 문의
이동 = ma(C, 20);
이동1 = ma(C, 200);
조건 = CrossUp(이동, 이동1);
라인 = Valuewhen(1, 조건, (H + L) / 1.95);
신호 = 라인 != Ref(라인, 1);
2번째 수식 문의
신=H-L;
호=MAX(C,O)-L;
조건=신/호>2 && H/C(1)>1.05;
기준선=valuewhen(1,조건,H);
신호=crossup(C, 기준선);
당일 장중에 30분봉 상에서, 위 신호가 뜬 종목에 대해서
다 검출할 수 있도록 해주시면 감사드리겠습니다.
종가 기준으로 신호가 뜬 자리가 아닌, 당일 장중에라도 위 신호가 발생 된 종목을 검출하고 싶습니다.
검색식은
첫번째 문의 1개
두번째 문의 1개 각각 부탁드리겠습니다!
감사드립니다(__)
2025-06-05
274
글번호 191442
답변완료
문의드립니다
야간선물용으로 지표를 만들때
(야간시간: 18시 ~ 다음날 6시)
StartTime(180000),EndTime(055000);
이렇게 표시하면 될까요?
아니면 endtime을 빼고 startime만 넣어도 자정넘어 다음날까지 지표출력이 될까요?
2025-06-05
251
글번호 191441
답변완료
수식 문의드립니다.
안녕하세요.
기존 사용하는 수식에 덧붙여서 사용할 수 있는 수식 부탁드립니다.
매수진입/매도진입 이후에 3분이 지나도록 손실구간에 있을 경우에는 자동 청산되도록 하는 수식을 부탁드리겠습니다.
항상 감사드립니다.
2025-06-05
240
글번호 191439
우유 님에 의해서 삭제되었습니다.
2025-06-05
50
글번호 191438
답변완료
수식수정요청
늘 도움 감사합니다 아래의 수식을 기반으로 3연속 이상 의 봉을 기반으로 박스를 그리고 싶은데 오류가 나오네요
살펴서 수정 부탁드립니다.
Inputs:
N(3), // 연속 봉 개수 기준
BullishColor(Red), // 양봉 선 색상
BearishColor(Blue), // 음봉 선 색상
LineWidth(1); // 선 굵기
Vars:
bullishCount(0),
bearishCount(0),
drewBullBox(False),
drewBearBox(False),
startBar(0),
firstDate(0),
firstTime(0),
lastDate(0),
lastTime(0),
lineTop(0),
lineBottom(0),
lineTopID(0),
lineBottomID(0);
// 연속 양봉 카운트 및 첫 봉 기록
If Close > Open Then
Begin
bullishCount = bullishCount + 1;
bearishCount = 0;
If bullishCount = 1 Then
Begin
startBar = CurrentBar;
firstDate = Date;
firstTime = Time;
End;
lastDate = Date;
lastTime = Time;
End
// 연속 음봉 카운트 및 첫 봉 기록
Else If Close < Open Then
Begin
bearishCount = bearishCount + 1;
bullishCount = 0;
If bearishCount = 1 Then
Begin
startBar = CurrentBar;
firstDate = Date;
firstTime = Time;
End;
lastDate = Date;
lastTime = Time;
End
Else
Begin
bullishCount = 0;
bearishCount = 0;
End;
// 연속 3봉 이상 양봉 구간일 때 선 그리기
If bullishCount >= N Then
Begin
lineTop = High; // 마지막 봉 고가
lineBottom = Low[startBar]; // 첫 봉 저가
// 이전에 그렸던 선 있으면 삭제
If drewBullBox Then
Begin
TL_Delete(lineTopID);
TL_Delete(lineBottomID);
End;
// 상단 선: 첫봉 시간 ~ 현재 시간, 가격 = 마지막 봉 고가
lineTopID = TL_New(firstDate, firstTime, lineTop, lastDate, lastTime, lineTop);
TL_SetColor(lineTopID, BullishColor);
TL_SetSize(lineTopID, LineWidth);
TL_SetStyle(lineTopID, Tool_Solid);
// 하단 선: 첫봉 시간 ~ 현재 시간, 가격 = 첫 봉 저가
lineBottomID = TL_New(firstDate, firstTime, lineBottom, lastDate, lastTime, lineBottom);
TL_SetColor(lineBottomID, BullishColor);
TL_SetSize(lineBottomID, LineWidth);
TL_SetStyle(lineBottomID, Tool_Solid);
drewBullBox = True;
drewBearBox = False;
End
Else If bullishCount = 0 And drewBullBox Then
Begin
// 연속 양봉 끊어졌을 때 선 삭제
TL_Delete(lineTopID);
TL_Delete(lineBottomID);
drewBullBox = False;
End;
// 연속 3봉 이상 음봉 구간일 때 선 그리기
If bearishCount >= N Then
Begin
lineTop = High[startBar]; // 첫 봉 고가
lineBottom = Low; // 마지막 봉 저가
If drewBearBox Then
Begin
TL_Delete(lineTopID);
TL_Delete(lineBottomID);
End;
// 상단 선: 첫 봉 고가
lineTopID = TL_New(firstDate, firstTime, lineTop, lastDate, lastTime, lineTop);
TL_SetColor(lineTopID, BearishColor);
TL_SetSize(lineTopID, LineWidth);
TL_SetStyle(lineTopID, Tool_Solid);
// 하단 선: 마지막 봉 저가
lineBottomID = TL_New(firstDate, firstTime, lineBottom, lastDate, lastTime, lineBottom);
TL_SetColor(lineBottomID, BearishColor);
TL_SetSize(lineBottomID, LineWidth);
TL_SetStyle(lineBottomID, Tool_Solid);
drewBearBox = True;
drewBullBox = False;
End
Else If bearishCount = 0 And drewBearBox Then
Begin
// 연속 음봉 끊어졌을 때 선 삭제
TL_Delete(lineTopID);
TL_Delete(lineBottomID);
drewBearBox = False;
End;
2025-06-05
313
글번호 191434