커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
5559
글번호 230811
러블리 님에 의해서 삭제되었습니다.
2021-01-28
0
글번호 145901
답변완료
현재가 문의
안녕하세요~
1. if문에서는 현재가를 봉완성시의 종가로 인식하는데, 그러면 1분봉에서는 쵀대 1분의 시간차가 5분봉에서는 최대 5분의 시간차이가 발생하는건간요?
2. 그렇다면 1분봉을 사용해야 하나요?
3. 현재가를 즉시 판단해서 사용하는 다른 함수가 있나요?
안녕하세요
예스스탁입니다.
plot1(c);
위 내용을 지표식으로 작성하시고 차트에 적용해 보시면
C가 체결시세가 수신될때마다 변경되어 현재가를 그려주고 있는 것을 확인하실 수 있습니다.
C는 실시간에서 계속 실시간체결시세를 받게 되지만
랭귀지에서 if문이 봉완성시에만 조건체크를 하게 됩니다.
봉완성시에만 조건만족여부를 판단해서 신호를 발생하기 때문에 C를 현재가로 지칭하기도 하고 종가로 지칭하기도 합니다.
즐거운 하루되세요
> 백합 님이 쓴 글입니다.
> 제목 : 그런데 C 는 종가 아닌가요? 왜 현재가로 사용하죠?
> 고맙습니다~~
그런데 C 는 종가 아닌가요? 왜 현재가로 사용하죠?
2021-01-28
1010
글번호 145900
답변완료
수식문의합니다~~
1. <<<신호타입 중 atlimit은 Buy에 사용되면
if조건이 만족하면 특정값(var1-매수포인트)을 셋팅하고
다음봉에서 현재가가 특정값(Buy에 사용되면) 이하이면 즉시 진입>>>
onclose가 더 빠른데 왜 atlimit를 사용하죠?
2. -buy()- 는 어떤 신호타잎인지요?
3. <<<시간은 십만단위 숫자일 뿐입니다.
HH:MM:SS와 같은 시간값이 아닙니다
시간값이 70000으로 리턴되지만 7:00:00과 같은 시간이 아닙니다>>>
그러면 아래 시작시간과 종료시간을 9시와 15시30분으로 보내 안되나요?
아니면 입력 값은 시간인데 변수로 리턴되는 값은 시간이 아니라는 것인지요?
input : ntime(090000),Xtime(153000)
4. <<< L < var1-매수포인트
위와 같이 작성되면 이미 봉이 var1-매수포인트보다 아래인 상태에서
다음봉에서 다시 해당 가격이하이면 진입하게 됩니다.>>>
어차피 하루 1번 진입으로 카운팅되기때문에 필요 없지 않나요?
5. 나스닥에서 상식적인 손절 범위를 벗어나게 십만포인트를 설정햬는데도 손절이 발생하는데 공식에 어떤문제가 있는지요?
if MarketPosition == 0 and entry < 1 and L > DayOpen-10 Then
Buy("b",AtLimit,DayOpen-10);
SetStopLoss(100000,PointStop);
ExitLong("bp",AtLimit,DayOpen+10);
아래는 정상으로 나옵니다
if MarketPosition == 0 and entry < 1 and L > DayOpen-10 Then
Buy("b",AtLimit,DayOpen-10);
SetStopLoss(100000,PointStop);
SetStopProfittarget(20,PointStop);
6. 아래 수식에서 저가가 DayOpen-10 보다 커야 buy가 수행되는 전제조건인데 buy는 DayOpen-10 이하가 되어야 수행이 되니 어케 체결이 되는지요?
if MarketPosition == 0 and entry < 1 and L > DayOpen-10 Then
Buy("b",AtLimit,DayOpen-10);
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 다시 확인 요청드립니다
> 안녕하세요
예스스탁입니다.
1.2
var1~var99, value1~value99
위 변수는 선언없이 사용가능한 내부저장변수입니다.
내부적으로 미리 0으로 모두 선언이 된 상태입니다.
해당 수식에서는 ntime봉의 시가를 저장하게 작성이 되어 있습니다.
if (sdate != sdate[1] and stime >= ntime) or
(sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then
{
Tcond = true;
var1 = O;
}
4
if Tcond == true and MarketPosition == 0 and entry < 1 AND L > var1-매수포인트 Then
Buy("b",AtLimit,var1-매수포인트);
신호타입 중 atlimit은 Buy에 사용되면
if조건이 만족하면 특정값(var1-매수포인트)을 셋팅하고
다음봉에서 현재가가 특정값(Buy에 사용되면) 이하이면 즉시 진입입니다.
봉이 지정한 가격보다 위에 형성되어 있다가 하락해서
var1-매수포인트를 처음 터치할때 진입하게 작성된 내용입니다.
L > var1-매수포인트가 없으면 손절등 청산뒤에
계속 해당 가격아래 있으면 바로 또 매수가 발생하게 됩니다.
5
L < var1-매수포인트
위와 같이 작성되면 이미 봉이 var1-매수포인트보다 아래인 상태에서
다음봉에서 다시 해당 가격이하이면 진입하게 됩니다.
6
시간은 십만단위 숫자일 뿐입니다.
HH:MM:SS와 같은 시간값이 아닙니다
시간값이 70000으로 리턴되지만 7:00:00과 같은 시간이 아닙니다.
시간을 최적화해 보고자 하시면
아래와 같이 시간을 특별한 단위로 변경해서 사용하셔야 합니다.
TimeToMinutes은 시간을 0시이후 경과된 분으로 리턴해 주는 함수입니다.
7시면 420분으로 리턴됩니다.
최적화에서 36단위로 최적화 하시면 됩니다.
input : ntime(420),Xtime(0),매수포인트(10),손절포인트(30),익절포인트(30);
var : Tcond(False),entry(0);
var : T1(0),TM(0);
TM = TimeToMinutes(stime);
T1 = TimeToMinutes(ntime);
if (sdate != sdate[1] and stime >= Xtime) or
(sdate == sdate[1] and stime >= Xtime and stime[1] < Xtime) Then
{
Tcond = false;
}
if Bdate != Bdate[1] Then
{
Tcond = False;
entry = 0;
if Xtime < ntime Then
SetStopEndofday(0);
}
if (sdate != sdate[1] and TM >= T1) or
(sdate == sdate[1] and TM >= T1 and TM[1] < T1) Then
{
Tcond = true;
var1 = O;
}
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
if Tcond == true and MarketPosition == 0 and entry < 1 AND L > var1-매수포인트 Then
Buy("b",AtLimit,var1-매수포인트);
즐거운 하루되세요
> 코퍼 님이 쓴 글입니다.
> 제목 : 다시 확인 요청드립니다
> 안녕하세요~~
전에 만들어주신 식중 일부입니다 (시초가가 매수포인트(변수) 만큼 하락시 매수하라)
input : ntime(70000),Xtime(0),매수포인트(10),손절포인트(30),익절포인트(30);
var : Tcond(False),entry(0);
if (sdate != sdate[1] and stime >= Xtime) or
(sdate == sdate[1] and stime >= Xtime and stime[1] < Xtime) Then
{
Tcond = false;
}
if Bdate != Bdate[1] Then
{
Tcond = False;
entry = 0;
if Xtime < ntime Then
SetStopEndofday(0);
}
if (sdate != sdate[1] and stime >= ntime) or
(sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then
{
Tcond = true;
var1 = O;
}
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
if Tcond == true and MarketPosition == 0 and entry < 1 AND L > var1-매수포인트 Then
Buy("b",AtLimit,var1-매수포인트);
1. 내부(겸 내장)변수 var1은 초기값이 0 인데 내부변수 선언은 왜 없는지요?
2. 상기식에서-messagelog("%.f",var1)-하면 var1 값이 초기값 0으로 나오고 실행은 시초가로 작동하는것 같은데 어떻게 할당이 된건지요?
4. 어차피 시초가 대비 무조건 진입인데 상기식중 -AND L > var1-매수포인트- 가 왜 필요한지요?
5. -L < var1-매수포인트- 로 변경하면 어케 다른지요?
6. ntime을 070000~090000 (증가단위 3600 최적화) 돌리면 77200 이나 88000 같은 값이 나오는데 몇시로 봐야하는지요?
2021-01-28
1075
글번호 145895
답변완료
지표식의 고점과 저점
분봉에서 지표식의 당일 고점과 저점을 구하는 식을 문의합니다
예를 들면
stok 의 고점과 저점을 구해서 그 둘의 합을 2로 나누어서 지표식에 선으로 표시하고 싶습니다.
다른 지표식도 표현이 가능한지 샘풀로 알려주시기 바랍니다
감사합니다
2021-01-28
1005
글번호 145893
답변완료
지표를 음성으로
안내해주는 프로그램이 나왔으면 좋겠습니다.
사람이 눈으로 매번 지표를 읽다보니 노치는 부분이 있어서 그러는데요
차트상에 있는 지표를 음성으로 안내를 해주면
매매를 하는데 유용하지 않을까해서 말씀드립니다.
그, 기능이 있으면 알려주세요
아니면 예스에서 먼저 개바를 해보시던지요.
예)
if ma(C,1) > ma(C,5)[1] then
plot1(ma(c,5),"이동평균1",RED);
else
plot1(ma(c,5),"이동평균1",BLUE);
2021-01-28
935
글번호 145892
답변완료
문의드립니다!
항상 수고해주심에 너무 감사드립니다
아래"수식1"을 적용시 4개의 선이 발생되는데요
아침에 장이 시작되면 캔들의 움직임에 따라서 이 선들이 위아래로 이동을 합니다
* 그림에서 캔들 위아래의 빨간선을 기준으로 문의 드립니다 (Plot1, Plot2 선입니다)
캔들의 하방이동에 의거 그림의 1과 2사이의 구간에서는 선도 같이 하방으로 이동을 합니다
* 이런 패턴이 반복되며 이선이 계속 하방이동되는 경우도 자주 있습니다
헌데 이후 3번 캔들이 완성시에는 이선을 그대로 하방 돌파하고 이후 이선은 장이 끝날때까지 캔들의 움직임과 상관없이 이 가격선을 그대로 유지합니다
즉, 2번자리에서 이선이 고정되었다는것을 알수있습니다
1, 이렇게 선이 캔들의 이동에의거 같이 이동하는 경우와 돌파하는 경우로 나뉘는것은 어떤 원리에의한것인지요?
2, 이 2번자리가 선의 고정자리라는것을 2번캔들이나 그다음 캔들이 완성시 알수있는 방법은 없을까요?
3, 만약 위 2번 내용이 가능하다면 이자리에 세로선과 알람신호가 발생되는 수식도 가능할런지요?
* 물론 위아래 2개의 빨간선이 모두 해당이 되겠죠
가능한 알기쉽게 자세한 설명 부탁드립니다
4, 아래 "수식2"에서 음성신호가 발생되도록 수정 부탁드립니다
매번 도움주심에 항상 감사드립니다!!!
-------------------------------------------------------------------------------
( 수식 1)
if sTime < 93000 Then
{
var1 = DayHigh;
Var2 = DayLow;
Var3 = (var1-Var2);
}
Plot1(var1);
Plot2(var2);
Plot3(var1+Var3);
Plot4(var2-Var3);
(수식 2)
var : tl1(0,data1),tl24(0,data1);
if CrossDown(data1(L),data2(H)) or
Crossup(data1(h),data2(L)) Then
{
tl1 = TL_New(sdate,stime,9999999,sdate,stime,0);
TL_SetColor(tl1,YELLOw);
TL_SetSize(tl1,4);
}
2021-01-28
1067
글번호 145885
답변완료
간단한 지표식 부탁드립니다.
data1, 2, 3에
각각 1분봉, 일봉, 1시간봉이 들어있습니다.
1) data3을 이용해서, 각 봉(즉 1시간 동안의)의 고가-저가를 구합니다.
2) 1)의 값을 1일 평균값으로 구합니다. 즉, 하루에 7개의 1시간 봉이 존재하므로 7개 봉의 고가-저가를 모두 더한 후 7로 나누어줍니다. => 이것을 일중변동성이라고 가정합니다.
3) 이 일중변동성의 30거래일 이평선을 지표식으로 구하고 싶습니다.
감사합니다
2021-01-28
830
글번호 145884
답변완료
문의 드립니다
실행시키자마자 '한 번만' 현재가에 100주를 매수하고
그 뒤로는 비교식에 의해 매수, 매도하려면 어떻게 해야하나요?
2021-01-27
796
글번호 145883
답변완료
키움신호를 종목검색식으로 변환 부탁드립니다.
안녕하세요.
키움에서 사용중인 신호수식인데 예스랭귀지 종목검색식으로 변환 부탁드립니다.
미리 감사드립니다.
M=MACD(200,400)-eavg(MACD(200,400),9);
A=(if(eavg(c,20)>eavg(c,20,1)*(1.003),1,0)+ if(eavg(c,21)>eavg(c,21,1)*(1.003),1,0)+ if(eavg(c,22)>eavg(c,22,1)*(1.003),1,0)+ if(eavg(c,23)>eavg(c,23,1)*(1.003),1,0)+ if(eavg(c,24)>eavg(c,24,1)*(1.003),1,0)+ if(eavg(c,25)>eavg(c,25,1)*(1.003),1,0)+ if(eavg(c,26)>eavg(c,26,1)*(1.003),1,0)+ if(eavg(c,27)>eavg(c,27,1)*(1.003),1,0)+ if(eavg(c,28)>eavg(c,28,1)*(1.003),1,0)+ if(eavg(c,29)>eavg(c,29,1)*(1.003),1,0)+ if(eavg(c,30)>eavg(c,30,1)*(1.003),1,0)+ if(eavg(c,31)>eavg(c,31,1)*(1.003),1,0)+ if(eavg(c,32)>eavg(c,32,1)*(1.003),1,0)+ if(eavg(c,33)>eavg(c,33,1)*(1.003),1,0)+ if(eavg(c,34)>eavg(c,34,1)*(1.003),1,0)+ if(eavg(c,35)>eavg(c,35,1)*(1.003),1,0))/16*100;
B=(if(eavg(c,20)>eavg(c,20,1)*(0.997),1,0)+ if(eavg(c,21)>eavg(c,21,1)*(0.997),1,0)+ if(eavg(c,22)>eavg(c,22,1)*(0.997),1,0)+ if(eavg(c,23)>eavg(c,23,1)*(0.997),1,0)+ if(eavg(c,24)>eavg(c,24,1)*(0.997),1,0)+ if(eavg(c,25)>eavg(c,25,1)*(0.997),1,0)+ if(eavg(c,26)>eavg(c,26,1)*(0.997),1,0)+ if(eavg(c,27)>eavg(c,27,1)*(0.997),1,0)+ if(eavg(c,28)>eavg(c,28,1)*(0.997),1,0)+ if(eavg(c,29)>eavg(c,29,1)*(0.997),1,0)+ if(eavg(c,30)>eavg(c,30,1)*(0.997),1,0)+ if(eavg(c,31)>eavg(c,31,1)*(0.997),1,0)+ if(eavg(c,32)>eavg(c,32,1)*(0.997),1,0)+ if(eavg(c,33)>eavg(c,33,1)*(0.997),1,0)+ if(eavg(c,34)>eavg(c,34,1)*(0.997),1,0)+ if(eavg(c,35)>eavg(c,35,1)*(0.997),1,0))/16*100;
Y=(if(eavg(c,20)>eavg(c,20,1)*(1.0005),1,0)+ if(eavg(c,21)>eavg(c,21,1)*(1.0005),1,0)+ if(eavg(c,22)>eavg(c,22,1)*(1.0005),1,0)+ if(eavg(c,23)>eavg(c,23,1)*(1.0005),1,0)+ if(eavg(c,24)>eavg(c,24,1)*(1.0005),1,0)+ if(eavg(c,25)>eavg(c,25,1)*(1.0005),1,0)+ if(eavg(c,26)>eavg(c,26,1)*(1.0005),1,0)+ if(eavg(c,27)>eavg(c,27,1)*(1.0005),1,0)+ if(eavg(c,28)>eavg(c,28,1)*(1.0005),1,0)+ if(eavg(c,29)>eavg(c,29,1)*(1.0005),1,0)+ if(eavg(c,30)>eavg(c,30,1)*(1.0005),1,0)+ if(eavg(c,31)>eavg(c,31,1)*(1.0005),1,0)+ if(eavg(c,32)>eavg(c,32,1)*(1.0005),1,0)+ if(eavg(c,33)>eavg(c,33,1)*(1.0005),1,0)+ if(eavg(c,34)>eavg(c,34,1)*(1.0005),1,0)+ if(eavg(c,35)>eavg(c,35,1)*(1.0005),1,0))/16*100;
Z=(if(eavg(c,20)>eavg(c,20,1)*(0.99995),1,0)+ if(eavg(c,21)>eavg(c,21,1)*(0.99995),1,0)+ if(eavg(c,22)>eavg(c,22,1)*(0.99995),1,0)+ if(eavg(c,23)>eavg(c,23,1)*(0.99995),1,0)+ if(eavg(c,24)>eavg(c,24,1)*(0.99995),1,0)+ if(eavg(c,25)>eavg(c,25,1)*(0.99995),1,0)+ if(eavg(c,26)>eavg(c,26,1)*(0.99995),1,0)+ if(eavg(c,27)>eavg(c,27,1)*(0.99995),1,0)+ if(eavg(c,28)>eavg(c,28,1)*(0.99995),1,0)+ if(eavg(c,29)>eavg(c,29,1)*(0.99995),1,0)+ if(eavg(c,30)>eavg(c,30,1)*(0.99995),1,0)+ if(eavg(c,31)>eavg(c,31,1)*(0.99995),1,0)+ if(eavg(c,32)>eavg(c,32,1)*(0.99995),1,0)+ if(eavg(c,33)>eavg(c,33,1)*(0.99995),1,0)+ if(eavg(c,34)>eavg(c,34,1)*(0.99995),1,0)+ if(eavg(c,35)>eavg(c,35,1)*(0.99995),1,0))/16*100;
D1=dema(A,5);
T1=tema(A,5);
F1=eavg(tema(A,5),5);
D2=dema(B,5);
T2=tema(B,5);
F2=eavg(tema(B,5),5);
D3=dema(Y,5);
T3=tema(Y,5);
F3=eavg(tema(Y,5),5);
D4=dema(Z,5);
T4=tema(Z,5);
F4=eavg(tema(Z,5),5);
E1=countsince(M>0 and crossup(D3, max(T3,F3)), C>ma(c,5,단순) and C>O);
E2=countsince(M<0 and max(D3,T3,F3)==D3 and ((crossup(D3,50) and max(D4,T4,F4)<50) or
(crossdown(max(D4,T4,F4),50) and D3>50)),C>ma(c,5,단순) and C>O);
M>0
and
c>ma(c,60)
and
max(D1,T1,F1)==D1 and max(D2,T2,F2)==F2
and
BiWave(20,12,5,3)>0
and
HIGH - eavg(C,15)>0
and
Stochasticsslow(12,26)-eavg(Stochasticsslow(12,26),5)>0
and
(
crossup(M,0) or
crossup(c,ma(c,60)) or
crossup(D1,max(T1,F1)) or crossup(F2,max(D2,F2)) or crossup(BiWave(20,12,5,3),0) or
crossup(HIGH,eavg(c,15)) or crossup(Stochasticsslow(12,26),eavg(Stochasticsslow(12,26),5))
)
and
(
if(max(T3,F3)>D3,0,if(E1(1)==1,0,E1==1))
or
if(max(T3,F3)>D3,0,if(E2(1)==1,0,E2==1))
)
2021-01-27
1387
글번호 145882