커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

수식문의

#아래수식에서 앞전고점보다 낮으면 고점하락 높아지면 고점상승 앞전저점보다 낮아지면 저점하락 높아지면 저점상승 텍스트 필요합니다 Input:상승률(0.15),하락률(0.15); Var:j(0),상승(100),하락(-100),양방향(2),색깔(0),파랑(-1),빨강(1), 기준고(0),기준저(0),기준고Bar(0),기준저Bar(0),추세(0),이중파동(0); var : hbody(0),lbody(0); Array:고[20](0),저[20](0),고Bar[20](0),저Bar[20](0); Hbody = max(C,O); Lbody = min(c,O); #==========================================# # 전고점,전저점 index 증가 #==========================================# For j = 1 To 19 { 저Bar[j] = 저Bar[j] + 1; 고Bar[j] = 고Bar[j] + 1; } #==========================================# # 이중파동 처리 #==========================================# If 이중파동 > 0 Then { if 색깔 == 빨강 Then{ Plot1(이중파동,"Zigzag",blue); var2 = 이중파동; var3 = -1; } Else{ Plot1(이중파동,"Zigzag",red); var1 = 이중파동; var3 = 1; } 이중파동 = 0; } #==========================================# # 최근 고,저 갱신 #==========================================# If 기준고 <= Hbody || 기준고 == 0 || IsNaN(기준고) == True Then { 기준고 = Hbody; 기준고Bar = 0; } Else 기준고Bar = 기준고Bar + 1; If 기준저 >= Lbody || 기준저 == 0 || IsNaN(기준저) == True Then { 기준저 = Lbody; 기준저Bar = 0; } Else 기준저Bar = 기준저Bar + 1; #==========================================# # 추세방향 결정 #==========================================# If 기준고 * (1 - (하락률/100)) > Hbody && 기준저 * (1 + (상승률/100)) < Lbody Then { 추세 = Iff(기준고Bar==기준저Bar,양방향,Iff(기준고Bar>기준저Bar,상승,하락)); } Else If 기준고 * (1 - (하락률/100)) > Hbody Then 추세 = 하락; Else If 기준저 * (1 + (상승률/100)) < Lbody Then 추세 = 상승; #==========================================# # 추세변화에 따른 변곡점 처리 #==========================================# If 추세[1] == 상승 && 추세 == 하락 Then { For j = 18 DownTo 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; } 고[1] = 기준고; 고Bar[1] = 기준고Bar; 기준고 = Hbody; 기준고Bar = 0; 기준저 = Lbody; 기준저Bar = 0; If 고[2] < 고[1] Then 색깔 = 빨강 ; If 이중파동[1] > 0 Then 이중파동 = 고[1]; Else { plot1(고[1],"Zigzag",RED); var1 = 고[1]; var3 = 1; } } If 추세[1] == 하락 && 추세 == 하락 && 고[1] < 기준고 && 기준고 * (1 - (하락률/100)) > Hbody Then { For j = 18 DownTo 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } 고[1] = 기준고; 고Bar[1] = 기준고Bar; 저[1] = 기준저; 저Bar[1] = 기준저Bar; 기준고 = Hbody; 기준고Bar = 0; 기준저 = Lbody; 기준저Bar = 0; If 저[2] > 저[1] Then 색깔 = 파랑; plot1(저[1],"Zigzag",blue); var2 = 저[1]; var3 = -1; If 고[2] < 고[1] Then 색깔 = 빨강; 이중파동 = 고[1]; } If 추세[1] == 하락 && 추세 == 상승 Then { For j = 18 DownTo 1 { 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } 저[1] = 기준저; 저Bar[1] = 기준저Bar; 기준저 = Lbody; 기준저Bar = 0; 기준고 = Hbody; 기준고Bar = 0; If 저[2] > 저[1] Then 색깔 = 파랑; If 이중파동[1] > 0 Then 이중파동 = 저[1]; Else { plot1(저[1],"Zigzag",blue); var2 = 저[1]; var3 = -1; } } If 추세[1] == 상승 && 추세 == 상승 && 저[1] > 기준저 && 기준저 * (1 + (상승률/100)) < Lbody Then { For j = 18 DownTo 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } 고[1] = 기준고; 고Bar[1] = 기준고Bar; 저[1] = 기준저; 저Bar[1] = 기준저Bar; 기준저 = Lbody; 기준저Bar = 0; 기준고 = Hbody; 기준고Bar = 0; If 고[2] < 고[1] Then 색깔 = 빨강; plot1(고[1],"Zigzag",RED); var1 = 고[1]; var3 = 1; If 저[2] > 저[1] Then 색깔 = 파랑; 이중파동 = 저[1]; } If 추세 == 양방향 Then { For j = 18 DownTo 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } 고[1] = 기준고; 고Bar[1] = 기준고Bar; 저[1] = 기준저; 저Bar[1] = 기준저Bar; 기준고 = Hbody; 기준고Bar = 0; 기준저 = Lbody; 기준저Bar = 0; 추세 = 추세[1]; If 추세[1] == 상승 Then { If 고[2] < 고[1] Then 색깔 = 빨강; Plot1(고[1],"Zigzag",RED); var1 = 고[1]; var3 = 1; If 저[2] > 저[1] Then 색깔 = 파랑; 이중파동 = 저[1]; } Else { If 저[2] > 저[1] Then 색깔 = 파랑; Plot1(저[1],"Zigzag",blue); Text_New(sdate,stime,저[1],NumToStr(저[1],2)); var2 = 저[1]; var3 = -1; If 고[2] < 고[1] Then 색깔 = 빨강; 이중파동 = 고[1]; } }
프로필 이미지
백진강
2013-11-23
274
글번호 69776
시스템
답변완료

