커뮤니티
예스랭귀지 Q&A
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1475
글번호 230811
답변완료
부탁드립니다2
수고 많으십니다.
아래 1)거래량 지표와 아래 2)의 Data2 거래량 지표를 합친 수식을 만들고자합니다.
번거롭더라도 도와주시면 감사하겠습니다.
오늘도 좋은하루 되시길 바랍니다.
====================
1)지표
input : R1(0),G1(0),B1(0);
input : R2(0),G2(0),B2(0);
var : hh(0),ll(0);
if Bdate != Bdate[1] Then
{
var1 = 0;
Var2 = Upvol-DownVol;
}
var1 = var1 + (Upvol-DownVol);
if CurrentDate == sDate Then
Plot1(var1,"당일실매수거래량",iff(var1 > 0,RGB(0,0,0),RGB(0,0,0)));
if CurrentDate == sDate Then
plot2(Var2,"첫봉종가");
if Bdate != Bdate[1] Then
{
hh = var1;
ll = var1;
}
Else
{
if var1 > hh Then
hh = var1;
if var1 < ll Then
ll = var1;
}
if CurrentDate == sDate Then
plot11(Var2+75,"첫봉종가+50");
if Bdate != Bdate[1] Then
{
hh = var1;
ll = var1;
}
Else
{
if var1 > hh Then
hh = var1;
if var1 < ll Then
ll = var1;
}
if CurrentDate == sDate Then
plot12(Var2-75,"첫봉종가-50");
if Bdate != Bdate[1] Then
{
hh = var1;
ll = var1;
}
Else
{
if var1 > hh Then
hh = var1;
if var1 < ll Then
ll = var1;
}
if CurrentDate == sDate Then
{
Plot3(hh,"최고");
plot4(ll,"최저");
plot5(ll+(hh-ll)*0.25,"25.0%");
plot6(ll+(hh-ll)*0.382,"38.2%");
plot7(ll+(hh-ll)*0.500,"50.0%");
plot8(ll+(hh-ll)*0.508+0.08,"50+0.02%");
plot9(ll+(hh-ll)*0.618,"61.8%");
plot10(ll+(hh-ll)*0.75,"75.0%");
plot13(ll+(hh-ll)*0.125,"12.5%");
plot14(ll+(hh-ll)*0.875,"87.5%");
plot15(ll+(hh-ll)*0.500+70,"10+60%");
plot16(ll+(hh-ll)*0.500-70,"220-60%");
Plot17(var1+20,"당일실매수거래량2",iff(var1 > 0,RGB(0,0,0),RGB(0,0,0)));
plot18(ll+(hh-ll)*0.243,"25.30%");
plot19(ll+(hh-ll)*0.743,"75.30%");
PlotBaseLine1(0);
}
2) 지표
var : C2(0,Data2),H2(0,Data2),L2(0,Data2),cnt(0,Data2);
var : Sidx(0,Data2),Sidx1(0,Data2),Eidx(0,Data2),Eidx1(0,Data2),Pre1(0,Data2);
C2 = Data2(c);
if Data2(Bdate != Bdate[1]) Then
{
H2 = C2;
L2 = C2;
Sidx = data2(Index);
Sidx1 = Sidx[1];
Eidx1 = Eidx[1];
}
Eidx = data2(Index);
if data2(Bdate != Bdate[1] or (Bdate == bdate[1] and C2 > h2)) Then
h2 = C2;
if data2(Bdate != Bdate[1] or (Bdate == Bdate[1] and C2 < l2)) Then
l2 = C2;
if Sidx1 > 0 Then
{
pre1 = 0;
For cnt = data2(Index)-Eidx1 to data2(Index)-Sidx1
{
if data2(sDate[cnt] < sDate and sTime[cnt] <= sTime) Then
{
pre1 = C2[cnt];
cnt = data2(Index-Sidx1+1);
}
}
}
// if CurrentDate == sDate and Data1(sDate) == Data2(sDate) Then
{
Plot1(C2,"참조",IFf(C2 >0,RGB(0,0,0),RGB(0,0,0)));
Plot2(H2,"최고");
Plot3(L2,"최저");
Plot4(pre1,"전일");
PlotBaseLine1(0);
Plot5(Data2(OpenD(0)),"D2당일시가");
Plot6(Data2(HighD(0)),"D2당일고가");
Plot7(Data2(LowD(0)),"D2당일저가");
Plot8(Data2(LowD(0)+(HighD(0)- LowD(0))*0.236),"23.6%");
Plot9(Data2(LowD(0)+(HighD(0)- LowD(0))*0.764),"76.4%");
Plot10(Data2(LowD(0)+(HighD(0)- LowD(0))*0.382),"38.2%");
Plot11(Data2(LowD(0)+(HighD(0)- LowD(0))*0.618),"61.8%");
Plot12(Data2(LowD(0)+(HighD(0)- LowD(0))*0.50),"50.0%");
Plot13(Data2(LowD(0)+(HighD(0)- LowD(0))*0.50-50),"-50.0%");
}
2023-12-20
1063
글번호 175037
답변완료
부탁드립니다.
안녕하세요?
아래 지표에서 2일 시작선에서 pt1과, 2일 시작선에서 pt2사이를 채우기하는것이 아니라
PT1과 PT2 사이를 채우기하고자 합니다.
노고에 감사드리며 부탁드려봅니다.
===================================
input : p(2),pt1(1.25),pt2(1.5);
input : 굵기1(5),R1(255),G1(0),B1(0);
input : 굵기2(5),R2(255),G2(0),B2(0);
input : 굵기3(5),R3(0),G3(0),B3(255);
input : 굵기4(5),R4(0),G4(0),B4(255);
var : cnt(0),sum(0),mav(0);
var : TL1(0),TL2(0),TL3(0),TL4(0),TL5(0);
var : box1(0),box2(0),box3(0),box4(0);
sum = DayOpen(0);
if P >= 2 Then
{
For cnt = 1 to P-1
{
sum = sum + DayClose(cnt);
}
}
mav = sum/P;
if Index == 0 or (sTime >= 152000 and sTime[1] < 152000) Then
{
var1 = sDate;
Var2 = stime;
}
if Bdate != Bdate[1] Then
{
if var1 > 0 and Var2 > 0 Then
{
#mav+pt2 ~ mav+pt1
box1 = box_new(var1,Var2,mav+pt2,sDate,sTime,mav+pt1);
#mav+pt1 ~ mav
box2 = box_new(var1,Var2,mav+pt1,sDate,sTime,mav);
#mav ~ mav-pt1
box3 = box_new(var1,Var2,mav,sDate,sTime,mav-pt1);
#mav-pt1 ~ mav-pt2
box4 = box_new(var1,Var2,mav-pt2,sDate,sTime,mav-pt1);
box_SetColor(box1,RGB(R1,G1,B1));
box_SetColor(box2,RGB(R2,G2,B2));
box_SetColor(box3,RGB(R3,G3,B3));
box_SetColor(box4,RGB(R4,G4,B4));
box_SetSize(box1, 굵기1);
box_SetSize(box2, 굵기2);
box_SetSize(box3, 굵기3);
box_SetSize(box4, 굵기4);
Box_SetFill(box1,true,10);#채우기 투명도 10
Box_SetFill(box2,true,10);#채우기 투명도 10
Box_SetFill(box3,true,10);#채우기 투명도 10
Box_SetFill(box4,true,10);#채우기 투명도 10
}
}
Else
{
if sTime < 150000 Then
{
box_SetBegin(box1,var1,Var2,mav+pt2);
box_SetEnd(box1,sDate,sTime,mav+pt1);
box_SetBegin(box2,var1,Var2,mav+pt1);
box_SetEnd(box2,sDate,sTime,mav);
box_SetBegin(box3,var1,Var2,mav);
box_SetEnd(box3,sDate,sTime,mav-pt1);
box_SetBegin(box4,var1,Var2,mav-pt1);
box_SetEnd(box4,sDate,sTime,mav-pt2);
}
}
2023-12-20
844
글번호 175036
답변완료
문의드립니다
a=c>c(1)*p1;
b=c>h(1);
d=c(1)<l(2);
조건=a && b && d;
고가=VALUEWHEN(1,조건,DAYHIGH());
저가=VALUEWHEN(1,조건,DAYLOW());
중심=(고가+저가)/2;
결과=crossdown(c,저가);
결과2=crossup(c,고가);
s=sum(1);
a_cnt=valuewhen(1,조건,s);
b_cnt=valuewhen(1,결과,s);
c_cnt=valuewhen(1,결과2,s);
결과3=a_cnt<b_cnt && b_cnt<c_cnt;
결과4=결과3(1) && 저가>c;
결과값=countsince(조건,결과4)==1;
결과값2=결과4 && 결과값;
시가=valuewhen(1,결과값2(1),o);
시가2=(시가*p2)*p2;
저가이탈=crossdown(l,시가2);
d_cnt=valuewhen(1,결과값2,s);
e_cnt=valuewhen(1,저가이탈,s);
조건2=d_cnt<e_cnt;
결과값3=countsince(결과값2,조건2)==1;
결과값4=조건2 && 결과값3
p1=1.03
p2=0.97
종목검색식으로 변환 부탁드립니다!
위 조건에 해당하는 봉을 화살표로 표시하는 지표식도 같이 부탁드려요!
추운데 감기조심하세요!
2023-12-19
930
글번호 175035
답변완료
MACD
아래는 얼마전 "MACD(7,16)이 0돌파하고 익일에 역이평배열이 상승전환"하는 수식을 작성해주신것입니다.
감사히 쓰다보니 개선할 점이 있어 요청드립니다.
요청의 요지는,
이것을
- MACD 0선돌파와 금일 동시에 발생하는 것과
- MACD 0선돌파일 익익일에 역이평 상승전환이 발생하는 것을
아래 수식에 추가하여 한 수식에서 구하고자 합니다.
즉, MACD발생일을 기준으로 역이평 상승전환이 0봉, +1봉(현 수식), +2봉에
나오는 것입니다.
동시에 나오는(0봉) 것이 함께 만들기 어렵다면,
아래 수식에 +2봉 것만 추가하셔도 무방하겠읍니다.
(이 경우, MACD발생종목 하나하나 매일 확인해야 함)
부탁드리겠읍니다.
이상
===========================================================================
var : A1(0),A2(0),A3(0),A4(0),A5(0),A6(0),B1(False),B2(False),B3(False),B4(False);
VAR : AA1(0),AA2(0),AA3(0),AA4(0),조건(False);
A1=MA(C,3);
A2=MA(C,5);
A3=MA(C,8);
A4=MA(C,10);
A5=MA(C,20);
A6=MA(C,60);
B1=A1<A5 && A5<A6;
B2=A2<A5 && A5<A6;
B3=A3<A5 && A5<A6;
B4=A4<A5 && A5<A6;
IF B1 TheN {AA1=1;} ElsE {AA1=0;}
IF B2 TheN {AA2=1;} ElsE {AA2=0;}
IF B3 TheN {AA3=1;} ElsE {AA3=0;}
IF B4 TheN {AA4=1;} ElsE {AA4=0;}
조건=AA1[1]+AA2[1]+AA3[1]+AA4[1]>=1 && AA1+AA2+AA3+AA4==0 && C>O;
var1 = macd(7,16);
Condition1 = CrossUp(var1,0);
IF Condition1[1] == true and 조건 && !조건[1] TheN
Find(1);
2023-12-19
1072
글번호 175034
파워 님에 의해서 삭제되었습니다.
2023-12-19
1
글번호 175033
답변완료
수식 문의드립니다.
안녕하세요.
매수/매도 관련해서 문의드립니다.
많은 도움 주셔서 항상 감사합니다.
즐거운 하루 보내세요.
----------------------------------------------------------
1. 특정금액(예,778000원)에서 매도가 나와야 되는 상황에서
신호타입을 atlimit과 atstop 두 경우를 다 적용해 봤는데
해당봉이 음봉일 경우에는 해당금액에서 매도가 되지 않습니다.
ExitLong("ex2-1",AtLimit,778000,"",1,1); 또는
ExitLong("ex2-1",atstop,778000,"",1,1);
어떻게 적용하면 될지 문의드립니다.(그림 참고)
2. 분할 매수 관련 질문입니다.
예를 들어 10,000원부터 1,000원(한 구간) 하락 시마다 분할 매수를 하는데,
1) 시가가 전일 종가 대비 10% 이상 하락 시 다음 매수가격을 하락봉의 종가로 설정하고
그 가격부터 다시 1,000원(한 구간) 하락 시 분할 매수.
2) 단, 시가가 직전 매수 금액 대비 2,000원(두 구간) 이상 하락 시(최초 매수이면 기준 가격 대비 두 구간 하락 시), 당일에 한 차수만 매수.
3) 시가가 직전 매수 금액 대비 1,000원(한 구간) 이내 하락이고 종가가 많이 빠지는 경우에는 당일에 각 구간 하락 시 마다 매수 가능.
case1) c[2] : 10,000, O[1]:9,500, C[1] : 8,800, O : 8,300, C : 7,600 -> b1 : 9,000, b2 : 8,000 ~~
case2) c[2] : 10,000, O[1]:8,500, C[1] : 8,800, O : 8,300, C : 7,600 -> b1 : 8,800, b2 : 7,800 ~~
case3) c[2] : 10,000, O[1]:7,500, C[1] : 7,200, O : 6,700, C : 6,000 -> b1 : 7,200, b2 : 6,200 ~~
case4) c[2] : 10,000, O[1]:7,500, C[1] : 7,200, O : 6,100, C : 6,000 -> b1 : 7,200, b2 : 6,000 ~~
case5) c[2] : 10,000, O[1]:7,500, C[1] : 7,200, O : 6,500, C : 5,100 -> b1 : 7,200, b2 : 6,200, b3 : 5,200 ~~
이 부분에 대한 수식도 함께 문의드립니다.
감사합니다.
2023-12-19
1430
글번호 175032
답변완료
그리드매매 수식중 매수/매도 부분의 문법에러 발생 수정 요청 드립니다
Inputs : initialQuantity(100),gridDistance(10),numberOfOrders(5);
vars: currentQuantity(0),totalOrders(0), totalProfit(0), gridLevel(0);
if totalOrders < numberOfOrders then begin
// 현재 그리드 레벨 및 주문 수량 설정
gridLevel = totalOrders + 1;
currentQuantity = initialQuantity * gridLevel;
// 그리드 매매 주문 실행
if marketposition == 1 then begin
// 매수 주문
buy("GridBuy", currentQuantity) next bar at entryPrice - gridDistance * gridLevel stop;
// 매도 주문
sell("GridSell", currentQuantity) next bar at entryPrice + gridDistance * gridLevel stop;
// 주문 수 증가
totalOrders = totalOrders + 1;
end;
end;
2023-12-19
1284
글번호 175031
답변완료
아래 주신 답변에서 빠지는 종목이 있어서 재질문 드립니다
이렇게 아래 답변을 주셨는데 조금 조건을 변경을 한 경우에
나와야 하는 종목이 안나오는것들이 있고
나오지 말아야 할것들이 나오는게 있어서 재차 질문드립니다
input : ndate(20220531);
var : T(0),S(0),cond(False);
if C >= O*1.10 and
H >= O*1.15 and
M >= 10000000000 Then
{
var1 = H;
var2 = Index;
T = 1;
}
Else
{
if T == 1 and C < ma(C,5) Then
T = 2;
if T >= 1 and H > var1 Then
var1 = H;
if T == 2 and CrossUp(h,var1[1]) and Index <= Var2+30 Then
{
T = 3;
}
}
if sDate == ndate and T == 3 and T != T[1] Then
cond = true;
if cond == true Then
Find(1);
원래 질문드린 조건은 10일선을 이탈한것인데 이것을 종가상 5일선 이탈로 바꾸면 위와 같은데요
1. 조건에 부합하는데 나오지 않는 종목
- 220531 / KH 건설
220603 / 공구우먼
220621 / 노을
2. 조건에 맞지 않는데 나오는 종목
- 220622 / 애드바이오텍
위 종목의 경우 22일 고가가 15일자 고가를 갱신하지 못했는데도
22일 검색식에 잡힙니다
3. 일자 변수를 변경해도 검색식 일자가 갱신되지 않음
input : ndate(20220531); --> 코드의 이 날짜값을 변경해도
[3201] 종목검색 창에서 편집을 통해 직접 날짜값을 변경하지 않으면
검색식을 더블 클릭해서 검색을봐도 변수에 해당하는 날짜의 종목이 검색되지 않습니다
이것도 같이 질문드립니다
매번 답변 감사드립니다
=================================================================================
안녕하세요
예스스탁입니다.
날짜를 지정해 특정일에 만족한 종목을 찾게 수정해 드립니다.
지정하시는 날짜에 따라 필요한 봉갯수가 부족할 수 있으므로
종목검색 속성에서 검색에 필요한 최소시간에 500봉 지정하고 검색하시기 바랍니다.
종목검색은 최대 제공봉수가 500봉입니다.
input : ndate(20231215);
var : T(0),S(0),cond(False);
if C >= O*1.10 and
H >= O*1.15 and
M >= 10000000000 Then
{
var1 = H;
var2 = Index;
T = 1;
}
Else
{
if T == 1 and C < ma(C,10) Then
T = 2;
if T >= 1 and h > var1 Then
var1 = H;
if T == 2 and CrossUp(c,var1[1]) and Index <= Var2+20 Then
{
T = 3;
}
}
if sDate == ndate and T == 3 and T != T[1] Then
cond = true;
if cond == true Then
Find(1);
즐거운 하루되세요
2023-12-19
1360
글번호 175030
답변완료
120일선 밑에 있는것을 찾는데
120일선 밑에서 주가가 있다가 돌파를 찾으려고 하는데
120일선 밑에서 주가가 이틀이상 낮다가 금일 120일선 돌파 조건은 어떻게 작성하나요?
2023-12-19
1317
글번호 175029