커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1547
글번호 230811
답변완료
문의드립니다
안녕하세요 관리자님
아래 지표는 관리자님이 보내주신 지표인데요
실거래에서 사용준비중입니다
다름이 아니오라
아래 지표에서
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
306
글번호 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
277
글번호 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
269
글번호 190956
낙도 님에 의해서 삭제되었습니다.
2025-05-19
22
글번호 190955
회원 님에 의해서 삭제되었습니다.
2025-05-19
11
글번호 190954
답변완료
수정을 부탁 드립니다.
안녕하세요!
아래 수식을 만들어 주셔서 잘 사용하고 있습니다.
다름이 아니라 식을 좀 변경해서 수정을 하고 싶습니다.
기존안: 콜과 풋(data2~data7)이 교차되면 data1 선물에 수평라인이 생성
수정안: 콜의 현재가가 풋의 당일고가, 또는 당일저가에 도달하였을때
풋의 현재가가 콜의 당일고가, 또는 당일저가에 도달하였을때
data1 선물에 수평라인이 생성
그리고 콜과풋 교차차트에서 콜 1종목에만 당일 저가와 고가의 수식을 아래와 같이 적용했는데 콜과풋 모두에게 적용이 되더군요! 혹시 콜에만 적용시킬 수 있는지요?
var1 = DayHigh;
var2 = DayLow;
Plot1(DayHigh,"당일고가");
Plot2(DayLow,"당일저가");
항상 노고에 감사드립니다.
var : cond21(False,Data2),cond22(False,Data2),c2(0);
var : cond41(False,Data4),cond42(False,Data2),c4(0);
var : cond61(False,Data6),cond62(False,Data2),c6(0);
cond21 = CrossUp(data2(HighD(0)),data3(HighD(0))) or
CrossUp(data3(HighD(0)),data2(HighD(0)));
cond22 = CrossDown(data2(LowD(0)),data3(LowD(0))) or
CrossDown(data3(LowD(0)),data2(LowD(0)));
cond41 = CrossUp(data4(HighD(0)),data5(HighD(0))) or
CrossUp(data5(HighD(0)),data4(HighD(0)));
cond42 = CrossDown(data4(LowD(0)),data5(LowD(0))) or
CrossDown(data5(LowD(0)),data4(LowD(0)));
cond61 = CrossUp(data6(HighD(0)),data7(HighD(0))) or
CrossUp(data7(HighD(0)),data6(HighD(0)));
cond62 = CrossDown(data6(LowD(0)),data7(LowD(0))) or
CrossDown(data7(LowD(0)),data6(LowD(0)));
if cond21 == true Then
{
var2 = Data1(c);
c2 = Blue;
}
if cond22 == true Then
{
var2 = Data1(c);
c2 = Red;
}
if cond41 == true Then
{
var4 = Data1(c);
c4 = Blue;
}
if cond42 == true Then
{
var4 = Data1(c);
c4 = Red;
}
if cond61 == true Then
{
var6 = Data1(c);
c6 = Blue;
}
if cond62 == true Then
{
var6 = Data1(c);
c6 = Red;
}
if var2 > 0 Then
Plot1(var2,"d2",c2);
if var4 > 0 Then
Plot2(var4,"d4",c4);
if var6 > 0 Then
Plot3(var6,"d6",c6);
2025-05-19
232
글번호 190953
답변완료
마켓타이밍 반영한 종목검색
안녕하세요!
항상 친절한 답변 너무 감사드립니다.
다름이 아니라, 혹시 시장지수의 이동평균수준에 따라, 종목검색을 시도 여부를 결정하도록,
코드를 구성하고 싶은데, 가능할런지요?
방법이 있다면 대략 어떻게 해야하는지 대에충 안내 좀 부탁 드립니다.
매번 질문이 형편없어 죄송합니다.
좋은하루 되세요.
2025-05-19
235
글번호 190952
답변완료
문의드립니다
갭상승 또는 갭하락하는 경우 그 수치만큼 차트에 박스로 채우고 싶은데요
예를 들어 선물의 경우 1 p 갭상승한 경우 빨간색 박스 1p 짜리를 어제종가와 금일 시가 사이에 표시하고 싶습니다.
빈대로 갭하락 1p 한 경우 블루색 1p 박스를 어제종가와 금일 시가 사이에 표시합니다
가능할까요?
감사합니다
2025-05-19
239
글번호 190951
답변완료
종목 검색 부탁드립니다.
AA=(H+L+C)/3;
BB=AA*V;
X1=SUM(BB,기간);
X2=SUM(V,기간);
S1=X1/X2;
기간(20) 종목검색식 부탁드립니다
2025-05-19
269
글번호 190941