문의바랍니다

작동이 안되네요..작동이 되게끔 수정바랍니다.. Input: ProfitPt(5), TrailBar(30), entryCount(1), P1(40), P2(160), P3(110); Vars: Pivot(0), Support1(0), Support2(0), Support3(0), Resistance1(0), Resistance2(0), Resistance3(0), BearMarket(false) , BullMarket(false); // Calculation of Pivot, support and resistance points Pivot = ( dayLow(1) + dayHIgh(1) + dayClose(1) ) / 3; Resistance1 = ( Pivot * 2 ) - dayLow(1); Resistance2 = Pivot + (dayhigh(1)-dayLow(1)); Resistance3 = Resistance1 + (dayhigh(1)-dayLow(1)); Support1 = ( Pivot * 2 ) - dayHIgh(1); Support2 = Pivot - (dayhigh(1)-dayLow(1)); Support3 = Support1 - (dayhigh(1)-dayLow(1)); // Determination of market character BullMarket = ma( Close , P1 ) > ma( Close , P2 ) AND ma( Close , P2 ) > ma( Close , P3 ); BearMarket = ma( Close , P1 ) < ma( Close , P2 ) AND ma( Close , P2 ) < ma( Close , P3 ); // Placement of long orders if EntriesToday(date) < entryCount then begin If BullMarket then Begin Buy ("Bull R2", atstop,Resistance2 ) ; Buy ("Bull R3", atstop, Resistance3) ; end; // Placement of short orders If bearmarket then begin Sell ("Bear S2", atstop, Support2) ; Sell ("Bear S3", atstop, Support3) ; end; end; // Exit at first Profitable Open If MarketPosition == 1 and NextBarOpen > EntryPrice + ProfitPt then ExitLong ("Long Profit", AtMarket); If MarketPosition == -1 and NextBarOpen < EntryPrice - ProfitPt then ExitShort ("Short Profit", AtMarket) ; // Exit with trailing stops ExitLong("EL", atstop,Lowest( Low , TrailBar )) ; ExitShort("ES", atstop, Highest( High , TrailBar )) ; SetStopEndofday(150000); 아래 사용자함수 작성되어 있어야 전략 적용됩니다. [사용자함수 : entriestoday] Input : nDate(Numeric); Var : Count(0); Count = 0 ; For Value1 = 0 To 10 { If EntryDate(Value1) == nDate Then Count = Count + 1; } EntriesToday = Count;
프로필 이미지
머니사이언스
2013-11-23
289
글번호 69775
시스템
답변완료

