커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

수식 간소화

MACD 다이버젼스 수식을 아래와 같이 만들었었는데요.. 간략하게 수정 또는 같은 내용으로 재작성 부탁드립니다. Input: Period(60), ShortPeriod(12), longPeriod(26), Highperiod(30); Var: Formula0(0), Formula1(0), Formula2(0), Formula3(0); Formula0 = iff(macd(shortPeriod,longPeriod)>macd(shortPeriod,longPeriod)[1] && macd(shortPeriod,longPeriod)[1] <= macd(shortPeriod,longPeriod)[2] && lowest(macd(shortPeriod,longPeriod)[2],Period) < macd(shortPeriod,longPeriod)[1] && (L<Lowest(L[1],Period)||L[1]<Lowest(L[2],Period)|| L[2]<Lowest(L[3],Period)), iff(C==C[1],0.001,(C-C[1])/C[1]*100), 0); Formula1 = iff(macd(shortPeriod,longPeriod)<macd(shortPeriod,longPeriod)[1]&& macd(shortPeriod,longPeriod)[1] >= macd(shortPeriod,longPeriod)[2]&& highest(macd(shortPeriod,longPeriod)[2],period)>macd(shortPeriod,longPeriod)[1]&& (H>Highest(H[1],Period)||H[1]>Highest(H[2],Period)|| H[2]>Highest(H[3],Period)), iff(C==C[1],0.001,(C[1]-C)/C[1]*100), 0); Formula2 = iff(macd(shortPeriod,longPeriod)<macd(shortPeriod,longPeriod)[1]&& macd(shortPeriod,longPeriod)[1] >= macd(shortPeriod,longPeriod)[2] && highest(macd(shortPeriod,longPeriod)[2],period)>macd(shortPeriod,longPeriod)[1]&& (H>Highest(H[1],Period)||H[1]>Highest(H[2],Period)|| H[2]>Highest(H[3],Period)), iff(C==C[1],0.001,(C[1]-C)/C[1]*100), 0); Formula3 = iff(macd(shortPeriod,longPeriod)>macd(shortPeriod,longPeriod)[1]&& macd(shortPeriod,longPeriod)[1] <= macd(shortPeriod,longPeriod)[2] && lowest(macd(shortPeriod,longPeriod)[2],Period) < macd(shortPeriod,longPeriod)[1] && (L<Lowest(L[1],Period)||L[1]<Lowest(L[2],Period)|| L[2]<Lowest(L[3],Period)), iff(C==C[1],0.001,(C-C[1])/C[1]*100), 0); if Formula0 Then Buy(); if Formula1 Then Exitlong(); if Formula2 Then Sell(); if Formula3 Then Exitshort();
프로필 이미지
yunmx
2016-07-20
223
글번호 100249
시스템
답변완료

문의드립니다

