커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

틱차트는 지원안하실의향이신지

저는 틱차트를 애용하는데요... 과거 예스스탁을 이용하다가 틱차트 시뮬레이션이 안되는 바람에 사용중단을 했던 적이 있었는데.... 틱차트 시뮬레이션이 곧 지원될것이라는 풍문을 어디선가 들었답니다. 애정으로 기다려도 될른지요?
프로필 이미지
상고머리
2012-03-03
401
글번호 48521
시스템
답변완료

차트에 원하는 값을 표현하고 싶습니다.

차트에 제가 원하는 값을 적고 싶습니다 그런데 Plot1(값, 표시명) 표시명에 계산한 값을 넣고 싶은데 상수 밖에 못 넣더라고요 다른 방법이 있을까요?
프로필 이미지
스킬
2012-03-03
371
글번호 48520
검색
답변완료

문의 드립니다.

아래의 조건을 만족하는 시스템식이 궁금합니다. "과거의 최저가에서 10% 를 상승돌파하면 매수, 과거의 최고가에서 10% 를 하향돌파하면 매도"
프로필 이미지
앙두
2012-03-03
372
글번호 48519
시스템
답변완료

간단한 질문.

1) marketposition을 함수로 작성해서 쓰면 더 오래걸리나요 예를 들어 경우1) marketposition을 그대로 쓰는것 2) 식에서 marketposition을 변수로 지정해 준다. 3) marketposition을 함수로 만들어 쓴다. 어느것이 가장빠른가요? 제가 얼핏 듣기로 3번이 느리다고 알고있는데, 간단한 원리 설명 부탁드립니다. 그럼 . 좋은 한주 되시길... 그리고 dayhigh와 같은 함수는 분봉 갯수에 영향을 받지 않고 값을 불러올수있는게 맞지요? 최대 몇일까지 불러올수 있나요? 2) o > ma(c,5) 이결과는 봉이 완성되야 알수 있는거지요? 전봉 기준으로 하려면 o > ma(c,5)[1]인가요?
프로필 이미지
sjpapa
2012-03-05
408
글번호 48517
지표
답변완료

100봉내 양봉 50개가 한번이라도 있는 종목 검색