재질문드립니다

매번 답변 감사드립니다. 당일지표표시에 대한 문의에 대해서 아래와 같이 주셨는데 그대로 해보니 문제가 있어서 재질문 드립니다. ==================== 2. adate == sdate로 하시면 과거 날짜의 봉도 모두 출력됩니다. 아래와 같이 CurrentDate를 이용하셔야 합니다. 비교문마자 adate변수를 다르게 가져가셔야 합니다. var :Adate(0); if data2(c) == p1 Then { Adate=sdate; r1=(o+c)/2; } if Adate == CurrentDate Then plot1(r1,"r1"); 즐거운 하루되세요 ========================================== 알려주신대로 적용한 결과입니다 1) 당일적용 var:x(0),y(0),a1(0),a2(0),a3(0),a4(0); x = data1(c); y = data2(c); if crossup (x,y) then { var:x1(0); x1=sdate; a1=(o+c)/2; } if x1 == CurrentDate then PLOT1(a1,"옵션교차+당일"); if crossdown (x,y) then { var:x2(0); x2=sdate; a2=(o+c)/2; } if x2 == CurrentDate then PLOT2(a2,"옵션교차-당일"); if x == y then { var:x3(0); x3=sdate; a3=(o+c)/2; } if x3 == CurrentDate then PLOT3(a3,"옵션교차 당일"); ==> 첨부파일 1 2) 전체적용 var:x(0),y(0),a1(0),a2(0),a3(0),a4(0); x = data1(c); y = data2(c); if x == y then a4=(o+c)/2; PLOT4(a4,"옵션교차 전체"); ===> 첨부파일2 전체적용은 이상이 없는데 당일은 표시가 안됩니다. 도움부탁드립니다. 감사합니다.
프로필 이미지
스로우
2013-11-23
294
글번호 69774
지표
답변완료

선생님 이것좀 봐주세요

안녕하세요 아래식은 진입금지식인데 if BarsSinceExit(0) > 1 then ##청산신호 후에 1봉이 경과 할때까지 재진입을 금지하라 위것을 10봉후에 또는 20봉 후에 이렇게 해도 가격 조절 안되네요 어떤 식 의 종류가있나요 금지식 종류별로 알려주삼 감사^^
프로필 이미지
회원
2013-11-23
241
글번호 69773
시스템
답변완료

문의드립니다.

감사합니다.
프로필 이미지
회원
2013-11-26
215
글번호 69772
시스템
답변완료

문의

