커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

레전드 님에 의해서 삭제되었습니다.

프로필 이미지
레전드
2020-06-09
0
글번호 139684
지표

레전드 님에 의해서 삭제되었습니다.

프로필 이미지
레전드
2020-06-09
0
글번호 139683
지표
답변완료

KP-ratio 수식 문의

1. DrawDown (낙폭기간, 낙폭)을 표현한 지표를 만들려고 하는데, 아래 수식을 작성했는데, ???? 으로 표시한 부분의 랭귀지로 표현이 어려워서 문의드립니다. -------미완성 수식 인용----- input: period(24); var: 기간MDD(0), DD기간합(0),KPratio(0), SMscore(0),일별수익률(0), 누적수익률(0), DD기간(0),Count(0) ; 일별수익률 = (C/C[1]-1); 누적수익률 = accumN(일별수익률 , Period) ; DD기간 = iff( (누적수익률- highest(누적수익률,period) < 0) , (누적수익률- highest(누적수익률,period)) , 0 ); //감소시 기간MDD = IFF(DD기간 <0, lowest(DD기간,"????????",0); // ???? 누적수익률이 하락하여, 전고점 회복하는 데 걸리는 봉수 DD기간합 = countif( DD기간 < 0 , period ) ; //모든 DD의 기간 합계 KPratio = ( c / c[period]-1 )/ ( (""-기간MDD???????") *sqrt( DD기간합 / period)); // 기간MDD=낙폭기간별 Max Drawdown의 합 ----------------인용끝 ------ 2. sm-score는 상기 KP-score를 산출후 , 표준정규분포로 가정하여, 확률을 산출 하는것인데 랭귀지로 표현이 가능할까요 (사진참조) KP 평균, KP 표준편차는 예스트레이더의 시스템 포트폴리오(%형태의 편차)에서는 없는 기능 같아, 직접 구해야 할것 같아, 외부변수로 빼는것으로 가정)
프로필 이미지
하운드독
2020-06-09
2847
글번호 139682
지표
답변완료

시스템

***야~~~~~~호**** >표시가 나왔어요 신기해요!!!! 쌤은 천재예요!!!!!!! 헌데 기존 만들었던 바탕색이랑 기타 범위표시의 색이 다바뀌네요 이럴땐 어케해야하죠??? >sell표시는 나왔다가 사라졌어요 (다시 복귀 할때 보고 싶은데요) sell을 구현하려면 지표에서는 불가 하다해서 시스템에서 적용해 보았는데 지표에서 sell의 표현아니고 화살표표시정도는 안되는 건간요 지표로 하면 시스템처럼 나왔다가 사라지지않고 표시가 남을 것 같기도 하구요 >솔직히 시스템에 들어가서 보니 좀 감깜하네요 *********************************** 1>지표수시으로 sell/buy수식 될까요 ************************************
프로필 이미지
회원
2020-06-09
2269
글번호 139681
시스템
답변완료

부탁 드립니다.

변환 문의 드립니다. m=ma(c,p20,단순); a=m+avgif(c-m,1,0.0)+2*stdevif(c-m,1,0.0); 여기서 avgif , stdevif는 무슨의미 인지요? 미리 감사드립니다.
프로필 이미지
뮬리
2020-06-09
2209
글번호 139680
지표
답변완료

수식 문의 드립니다.

관리자님, 회신 감사드립니다. 허나 최고점 대비 5%에 곤바로 팔리지 않고 봉이 완성되고 난뒤인 한참 아래서 팔립니다. 재 검토 후 회신 부탁 드립니다. 감사 드립니다., > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식 문의 드립니다. > 안녕하세요 예스스탁입니다. input : P(9); var1 = cci(P); if var1 >= 100 Then sell("s",AtStop,highest(H,2)*0.95); 즐거운 하루되세요 > 기관장 님이 쓴 글입니다. > 제목 : 수식 문의 드립니다. > 매도 : cci(9,10) 이 100 이상이고, 이전 2봉중 최고점 대비 5% 하락시 봉끝나기 전이라도 즉시 매도
프로필 이미지
회원
2020-06-09
1993
글번호 139677
시스템
답변완료

알려주신 수식대로 했는데 잘 안됩니다 ^^;; 번거롭게 해드려서 대단히 죄소합니다

