커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1676
글번호 230811
답변완료
문의드립니다
1. 하기값들을 지표속성-차트표시에서 (칼라와 굵기를)선택할수 있게 부탁드립니다.
per1(23.7),per2(38.2),per3(50.0),Per4(61.8),per5(74.6)
2. 추가로 (0), (100)값도 추가해주세요.
------------------------------------------------------------------------
Input:length(12),per1(23.7),per2(38.2),per3(50.0),Per4(61.8),per5(74.6);
Var:j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0),diff(0);
Array:valArr[10](0),barArr[10](0),turnPntArr[10]("");
For j = 0 To 9
{
barArr[j] = barArr[j] + 1;
}
Condition1 = Highest(H,length) == H and lastHiVal <> H;
Condition2 = Lowest(L,length) == L and lastLoVal <> L;
If Condition1 Then lastHiVal = H;
If Condition2 Then lastLoVal = L;
turnPntBit = "";
If Condition1 and Condition2 Then
{
If Max(valArr[1],valArr[2]) < H and Min(valArr[1],valArr[2]) > L Then
turnPntBit = "HiLo";
Else If Max(valArr[1],valArr[2]) < H Then turnPntBit = "Hi";
Else If Min(valArr[1],valArr[2]) > L Then turnPntBit = "Lo";
}
Else If Condition1 Then turnPntBit = "Hi";
Else If Condition2 Then turnPntBit = "Lo";
// if 전환점구분에 값이 있을 때만 then 아래 실행, 없으면 통과
If turnPntBit <> "" Then
{
If turnPntBit == "HiLo" Then
{
valArr[1] = IFF(turnPntArr[1] == "Hi",H,L);
barArr[1] = 0;
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
If turnPntArr[1] == "Hi" Then
turnPntBit = "Lo";
Else
turnPntBit = "Hi";
}
If turnPntBit <> turnPntArr[1] Then
{
for j = 8 downto 1
{
valArr[j+1] = valArr[j];
barArr[j+1] = barArr[j];
turnPntArr[j+1] = turnPntArr[j];
}
}
If turnPntBit <> turnPntArr[1] or
(turnPntBit == turnPntArr[1] and
((turnPntBit == "Hi" and valArr[1] < H) or
(turnPntBit == "Lo" and valArr[1] > L))) Then
{
valArr[1] = IFF(turnPntBit == "Hi",H,L);
barArr[1] = 0;
turnPntArr[1] = turnPntBit;
If turnPntArr[1][1] <> turnPntArr[1][0] Then
TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],
sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
Else
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
}
# TL_SetSize(TL1,1);
# TL_SetColor(TL1,GREEN);
if turnPntArr[1] != turnPntArr[1][1] and barArr[3] > 0 Then{
if turnPntArr[2] == "Hi" then{
value1 = TL_New(sdate[barArr[3]],stime[barArr[3]],L[barArr[3]],sdate[barArr[2]],stime[barArr[2]],L[barArr[3]]);
value2 = TL_New(sdate[barArr[3]],stime[barArr[3]],H[barArr[4]],sdate[barArr[2]],stime[barArr[2]],H[barArr[4]]);
diff = abs(L[barArr[3]]-H[barArr[4]]);
value3 = TL_New(sdate[barArr[3]],stime[barArr[3]],H[barArr[4]]-diff*(per1/100),sdate[barArr[2]],stime[barArr[2]],H[barArr[4]]-diff*(per1/100));
value4 = TL_New(sdate[barArr[3]],stime[barArr[3]],H[barArr[4]]-diff*(per2/100),sdate[barArr[2]],stime[barArr[2]],H[barArr[4]]-diff*(per2/100));
value5 = TL_New(sdate[barArr[3]],stime[barArr[3]],H[barArr[4]]-diff*(per3/100),sdate[barArr[2]],stime[barArr[2]],H[barArr[4]]-diff*(per3/100));
value6 = TL_New(sdate[barArr[3]],stime[barArr[3]],H[barArr[4]]-diff*(per4/100),sdate[barArr[2]],stime[barArr[2]],H[barArr[4]]-diff*(per4/100));
value7 = TL_New(sdate[barArr[3]],stime[barArr[3]],H[barArr[4]]-diff*(per5/100),sdate[barArr[2]],stime[barArr[2]],H[barArr[4]]-diff*(per5/100));
TL_SetColor(value1,blue);
TL_SetColor(value2,blue);
TL_SetColor(value3,blue);
TL_SetColor(value4,blue);
TL_SetColor(value5,blue);
TL_SetColor(value6,blue);
TL_SetColor(value7,blue);
}
Else{
value1 = TL_New(sdate[barArr[3]],stime[barArr[3]],H[barArr[3]],sdate[barArr[2]],stime[barArr[2]],H[barArr[3]]);
value2 = TL_New(sdate[barArr[3]],stime[barArr[3]],L[barArr[4]],sdate[barArr[2]],stime[barArr[2]],L[barArr[4]]);
diff = abs(L[barArr[4]]-H[barArr[3]]);
value3 = TL_New(sdate[barArr[3]],stime[barArr[3]],L[barArr[4]]+diff*(per1/100),sdate[barArr[2]],stime[barArr[2]],L[barArr[4]]+diff*(per1/100));
value4 = TL_New(sdate[barArr[3]],stime[barArr[3]],L[barArr[4]]+diff*(per2/100),sdate[barArr[2]],stime[barArr[2]],L[barArr[4]]+diff*(per2/100));
value5 = TL_New(sdate[barArr[3]],stime[barArr[3]],L[barArr[4]]+diff*(per3/100),sdate[barArr[2]],stime[barArr[2]],L[barArr[4]]+diff*(per3/100));
value6 = TL_New(sdate[barArr[3]],stime[barArr[3]],L[barArr[4]]+diff*(per4/100),sdate[barArr[2]],stime[barArr[2]],L[barArr[4]]+diff*(per4/100));
value7 = TL_New(sdate[barArr[3]],stime[barArr[3]],L[barArr[4]]+diff*(per5/100),sdate[barArr[2]],stime[barArr[2]],L[barArr[4]]+diff*(per5/100));
TL_SetColor(value1,RED);
TL_SetColor(value2,red);
TL_SetColor(value3,RED);
TL_SetColor(value4,red);
TL_SetColor(value5,RED);
TL_SetColor(value6,red);
TL_SetColor(value7,red);
}
}
TL_Delete(value11);
TL_Delete(value12);
TL_Delete(value13);
TL_Delete(value14);
TL_Delete(value15);
TL_Delete(value16);
TL_Delete(value17);
TL_Delete(value21);
TL_Delete(value22);
TL_Delete(value23);
TL_Delete(value24);
TL_Delete(value25);
TL_Delete(value26);
TL_Delete(value27);
if turnPntArr[1] == "Hi" then{
value11 = TL_New(sdate[barArr[2]],stime[barArr[2]],L[barArr[3]],sdate[barArr[1]],stime[barArr[1]],L[barArr[3]]);
value12 = TL_New(sdate[barArr[2]],stime[barArr[2]],H[barArr[2]],sdate[barArr[1]],stime[barArr[1]],H[barArr[2]]);
diff = abs(L[barArr[3]]-H[barArr[2]]);
value13 = TL_New(sdate[barArr[2]],stime[barArr[2]],H[barArr[2]]-diff*(per1/100),sdate[barArr[1]],stime[barArr[1]],H[barArr[2]]-diff*(per1/100));
value14 = TL_New(sdate[barArr[2]],stime[barArr[2]],H[barArr[2]]-diff*(per2/100),sdate[barArr[1]],stime[barArr[1]],H[barArr[2]]-diff*(per2/100));
value15 = TL_New(sdate[barArr[2]],stime[barArr[2]],H[barArr[2]]-diff*(per3/100),sdate[barArr[1]],stime[barArr[1]],H[barArr[2]]-diff*(per3/100));
value16 = TL_New(sdate[barArr[2]],stime[barArr[2]],H[barArr[2]]-diff*(per4/100),sdate[barArr[1]],stime[barArr[1]],H[barArr[2]]-diff*(per4/100));
value17 = TL_New(sdate[barArr[2]],stime[barArr[2]],H[barArr[2]]-diff*(per5/100),sdate[barArr[1]],stime[barArr[1]],H[barArr[2]]-diff*(per5/100));
TL_SetColor(value11,blue);
TL_SetColor(value12,blue);
TL_SetColor(value13,blue);
TL_SetColor(value14,blue);
TL_SetColor(value15,blue);
TL_SetColor(value16,blue);
TL_SetColor(value17,blue);
value21 = TL_New(sdate[barArr[1]],stime[barArr[1]],H[barArr[1]],sdate,stime,H[barArr[1]]);
value22 = TL_New(sdate[barArr[1]],stime[barArr[1]],L[barArr[2]],sdate,stime,L[barArr[2]]);
diff = abs(L[barArr[2]]-H[barArr[1]]);
value23 = TL_New(sdate[barArr[1]],stime[barArr[1]],L[barArr[2]]+diff*(per1/100),sdate,stime,L[barArr[2]]+diff*(per1/100));
value24 = TL_New(sdate[barArr[1]],stime[barArr[1]],L[barArr[2]]+diff*(per2/100),sdate,stime,L[barArr[2]]+diff*(per2/100));
value25 = TL_New(sdate[barArr[1]],stime[barArr[1]],L[barArr[2]]+diff*(per3/100),sdate,stime,L[barArr[2]]+diff*(per3/100));
value26 = TL_New(sdate[barArr[1]],stime[barArr[1]],L[barArr[2]]+diff*(per4/100),sdate,stime,L[barArr[2]]+diff*(per4/100));
value27 = TL_New(sdate[barArr[1]],stime[barArr[1]],L[barArr[2]]+diff*(per5/100),sdate,stime,L[barArr[2]]+diff*(per5/100));
TL_SetColor(value21,RED);
TL_SetColor(value22,red);
TL_SetColor(value23,RED);
TL_SetColor(value24,red);
TL_SetColor(value25,RED);
TL_SetColor(value26,red);
TL_SetColor(value27,red);
}
Else{
value11 = TL_New(sdate[barArr[2]],stime[barArr[2]],H[barArr[2]],sdate[barArr[1]],stime[barArr[1]],H[barArr[2]]);
value12 = TL_New(sdate[barArr[2]],stime[barArr[2]],L[barArr[3]],sdate[barArr[1]],stime[barArr[1]],L[barArr[3]]);
diff = abs(L[barArr[3]]-H[barArr[2]]);
value13 = TL_New(sdate[barArr[2]],stime[barArr[2]],L[barArr[3]]+diff*(per1/100),sdate[barArr[1]],stime[barArr[1]],L[barArr[3]]+diff*(per1/100));
value14 = TL_New(sdate[barArr[2]],stime[barArr[2]],L[barArr[3]]+diff*(per2/100),sdate[barArr[1]],stime[barArr[1]],L[barArr[3]]+diff*(per2/100));
value15 = TL_New(sdate[barArr[2]],stime[barArr[2]],L[barArr[3]]+diff*(per3/100),sdate[barArr[1]],stime[barArr[1]],L[barArr[3]]+diff*(per3/100));
value16 = TL_New(sdate[barArr[2]],stime[barArr[2]],L[barArr[3]]+diff*(per4/100),sdate[barArr[1]],stime[barArr[1]],L[barArr[3]]+diff*(per4/100));
value17 = TL_New(sdate[barArr[2]],stime[barArr[2]],L[barArr[3]]+diff*(per5/100),sdate[barArr[1]],stime[barArr[1]],L[barArr[3]]+diff*(per5/100));
TL_SetColor(value11,RED);
TL_SetColor(value12,red);
TL_SetColor(value13,RED);
TL_SetColor(value14,red);
TL_SetColor(value15,RED);
TL_SetColor(value16,red);
TL_SetColor(value17,red);
value21 = TL_New(sdate[barArr[1]],stime[barArr[1]],L[barArr[1]],sdate,stime,L[barArr[1]]);
value22 = TL_New(sdate[barArr[1]],stime[barArr[1]],H[barArr[2]],sdate,stime,H[barArr[2]]);
diff = abs(L[barArr[1]]-H[barArr[2]]);
value23 = TL_New(sdate[barArr[1]],stime[barArr[1]],H[barArr[2]]-diff*(per1/100),sdate,stime,H[barArr[2]]-diff*(per1/100));
value24 = TL_New(sdate[barArr[1]],stime[barArr[1]],H[barArr[2]]-diff*(per2/100),sdate,stime,H[barArr[2]]-diff*(per2/100));
value25 = TL_New(sdate[barArr[1]],stime[barArr[1]],H[barArr[2]]-diff*(per3/100),sdate,stime,H[barArr[2]]-diff*(per3/100));
value26 = TL_New(sdate[barArr[1]],stime[barArr[1]],H[barArr[2]]-diff*(per4/100),sdate,stime,H[barArr[2]]-diff*(per4/100));
value27 = TL_New(sdate[barArr[1]],stime[barArr[1]],H[barArr[2]]-diff*(per5/100),sdate,stime,H[barArr[2]]-diff*(per5/100));
TL_SetColor(value21,blue);
TL_SetColor(value22,blue);
TL_SetColor(value23,blue);
TL_SetColor(value24,blue);
TL_SetColor(value25,blue);
TL_SetColor(value26,blue);
TL_SetColor(value27,blue);
}
2021-10-05
779
글번호 152636
답변완료
키움수식을 예스랭귀지로 변환 부탁드립니다.
MM=floor(date/100);
CC=sum(C);
월S=CountSince(MM!=MM(1), C>0);
월C=CC-valuewhen(1, MM!=MM(1), CC(1));
ff=월C/월S;
2021-10-05
845
글번호 152635
답변완료
문의드립니다
안녕하세요?
직전봉의 종가를 기준으로 직전봉의 고가와저가의 종가대비 진폭의틱수를 사진처럼 ()속에 표시하고싶습니다
감사드립니다
var : tx1(0),tx2(0),tx3(0);
Text_Delete(tx1);
Text_Delete(tx2);
Text_Delete(tx3);
tx1 = Text_New(sdate,stime,H,NumToStr(H,2));
tx2 = Text_New(sdate,stime,L,NumToStr(L,2));
tx3 = Text_New(sdate,stime,C,NumToStr(C,2));
Text_SetStyle(Tx1,5,5);
Text_SetStyle(Tx2,7,7);
Text_SetStyle(Tx3,7,7);
Text_SetBold(tx2,30);
Text_SetBold(tx1,10);
Text_SetBold(tx3,10);
Text_SetColor(TX1,BLUe);
Text_SetColor(TX2,REd);
Text_SetColor(TX3,BLACK);
Text_SetSize(TX1,20);
Text_SetSize(TX2,20);
Text_SetSize(TX3,20);
2021-10-05
908
글번호 152634
답변완료
문의드립니다.
안녕하세요.
무포지션에서 음봉뒤에 첫 양봉종가 < 두번 째 양봉 종가 인 양봉이 두개
연속시 1 대양봉 이라고 하고
이 때의 1 대양봉 시가 = 첫양봉 시가 라고 정의 합니다.
1 대 양봉이 형성되고 난 후에
다시 음봉 뒤에 첫 양봉종가 < 두번 째 양봉 종가 인 양봉이 두개
연속시 2 대양봉 이라고 하고
이 때의 2 대양봉 시가 = 첫양봉 시가 라고 정의 합니다.
매수
2 대양봉이 형성시 2 대양봉 시가 > 1 대양봉 시가
만족하면 매수합니다. 2 대양봉이 형성시
매수 하거나 매수가 안될 때 ( 2 대양봉 시가 < 1 대양봉 시가 이어서)
2 대양봉은 1 대양봉으로 치환됩니다.
즉 1 대양봉 시가 = 2 대양봉 시가로 치환합니다.
즉 대양봉이 만들어 질 때 이전 대양봉 시가와 비교하여
현재 대양봉 시가가 이전 대양봉 시가
보다 높으면 매수하는 것입니다.
매수청산
매수후 음봉이 발생하고 음봉 종가가 바로 이전 양봉의 시가를 하방으로 깨면
청산합니다.
매도
매도도 같은 논리로 부탁드립니다.
2021-10-04
790
글번호 152633
답변완료
지표식 부탁드립니다.
항상 도움 주셔서 감사합니다.
볼린저밴드를 변형하여 차트에 표현하고 싶습니다.
아래 키움수식을 예스스탁 수식으로 부탁드립니다.
# 지표식 1
지표명 볼밴상하단_첫돌파(일목균형표)
지표조건설정
기간 20
D1 2
표시가격 C
수식1 상단첫돌파(박스상단)
상=BBANDSUP(기간,D1);
하=BBANDSDown(기간,D1);
중=BBANDSC(기간,D1);
BN=BARSSINCE(TIME!=TIME);
BN_UP중=Valuewhen(1,CrossUP(C,중),BN);
BN_DN중=Valuewhen(1,CrossDown(C,중),BN);
BN_DN하=Valuewhen(1,CrossDown(C,하),BN);
BN_UP상=Valuewhen(1,CrossUP(C,상),BN);
조건2=BN_DN중(1)>BN_UP상(1) && CrossUP(C,상);
Valuewhen(1,조건2,표시가격);
수식2 하단첫돌파(박스하단)
상=BBANDSUP(기간,D1);
하=BBANDSDown(기간,D1);
중=BBANDSC(기간,D1);
BN=BARSSINCE(TIME!=TIME);
BN_UP중=Valuewhen(1,CrossUP(C,중),BN);
BN_DN중=Valuewhen(1,CrossDown(C,중),BN);
BN_DN하=Valuewhen(1,CrossDown(C,하),BN);
BN_UP상=Valuewhen(1,CrossUP(C,상),BN);
조건1= BN_UP중(1)>BN_DN하(1) && CrossDown(C,하);
Valuewhen(1,조건1,표시가격);
# 지표식 2
MACD 0선을 차트에 표현하고 싶습니다.
아래와 같이 키움 수식을 작성해 보았는데
예스수식으로 전환 부탁드립니다.
MD = MA(C,12) - MA(C,24) ;
valuewhen(1,crossup(MD,0) || crossdown(MD,0),C);
# 지표식 3
이평이 하락, 상승시 색깔이 변하는 그물망 차트를 만들고 싶습니다
이평선 : 5, 이평선 10, 이평선 15
이평선 3개를 가지고 그물망 차트를 만들되,
이동평균선이 하락시 파란색으로 이동평균선 상승시 빨간색으로 표현하고 싶습니다.
지표식 부탁드립니다.
감사합니다.
2021-10-05
1023
글번호 152632
새벽에 님에 의해서 삭제되었습니다.
2021-10-04
1
글번호 152631
새벽에 님에 의해서 삭제되었습니다.
2021-10-04
1
글번호 152630
답변완료
문의드립니다.
직전 9봉 고가에서 20%이상 하락한 봉이 5봉내에 있으면 var1=1
var1==1인데 직전 종가 대비 15%이상 상승하면 var1=0으로 만드는 수식 부탁 드립니다.
감사합니다.
2021-10-04
966
글번호 152629
답변완료
문의드립니다.
아래 내용중에서 뭐가 잘못되었을까요?
3번째줄 If 에서 잘못된 토큰 에러로 나왔는데 문제점이 뭔지 모르겠네요
답변 미리 감사합니다.
var1=L[1]-H[1]*0.2%
If MarketPosition==0 and C > H[1] and O < L[1]Then
Buy("매수진입",AtStop,NextBarOpen+Var1);
If MarketPosition==0 and C > H[1] and O > L[1]Then
Sell("매도진입",AtLimit,NextBarOpen+Var1);
2021-10-04
1116
글번호 152628