Input : Af(0.02), MaxAf(0.2); Var : direction(0), sar1(0), afval(0), ep(0),lowval(0),highval(0),count(0); if count == 0 then //변수들의 초기화 { highval = High; lowval = Low; direction = 0; sar1 = 0; afval = 0; ep = 0; count = 1; } if(ep != 0 ) then // 추세가 진행중 { if(direction == 1) then // 상승추세이면 { ep = highval; sar1 = sar1 + afval*(ep-sar1); // 상승추세에서 SAR값 계산 if(high > highval) then // 신고가 발생 { highval = high; afval = afval+Af; // 상승추세에서 신고가가 발생했으므로 가속변수 증가 if(afval >= MaxAf) then // 가속변수가 최대값과의 비교 (가속변수는 최대 가속값 보다 클 수 없다) afval = MaxAf; } if( low < sar1) then // 추세변경(상승->하락) { // 다음 SAR값을 계산할 때 필요한 전SAR값은 하락추세로 전환되기 직전의 direction = -1; // 최고가를 사용하므로 sar1 = ep (ep에는 highval 들어있다) sar1 = ep; // 추세가 변경되었으므로 가속변수 및 EP, highval 초기화 afval = 0; ep = 0; lowval = low; } } else // 하락 추세 { ep = lowval; // 하락추세에서는 EP로 저가 사용 sar1 = sar1 + afval*(ep-sar1); if(low < lowval) then // 신저가 발생 { lowval = low; afval = afval + Af; if( afval >= MaxAf) then // 가속변수가 최대값과의 비교 (가속변수는 최대 가속값 보다 클 수 없다) afval = MaxAf; } if(high > sar1) then // 추세 변경(하락->상승) { // 다음 SAR 값을 계산할 때 필요한 전SAR값은 상승추세로 전환되기 직전의 direction = 1; // 최저가를 사용하므로 sar1 = ep (ep에는 lowval값이 들어있다) sar1 = ep; // 추세가 변경되었으므로 가속변수 및 EP, highval 초기화 afval = 0; ep = 0; highval = high; } } } else if(sar1 != 0 && ep == 0) then //추세가 변경된후 첫번째 SAR계산 { if(direction == 1) then // 상승 추세 { ep = highval; // 상승추세에서는 신고가를 EP로 사용하므로 afval = Af; // 가속변수의 초기값인 AF(0.02) 적용 sar1 = sar1 + afval*(ep-sar1); if ( high > highval) then // 신고가가 발생 { Highval = high; afval = afval + Af; // 가속변수 증가 if(afval >= MaxAf) then // 가속변수가 최대값과의 비교 (가속변수는 최대 가속값 보다 클 수 없다) afval = MaxAf; } } else // 하락추세 { ep = lowval; afval = Af; // 가속변수의 초기값인 AF(0.02) 적용 sar1 = sar1 + afval*(ep-sar1);// 하락추세에서 SAR 계산 if(low < lowval) then // 신저가 발생 { lowval = low; afval = afval + Af; // 가속변수 증가 if(afval >= MaxAf) then // 가속변수가 최대값과의 비교 (가속변수는 최대 가속값 보다 클 수 없다) afval = MaxAf; } } } else // SAR 첨 시작 { if direction == 0 then // 추세가 없으므로 { if(c > c[1]) then // 상승추세로 시작 direction = 1; else if( c < c[1]) then // 하락추세로 시작 direction = -1; } else if direction == 1 then // 상승추세(추세변경이 일어날 경우 SAR 계산하기 시작) { if(c < c[1]) then // 추세 변경 (상승->하락) SAR 계산하기 시작 { direction = -1; sar1 = highval; // 하락추세로 전환시 다음 SAR값을 계산할 때 필요한 전 SAR값은 추세직전의 최고가를 사용하므로 } } else if direction == -1 then // 하락추세(추세변경이 일어날 경우 SAR 계산하기 시작) { if( c > c[1]) then // 추세 변경 (하락->상승) SAR 계산하기 시작 { direction = 1; sar1 = lowval; // 상승추세로 전환시 다음 SAR값을 계산할 때 필요한 전 SAR값은 추세직전의 최저가를 사용하므로 } } lowval = min(low, lowval); // 추세 변경시 전 SAR값으로 최고가나 최저가가 필요하므로 highval = max(high,highval); // low, high를 전의 최고가, 최저가와 비교하여 최고가, 최저가를 저장 } //처음 시작할 때 다음 추세 변경이 일어날 때까지 SAR는 invalid #if(sar1 != 0) then # User_Func_Sar = sar1; if sar1 > sar1[1] and C > sar1 Then buy("매수"); if sar1 <= sar1[1] and C < sar1 Then sell("매도"); 사진상 첫부분에서 바로 신호가 뜨면좋겠습니다 수정가능한지좀 부탁드립니다..
프로필 이미지
곽민수
2016-07-20
312
글번호 100248
시스템
답변완료

서로 다른 지표간의 돌파 검색

볼린저 밴드 10, 6 상한 엔벨로프 20, 5 저항 볼린저밴드가 엔벨로프를 상향돌파하는 종목검색식을 작성하고 싶은데 가능할까요??
프로필 이미지
필소굿
2016-07-20
244
글번호 100247
검색
답변완료

수식 부탁드립니다.

20일선과 5일선을 이용한 추세 매매 수식 부탁드립니다. 1. 매수 신호 : 새로운 캔들이 형성될 때 20일선이 우 상향하면 5일선 아래로 양봉 발생 시 매수 신호 발생 2. 매도 신호 : 새로운 캔들이 형성될 때 20일선이 우 하향하면 5일선 아래로 음봉 발생 시 매도 신호 발생 (실시간 캔들에서 신호 발생되어야 합니다.) 3. 수량 : 2계약 3. 청산 조건 : 익절 = 1차 : 20틱, 2차 : 30틱, 손절 = 15틱 4. 먼저 진입한 포지션이 청산 완료된 후 다음 신호 진입 5. 매매 종료 시간 설정 : 01:00
프로필 이미지
phoenix
2016-07-20
225
글번호 100229
시스템
답변완료

부탁드립니다

선물 매매;2분챠트 #단순이평 20일선이 120 위로 돌파시 매수,or 20일선이 위로 240 돌파시 매도분 청산과 동시 매수 # 20일선이 120 아래로 이탈시 매도,or 20일선이 아래로 240 이탈시 매수분 청산과 동시 매도, #당일 청산,손절매 6틱,매매수량 3
프로필 이미지
그리금강산
2016-07-20
215
글번호 100228
시스템
답변완료

문의

안녕하세요 밑에수식에서 하루진입횟수제한 조정가능하게부탁합니다.감사합니다 var : diff(0); diff = bids-asks; if crossup(diff,1000) Then buy(); if CrossDown(diff,-1000) Then sell();
프로필 이미지
질갱이
2016-07-20
213
글번호 100225
시스템

우섭 님에 의해서 삭제되었습니다.

프로필 이미지
우섭
2016-07-20
2
글번호 100224
시스템
답변완료

시스템오류 문의

