커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6154
글번호 230811
답변완료
지표 수식 문의
지표수식 좀 부탁드리겠습니다. 항상 친절히 답변해 주심에 감사드립니다.
input : 캔들수(20) ;
var : 기준봉조건(False), 경과봉수(0) , 기준가대비하락률(0),상단가격(0), 하단가격(0) ;
기준봉조건 = Highest(H,캔들수)[1] ;
if 기준봉조건 Then {
기준가격= H;
}
else { 경과봉수=경과봉수+1;
}
기준가대비하락률= (L-기준가격)/기준가격*100 ;
기준봉 출현이후에 하락하여
기준가대비하락률 이 -10 %보다 더 밑으로 하락했다가 다시 -5%이내로 올라올 때
{ 상단가격= 기준가격 ;
하단가격= Highest(기준봉 이후 경과봉의 고가, 경과봉수)
}
★ 반드시 -10%보다 더 밑으로 내려갔다가 다시 -5%이내로 들어와야 하고 기준봉 출현이후부터 기준봉고가와 최대한 근접한 캔들의 고가를 하단가격의 지표로 표시하고자 합니다. 이 때 하단가격의 최대값은 기준가격과 같아지는, 즉 기준가대비하락률이 0 이 되는 캔들의 고가입니다.
PLOT1( 상단가격) ;
PLOT2(하단가격) ;
2022-04-18
1323
글번호 158123
답변완료
수식 좀 부탁드립니다.
* 많은 도움에 고맙습니다.
* 아래 수식에서 점 이 안찍히는데 무엇이 잘못되엇는지 수정 좀 요청 드립니다.
즉 CrossUp(MA(C,5), MA(C,20) ) 신호가 발생할때 최고,최저점을 찾아서 점을
직을려고 합니다
## 아래 수식
var : TX33(0) , Tx03(0),TX51(0),TX57(0) ;
Condition41 = CrossUp(MA(C,5), MA(C,20) ) ;
if Condition41 == true Then value51 = H ; value52 = L;
if CrossDown( L , value52-PriceScale*5 ) Then
{TX33 = Text_New(sdate,stime,C ,"◆"); Text_SetStyle(TX33,0,0); Text_SetColor(TX33, RGB(0,0,255) ); Text_SetSize(TX33,35);
}
# 아래지표 10이평선 중간선이 60 이평 중간선 50봉중 최저점 상향 돌파시 수평선 좀 부탁 드립니다
즉 10이평 CENTLINE 라인선이
60이평 CENTLINE 라인중 최저점 크로스업 하면 수평선좀 부탁 드립니다
##INPUT: MALEN(10),CONST(0.8),ATRs(0);
VAR: CENTLINE(0), AVGRANGE(0), UPPER(0), LOWER(0);
CENTLINE=KeltnerChannel(Close, MALEN, ATRs);
AVGRANGE=Ma(TRUERANGE(),MALEN);
UPPER=CENTLINE+(AVGRANGE*CONST);
LOWER=CENTLINE-(AVGRANGE*CONST);
PLOT1(CENTLINE,"CENTLINE");
PLOT2(UPPER,"UPPER");
PLOT3(LOWER,"LOWER");
* 고맙습니다 수고하십시요.
2022-04-19
1570
글번호 158122
답변완료
시초가 1회 진입하여 일정 포인트 상승시 청산
마이크로나스닥100선물 거래하고 있습니다.
시초가 진입(매도, 1회)하여 100포인트 이익나면 청산을 하는 자동매매 수식을 구하고자 합니다.
2022-04-18
1656
글번호 158121
답변완료
봉완성시 신호발생 및 스탑트레일링
만약 신호발생조건이 open > ma(c,20) then buy 이런식이어도 해당 봉이 완성된 후에야 신호가 발생하는건가요 ?
스탑트레일링이나 스탑로스는 보통 단독으로 그냥 setstoploss(20,pointstop); 이런 식으로 사용하는데,
if marketposition == -1 then setstoploss (20,pointstop);
if marketposition == -1 then setstoptrailing(20,pointstop);
if marketposition == 1 then setstoptrailing(30,pointstop);
포지션에 따라 다른 청산은 불가능한가요 ?
2022-04-18
1319
글번호 158120
답변완료
수식문의
안녕하세요, 선생님,
분봉챠트:
메인챠트에 3종목있고(data1, data2, data3) 아래 참조데이터 data4. data5 data6 있습니다.
문의: data4, data5, data6 종목의 전일시가들을 메인챠에서 출력.
감사합니다.
2022-04-18
1215
글번호 158119
답변완료
선긋기 문의2
네, 선긋는 방법은 알겠습니다. 그런데, 이번 화면처럼 2종목을 같은 화면에 불러서 각각의 선을 긋는 지표수식를 부탁드립니다.
감사합니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 선긋기 문의
> 안녕하세요
예스스탁입니다.
수식에서 수평선으로 처리하기 위해서는 추세선함수를 이용해야 합니다.
추세선함수가 미완성봉의 값은 그리지 못하며
최종 완성봉(다음봉시가수신)기준으로만 그릴수 있습니다.
차트상 가장 마지막봉 기준으로는 그리지 못합니다.
마지막 완성봉기준으로 그리신다면 아래식 사용하시면 됩니다.
var : TL(0);
var1 = ma(C,20);
TL_Delete(TL);
TL = TL_New(sDate,sTime,var1,NextBarSdate,NextBarStime,var1);
TL_SetExtLeft(TL,true);
TL_SetColor(TL,Green);
즐거운 하루되세요
> kimfeel 님이 쓴 글입니다.
> 제목 : 선긋기 문의
> 안녕하세요, 아래 그림처럼 선이 분봉에 따라 변하면서 그려진 값이 그대로 있는 것이 아닌,
최종값으로 일정하게 그리는 방법 문의드립니다. (시간 지나서 분봉최종값이 변하면 선값은 변하겠죠)
감사합니다.
2022-04-18
1446
글번호 158118
답변완료
수식 질문드립니다.
if exitb!=0 Then text_New(sDate,sTime,L,"준비");
여기서
글씨 위치를 한칸더 아래나 더 위로 바꿀수없을까요??
감사합니다.
2022-04-18
1382
글번호 158108
답변완료
CT를 YT로 변환 오류 검토 부탁드립니다.
항상 감사 드립니다.
아래 수식 두 개 검토 부탁드립니다.
/*
#======================================================#
# YT <수식 3-21> 분차트를 이용한 단기매매전략
# SS_RangeBreak(v 0.2)
# 10분봉, 2000/01/04 ~ 2003/09/30
#======================================================#
의문점
방향성 청산에 Var1 이 사용되었는데, Var1은 아래 식으로 한정이 되어 있다. 값을 가져 올 수 없다.
If method == 0 then Var1=dayhigh(1)-daylow(1) ; // 전일 range
미작동
매수 진입/청산만 작동하고 , 매도 진입/청산은 작동하지 않는다.
청산식이 매수추적스탑만 나온다 . 매도진입이 없으니 매도추적스탑은 당근 없고
시가청산, 당일청산loss 가 작동하지 않는다.
그러면,
원 수식의 블록{ } 지정 오류인 것인가
컨버젼의 블록{ } 지정 오류인 것인가
#======================================================#
# YT <수식 3-22> 일간차트를 이용한 단기매매 전략
# 이름: S_Rangebreak(v 0.2)
# 체크 대상 : Setbarback, open[-1], I_MarketPosition, i_Entryprice
#======================================================#
/*
# 체크 대상 : Setbarback, open[-1], I_MarketPosition, i_Entryprice
SetBarBack : [설명] 실시간에서 현재 봉 시가를 이용해 현재 봉에 주문실행이 가능하도록 설정
예문 : 미래값 참조(open(-1))
실시간 실전매매에서 일봉상의 금일저가보다 내일시가가 100원 떨어져서 시작하면 매수하라는 예
Setbarback
If low >= open(-1) + 100 Then
Call buy("매수", Atmarket)
End If
CT 에서는 Setbarback 함수가 있는데, YT에서는 없는 것 같다. 대체를 할 수 있는 함수나 문법스킬은 무엇인가,
1일봉전 참조하면 되지 않는가? (DATA2)
open[-1] : YT에서 미래봉 참조가 가능한가?
I_MarketPosition CT는 전체 수식 영역에서 사용가능하나, YT는 전략식에서는 사용불가 , 대체방법은?
전략식에서 MarketPosition 으로 충분하지 않은가, I_MarketPosition을 사용하는 이유는?
i_Entryprice
*/
/*
#======================================================#
# CT <수식 3-21> 분차트를 이용한 단기매매전략
# SS_RangeBreak(v 0.2)
# 10분봉, 2000/01/04 ~ 2003/09/30
#======================================================#
<수식 3-21> 분차트를 이용한 단기매매전략
영역: 전략
이름: SS_RangeBreak(v 0.2)
Input: len(0.37), atrlen(20), len1(3.2), entrystart(920), entrylimit(1430), dayin(3), method(0)
‘기본식-------------------------------------------------------------
Ifmethod=0 then
Var1=highd(1)-lowd(1)
Cond1=exitname(1)="매수추적스탑"Andtdate=exitdate(1)Andtdate=Entrydate(1)_ Andexitprice(1)>opend+Var1*len
Cond2=exitname(1)="매도추적스탑"Andtdate=exitdate(1)Andtdate=Entrydate(1)_ Andexitprice(1)<opend-Var1*len
Cond3=exitname(1)="매수추적스탑"Andtdate=exitdate(1)Andtdate<>Entrydate(1)_ Andexitprice(1)>opend+Var1*len
Cond4=exitname(1)="매도추적스탑"Andtdate=exitdate(1)Andtdate<>Entrydate(1)_ Andexitprice(1)<opend-Var1*len
If ttime>Entrystart And ttime<Entrylimit Then
IfCond1=False And Cond3=False Then
Callbuy("매수",Atstop,Def,opend+Var1*len) EndIf
IfCond2=False And Cond4=False Then
Callsell("매도",Atstop,Def,opend-Var1*len) EndIf
EndIf
If position<>0 Then
Callexitlong("매수추적스탑",Atstop,hhv(1,high,barnumsinceEntry+1)-atr(atrlen)*len1)
Callexitshort("매도추적스탑",Atstop,llv(1,low,barnumsinceEntry+1)+atr(atrlen)*len1)
EndIf
‘손실발생당일청산-----------------------------------------------------
Elseif method=1 or method=2 or method=3 then
If ttime =1450 And position<>0 Then ‘2시50분에포지션이 있다면
If position=1 And Entryprice > close Then ‘진입가격보다종가가낮다면
Callexitlong("당일청산",Atmarket) EndIf
Ifposition=-1 And Entryprice<close Then
Callexitshort("당일청산",Atmarket) EndIf
EndIf
‘방향성청산----------------------------------------------------------
Elseif method=2 or method=3 then
If ttime=1450 And position<>0 Then
Ifposition=1 And (opend-Var1*len>lowdOrEntryprice>close) Then
Callexitlong("당일청산",Atmarket)
EndIf
Ifposition=-1 and (opend+var1*len<highdorEntryprice<close)Then
Callexitshort("당일청산",Atmarket)
EndIf
EndIf
‘ProfitableOpenStop---------------------------------------------------
Elseif method=3 then
If position=0 Then ‘날짜변경을카운트하기위한식
Var50=0 ‘초기화
EndIf
If tdate<>tdate(1) And position<>0 Then ‘포지션이있으면서날짜가변경되면
Var50=Var50 +1 ‘카운트를 1씩증가시킨다.
EndIf
If Var50=dayin And tdate<>tdate(1) And position<>0 Then ‘카운트가 지정한숫자가 되면
If Entryprice < opend Then ‘진입가격보다시가가크면
Callexitlong("시가청산",Atmarket) ‘청산
EndIf
If Entryprice>opend Then
Callexitshort("시가청산",Atmarket)
EndIf
EndIf
EndIf
*/
#======================================================#
# YT <수식 3-21> 분차트를 이용한 단기매매전략
# SS_RangeBreak(v 0.2)
# 10분봉, 2000/01/04 ~ 2003/09/30
#======================================================#
Input: len(0.37), atrlen(20), len1(3.2), entrystart(092000), entrylimit(143000), dayin(3), method(0) ;
//'기본식-------------------------------------------------------------
//If method == 0 then
Var1=dayhigh(1)-daylow(1) ; // 전일 range
Condition1= exitname(1) == "매수추적스탑" And date == exitdate(1) And date == Entrydate(1) And exitprice(1)>dayopen+Var1*len ;
Condition2= exitname(1) == "매도추적스탑" And date == exitdate(1) And date == Entrydate(1) And exitprice(1)<dayopen-Var1*len ;
Condition3= exitname(1) == "매수추적스탑" And date == exitdate(1) And date <> Entrydate(1) And exitprice(1)>dayopen+Var1*len ;
Condition4= exitname(1) == "매도추적스탑" And date == exitdate(1) And date <> Entrydate(1) And exitprice(1)<dayopen-Var1*len ;
If Entrystart < time And time < Entrylimit Then {
If Condition1 == False And Condition3==False Then buy("매수",Atstop,dayopen+Var1*len) ;
If Condition2 == False And Condition4==False Then sell("매도",Atstop,dayopen-Var1*len) ;
}
If MarketPosition<>0 Then {
exitlong("매수추적스탑",Atstop,NthHighest(1,high,BarsSinceEntry+1)-atr(atrlen)*len1) ;
exitshort("매도추적스탑",Atstop,NthLowest(1,low,BarsSinceEntry+1)+atr(atrlen)*len1) ;
}
//'손실발생당일청산-----------------------------------------------------
//Else if method == 1 Or method == 2 Or method == 3 then {
if method == 1 Or method == 2 Or method == 3 then {
If time ==145000 And MarketPosition<>0 Then { //'2시50분에포지션이 있다면
If MarketPosition==1 And Entryprice > close Then //'진입가격보다종가가낮다면
exitlong("당일청산lloss",Atmarket) ;
If MarketPosition == -1 And Entryprice<close Then
exitshort("당일청산sloss",Atmarket) ;
}
}
//'방향성청산----------------------------------------------------------
Else if method == 2 Or method == 3 then {
If time==145000 And MarketPosition<>0 Then {
If MarketPosition == 1 And (dayopen-Var1*len>daylow Or Entryprice>close) Then exitlong("당일청산ldirection",Atmarket) ;
If MarketPosition == -1 And (dayopen+var1*len<dayhigh Or Entryprice<close) Then exitshort("당일청산sdirection",Atmarket) ;
}
}
//'ProfitableOpenStop---------------------------------------------------
Else if method == 3 then {
If MarketPosition==0 Then //'날짜변경을 카운트하기 위한 식
Var50=0 ; //'초기화
If date<>date[1] And MarketPosition<>0 Then //'포지션이 있으면서 날짜가 변경되면
Var50=Var50 +1 ; //'카운트를 1씩증가시킨다.
If Var50==dayin And date<>date[1] And MarketPosition<>0 Then { //'카운트가 지정한숫자가 되면
If Entryprice < dayopen Then //'진입가격보다 시가가 크면
exitlong("시가청산l",Atmarket) ; //'청산
If Entryprice > dayopen Then
exitshort("시가청산s",Atmarket) ;
}
}
/*
#======================================================##======================================================#
#======================================================#
# CT <수식 3-22> 일간차트를 이용한 단기매매 전략
# 이름: S_Rangebreak(v 0.2)
# 일봉, 2000/01/04 ~ 2003/09/30
#======================================================#
Input: len(0.4), atrlen(3), profitlen(2), stoplen(4), len1(21), method(0)
‘진입전략------------------------------------------------------------
Var1=high-low ‘시가고가의 거리= range
Setbarback ‘ 주문발생시점 한봉전으로
If open(-1)<=open then ‘내일시가가오늘 시가보다적거나같으면
Callbuy("매수",Atstop,Def,open(-1)+var1*len)
Endif
If open(-1)>open then ‘내일 시가가오늘시가보다크면
Callsell("매도",Atstop,Def,open(-1)-var1*len)
Endif
Ifmethod=1then
‘시가청산조건식-------------------------------------------------------
Ifi_position<>i_position(1)Then
Var10=0‘초기화
Var11=0‘초기화
EndIf
Ifi_position=1Andopen(-1)>=i_Entryprice+atr(atrlen)Then ‘현재매수상태이며진입이후 시가가진입가보다일정수준 이상이면
Var10=var10+1 ‘var10을1씩증가
ElseIfi_position=-1Andopen(-1)<=i_Entryprice-atr(atrlen)Then ‘현재매도상태이며진입이후 시가가진입가 보다일정수준 이하이면
Var10=var10+1 ‘var10을1씩증가
EndIf
Ifi_position=1Andopen(-1)<=i_Entryprice Then
‘현재매수상태이며진입이후 시가가진입가 보다일정수준 이하이면
Var11=var11+1 ‘var11을1씩증가
elseIfi_position=-1Andopen(-1)>=i_EntrypriceThen
‘현재매도상태이며진입이후 시가가진입가 보다일정수준 이상이면
Var11=var11+1 ‘var11을1씩증가
EndIf
‘수익발생시가청산-----------------------------------------------------
Ifposition=1Then
IfVar10=profitlenThen
Callexitlong("시가청산",Atmarket)
EndIf
Elseifposition=-1Then
IfVar10=profitlenThen
Callexitshort("시가청산",Atmarket)
EndIf
EndIf
‘손실발생시가청산-----------------------------------------------------
Ifposition=1Then
IfVar11=stoplenThen
Callexitlong("손실청산",Atmarket)
EndIf
Elseifposition=-1Then
IfVar11=stoplenThen
Callexitshort("손실청산",Atmarket)
EndIf
EndIf
‘ATR추적스탑--------------------------------------------------------
Ifposition=1Then
Callexitlong("추적스탑",Atstop,hhv(1,high,i_barnumsinceEntry+1)-atr(atrlen)*len1)
Elseifposition=-1Then
Callexitshort("추적스탑",Atstop,llv(1,low,i_barnumsinceEntry+1)+atr(atrlen)*len1)
EndIf
EndIf
*/
#======================================================#
# YT <수식 3-22> 일간차트를 이용한 단기매매 전략
# 이름: S_Rangebreak(v 0.2)
# 일봉, 2000/01/04 ~ 2003/09/30
# 체크 대상 : Setbarback, open[-1], I_MarketPosition, i_Entryprice
#======================================================#
Input: len(0.4), atrlen(3), profitlen(2), stoplen(4), len1(21), method(0) ;
//‘진입전략------------------------------------------------------------
Var1=high-low ; //‘시가고가의 거리= range
#Setbarback ; //‘ 주문발생시점 한 봉전으로
#Setbarback ; // YT에서 대체할 수 있는 방법은? 왜 쓰는가? 참조나 index로 제어가 안되는가?
### open[-1] YT에서 내일시가란 개념이 없는것 같은데
If open[-1] <= open then //‘내일시가가 오늘시가보다 적거나 같으면
buy("매수", Atstop, open[-1]+var1*len) ;
If open[-1] > open then //‘내일시가가 오늘시가보다 크면
sell("매도",Atstop, open[-1]-var1*len) ;
If method == 1 Then
{
//‘시가청산조건식-------------------------------------------------------
// If I_MarketPosition <> I_MarketPosition(1) Then {
If MarketPosition <> MarketPosition(1) Then {
Var10=0 ; //‘초기화
Var11=0 ; //‘초기화
}
/*
If I_MarketPosition == 1 And open[-1] >= i_Entryprice+atr(atrlen) Then //‘현재매수상태이며진입이후 시가가진입가보다일정수준 이상이면
Var10=var10+1 ; //‘var10을1씩증가
Else If I_MarketPosition ==-1 And open[-1] <= i_Entryprice-atr(atrlen) Then //‘현재매도상태이며진입이후 시가가진입가 보다일정수준 이하이면
Var10=var10+1 ; //‘var10을1씩증가
If I_MarketPosition == 1 And open[-1] <= i_Entryprice Then //‘현재매수상태이며진입이후 시가가진입가 보다일정수준 이하이면
Var11=var11+1 ; //‘var11을1씩증가
Else If I_MarketPosition ==-1 And open[-1] >= i_Entryprice Then //‘현재매도상태이며진입이후 시가가진입가 보다일정수준 이상이면
Var11=var11+1 ; //‘var11을1씩증가
*/
If MarketPosition == 1 And open[-1] >= Entryprice+atr(atrlen) Then //‘현재매수상태이며진입이후 시가가진입가보다일정수준 이상이면
Var10=var10+1 ; //‘var10을1씩증가
Else If MarketPosition ==-1 And open[-1] <= Entryprice-atr(atrlen) Then //‘현재매도상태이며진입이후 시가가진입가 보다일정수준 이하이면
Var10=var10+1 ; //‘var10을1씩증가
If MarketPosition == 1 And open[-1] <= Entryprice Then //‘현재매수상태이며진입이후 시가가진입가 보다일정수준 이하이면
Var11=var11+1 ; //‘var11을1씩증가
Else If MarketPosition ==-1 And open[-1] >= Entryprice Then //‘현재매도상태이며진입이후 시가가진입가 보다일정수준 이상이면
Var11=var11+1 ; //‘var11을1씩증가
//‘수익발생시가청산-----------------------------------------------------
If MarketPosition == 1 Then
If Var10 == profitlen Then exitlong("시가청산L",Atmarket) ;
Else If MarketPosition == -1 Then
If Var10 == profitlen Then exitshort("시가청산S",Atmarket) ;
//‘손실발생시가청산-----------------------------------------------------
If MarketPosition == 1 Then
If Var11 == stoplen Then exitlong("손실청산L",Atmarket) ;
Else If MarketPosition == -1 Then
If Var11 == stoplen Then exitshort("손실청산S",Atmarket) ;
//‘ATR추적스탑--------------------------------------------------------
If MarketPosition == 1 Then
exitlong("추적스탑L",Atstop,NthHighest(1,high,BarsSinceEntry+1)-atr(atrlen)*len1) ;
Else If MarketPosition == -1 Then
exitshort("추적스탑S",Atstop,NthLowest(1,low,BarsSinceEntry+1)+atr(atrlen)*len1) ;
}
2022-04-18
1701
글번호 158107
답변완료
부탁 드립니다.
종가>bbandsup(20,2)
&&
거래량>A
&&
거래량(1)*2.2<거래량
&&
시가*1.021<종가
&&
highest(고가,5)
&&
highest(거래량,5)
지표조건 A=100000
분봉에서 나오는 종목 찾고 싶습니다.
강세 신호도 부탁 드립니다.~감사 합니다
2022-04-18
1410
글번호 158106