1. 전략실행차트에서의 청산시점과 시뮬레이션 차트에서의 청산시점이 서로 다름을 확인후 원인을 파악하는 중에 그림2와 같이 지표값이 서로 다르다는 것을 발견했습니다. 위에는 시뮬레이션 차트, 아래는 전략실행차트에서의 지표값입니다. 동일 날짜 동일시간에 동일식으로 했는데 이렇게 큰 차이가 발생하는 무엇인가요? 0.000까지가 진입과 청산을 결정짓는 수치입니다. ROUND로 소수점 5자리에서 반올림해주고 있습니다. 아주 크리티컬한 요소이므로 급히 확인을 요청드립니다. 참고로 동일컴퓨터내에서 체크사항이며, 타 3개의 컴퓨터 모두 전략실행차트에서 동일값을 보여주고 있으며, OS에 따른 문제는 아니라 봅니다. 2. A,B,C가 연속적으로 피라미딩 매수진입을 했다고 가정하겠습니다. A,B, C의 평균진입가격을 구하고 고점대비 평균가격의 50%를 하향시 청산하는 식 부탁드립니다. 3. 위식과는 별개로 최초진입순으로 가중치를 두어 최초진입을 가장 중요시 하고자 합니다. 가령 A는 2, B는 1.5, C는 1 (가중치는 N변수) 이 경우의 식도 부탁드립니다. 4. 피라미딩이 아닌 다계약(3계약가정) 운용시 진입신호가 발생되었을때 최초 1계약 진입후, N봉 이후에 또한계약, N봉 이후 또 한계약...이런식으로 진입이 가능한가요? 가능하다면 청산도 마찬가지로 N봉후 차례대로 청산을 하고자 합니다. 관련식 부탁드리겠습니다. 5. 첨부그림1에서 빨간동그라미에서 매수진입되었다고 가정할때, MA1선을 크로스다운한 후, 고점이 같거나 낮아지면서 MA1선 아래에서 N개봉 이상이 되었을때 청산하고자 합니다. 여기서 N개봉중에 70%이상은 음봉이거나 도지이어야 합니다. 6. 3분봉에서 60일선을 표기하고 있는데 전략실행차트에서는 표기가 안되네요. 계산을 해보니 최소 7200개의 봉이 필요한데, 현재 5000봉 제한이라 그런가봅니다. 60일선 관련 전략이 무용지물되고 있는데 1만개 2만개의 봉 지원을 조속히 해주셨으면 합니다. 기본 5000개인데 추가 요청시에는 1만개 2만개 지원하는 정책도 고려해주시면 감사하겠습니다. 늘 감사드립니다.
프로필 이미지
TRF
2013-11-26
309
글번호 69771
시스템
답변완료

필터링 추가 부탁 드립니다.

샹들리에 청산 방식으로 ATR 2.5 로 당일 매도진입 , 매수 진입 하고자 합니다. 필터링 원칙은 1. 당일 오후 1시 이후에는 진입 하지 않는다. (= 09:00 ~ 13:00에만 진입한다 ) 2. (실제 매수, 매도 여부에 무관하게) 신호에 따른 거래에서 직전의 거래가 손실일 경우에만 진입한다. 3. 당일의 첫 번 째 거래는 2. 의 원칙을 적용하지 않고 무조건 진입한다. input : ATRPeriod(15),ATRS(2.5); var : MaxHigh(0),MinLow(0); if MarketPosition() == 0 Then{ if crossup(ma(c,5),ma(c,20)) Then { buy(); } if CrossDown(ma(c,5),ma(c,20)) Then { Sell(); } } if MarketPosition() == 1 then { exitlong("매수추적",Atstop,highest(H,barssinceentry)-ATR(ATRperiod)*ATRS); } if MarketPosition() == -1 then{ ExitShort("매도추적",Atstop,lowest(L,barssinceentry)+ATR(ATRperiod)*ATRS); }
프로필 이미지
피니트
2013-11-23
251
글번호 69770
시스템
답변완료

문의드립니다.

