커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내

안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
프로필 이미지
예스스탁
2026-02-27
1748
글번호 230811
지표
답변완료

수식문의합니다~~

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
1014
글번호 145895
지표
답변완료

지표식의 고점과 저점

분봉에서 지표식의 당일 고점과 저점을 구하는 식을 문의합니다 예를 들면 stok 의 고점과 저점을 구해서 그 둘의 합을 2로 나누어서 지표식에 선으로 표시하고 싶습니다. 다른 지표식도 표현이 가능한지 샘풀로 알려주시기 바랍니다 감사합니다
프로필 이미지
느림보
2021-01-28
968
글번호 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
885
글번호 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); }
프로필 이미지
유로파54
2021-01-28
1022
글번호 145885
지표
답변완료

간단한 지표식 부탁드립니다.

data1, 2, 3에 각각 1분봉, 일봉, 1시간봉이 들어있습니다. 1) data3을 이용해서, 각 봉(즉 1시간 동안의)의 고가-저가를 구합니다. 2) 1)의 값을 1일 평균값으로 구합니다. 즉, 하루에 7개의 1시간 봉이 존재하므로 7개 봉의 고가-저가를 모두 더한 후 7로 나누어줍니다. => 이것을 일중변동성이라고 가정합니다. 3) 이 일중변동성의 30거래일 이평선을 지표식으로 구하고 싶습니다. 감사합니다
프로필 이미지
중박주식
2021-01-28
792
글번호 145884
지표
답변완료

문의 드립니다

실행시키자마자 '한 번만' 현재가에 100주를 매수하고 그 뒤로는 비교식에 의해 매수, 매도하려면 어떻게 해야하나요?
프로필 이미지
joey
2021-01-27
758
글번호 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
1340
글번호 145882
종목검색
답변완료

분봉의 중심선 긋기

항상 도움주심에 감사합니다^^ 시간봉(60분봉)의 분봉 중심값을 차트에 라인과 텍스트를 표시하고 싶습니다. 제가 지금 사용하는 지표는 아래와 같은데 라인이 이전봉 뒤로 선이 길게 표시되는데 직전봉의 중심값에서 부터 우측으로 표시되게하고 차트 여백에 텍스트로 수치를 표시 할 수 있으면 좋겠습니다. 1.라인과 수치 표시 2.150틱 이상만 표시되게(시가와 종가의 틱수가 150틱 미만일때는 이전 150틱에 표시) 3.시가와 종가의 중간에 표시(고가와 저가는 카운팅 제외), 텍스트 표시는 작게 input : N(150); if Bdate != Bdate[1] Then{ TL_Delete(var4); var1 = sdate[1]; var2 = stime[1]; } if abs(C-O) >= PriceScale*N Then{ var3 = (C+O)/2; TL_Delete(var4); var4 = TL_New(var1,var2,var3,sdate,stime,var3); TL_SetExtRight(var4,true); }
프로필 이미지
체리피커
2021-01-27
1346
글번호 145881
지표
답변완료

예스트레이더코인 수식작성문의

예스트레이더 코인 수식작성 문의 드립니다. 예스트레이더에서 정상 작동 되는데 코인에서는 오류 뜨더라고요 수식 수정좀 부탁드리겠습니다. 매수 조건 : 이동평균선 120 이동평균선 골드크로스 상태에서 + Aroon 10 매수 신호 발생시 매수 매도 조건 : 이동평균 120 이동평균선 데드크로스, 또는 Aroon 10 매도 신호발생 둘중 먼저 매도 신호가 발생하면 매도 수식추가 부탁드리겠습니다. 감사드립니다~ > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식작성문의 > 안녕하세요 예스스탁입니다. input : P(120),Period(10); var : Counter(0), Lowval(0), Highval(0), DownVel(0),UpVel(0), DnAroon(0),UpAroon(0) ; var : mav(0); mav = ma(C,120); Lowval= Lowest(Low, Period+1); Highval = Highest(High, Period+1); For counter= 0 To Period { If Low[counter] == Lowval Then DownVel = counter; If High[counter] == highval Then UpVel = counter; } UpAroon = 100*(Period-UpVel)/Period; DnAroon = 100*(Period-DownVel)/Period; if c > mav Then { if crossup(UpAroon,DnAroon) Then buy("Aroon_LE"); if CrossDown(UpAroon,DnAroon) Then sell("Aroon_SE"); }
프로필 이미지
xspell
2021-01-27
1157
글번호 145880
사용자 함수