커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1745
글번호 230811
답변완료
타주기 그물망시스템 샘플조건식
항상 감사드립니다
조건식을 줄여서 샘플식으로로 만들었습니다
아래조건식을 타주기식에 적용코져합니다.
####################
###신거래선 기준 ###
####################
var:var3(0),var960(0);
if V == highest(V,3) Then
var3 = (C+H+L)/3; #120거래선#
if V == highest(V,960) Then
var960 = (C+H+L)/3; #240거래선#
#############
RMI 매매식
#############
input : MOM기간(5),적용기간(14),시그널기간(5);
var : RMI(0),RMIsig(0);
var: t70(0);
RMI = iff((ma(iff(c<c[MOM기간],(c[MOM기간]-c),0),적용기간))<=0,100,
(100-(100/(1+((ma(iff(c>c[MOM기간],(c-c[MOM기간]),0),적용기간))/(ma(iff(c<c[MOM기간],(c[MOM기간]-c),0),적용기간)))))));
RMIsig = ma(RMI,시그널기간);
if crossup(RMI,50) Then
t70 = 100 ;
if crossdown(RMI,50) Then
t70 = 0;
###############
### 그물망 ###
###############
input:period90(60),횡보율(0.001);
var : var301(0),var302(0),var303(0),var304(0),var305(0);
var : t60(0);
var301=ema(c,period90);
var302=ema(c,period90+1);
var303=ema(c,period90+2);
var304=ema(c,period90+3);
var305=ema(c,period90+4);
value1 = 0;
value2 = 0;
value3 = 0;
if var301>var301[1]*(1+횡보율/100) then value1 = value1+1;
else if var301<var301[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var302>var302[1]*(1+횡보율/100) then value1 = value1+1;
else if var302<var302[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var303>var303[1]*(1+횡보율/100) then value1 = value1+1;
else if var303<var303[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var304>var304[1]*(1+횡보율/100) then value1 = value1+1;
else if var304<var304[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var305>var305[1]*(1+횡보율/100) then value1 = value1+1;
else if var305<var305[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if value1 == 5 Then
t60 = 1 ;
else if value2 == 5 Then
t60 = -1;
Else if value3 == 5 Then
t60 = 0;
/*******************************/
var: t90(0);
if t60 == 1 Then
T90 = 1 ;
if t60 == -1 Then
T90 = -1 ;
var3>var960 and t70==100 and t90==1이면 매수
var3<var960 and t70==0 and t90==-1이면 매도
감사합니다.
2021-02-10
784
글번호 146284
답변완료
문의 드립니다(수식작성 X)
안녕하세요
제품 관련 질문 드립니다.
되는지 안되는지만 알려주시면 감사하겠습니다.
1. A라는 조건으로 발생하는 A-1이라는 매수(또는 매도) 주문이 발생하고 체결돼었을떄,
B라는 조건 만족시 으로 발생하는 B-1주문이 들어갔으면 좋겠습니다.
B-1 이라는 주문은 평상시에는 조건 만족해도 발생하지 않고 A-1이라는 주문이 반드시 먼저 선행되어야 조건 만족하고 작동했으면 좋겠습니다
이를 위해서는, A-1이라는 주문이 조건식처럼 작동해야할 것 같은데요,
해당 기능구현이 예트에서 가능한건가요?
2021-02-10
812
글번호 146282
답변완료
그물망 타주기 조건식
항상 감사드립니다
아래조건식을 타주기식에 적용코져합니다.
####################
###신거래선 기준 ###
####################
var:var3(0),var960(0);
if V == highest(V,3) Then
var3 = (C+H+L)/3; #120거래선#
if V == highest(V,960) Then
var960 = (C+H+L)/3; #240거래선#
#############
RMI 매매식
#############
input : MOM기간(5),적용기간(14),시그널기간(5);
var : RMI(0),RMIsig(0);
var: t70(0);
RMI = iff((ma(iff(c<c[MOM기간],(c[MOM기간]-c),0),적용기간))<=0,100,
(100-(100/(1+((ma(iff(c>c[MOM기간],(c-c[MOM기간]),0),적용기간))/(ma(iff(c<c[MOM기간],(c[MOM기간]-c),0),적용기간)))))));
RMIsig = ma(RMI,시그널기간);
if crossup(RMI,50) Then
t70 = 100 ;
if crossdown(RMI,50) Then
t70 = 0;
###############################
### 그물망 ###
################################
input:period90(60),횡보율(0.001);
var : var301(0),var302(0),var303(0),var304(0),var305(0),var306(0),var307(0),var308(0),var309(0),var310(0);
var : var311(0),var312(0),var313(0),var314(0),var315(0),var316(0),var317(0),var318(0),var319(0),var320(0),var321(0);
var : t60(0);
var301=ema(c,period90);
var302=ema(c,period90+1);
var303=ema(c,period90+2);
var304=ema(c,period90+3);
var305=ema(c,period90+4);
var306=ema(c,period90+5);
var307=ema(c,period90+6);
var308=ema(c,period90+7);
var309=ema(c,period90+8);
var310=ema(c,period90+9);
var311=ema(c,period90+10);
var312=ema(c,period90+11);
var313=ema(c,period90+12);
var314=ema(c,period90+13);
var315=ema(c,period90+14);
var316=ema(c,period90+15);
var317=ema(c,period90+16);
var318=ema(c,period90+17);
var319=ema(c,period90+18);
var320=ema(c,period90+19);
var321=ema(c,period90+20);
value1 = 0;
value2 = 0;
value3 = 0;
if var301>var301[1]*(1+횡보율/100) then value1 = value1+1;
else if var301<var301[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var302>var302[1]*(1+횡보율/100) then value1 = value1+1;
else if var302<var302[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var303>var303[1]*(1+횡보율/100) then value1 = value1+1;
else if var303<var303[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var304>var304[1]*(1+횡보율/100) then value1 = value1+1;
else if var304<var304[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var305>var305[1]*(1+횡보율/100) then value1 = value1+1;
else if var305<var305[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var306>var306[1]*(1+횡보율/100) then value1 = value1+1;
else if var306<var306[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var307>var307[1]*(1+횡보율/100) then value1 = value1+1;
else if var307<var307[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var308>var308[1]*(1+횡보율/100) then value1 = value1+1;
else if var308<var308[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var309>var309[1]*(1+횡보율/100) then value1 = value1+1;
else if var309<var309[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var310>var310[1]*(1+횡보율/100) then value1 = value1+1;
else if var310<var310[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var311>var311[1]*(1+횡보율/100) then value1 = value1+1;
else if var311<var311[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var312>var312[1]*(1+횡보율/100) then value1 = value1+1;
else if var312<var312[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var313>var313[1]*(1+횡보율/100) then value1 = value1+1;
else if var313<var313[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var314>var314[1]*(1+횡보율/100) then value1 = value1+1;
else if var314<var314[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var315>var315[1]*(1+횡보율/100) then value1 = value1+1;
else if var315<var315[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var316>var316[1]*(1+횡보율/100) then value1 = value1+1;
else if var316<var316[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var317>var317[1]*(1+횡보율/100) then value1 = value1+1;
else if var317<var317[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var318>var318[1]*(1+횡보율/100) then value1 = value1+1;
else if var318<var318[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var319>var319[1]*(1+횡보율/100) then value1 = value1+1;
else if var319<var319[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var320>var320[1]*(1+횡보율/100) then value1 = value1+1;
else if var320<var320[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if var321>var321[1]*(1+횡보율/100) then value1 = value1+1;
else if var321<var321[1]*(1-횡보율/100) then value2 = value2+1;
else value3 = value3+1;
if value1 == 21 Then
t60 = 1 ;
else if value2 == 21 Then
t60 = -1;
Else if value3 == 21 Then
t60 = 0;
/*=======================*/
var: t90(0);
if t60 == 1 Then
T90 = 1 ;
if t60 == -1 Then
T90 = -1 ;
var3>var960 and t70==100 and t90==1이면 매수
var3<var960 and t70==0 and t90==-1이면 매도
감사합니다.
2021-02-10
911
글번호 146276
답변완료
문의
아래 수식과 반대인 buy 수식을 작성해보았습니다.
b3 진입이 발생하지 않는데 수식 검토바랍니다.
input : 진입시간(090000),진입제한시간(151500);
input : 거래횟수(20);
input : b1(40),진입눌림1(10),진입돌파1(10);
input : b2(40),진입눌림2(10),진입돌파2(10);
input : b3(40),진입눌림3(10),진입돌파3(10);
var : T1(0),entry(0),LL(0),EH(0),E1(0),H1(0),i1(0),S1(0),L1(0),V1(0);
var : Tcond(false);
Var : loss(0);
if bdate != bdate[1] Then
loss = 0;
if TotalTrades > TotalTrades[1] and PositionProfit(1) < 0 Then
loss = loss+1;
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) Then
Tcond = true;
if (sdate != sdate[1] and stime >= 진입제한시간) or
(sdate == sdate[1] and stime >= 진입제한시간 and stime[1] < 진입제한시간) Then
Tcond = false;
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) Then{
T1 = TotalTrades;
E1 = 0;
LL = L;
}
if stime >= 진입시간 then
{
if L < LL Then
LL = L;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if MarketPosition == 0 and entry == 0 Then
{
if E1 == 0 and C >= LL+PriceScale*B1 and C[1] < LL+PriceScale*B1 Then
{
E1 = 1;
H1 = H;
i1 = index;
V1 = LL; //시작점 종가
}
if E1 == 1 and index > i1 then
{
if H > H1 Then
H1 = H;
#저가가 시작봉종가보다 클때만 눌림체크
if L >= V1 and L <= H1-PriceScale*진입눌림1 Then
{
E1 = 2;
i1 = index;
S1 = H1;
}
}
//시작점 종가보다 낮은 가격이 발생하면 초기화
if E1 >= 1 and L < V1 Then
{
E1 = 0;
LL = L;
}
if E1 == 2 and index > i1 and C >= S1+PriceScale*진입돌파1 and Tcond == true Then
{
buy("b1");
}
}
if TotalTrades > TotalTrades[1] Then
{
E1 = 0;
LL = L;
}
if L < LL Then
LL = L;
if MarketPosition == 0 and entry == 1 and entry < 거래횟수 Then
{
if E1 == 0 and C >= LL+PriceScale*B2 and C[1] < LL+PriceScale*B2 Then
{
E1 = 1;
H1 = H;
i1 = index;
}
if E1 == 1 and index > i1 then
{
if H > H1 Then
H1 = H;
}
#저가가 시작봉종가보다 클때만 눌림체크
if L >= V1 and L <= H1-PriceScale*진입눌림2 Then
{
E1 = 2;
i1 = index;
S1 = H1;
}
}
//시작점 종가보다 낮은 가격이 발생하면 초기화
if E1 >= 1 and L < V1 Then
{
E1 = 0;
LL = L;
}
if E1 == 2 and index > i1 and C >= S1+PriceScale*진입돌파2 and Tcond == true Then
{
buy("b2");
}
if MarketPosition == 0 and entry >= 2 and entry < 거래횟수 Then
{
if E1 == 0 and C >= LL+PriceScale*B3 and C[1] < LL+PriceScale*B3 Then
{
E1 = 1;
H1 = H;
i1 = index;
}
if E1 == 1 and index > i1 then
{
if H > H1 Then
H1 = H;
#저가가 시작봉종가보다 클때만 눌림체크
if L >= V1 and L <= H1-PriceScale*진입눌림3 Then
{
E1 = 2;
i1 = index;
S1 = H1;
}
}
if E1 == 2 and index > i1 and C >= S1+PriceScale*진입돌파3 and Tcond == true Then
{
buy("b3");
}
}
}
**************************************************************************************
input : 진입시간(090000),진입제한시간(151500);
input : 거래횟수(20);
input : d1(40),진입눌림1(10),진입돌파1(10);
input : d2(40),진입눌림2(10),진입돌파2(10);
input : d3(40),진입눌림3(10),진입돌파3(10);
var : T1(0),entry(0),HH(0),LL(0),EH(0),EL(0),E1(0),H1(0),i1(0),S1(0),L1(0),V1(0);
var : Tcond(false);
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) Then
Tcond = true;
if (sdate != sdate[1] and stime >= 진입제한시간) or
(sdate == sdate[1] and stime >= 진입제한시간 and stime[1] < 진입제한시간) Then
Tcond = false;
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) Then{
T1 = TotalTrades;
E1 = 0;
HH = H;
}
if stime >= 진입시간 then
{
if H > HH Then
HH = H;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if MarketPosition == 0 and entry == 0 Then
{
if E1 == 0 and C <= HH-PriceScale*d1 and C[1] < HH-PriceScale*d1 Then
{
E1 = 1;
L1 = L;
i1 = index;
V1 = HH; //시작점 종가
}
if E1 == 1 and index > i1 then
{
if L < L1 Then
L1 = L;
#고가가 시작봉종가보다 작을 때만 눌림체크
if H <= V1 and H >= L1+PriceScale*진입눌림1 Then
{
E1 = 2;
i1 = index;
S1 = L1;
}
}
//시작점 종가보다 높은 가격이 발생하면 초기화
if E1 >= 1 and H > V1 Then
{
E1 = 0;
HH = H;
}
if E1 == 2 and index > i1 and C <= S1-PriceScale*진입돌파1 and Tcond == true Then
{
sell("d1");
}
}
if TotalTrades > TotalTrades[1] Then
{
E1 = 0;
HH = H;
}
if H > HH Then
HH = H;
if MarketPosition == 0 and entry == 1 and entry < 거래횟수 Then
{
if E1 == 0 and C <= HH-PriceScale*d2 and C[1] < HH-PriceScale*d2 Then
{
E1 = 1;
L1 = L;
i1 = index;
}
if E1 == 1 and index > i1 then
{
if L < L1 Then
L1 = L;
if H >= L1+PriceScale*진입눌림2 Then
{
E1 = 2;
i1 = index;
S1 = L1;
}
}
if E1 == 2 and index > i1 and C <= S1-PriceScale*진입돌파2 and Tcond == true Then
{
sell("d2");
E1 = 0;
}
}
if MarketPosition == 0 and entry >= 2 and entry < 거래횟수 Then
{
if E1 == 0 and C <= HH-PriceScale*d3 and C[1] < HH-PriceScale*d3 Then
{
E1 = 1;
L1 = L;
i1 = index;
}
if E1 == 1 and index > i1 then
{
if L < L1 Then
L1 = L;
if H >= L1+PriceScale*진입눌림3 Then
{
E1 = 2;
i1 = index;
S1 = L1;
}
}
if E1 == 2 and index > i1 and C <= S1-PriceScale*진입돌파3 and Tcond == true Then
{
sell("d3");
E1 = 0;
}
}
}
2021-02-10
862
글번호 146273
답변완료
문의
아래 수식에서
손절과 트레일링스탑은 일괄 적용되고 있으며,
손절과 트레일링스탑이 길지 않을 경우 하루에 4번 이상도 거래합니다. 별첨파일 참조
***요청사항
진입순서대로 손절과 트레일링 스탑을 지정하는 수식을 요청드립니다.
첫번째부터 두번째까지 예를 들어주세요.
ex)
첫번째 진입 경우
{
exitshort 손절
exitshort 트레일링스탑
{
두번째 진입 경우
{
exitshort 손절
exitshort 트레일링스탑
{
************************************************************************************
input : N(20),dn(0.50);
input : 손절(1.10),트레일링(1.30);
var : C2(0,data1),T1(0,data1),entry(0,data1);
C2 = data2(C);
if data1(Bdate != Bdate[1]) Then{
T1 = TotalTrades;
}
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
if entry < N and data2(Bdate == Bdate[1] and Lowd(0) < LowD(0)[1] and HighD(0)-LowD(0) >= dn) Then
sell();
SetStopLoss(손절, PointStop);
SetStopTrailing(트레일링,0,PointStop);
2021-02-10
914
글번호 146263
답변완료
어제의 고가에서
안녕하세요..항상 감사합니다.
5분봉차트에서 하루전 최고가 봉의..종가를
수식으로 알수 있을까요 ?
2021-02-10
674
글번호 146261
러블리 님에 의해서 삭제되었습니다.
2021-02-10
82
글번호 146260
답변완료
문의드립니다..
최근 100봉 이내에서 가장 큰 거래량이 실린 봉의 종가를 현재가가 돌파시를
검색가능하게끔 수식이 가능할까요?
2021-02-10
626
글번호 146259
답변완료
누적 수식에서 특정값 제외
var1 = Accum(1);
If bDate!=bDate[1] Then
{
var2 = var1[1];
}
var3 = var1-var2;
이렇게 수식을 만들면 (DayIndex+1) 이랑 같은 결과가 나오는데요
여기서 제가 특정 봉을 제외하면서 누적할 수도 있는 건가요?
예를 들면 장시작부터 장마감까지 총 100개의 봉이 생성된다고 가정했을 때
위에 있는 수식을 적용하면 1부터 100까지 차례대로 결과가 나오겠죠
근데 만약 Close < Open 인 상황, 즉 음봉이 떴을 때는 값을 제외하고 누적할 수도 있는건가요?
마감까지 총 5번의 음봉이 뜬 걸로 가정하면 총 95번까지의 번호가 누적되는 거고 제외되는 봉의 숫자는 앞봉의 숫자값을 그대로 가져오는 수식이 가능한지 궁금합니다
2021-02-10
706
글번호 146250