아래처럼 시스템을 만들려 합니다. 부탁드립니다. *용어정의 1.골드크로스 : SIGMA < 0 상태에서 SIGMA > 0 으로 될때 (SIGMA가 0 이면 골든크로스 아님) 2.데드크로스 : SIGMA > 0 상태에서 SIGMA < 0 으로 될때 (SIGMA가 0 이면 데드크로스 아님) 3.골드 : SIGMA > 0 상태 유지 4.데드 : SIGMA < 0 상태 유지 5.아래에 나오는 1분봉 SIGMA는 1분봉 종가 기준으로 한다. ------------------------------------------------------------------------------------ *선물 매수 : 1계약 1] 1분봉 SIGMA(100,50)이 0을 골드크로스 돌파할때 매수 (단,아래 조건 2개를 모두 만족시) 1)1분봉 SIGMA(450,225) > 0 골드상태 2)1분봉 SIGMA(600,300) > 0 골드상태 2] 1분봉 SIGMA(100,50) 가 먼저 0을 골드크로스 하고 골드 상태가 유지되고 뒤따라서 1분봉 SIGMA(450,225) 과 1분봉 SIGMA(600,300) 둘다 0 보다 더 큰 골드상태되면 매수 3] 시가(9시정각)에서 아래 3개 지표가 모두 골드(SIGMA > 0) 상태이면 매수 1분봉 SIGMA(100,50) > 0 골드상태 1분봉 SIGMA(450,225) > 0 골드상태 1분봉 SIGMA(600,300) > 0 골드상태 선물 매수 청산 1] 1분봉 SIGMA(100,50)이 0을 데드크로스 돌파할때 청산 2] 1포인트 손실일때 청산 3] 1번,2번 청산조건 안될시 당일 종가에 청산 ------------------------------------------------------------------------------------ *선물 매도 : 1계약 1] 1분봉 SIGMA(100,50)이 0을 데드크로스 돌파할때 매도 (단,아래 조건 2개를 모두 만족시) 1)1분봉 SIGMA(450,225) < 0 데드상태 2)1분봉 SIGMA(600,300) < 0 데드상태 2] 1분봉 SIGMA(100,50) 가 먼저 0을 데드크로스 하고 데드 상태가 유지되고 뒤따라서 1분봉 SIGMA(450,225) 과 1분봉 SIGMA(600,300) 둘다 0 보다 작은 데드 상태가 되면 매도 3] 시가(9시정각)에서 아래 3개 지표가 모두 데드(SIGMA < 0) 상태이면 매도 1분봉 SIGMA(100,50) > 0 데드상태 1분봉 SIGMA(450,225) > 0 데드상태 1분봉 SIGMA(600,300) > 0 데드상태 선물 매도 청산 1] 1분봉 SIGMA(100,50)이 0을 골드크로스 돌파할때 청산 2] 1포인트 손실일때 청산 3] 1번,2번 청산조건 안될시 당일 종가에 청산
프로필 이미지
비류천
2013-11-25
251
글번호 69769
시스템
답변완료

재질문드립니다

답변감사합니다 질문 1)에서 절대치가 출력이 되는데... <+,- >부호를 함께 출력할려면 어떻게 해야할까요? > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 지표문의 > 안녕하세요 예스스탁입니다. 1. 아래내용 참고하시기 바랍니다. 각 지지나 저항값과의 차이를 변수에 저장하고 min함수로 해당변수값장 가장 작은값을 찾아 plot하시면 됩니다. var1 = abs(C-지지값1); var2 = abs(C-지지값2); var3 = abs(C-지지값3); var4 = abs(C-지지값4); var5 = abs(C-저항값1); var6 = abs(C-저항값1); var7 = abs(C-저항값1); var8 = abs(C-저항값1); value1 = min(var1,var2,var3,var4,var5,var6,var7,var8); plot1(value1); 2. adate == sdate로 하시면 과거 날짜의 봉도 모두 출력됩니다. 아래와 같이 CurrentDate를 이용하셔야 합니다. 비교문마자 adate변수를 다르게 가져가셔야 합니다. var :Adate(0); if data2(c) == p1 Then { Adate=sdate; r1=(o+c)/2; } if Adate == CurrentDate Then plot1(r1,"r1"); 즐거운 하루되세요 > 스로우 님이 쓴 글입니다. > 제목 : 지표문의 > 1) 여러개의 지지저항값중 현재가에 가장 가까운 지지저항값을 선택해서 현재가와 그 지지저항값의 차이(이격)를 수치로 표시하고 싶습니다. 2) var :Adate(0); if data2(c) == p1 Then { Adate=sdate; r1=(o+c)/2; } if Adate == sdate Then plot1(r1,"r1"); ==> 오늘 발생한 사건에 대해서만 (과거는 제외) 선을그어주는 것인데 제대로 된건지 확인 부탁드립니다 ==> 그리고 "p1"이 한개가 아니고 50여개 되는데 이경우 각각의 p1 ~ p50에대서 수식을 적용해야하는지 아니면 함수식으로 간편화할수있는지 도움 부탁드립니다 ==> 또한 각각의 p1 ~ p50에 대하여 "Adate(0)"를 가각 다르게 잡아야하는가요?
프로필 이미지
스로우
2013-11-22
241
글번호 69765
지표