********** 식1 ********** var1 = ma(c,5); var2 = ma(c,20); if index == 0 Then Condition1 = false; if Condition2 == true and countif( C > O, 100) >= 50 then if crossup(var1,var2) Then Condition1 = true; if Condition1 == true Then find(1); ********** 식2 ********** var1 = ma(c,5); var2 = ma(c,20); if index == 0 Then { Condition1 = false; Condition2 = true; // 최초 조건 만족시 한번만 if 실행되게 } if Condition2 == true and countif( C > O, 100) >= 50 then if crossup(var1,var2) Then { Condition1 = true; Condition2 = False; } if LastBarOnChart == 1 and Condition1 == true Then find(1); 질문1) 실행속도가 향상되는지 알아보기 위해 식1을 식2로 변경해서 테스트해 보았는데 실행속도 향상은 없었습니다. a) 조건을 판단하는 if문을 최초 조건만족할때 단 한번만 실행되게 해서 실행속도 향상(Condition2 사용). b) find를 매번 실행하지않고 마지막봉에서 한번만 실행하여 실행속도 향상(LastBarOnChart). 실행속도와는 무관한가요? ========================================================= 아래 링크된 두개의 답변은 삭제해 주시면 감사하겠습니다. 아래에 두개의 답변을 정리해 놓은 것이니 답변해 주실 내용이 아닙니다 https://www.yesstock.com/Board/Search_View.asp?db=board100036&num=48741&pageno=1&startpage=1&Kind=1&keyfield=Subject&keyword=종 목 &Ext=0 https://www.yesstock.com/Board/Search_View.asp?db=board100036&num=48792&pageno=1&startpage=1&Kind=1&keyfield=Subject&keyword=종 목 &Ext=0 ######################################################################## ################ 두번째 질문 내용 ################ var1 = ma(c,5); var2 = ma(c,20); if countif( C > O, 100) >= 1 then // A if crossup(var1,var2) Then // B find(1); If countif( v>v[1], 100) >= 1 Then // C find(1); ================================================= 질문1) countif는 100봉, 속성은 200봉으로 설정하면 검색기간은 100봉? 200봉? (질문) 실행순서1 100봉전 실행 : var1 --> var2 --> A실행 --> 음봉이면 --> B건너뜀 --> C실행(1회) 99봉전 실행 : var1 --> var2 --> A실행 --> 음봉이면 --> B건너뜀 --> C실행(1회) 98봉전 실행 : var1 --> var2 --> A실행 --> 양봉이면 --> B실행(1회) --> C실행(1회) 여기부터는 양봉 음봉 상관없이 A를 무조건 실행(양봉 1개 이상의 조건이 충족되므로) 97봉전 실행 : var1 --> var2 --> A실행 --> B실행(1회) --> C실행(1회) .....생략..... 현재봉 실행 : var1 --> var2 --> A실행 --> B실행(1회) --> C실행(1회) 실행순서2 계산에 필요한 var1, var2, 양봉갯수, v 값을 구하기 위해 먼저 100개봉을 실행해서 값을 구해 놓은 뒤에, 포인터가 현재봉에 위치한 상태에서 방금 구해 놓은 값을 계산하면서 처리하는 방식 질문2) "실행순서1"처럼 실행되는 것으로 알고 있는데 잘못 알고 있나요? 질문3) 실행순서1처럼 매 봉으로 이동할때마다 var1 --> C를 반복하면서 처리하나요? 질문4) 총실행횟수는 A=100번, B=98번(처음 음봉 두번 미실행), C=100번 실행되는게 맞는지요? 질문5) if countif( C > O, 100) >= 1 then // A if countif(crossup(var1,var2), 100 >= 1 Then // B find(1); A만 countif문을 사용한것과 A와 B 모두 countif문을 사용한것은 처리횟수가 동일한가요? ====================================================== var1 = ma(c,5); var2 = ma(c,20); if crossup(var1,var2) Then // B find(1); 질문6) 이 식을 실행해 보면 속성창에서 봉을 설정안하든, 100개로 설정하든, 300개로 설정하든 상관없이 맨마지막 봉에서 골든크로스가 발생한 종목만 검색이 됩니다. 중간에서 골든크로스가 발생한 종목도 검색되게 할려면 countif문을 사용하는 방법외에 다른 방법은 없나요? ################ 두번째 답변 내용 ################ 안녕하세요 예스스탁입니다. 1. 200봉입니다. 2. 실행순서1과 같이 동작합니다. 3. 예 매봉 var1 --> C방향으로 계산합니다. 4. 시스템 랭귀지는 모든 수식의 내용을 읽어 들어갑니다. 상단의 if문이 false라도 하단의 내용은 계산하게 되므로 계산횟수는 모두 동일합니다. 5. 계산의 횟수가 다릅니다. a만 countif하면 A는 최근 100개 봉의 종가와 시가를 불러와 양봉인 횟수를 계산하고 B는 현재봉의 상태만 계산하게 되므로 101회이고 A와 B모두 countif이면 A 100번 B도 100번이므로 총 200회가 계산됩니다. 6. if crossup(var1,var2) Then 는 현재봉이 골든크로스인 중목을 나타냅니다. 이전에 몇개봉안에 발생한 적이 있다를 표현하시려면 countif를 이용하셔야 합니다. ######################################################################## ################ 첫번째 질문 내용 ################ (a) 100개의 봉중에서,,, (양봉 and 골든크로스)가 1개이상 존재하면 찾아라 (b) 100개의 봉중에서,,, 현재거래량이 직전거래량보다 많은것이 1개이상 존재하면 찾아라 var1 = ma(c,5); var2 = ma(c,20); if countif( C > O, 100) >= 1 then // A if crossup(var1,var2) Then // B find(1); If countif( v>v[1], 100) >= 1 Then // C find(1); ================================================== 질문1) if문이 실행되면서 var1과 var2 값이 계속 바뀌어야 되는데 여기선 차트의 맨 마지막 봉의 이동평균값 하나만 저장되나요? (countif문으로 제어가 안되므로) 질문2) (a)와 (b)중 한가지라도 만족하면 해당 종목이 검색되나요? 실행순서 ㉠ 맨처음 var1=100, var2=120 실행 ㉡ 그 다음 A 실행 질문3) 100봉전부터 99봉전, 98봉전 순서대로 100번 루트를 돌면서 양봉을 전부 찾아 놓은 후 B를 실행하나요? 아니면 양봉을 찾으면 B를 실행하고, 다시 A를 실행하다 양봉을 찾으면 B를 실행하고, A와 B를 왔다갔다하면서 처리하나요? 질문4) B에서 var1과 var2는 계속 바뀌어야 되는데, var1=100과 var2=120 값만 변하지 않고 처리가 끝날때까지 사용되나요? ㉢ C 실행 질문5) A와 B가 모두 완전히 끝난후에 C를 100번 실행하나요? 아니면 A와 C를 왔다갔다 하면서 처리하나요? 질문6) var1 = ma(c,5)부터 C까지(처음부터 끝까지) 여러번 왔다갔다 하지 않고 원샷에 끝나나요? 질문7) 이 수식을 실행하면 잘못된 결과가 나오나요? ################ 첫번째 답변 내용 ################ 안녕하세요 예스스탁입니다. 종목검색도 차트에 적용되는 것과 마찬가지로 수식이 계산됩니다. 종목검색식은 속성화면에서 검색에 필요한 봉갯수를 따로 지정하시면 해당 봉갯수만큼 차트를 띄워놓구 적용하신 것과 같고 특별히 지정하지 않으면 종목검색시 해당 수식에 필요한 최소 봉갯수를 먼저 계산하여 검색에 필요한 봉갯수가 가령 200개로 계산되면 조회건수 200봉으로 한 차트에 적용하신 것과 같습니다 자동으로 계산되는 부분은 실제 수식에서 필요한 봉갯수보다 작게 산정될수 있으므로 되도록 직접 입력해 사용하셔야 합니다. 산정한 봉갯수에서 첫봉부터 마지막 봉쪽으로 수식을 계산하면서 오고 마지막봉에서 지정한 조건이 만족한 종목을 리스트에 보여주게 됩니다. 그러므로 각변수의 이전값이 모두 존재 하며 find함수안에 1과 같은 숫자대신에 var1[1]등오로 지정하시면 현재봉의 전봉의 값을 결과값으로 표시해 주는 것을 확인하실 수 있습니다. 작성하신 식에서 countif는 루프문(for문)을 사용한것과 같은 함수이므로 첫번째봉부터 현재봉쪽으로 오면서 매봉 봉당 100번의 루프를 돌면서 이전봉의 값을 불러와 계산하고 이평이 골든인지 확인하면서 현재봉쪽으로 진행되게 되고 최종 현재봉이 지정한 조건들에 모두 만족하면 해당 종목은 결과리스트에 표시가 됩니다. 1) 맨마지막봉만 계산이 되면 이전봉의 값이 없으므로 골든인지 데드인지 알수가 없습니다. 위 설명대로 이전봉부터 계산되서 오게 됩니다. 2) A와 B는 아래와 같이 작성된 것과 같습니다. countif( C > O, 100) >= 1 and crossup(var1,var2) 2개조건이 동시충족되는 종목이 검색됩니다. 작성하신 식은 A+B 또는 C가 만족한 종목을 찾는 식입니다. 3) 수식상에 계산의 순서는 항상 위부터 아래이며 중간에 상위로 돌아가지 않습니다(최근 100개봉동안 양봉갯수 구한 후 이평골드조건 계산) var1 완료 --> var2완료 --> A완료 --> B완료 --> find --> C완료 --> find 4) var1,var2는 위 설명과 같이 매봉 값이 변합니다. 5) 3) 내용 참고하시기 바랍니다. 6) 예 아래쪽으로는 수식계산이 진행됩니다. 7) 작성하신 수식은 최근 100개봉중 양봉이 하나이상이고 현재봉은 골든크로스인 종목을 찾는 식입니다. 해당내용이시면 수식에 잘못된 부분은 없습니다. 만약 양봉이고 골든크로스가 난봉이 최근 100개중 1개 이상이라는 조건이면 아래와 같이 수정하셔야 합니다. var1 = ma(c,5); var2 = ma(c,20); if countif( C > O and crossup(var1,var2), 100) >= 1 Then find(1); If countif( v>v[1], 100) >= 1 Then // C find(1); ########################################################################
프로필 이미지
행복충전
2012-03-10
529
글번호 48516
검색
답변완료

문의 드립니다.

안녕하십니까! 매수 및 매도를 포함하여 하루에 5번 거래하도록 하고, 당일거래에서 손절 청산시 재매수 혹은 재매도 진입은 20개봉 완성후 재진입을 허용하는 수식을 구하고자 합니다. 감사합니다.
프로필 이미지
아틀라스
2012-03-03
381
글번호 48514
시스템
답변완료

수식부탁드립니다.

LSMA 라는 이동평균이 있던데요. 원문은 What is an LSMA? It stands for Least Squares Moving Average and the indicator plots the endpoint of the linear regression line. By comparing the current value to the prior value a determination is made of a possible trend, ie the linear regression line is pointing up or down. Use the close of the current candle after it is finished and the next candle is forming as the end point. That avoids the problem of a candle changing the value of the indicator in real time. LSMA란 최소자승이동평균으로 직선회귀선이 끝나는 지점값을 그린다. 현재값을 앞의 값과 비교해서 나온 값은 가능한 추세를 만든다. 예를 들면 직선회귀선은 상승이나 하락을 나타낸다. 현재 캔들이 완성된 뒤의 종가를 사용하여 다음 캔들의 종가를 나타내는 것이다. 이는 실시간에 캔들값의 변화가 지표값을 변화시키는 것을 예방해준다. 본문 원수식은 int start() { Draw4HowLong=Bars-Rperiod - 5; length=Rperiod; loopbegin=Draw4HowLong - length - 1; //---- for(shift=loopbegin; shift>=0; shift--) { sum[1]=0; for(i=length; i>=1 ;i--) { lengthvar=length + 1; lengthvar/=3; tmp=0; tmp =(i - lengthvar)*Close[length-i+shift]; sum[1]+=tmp; } wt[shift]=sum[1]*6/(length*(length+1)); 이동평균기간값을 3으로 나누어서 가중평균을 내는 것 같은데요. 그래서 제가 이를 유추해서 만들어 봤는데 ==================================================================== input : period(21); var : cnt(0),shift(0),tmp(0),length(0),lengthvar(0),wt(0),sum(0); length = period; sum[1] = 0; for cnt = length to 1 { lengthvar = length +1; lengthvar = lengthvar/3; tmp = 0; tmp = (length - lengthvar)*C[length - cnt]; sum[1] = sum[1] + tmp; } wt = sum[1]*6/(length*(length+1)); plot1(wt); 어디가 잘못되었는지요.. 부탁드립니다.
프로필 이미지
무지개나날들
2012-03-03
760
글번호 48513
지표
답변완료

수정해주세요---------

//아침진입라인 시작 Input:N(15),변동율(0.001); var:TEMA71(0),TEMA81(0),Ep(0),T1(0),T2(0),T3(0),TEMA82(0),단기봉기간(7),장기봉기간(7),높이조절(0.0),length1(250); if date != date[1] Then Condition1 = false; //장중진입라인 시작 if highest(H,N)-lowest(L,N) <= C*(변동율) Then{ Condition1 = true; var1 = highest(H,N); var2 = lowest(L,N); } //if Condition1 == true Then{ // plot1(var1); // plot2(var2); ///} //장중진입라인 &#44561; //--------높이조절------------ if Condition1 == true Then{ plot1(var1+높이조절); plot2(var2+높이조절); } 위식은 지정한 횡보가 완성되면 다음횡보까지 직선으로 점을 찍는데 이를 횡보초기에는 검은색 횡보가 지속 될수록 흰색으로 점찍게 해주세요 그게 어려우면 처음5봉은 검은색 다음5봉은 진한회색 다음다섯봉이상 은 흰색으로 해주세요 첨부올립니다 항상 수고하세요
프로필 이미지
leekss1
2012-03-03
498
글번호 48512
지표
답변완료

종목검색

상장일로부터 지금까지 단 한번이라도 100일 전 종가의 1.5배 이상의 종가로 마무리된 적이 있는 종목을 검색하려고 하는데 아래의 식으로 왜 검색이 안되는지 확인부탁드립니다. vars : 기간(0), n(0), value(0); 기간=1000; for n = 0 to 기간 { if C[n+100]*1.5 <= C[n] Then value=1; else value=0; } find(value);
프로필 이미지
프리니어
2012-03-03
415
글번호 48511
검색