항상 감사드립니다 아래식을 시스템에 적용해보면 타주기식을 적용할때와 안할때가 신호가 다르게나옵니다 타주기식은 크루드 5분봉입니다 주챠트는 크루드 20틱이고 제가 구현하고자 하는 식은 타주기5분선의 v50을 주챠트20틱의 현재가가 상향,하향돌파시 청산식입니다 위청산식을 적용하면 매매신호가 다르게 나옵니다 (청산식 적용전과 적용후의 신호가 다름) 제가 어느부분을 잘못했는지 수정부탁드립니다 ############################## ### 거래선_240_120_10 ######## ############################## var : upv1(0),upv2(0),upv3(0); var : dnv1(0),dnv2(0),dnv3(0); If V== highest(V,10) then{ Var71 = C; var72 = var71[1]; if var71 > var72 Then{ upv1 = var71; upv2 = upv1[1]; upv3 = upv2[1]; if upv1 > upv2 and upv2 > upv3 Then var70 = 1; } if var71 < var72 Then{ dnv1 = var71; dnv2 = dnv1[1]; dnv3 = dnv2[1]; if dnv1 < dnv2 and dnv2 < dnv3 Then var70 = -1; } } if var70 != var70[1] Then{ var50 = c; } #++++++++++++++++++++++++++++++++++++++++++++++++++++# var : upv11(0,data2),upv12(0,data2),upv13(0,data2); var : dnv11(0,data2),dnv12(0,data2),dnv13(0,data2); var : V11(0,data2),V12(0,data2),V20(0,data2),V50(0,data2); If data2(V== highest(V,10)) then{ v11 = data2(C); v12 = v11[1]; if v11 > v12 Then{ upv11 = v11; upv12 = upv11[1]; upv13 = upv12[1]; if upv11 > upv12 and upv12 > upv13 Then v20 = 1; } if v11 < v12 Then{ dnv11 = v11; dnv12 = dnv11[1]; dnv13 = dnv12[1]; if dnv11 < dnv12 and dnv12 < dnv13 Then v20 = -1; } } if v20 != v20[1] Then{ v50 = data2(c); } if MarketPosition == 1 and CrossDown(c,v50) Then exitlong("eB_타10"); if MarketPosition == -1 and crossup(c,v50) Then ExitShort("eS_타10");
프로필 이미지
조민철
2016-07-20
220
글번호 100223
시스템
답변완료

48706 재질의

실제 시스템을 돌려보니 시장이 빨리 움직이는 경우 진입을 놓치는 경우들이 발생하네요. 1) 진입주문은 지정가 주문이 아닌 시장가 주문으로 하려면 어떻게 해야 하나요? 2) 지정가 주문에 대해 실제 진입이 안되었는데도 청산주문은 시스템대로 내보내게 되면 원치 않는 포지션을 갖게 되는데요, 가령 매수진입 주문이 체결되지 않으면 매도 청산 신호가 나오더라도 청산주문을 넣지 않게 할 수는 없나요? 원치 않는 매도 포지션을 갖고 싶지 않아서... ------------------------------------------------ 추가로 진입조건을 넣었으면 하는데요. 아래 조건 추가 부탁드립니다. 60 지수이평선 위에 있으면서 (i) 스토캐스틱 K가 20 아래로 내려갔다가 올라갈 때 또는 (ii) 스토캐스틱 K가 스토캐스틱 D를 상향돌파할 때 매수, 60 지수이평선 아래에 있으면서 (i) 스토캐스틱 K가 80 위로 올라갔다가 내려갈 때 또는 (ii) 스토캐스틱 K가 스토캐스틱 D를 하향돌파할 때 매도. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 시스템 문의 > 안녕하세요 예스스탁입니다. Input : Period(12), Period1(5), Period2(5); var : StoK(0),StoD(0); StoK = StochasticsK(Period,Period1); StoD = StochasticsD(Period,Period1,Period2); if CrossDown(stok,80) or CrossDown(stok,stod) Then sell(); if CrossUp(stok,20) or Crossup(stok,stod) Then buy(); if MarketPosition == -1 and (CrossDown(stok,20) or CrossUp(stok,stod)) Then ExitShort(); if MarketPosition == 1 and (CrossUp(stok,80) or CrossDown(stok,stod)) Then ExitLong(); 즐거운 하루되세요 > aaaaa 님이 쓴 글입니다. > 제목 : 시스템 문의 > 슬로우 스토캐스틱을 기초로 시스템을 만드려고 합니다. 1. (A) 매도 진입조건으로 (i) 스토캐스틱 K가 80 위로 올라갔다가 내려갈 때 또는 (ii) 스토캐스틱 K가 스토캐스틱 D를 하향돌파할 때 매도. (B) 매수진입조건으로 (i) 스토캐스틱 K가 20 아래로 내려갔다가 올라갈 때 또는 (ii) 스토캐스틱 K가 스토캐스틱 D를 상향돌파할 때 매수. 2. 매도 포지션 청산조건으로 (i) 스토캐스틱 K가 20 아래로 하향돌파할 때 또는 (ii) 스토캐스틱 K가 스토캐스틱 D를 상향돌파할 때 매도포지션 청산. 매수 포지션 청산조건으로 (i) 스토캐스틱 K가 80 위로 상향돌파할 때 또는 (ii) 스토캐스틱 K가 스토캐스틱 D를 하향돌파할 때 매수포지션 청산.
프로필 이미지
aaaaa
2016-07-20
210
글번호 100222
시스템