1분봉으로 바꿀경우 매수신호는 나오는데요, 2000년도부터 현재까지 데이터를 보려고 하니 1분봉으로 바꿀경우 데이터가 너무 커서 예스트레이더가 자꾸 멈춥니다 ^^;; 그래서 5분봉 상태에서 수식을 넣고 백테스팅을 해보고 싶은데 잘 안되네요 ^^;; 알려주신 수식 그대로 적용을 해봤는데요, 가장 최근 6월 3일 매수가 안잡힙니다 필요하시다면 ,,,메일을 알려주시면 제 수식을 전부 드리도록 하겠습니다/! atr = DAYHIGH(1) - DAYLOW(1); LTR = MAX(1,NOISE * ATR); STR = MAX(1,(1-NOISE) * ATR); VL = cap / (dayclose(1) * MUL * rt); LUNIT = INT((CAP * RISK) / (LTR * MUL)); SUNIT = INT((CAP * RISK) / (STR * MUL)); IF LUNIT >= VL Then LUNIT1 = VL; ELSE LUNIT1 = LUNIT; IF LUNIT * 3 <= VL THEN LUNIT2 = LUNIT1; ELSE LUNIT2 = (VL - LUNIT)/2; IF SUNIT >= VL THEN SUNIT1 = VL; ELSE SUNIT1 = SUNIT; IF SUNIT * 3 <= VL THEN SUNIT2 = SUNIT1 ; ELSE SUNIT2 = (VL - SUNIT)/2; # ENTRY L1 = DAYOPEN + LTR ; L2 = L1 + (LTR * 0.5); L3 = L1 + LTR; S1 = DAYOPEN - STR; S2 = S1 - (STR * 0.5); S3 = S1 - STR; NL1 = LatestExitPrice(1)+LTR; NL2 = NL1 + LTR * 0.5; NL3 = NL1 + LTR; NS1 = LatestExitPrice(1)-STR; NS2 = NS1 - STR * 0.5; NS3 = NS1 - Str; IF MarketPosition == 0 AND NextBarSdate != sdate Then { BUY("L11",ATSTOP,NextBarOpen+LTR,LUNIT1); SELL("S11",ATSTOP,NExtBarOpen-STR,SUNIT1); } IF MarketPosition == 0 AND BDATE != EXITDATE(1) Then { IF H <= L1 AND NEXTBARSDATE == SDATE Then BUY("L1",ATSTOP,L1,LUNIT1); IF L >= S1 AND NextBarSdate == SDATE THEN SELL("S1",ATSTOP,S1,SUNIT1); } # 매수 피라미딩 IF MarketPosition == 1 AND STIME <153000 and (IsEntryName("L1")==True or IsEntryName("L11") == True) THEN { if highest(h,BarsSinceEntry) <= L2 Then buy("L2",ATSTOP,L2,LUNIT2); if highest(h,BarsSinceEntry) <= L1 + LTR Then buy("L3",ATSTOP, L3,LUNIT2); } # 매수청산 IF MarketPosition == 1 then { if NextBarSdate == SDATE Then ExitLong("LS",AtStop,LatestEntryPrice - LTR); IF NextBarSdate != SDATE Then ExitLong("EL",ATMARKET); } # 매도 피라미딩 IF MarketPosition == -1 AND STIME < 153000 AND (IsEntryName("S1") == True or IsEntryName("S11") == True) THEN { IF Lowest(L,BarsSinceEntry) >= S2 Then SELL("S2",AtStop,S2,SUNIT2); IF Lowest(L,BarsSinceEntry) >= S1 - STR Then SELL("S3",AtStop,S3,SUNIT2); } # 매도청산 IF MarketPosition == -1 then { IF NextBarSdate == SDATE Then EXITSHORT("SS",AtStop,LatestEntryPrice + STR); SetStopEndofday(); } ELSE SetStopEndofday(0); #해제 # 재진입 IF MarketPosition == 0 AND BDATE == EXITDATE(1) Then { IF MarketPosition(1) == 1 AND H <= NL1 AND NextBarSdate == sDate AND IsExitName("LS",1) == TRUE THEN BUY("NL1",ATSTOP,NL1,LUNIT1); IF MarketPosition(1) == -1 AND L >= NS1 AND NextBarSdate == SDATE THEN SELL("NS1",ATSTOP,NS1,SUNIT1); } IF BDATE == EXITDATE(1) AND MarketPosition == 1 AND IsEntryName("NL1") == TRUE THEN { IF LatestEntryName == "NL1" AND Highest(H,BarsSinceEntry) <= NL2 THEN BUY("NL2",ATSTOP,NL2,LUNIT2); IF LatestEntryName == "NL2" AND HIGHEST(H,BarsSinceEntry) <= NL3 THEN BUY("NL3",ATSTOP,NL3,LUNIT2); } IF BDATE == ExitDate(1) AND MarketPosition == -1 AND IsEntryName("NS1") == TRUE Then { IF LatestEntryName == "NS1" AND Lowest(L,BarsSinceEntry) >= NS2 THEN SELL("NS2",ATSTOP,NS2,SUNIT2); IF LatestEntryName == "NS2" AND Lowest(L,BarsSinceEntry) >= NS3 THEN SELL("NS3",ATSTOP,NS2,SUNIT2); }
프로필 이미지
엠씨용가
2020-06-09
2164
글번호 139676
시스템
답변완료

