커뮤니티
예스랭귀지 Q&A
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1317
글번호 230811
답변완료
시간설정
늘 감사합니다.
차트에 시간지정 설정하기
8시45분을 기준으로 15시45분 까지 약17분간격으로 검은색 세로선 그리기.
종료시간 까지 총25개 선입니다.
색상변경, 굵기변경, 시간간격을 변경하면 갯수가 변할수 있으면 너무 좋아요.
감사함니다
2025-05-20
262
글번호 190975
답변완료
답변주신 내용중 공부상 질문
안녕하세요 아래에 같이 지난 요청에 수식을 작성해주셨는데요.
input : N(1);
var : x(0),y(0);
Array : VV[2,20](0),box[20](0);
For x = 19 DownTo 1
{
VV[0,x] = VV[0,x-1];
VV[1,x] = VV[1,x-1];
}
VV[0,0] = v;
VV[1,0] = Index;
var1 = Sort2DArray(VV,2,20,1);
For x = 0 to N-1
{
Box_Delete(box[x]);
var1 = H[index-vv[1,x]];
var2 = L[index-vv[1,x]];
box[x] = Box_New(sDate[index-vv[1,x]],sTime[index-vv[1,x]],var1,NextBarSdate,NextBarStime,var2);
Box_SetColor(box[x],Red);
Box_SetFill(box[x],true);
}
위 코드에서
var1 = Sort2DArray(VV,2,20,1); 부분과 for문 내부에서
var1 = H[index-vv[1,x]]; 를 사용하는 부분이 공부하는데 조금 어렵습니다.
동일한 변수명을 재사용한것과 배열을 정렬해서 배열이 아닌 변수에 값을 넘기는것이
이해가 잘 되지 않는 부분입니다.
공부를 위해서 설명과 코드에 자세한 주석을 달아주시길 부탁드립니다!!
항상 답변 감사드립니다.
2025-05-19
224
글번호 190974
답변완료
항상 감사합니다 지표 변환 부탁드립니다
// INPUTS ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
tf = input.timeframe("D")
color_up = input.color(color.rgb(229, 148, 27), "", inline = "color")
color_dn = input.color(color.rgb(30, 142, 234), "", inline = "color")
var array_vals = array.new<float>()
var count = 0
// }
// CALCULATIONS――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
convert_tf(tf)=>
time_in = timeframe.in_seconds(tf) / 60 / 60
time_in >= 24 ? tf : time_in >= 1 ? str.tostring(time_in) + "h" : tf + "m"
current_tf_min = timeframe.in_seconds("")/60
user_tf_min = timeframe.in_seconds(tf)/60
bars_amount = int(user_tf_min / current_tf_min)
tf_change = timeframe.change(tf)
if tf_change
label.new(bar_index, array_vals.max(), str.tostring(array_vals.max(), "#,###.###"), style = label.style_label_left, color = color(na), textcolor = chart.fg_color)
label.new(bar_index, array_vals.min(), str.tostring(array_vals.min(), "#,###.###"), style = label.style_label_left, color = color(na), textcolor = chart.fg_color)
array_vals.clear()
count := 0
if not tf_change
count +=1
array_vals.push(high)
array_vals.push(low)
max = array_vals.max()
min = array_vals.min()
tf_trend = array_vals.avg()
color tf_col = tf_trend > tf_trend[1] ? color_up : color_dn
color time_color = color.from_gradient(count, 0, bars_amount, color.new(tf_col, 0), color.new(tf_col, 100))
// }
// PLOT ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
plotshape(tf_change[1] ? tf_trend : na, "", shape.circle, location.absolute, color.new(chart.fg_color, 30), size = size.tiny)
plot(tf_trend, "HTF Trend", color = tf_change ? color(na) : tf_col, style = plot.style_linebr, linewidth = 1)
plot(tf_trend, "HTF Trend", color = tf_change ? color(na) : time_color, style = plot.style_linebr, linewidth = 5)
plot(max != max[1] ? na : max, "High Level", color = bar_index % 2 == 0 ? chart.fg_color : color(na), style = plot.style_steplinebr)
plot(min != min[1] ? na : min, "Low Level", color = bar_index % 2 == 0 ? chart.fg_color : color(na), style = plot.style_steplinebr)
bgcolor(tf_change ? color.new(chart.fg_color, 85) : na)
if barstate.islast
l1 = label.new(bar_index, array_vals.max(), str.tostring(array_vals.max(), "#,###.###"), style = label.style_label_left, color = color(na), textcolor = chart.fg_color)
l2 = label.new(bar_index, array_vals.min(), str.tostring(array_vals.min(), "#,###.###"), style = label.style_label_left, color = color(na), textcolor = chart.fg_color)
label.delete(l1[1])
label.delete(l2[1])
dash = table.new(position.top_right, 10, 10)
dash.cell(0, 0, "Timeframe: ", text_color = chart.fg_color)
dash.cell(1,0, convert_tf(tf), text_color = chart.fg_color)
dash.cell(0, 1, "Trend: ", text_color = chart.fg_color)
dash.cell(1, 1, tf_trend > tf_trend[1] ? "🢁" : "🢃", text_color = tf_col)
// }
2025-05-19
286
글번호 190973
남한산성 님에 의해서 삭제되었습니다.
2025-05-19
0
글번호 190972
답변완료
문의드립니다
안녕하세요 관리자님
아래 지표는 관리자님이 보내주신 지표인데요
실거래에서 사용준비중입니다
다름이 아니오라
아래 지표에서
muliplier1~3을 하나는 2
muliplier1~3을 하나는 3
으로 하여 지표를 겹치면 첨부한 그림과 같이 선이 각각 2개씩 나오텐데요
이를 하나의 지표로 만들어서 선과 선 사이에 색깔을 입힐려고 합니다
수정하려고 했는데 못하겠어요ㅜㅜ 도와주세요
-아 래-
input : period1(10),multiplier1(3);
input : period2(20),multiplier2(3);
input : period3(30),multiplier3(3);
var : src(0);
var : AtrV1(0),upperBand1(0),lowerBand1(0), prevLowerBand1(0), prevUpperBand1(0);
var : prevSuperTrend1(0), superTrend1(C), direction1(0),alpha1(0),source1(0);
var : AtrV2(0),upperBand2(0),lowerBand2(0), prevLowerBand2(0), prevUpperBand2(0);
var : prevSuperTrend2(0), superTrend2(C), direction2(0),alpha2(0),source2(0);
var : AtrV3(0),upperBand3(0),lowerBand3(0), prevLowerBand3(0), prevUpperBand3(0);
var : prevSuperTrend3(0), superTrend3(C), direction3(0),alpha3(0),source3(0);
src = (H+L)/2;
if CurrentBar > 1 Then
{
alpha1 = 1 / period1;
source1 = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV1 = alpha1 * source1 + (1 - alpha1) * ATrV1[1]; //지수가중이평방식
//ATrV = ma(source,AtrPeriod); //단순이평방식
upperBand1 = src + multiplier1 * AtrV1;
lowerBand1 = src - multiplier1 * AtrV1;
prevLowerBand1 = lowerBand1[1];
prevUpperBand1 = upperBand1[1];
if lowerBand1 > prevLowerBand1 or close[1] < prevLowerBand1 Then
lowerBand1 = lowerBand1;
Else
lowerBand1 = prevLowerBand1;
if upperBand1 < prevUpperBand1 or close[1] > prevUpperBand1 Then
upperBand1 = upperBand1;
Else
upperBand1 = prevUpperBand1;
if C > UpperBand1 Then
direction1 = 1;
if C < LowerBand1 Then
direction1 = -1;
if direction1 == 1 Then
supertrend1 = lowerband1;
Else
supertrend1 = upperband1;
alpha2 = 1 / period2;
source2 = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV2 = alpha2 * source2 + (1 - alpha2) * ATrV2[1]; //지수가중이평방식
//ATrV = ma(source,AtrPeriod); //단순이평방식
upperBand2 = src + multiplier2 * AtrV2;
lowerBand2 = src - multiplier2 * AtrV2;
prevLowerBand2 = lowerBand2[1];
prevUpperBand2 = upperBand2[1];
if lowerBand2 > prevLowerBand2 or close[1] < prevLowerBand2 Then
lowerBand2 = lowerBand2;
Else
lowerBand2 = prevLowerBand2;
if upperBand2 < prevUpperBand2 or close[1] > prevUpperBand2 Then
upperBand2 = upperBand2;
Else
upperBand2 = prevUpperBand2;
if C > UpperBand2 Then
direction2 = 1;
if C < LowerBand2 Then
direction2 = -1;
if direction2 == 1 Then
supertrend2 = lowerband2;
Else
supertrend2 = upperband2;
alpha3 = 1 / period3;
source3 = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV3 = alpha3 * source3 + (1 - alpha3) * ATrV3[1]; //지수가중이평방식
//ATrV = ma(source,AtrPeriod); //단순이평방식
upperBand3 = src + multiplier3 * AtrV3;
lowerBand3 = src - multiplier3 * AtrV3;
prevLowerBand3 = lowerBand3[1];
prevUpperBand3 = upperBand3[1];
if lowerBand3 > prevLowerBand3 or close[1] < prevLowerBand3 Then
lowerBand3 = lowerBand3;
Else
lowerBand3 = prevLowerBand3;
if upperBand3 < prevUpperBand3 or close[1] > prevUpperBand3 Then
upperBand3 = upperBand3;
Else
upperBand3 = prevUpperBand3;
if C > UpperBand3 Then
direction3 = 1;
if C < LowerBand3 Then
direction3 = -1;
if direction3 == 1 Then
supertrend3 = lowerband3;
Else
supertrend3 = upperband3;
if C > superTrend1 Then
{
Plot1(superTrend1,"매수1", Yellow, 0, 1);
NoPlot(2);
}
Else
{
Plot2(superTrend1,"매도1", Indigo, 0, 1);
NoPlot(1);
}
}
2025-05-19
293
글번호 190971
답변완료
질문 부탁드립니다
지난 답변 적용하면서 궁금한 사항 몇 가지가 있어서 여쭤보고 싶습니다
질문1)
tl_getvalue 관련인데요
식에서 var22 가 의미하는건, 현재봉 시작점에서의 추세선 값을 의미하는게 맞지 않나요?~
아래 식에서 (분봉에서 보고있을때)
tttl1[0] 의 끝점을 sd[0],st[0] 이나 sd[1],sd[1] 와 같이 가장 최근만족봉과 가까운 지점으로 설정했을때는
var22 의 값 (Var22=TL_GetValue(tttl1[0],sDate,sTime);) 이 제대로 나오는데
끝점을 sd[5],st[5] (시작점은 이보다 더 과거) 처럼 더 과거의 시점으로 했을때는 var22 값에 오차가 생기는 현상이 발생합니다. 즉 var22 값과 현재봉 시작점에서의 추세선 값을 비교해봤을때 간극이 생깁니다.
혹시 조건 if 문에서 and (d1 == 0 or (d1 > 0 and dd >= d1+5)) 이 부분과 관련이 있는 현상일까요?? 아니면 분봉에서 적용한것과 관련이 있을까요?
질문2)
추세선간의 crossup 관련 이해가 어려운 부분이 있습니다
crossup(h,ma(c,20))이
"한봉전의 h값이 한봉전 ma 값보다는 작고, 현재 h가 ma 보다 크다" 라는 의미처럼
CrossUp(TL_GetValue(tttl1[1],sDate,sTime),TL_GetValue(tttl1[0],sDate,sTime))
이 의미하는건,
이전 조건만족봉 위치에서의 tttl1[1] 이 tttl1[0] 보다 작고,
현재 만족봉에서의 tttl1[1] 이 tttl1[0] 보다 크다라는 의미로 이해하는게 맞나요?
즉 현재만족봉 시점에서 봤을때
tttl1[2] < tttl1[1] 이고 tttl1[1] > tttl1[0] 이라는 의미가 되는건가요? 아니면 단순히 현재만족봉기준 한봉전과 비교하는건가요??
해석을 도와주셨으면 합니다
그리고
Var22=TL_GetValue(tttl1[0],sDate,sTime);
if CrossUp(TL_GetValue(tttl1[1],sDate,sTime),TL_GetValue(tttl1[0],sDate,sTime)) Then
var11 = TL_GetValue(tttl1[0],sDate,sTime);
이렇게 작성했을때 crossup 조건이 만족했을때 var11 에는 어떤 값이 들어가게 되며 var22 와는 어떻게 달라지는건지도 해석이 궁금합니다.
감사합니다
아래는 수식입니다
var : cnt(0), sum1(0), sumi1(0),summ(0),tt(0),hh(0),ll(0),tl(0),tl1(0),n(0),ae(0);
var: sum2(0),sumi2(0),count(0),sumaa(0),sumai(0),avgaa(0);
var : t(0),StartBarIndex(0),dd(0),d1(0),d2(0),e1(0),e2(0);
Array : ii[50](0),aa[50](0),cc[50](0),ee[50](0),ttl[30](0),txtt[40](0),
tttl1[40](0),tttl2[40](0),sd[45](0),st[45](0),ad[50](0),at[50](0);
if Bdate != Bdate[1] Then
{
DD = DD+1;
}
if (h>l*1.08)
and (d1 == 0 or (d1 > 0 and dd >= d1+5)) Then
{
d1 = dd;
hh = h;
var1 = Index;
Var2 = var1[1];
Var3 = Var2[1];
sum1=0; sumi1=0; sum2=0; sumi2=0;
tl=TL_NEW(sDate,sTime,100,sDate,sTime,999999);
TL_SetSize(tl,0);
TL_SetColor(tl,Gray);
For cnt = 1 to (var1-Var2)
{
sum1=sum1+l[cnt];
sumi1=sumi1+1;
}
value1=sum1/sumi1;
For cnt = 49 DownTo 1
{
aa[cnt] = aa[cnt-1];
sd[cnt] =sd[cnt-1];
st[cnt] =st[cnt-1];
txtt[cnt] = txtt[cnt-1];
tttl1[cnt]=tttl1[cnt-1];
tttl2[cnt]=tttl2[cnt-1];
}
aa[0] = value1;
sd[0] = sDate;
st[0] = sTime;
TL_SetExtRight( tttl1[3],False);
tttl1[0] = TL_New(sd[5],st[5],aa[5],sd[3],st[3],aa[3]);
TL_SetDrawMode( tttl1[0],0);
TL_Delete( tttl1[3]);
TL_SetExtRight( tttl1[0],true);
TL_SetColor(tttl1[0],Black);
TL_SetColor(tttl1[3],Green);
TL_SetSize( tttl1[0],0);
TL_SetSize( tttl1[3],1);
Var22=TL_GetValue(tttl1[0],sDate,sTime);
if CrossUp(TL_GetValue(tttl1[1],sDate,sTime),TL_GetValue(tttl1[0],sDate,sTime)) Then
var11 = TL_GetValue(tttl1[0],sDate,sTime);
txtt[0]=text_new(sd[0],st[0],aa[0],NumToStr(Var22,0)+" "+
NumToStr((aa[0]-aa[1])/aa[1]*100,0)+"%");
Text_SetSize(txtt[0],15);
Text_SetBold(txtt[0],1);
Text_SetStyle(txtt[0], 0, 0);
}
if aa[0] >0 then Plot11(aa[0],"average",Cyan,Def,1);
2025-05-20
260
글번호 190964
답변완료
안녕하세요.
다음 수식의 라인을 종가가 돌파하는 종목을 찾고 싶습니다.
지표와 종목검색 부탁드립니다. 감사합니다.
MS=MA(C, 기간1, 단순);
ML=MA(C, 기간2, 단순);
볼륨=(avg(V,shortPeriod)-avg(V,longPeriod))
/
avg(V,shortPeriod)*100;
조건= Crossup(MS, ML)&& 볼륨>0;
ValueWhen(1, 조건, MS)
shortPeriod 5
longPeriod 20
기간1 5
기간2 20
2025-05-19
253
글번호 190956
낙도 님에 의해서 삭제되었습니다.
2025-05-19
22
글번호 190955
우유 님에 의해서 삭제되었습니다.
2025-05-19
11
글번호 190954