수식 수정 좀 부탁드립니다.

var1 = sum(V); var2 = valuewhen(1, date(1)!=date, var1(1)); var3 = var1 - var2; 위에 있는... 영웅문에서 쓰던 수식을 예스랭귀지에 맞게 고쳐주시면 감사하겠습니다
프로필 이미지
아래위
2020-06-09
2388
글번호 139674
지표
답변완료

어제 수식 수정부탁드려요

제가 원하는 곳에서 신호가 않나와서요 --------------------------------- 그림 1에서 네모 봉을 확인후(봉의 몸통으로 이평선을 돌파한경우에만) + 아래 화살표처럼 CCI 우상향일시 동그라미 봉에서 매수가 진입이 되게 하고싶습니다 동그라미가 음봉으로 시작하면 안되고 네모봉 종가와 같거나 양봉으로 시작해야 됩니다 매도일때는 반대의경우 입니다 1번그림처럼 네모봉이 5 10 20 분봉이 돌파 해도 되지만 바로아래그림처럼 5, 10 20 60 120 모두 돌파해도 상관없습니다 5 10만 돌파하거나 5.20만 돌파 하면 안됩니다 네모 봉 몸통으로 3개이상만 순서상관없이 돌파하면 됩니다 ------------------------------------ 그림 4처럼 이전 봉들이 연속적으로 3개이상 돌파봉이 되었다면 진입 금지 입니다 이전 최근 5봉의 몸통으로 응봉이든 양봉이든 5 10 20분봉(순서는 상관없음) 돌파한봉이 3개이하 일경우 위와같이 봉몸통으로 돌파한봉이 최근 5개봉중 3개 이하 여야되고 5,10 20 60 120 중 순서는 상관없이 3개 봉 이하일때만 진입입니다 ---------------------------------------- 그림 2처럼 만든어주신 시스템 적용했는데 원하지 않는 곳에서 매매가 시작 됩니다 ----------------------------------- 그림 3처럼 만약 네모 봉에서 매도 신호가 발생을했으면 동그라미 봉이 양봉으로 끝났을때 청산 원하는데 그렇게 안되는거 같아서 수정부탁드려요 --------------------------- 1번시스템은 위와 같이 수정 부탁드리오 2번시스템은 위내용과 동일하고 5 10 20 60 120분봉 2개이상 몸통돌파봉을 확인하고 경우 매수일경우 매도일경우 청산도 위와 같이 해주시면됩니다 혹시 가능하다면 초보라서 시스템에 자세한 주석 부탁드립니다 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 시스템식 부탁드려요 > 안녕하세요 예스스탁입니다. 1 input : StartTime(91000),EndTime(130000); input : P1(5),P2(10),P3(20),CCIP(9); input : 진폭봉수(5),진폭틱수(50),N(5),돌파봉수(3); input : 익절틱수(100),손절틱수(100); var : Tcond(false),mav1(0),mav2(0),mav3(0),CCIv(0); if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then Tcond = true; if (sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then Tcond = False; mav1 = ma(C,P1); mav2 = ma(C,P2); mav3 = ma(C,P3); CCIv = CCI(CCIP); var1 = 0; if max(C,O) > mav1 and mav1 > min(C,O) Then var1 = var1+1; if max(C,O) > mav2 and mav2 > min(C,O) Then var1 = var1+1; if max(C,O) > mav3 and mav3 > min(C,O) Then var1 = var1+1; if Tcond == true then { if MarketPosition <= 0 and C > max(mav1,mav2,mav3) and min(mav1,mav2,mav3) > O and CCIv > CCIv[1] and highest(h,진폭봉수) >= lowest(L,진폭봉수)+PriceScale*진폭틱수 and AccumN(var1,N) <= 돌파봉수 then buy("b",AtStop,NextBarSdate+PriceScale*1); if MarketPosition >= 0 and C < max(mav1,mav2,mav3) and min(mav1,mav2,mav3) < O and CCIv < CCIv[1] and highest(h,진폭봉수) >= lowest(L,진폭봉수)+PriceScale*진폭틱수 and AccumN(var1,N) <= 돌파봉수 then sell("s",AtStop,NextBarSdate-PriceScale*1); if MarketPosition == 1 then { if C < O Then ExitLong("bx1"); } if MarketPosition == -1 then { if C > O Then ExitShort("sx1"); } } SetStopProfittarget(PriceScale*익절틱수,PointStop); SetStoploss(PriceScale*손절틱수,PointStop); if EndTime > Starttime Then SetStopEndofday(EndTime); if EndTime < Starttime Then { if sdate != sdate[1] Then SetStopEndofday(EndTime); if bdate != bdate[1] Then SetStopEndofday(0); } 2 input : StartTime(91000),EndTime(130000); input : P1(5),P2(10),P3(20),P4(60),P5(120),CCIP(9); input : 진폭봉수(5),진폭틱수(50),N(5),돌파봉수(3); input : 익절틱수(100),손절틱수(100); var : Tcond(false),mav1(0),mav2(0),mav3(0),mav4(0),mav5(0),CCIv(0); if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then Tcond = true; if (sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then Tcond = False; mav1 = ma(C,P1); mav2 = ma(C,P2); mav3 = ma(C,P3); mav4 = ma(C,P4); mav5 = ma(C,P5); CCIv = CCI(CCIP); var1 = 0; if C > mav1 and mav1 > O Then var1 = var1+1; if C > mav2 and mav2 > O Then var1 = var1+1; if C > mav3 and mav3 > O Then var1 = var1+1; if C > mav4 and mav4 > O Then var1 = var1+1; if C > mav5 and mav5 > O Then var1 = var1+1; var2 = 0; if C < mav1 and mav1 < O Then var2 = var2+1; if C < mav2 and mav2 < O Then var2 = var2+1; if C < mav3 and mav3 < O Then var2 = var2+1; if C < mav4 and mav4 < O Then var2 = var2+1; if C < mav5 and mav5 < O Then var2 = var2+1; if Tcond == true then { if MarketPosition <= 0 and var1 >= 2 and CCIv > CCIv[1] and highest(h,진폭봉수) >= lowest(L,진폭봉수)+PriceScale*진폭틱수 and AccumN(var1,N) <= 돌파봉수 then buy("b",AtStop,NextBarSdate+PriceScale*1); if MarketPosition >= 0 and var2 >= 2 and CCIv < CCIv[1] and highest(h,진폭봉수) >= lowest(L,진폭봉수)+PriceScale*진폭틱수 and AccumN(var1,N) <= 돌파봉수 then sell("s",AtStop,NextBarSdate-PriceScale*1); if MarketPosition == 1 then { if C < O Then ExitLong("bx1"); } if MarketPosition == -1 then { if C > O Then ExitShort("sx1"); } } SetStopProfittarget(PriceScale*익절틱수,PointStop); SetStoploss(PriceScale*손절틱수,PointStop); if EndTime > Starttime Then SetStopEndofday(EndTime); if EndTime < Starttime Then { if sdate != sdate[1] Then SetStopEndofday(EndTime); if bdate != bdate[1] Then SetStopEndofday(0); } 즐거운 하루되세요 > 가날 님이 쓴 글입니다. > 제목 : 시스템식 부탁드려요 > 매매 시작시간은 오전 9시 10분 종료시간은 13시 매수조건 : 전양봉이 몸통으로 5 10 20이평을(순서는 상관없음) 돌파후 양봉시작 + CCI 우상향일시 + 이전 최근 5봉의 최저점 최고점 진폭 50틱이상 + 이전 최근 5봉의 몸통으로 응봉이든 양봉이든 5 10 20분봉(순서는 상관없음) 돌파한봉이 3개이하 일경우 매도조건 : 전음봉이 몸통으로 5 10 20이평을(순서는 상관없음) 돌파후 양봉시작 + CCI 우하향일시 매도 + 이전 최근 5봉의 최저점 최고점 진폭 50틱이상 + 이전 최근 5봉의 몸통으로 응봉이든 양봉이든 5 10 20분봉(순서는 상관없음) 돌파한봉이 3개이하 일경우 청산조건 : 매수후 완성봉이 음봉나올때 나 수익 100틱 손절 100틱 매도후 완성봉이 양봉이 나오면 청산 수익 100틱 손절 100틱 제가 숫자로 지정한것들은 변수로 설정 부탁드립니다 ----------------------- 추가적으로 위 시스템이랑 모두 같은 조건에서 전양봉이 몸통으로 5 10 20분봉(순서는 상관없음) 돌파후 양봉시작 을 -> 전양봉이 몸통으로 5 ,10,20,60,120 이평선중에 ( 순서는 상관없음) 2개 분봉 돌파 음봉도 반대의 경우로 매매할수있는 시스템식도 추가적으로 부탁드려요 총2개 부탁드려요 요청이 많아서 죄송 합니다
프로필 이미지
가날
2020-06-10
2397
글번호 139671
시스템