커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

신호작성부탁드립니다.

지금 차트신호가 william'R 지표를 사용중인데요.... 여기에다가 시세가 횡보일때는 신호가 않떴으면 좋겠습니다..... 그러면서 횡보(고가와고가를연결, 저가와 저가를 연결한 지지선과 저항선이 표시될수 있도록 해주시면 삼각수렴후)후에 한방향으로 시세가 날때 신호가 떴으면 합니다....... 어렵겠지만 정중히 부탁드리겠습니다...... 매수청산,매도청산 신호는 필요없습니다. 매수/매도 신호만 뜨게해주세요..^^ Input : Period(14); Var : value(0); value = WILLR(Period); # 매수/매도청산 If CrossUP(value, -80) Then { Buy(); } # 매도/매수청산 If CrossDown(value, -20) Then { Sell(); }
프로필 이미지
회원
2013-06-05
304
글번호 63999
시스템
답변완료

수식 문의 드립니다

안녕하세요 수식 작성을 도와주셔서 아래 수식을 잘사용하고 있습니다. 아래 수식중에서 매수, 매도 미완성 신호는 신호가 잘나옵니다... 그런데.. 매수청산, 매도청산 또는 손절매 신호는 한번도 안나옵니다... 1. 혹시 수식에 오류가 있는지 점검 부탁드립니다..^^ 2. 그리고 진입가 대비 -0.25 포인트 이면 자동 손절 수식도 삽입 부탁드립니다. ^^ //차트객체명 Chart1 --> 속성에서 차트아이디 연결 //계좌객체명 Account1 --> 속성에서 계좌선택 var cnt; var BID; var SID; var BXID; var SXID; function Main_OnStart() { Main.MessageLog("시작"); cnt = 0; } //봉완성(시가수신) 카운트 0로 초기화 function Chart1_OnBarAppended(nData) { if (nData == 1) cnt = 0; } //미완성 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //차트가 무포지션이거나 매도포지션 상태일 때 Buy미완성신호 발생하면 매수 if (cnt == 0 && IncompleteSignal.signalKind == 1 && Chart1.GetOpenContracts() <= 0) { BID = Account1.OrderBuy(Main.GetOrderCode(IncompleteSignal.code),1,MarketData1.Ask(1),0); //주문수량,주문가격(Ask(1):매도1호가)),가격구분(1:시장가,0:지정가) cnt = 1; Main.MessageList("미완성 매수신호 발생"); Main.PlaySound("C:₩예스트레이더₩data₩sound₩alert.wav"); } if (cnt == 0 && IncompleteSignal.signalKind == 3 && Chart1.GetOpenContracts() <= 0) { SID = Account1.OrderSell(Main.GetOrderCode(IncompleteSignal.code), 1, MarketData1.Bid(1), 0);//주문수량,주문가격,가격구분(1:시장가,0:지정가) cnt = 1; Main.MessageList("미완성 매도신호 발생"); Main.PlaySound("C:₩예스트레이더₩data₩sound₩alert.wav"); } } function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 2 && Chart1.GetOpenContracts() >= 1) { Main.MessageList("완성 매수청산신호 발생"); BXID = Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, MarketData1.Bid(1), 0); Main.PlaySound("C:₩예스트레이더₩data₩sound₩alert.wav"); } if (Signal.signalKind == 4 && Chart1.GetOpenContracts() <= -1) { Main.MessageList("완성 매도청산신호 발생"); SXID = Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, MarketData1.Bid(1), 0); Main.PlaySound("C:₩예스트레이더₩data₩sound₩alert.wav"); } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID ) { BNUM = OrderResponse.orderNum; Main.SetTimer(1, 60000); } if (OrderResponse.orderID == SID ) { SNUM = OrderResponse.orderNum; Main.SetTimer(2, 60000); } if (OrderResponse.orderID == BXID ) { BXNUM = OrderResponse.orderNum; Main.SetTimer(3, 60000); } if (OrderResponse.orderID == SXID ) { SXNUM = OrderResponse.orderNum; Main.SetTimer(4, 60000); } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); Account1.SetUnfillOrderNumber(BNUM); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BNUM); } } if (nEventID == 2) { Main.KillTimer(2); Account1.SetUnfillOrderNumber(SNUM); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BNUM); } } if (nEventID == 3) { Main.KillTimer(3); Account1.SetUnfillOrderNumber(BXNUM); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BXNUM); } } if (nEventID == 4) { Main.KillTimer(4); Account1.SetUnfillOrderNumber(SXNUM); if (Account1.Unfill.count > 0) { Account1.OrderCancel(SXNUM); } } }
프로필 이미지
회원
2013-06-05
271
글번호 63998
시스템
답변완료

수식 문의드립니다

매수조건입니다 20선 2틱위에 현제봉이 음봉 ,음봉 이전봉이 양봉, 양봉이전봉이 양봉 이면 현제봉 음봉의 종가에 진입하거나 20선에 현제봉 음봉이 걸치고 이전봉이 양봉 ,양봉의 이전봉이 양봉이면 현제봉 음봉 종가에 진입하거나 20선 2틱 밑에 현제봉이 음봉 , 음봉이전이 양봉 , 양봉 이전이 양봉 이면 현제봉 음봉의 종가에 진입하거나 20선에 현제봉이 음봉이 걸치고 이전봉이 양봉 , 양봉의 이전봉이 음봉이면 음봉의 이전봉이 음봉이면 현제봉 음봉의 종가에 진입입니다 선절은 진입후 4틱 고정손절로 잡고 청산은 60일선 아래로 돌파하면 양봉 종가에 청산입니다 수고에 감사드립니다
프로필 이미지
포승
2013-06-05
254
글번호 63997
시스템
답변완료

문의 (RE)

VARS: IsNOTEntrySEQ1(FALSE); IsNOTEntrySEQ1 = (IsExitName("ExitShort[S1]", 1) == TRUE) AND (TimeToMinutes(stime) <= TimeToMinutes(ExitTime(1)) + 30); if IsNOTEntrySEQ1 <> TRUE AND 조건식 then buy(); 위와 같이 해주면 이전 청산의 이름이 ExitShort[S1]이면 30분이내에는 재진입을 못하게 해준다는 것을 알고 있습니다. 근데 문제는 피라미딩을 설정하면 위 식이 먹히질 않더군요. 해결할 수 있는 방법이 있는지요? 2. 모의투자로 접속하고 1억원을 세팅해서 시스템을 테스트해보는데 체결이 되어도 체결내역이나 손익이 변하지 않더군요. 1104화면에는 1억원이 세팅되어 있고 해당 계좌로 자동주문으로 설정했습니다. 도움주시면 감사하겠습니다.
프로필 이미지
TRF
2013-06-05
279
글번호 63996
시스템
답변완료

시스템식

현재 RSI챠트에서 기준선이 30과 70으로 고정되어서 표시되고 있습니다. RSI 챠트에서 기준선이 20과 80으로 변경되어서 표시되게끔 바꿔주세요. Input : Period(14), LPercent(20), SPercent(80); Var : value(0); value = RSI(Period); # 매수/매도청산 If CrossUP(value, LPercent) Then { Buy(); } # 매도/매수청산 If CrossDown(value, SPercent) Then { Sell(); }
프로필 이미지
erwe343
2013-06-05
228
글번호 63995
시스템
답변완료

문의드립니다

input:left(5),right(5),구분(1); var:j(0),prehv(0),prelv(0),prehb(0),prelb(0),tmpv(0),tmpb(0), ovr(0),반등(1),반락(-1); array:hv[10](0),lv[10](0),hb[10](0),lb[10](0), r[8](0),fr[8](0); r[0] = 0; r[1] = 0.236; r[2] = 0.382; r[3] = 0.50; r[4] = 0.618; r[5] = 0.764; r[6] = 1; r[7] = 1.618; #==============================================================================# # 변곡점 계산 #==============================================================================# //파동선 작성 설명은 자주 했으므로 생략 if highest(h[1],left) <= h then { prehv = h; prehb = 0; } else prehb = prehb + 1; if lowest(l[1],left) >= l then { prelv = l; prelb = 0; } else prelb = prelb + 1; for j = 1 to 9 begin hb[j] = hb[j] + 1; lb[j] = lb[j] + 1; end; if prehb == right and highest(h,right) <= h[right] then { for j = 9 downto 2 { hv[j] = hv[j-1]; hb[j] = hb[j-1]; } hv[1] = prehv; hb[1] = prehb; if lb[1] > hb[2] then { for j = 9 downto 2 { lv[j] = lv[j-1]; lb[j] = lb[j-1]; } tmpv = 0; for j = hb[1] + 1 to hb[2] - 1 { if tmpv > l[j] or tmpv ==0 then { tmpv = l[j]; tmpb = j; } } lv[1] = tmpv; lb[1] = tmpb; } } if prelb == right and lowest(l,right) >= l[right] then { for j = 9 downto 2 { lv[j] = lv[j-1]; lb[j] = lb[j-1]; } lv[1] = prelv; lb[1] = prelb; if hb[1] > lb[2] then { for j = 9 downto 2 { hv[j] = hv[j-1]; hb[j] = hb[j-1]; } tmpv = 0; for j = lb[1] + 1 to lb[2] - 1 { if tmpv < h[j] or tmpv ==0 then { tmpv = h[j]; tmpb = j; } } hv[1] = tmpv; hb[1] = tmpb; } } #==============================================================================# # Fibonacci Retracements 계산 #==============================================================================# //반등과 반락을 모두 표시하게 되면 복잡해지므로 한 방향만 표시하는 것이 옳음 if 구분 == 반등 then { if crossup(lb[1],hb[1]) then { for j = 0 to 7 begin fr[j] = hv[1] - (hv[1] - lv[1]) * r[j]; end; ovr = 0; } if fr[6]>l then ovr = 1; } if 구분 == 반락 then { if crossup(hb[1],lb[1]) then { for j = 0 to 7 begin fr[j] = lv[1] + (hv[1] - lv[1]) * r[j]; end; ovr = 0; } if fr[6]>l then ovr = 1; } #==============================================================================# # 지표출력 #==============================================================================# if hb[1]==right then plot1(hv[1],"파동선",GREEN); if lb[1]==right then plot1(lv[1],"파동선",GREEN); plot2(fr[0],"0%"); plot3(fr[1],"23.6%"); plot4(fr[2],"38.2%"); plot5(fr[3],"50%"); plot6(fr[4],"61.8%"); plot7(fr[5],"76.4%"); plot8(fr[6],"100%"); plot9(fr[7],"161.8%"); 위의 지표식을 적용했을때 전체비율이 표시되는 구간과 관련하여 한가지 수정부탁드립니다. 이지표식은 직전 상승파동의 스윙고점에서 하락방향으로만 비율이 표시되고 있습니다. 예를들어 A B C D E 구간이 있다고 했을때 A 에서 비율이 표시되기 시작하여 같은값으로 B 를 지나 C 직전까지, C 에서 새로운 값으로 표시되기 시작하여 D 를 지나 E 직전까지 출력이 됩니다. 그런데 차트에 적용해보면, 위 지표식의 값이 적용되는 구간은 A에서 B구간,C에서 D구간이며, B에서 C구간과 D에서 E구간은 직전 하락파동의 스윙저점에서 상승방향으로 비율이 표시되어야되는 구간임에도 불구하고 A에서 시작된 비율표시가 C까지,C에서 시작된 비율표시가 E까지 계속 출력이 됩니다. 위지표식을 A에서 B, C에서 D 구간에서만 표시가 되고, B에서 C, D에서 E 구간에서는 표시가 되지 않도록 수정부탁드립니다.
프로필 이미지
뉴스타트
2013-06-05
301
글번호 63994
지표
답변완료

질문

예스스팟에 관한 질문입니다. 스팟이 언제 데이터를 수신하는지 궁굼 합니다. 질문1 예를 들어 이벤트가 발생하지 않을시에는 데이타를 읽지 않다가 이벤트 가 발생할시 데이터를 읽기 시작하여 여러가지 계산값을 수행하는 것인지 아니면 실시간으로 데이타를 수신하고 있다 이벤트가 발생할시 계산에 들어가는것인지 설명 부탁드립니다 아무런 이벤트 설정이 없다는 가정하에서 아래와 같은 수식이 있다면 계산이 수행되고 있는 것인지 아니면 이벤트가 없기 때문에 아무런 계산도 되지 않는것인지 설명 부탁드립니다. 아래와 같은 경우를 말하는 것인데.. 이벤트 없이 단순히 조건만 있을경우 조건이 충족된다면 수식이 실행이 되는것인지 만약 된다면 주문 까지 가능한것인지 알고싶습니다. /* 적용객체 종목객체=선물 */ if (종목객체.current > 260) { var vv=6,uu=10; var all = vv+uu; } 질문2 또한 차트데이터 지표값의 경우 봉완성이 되지 않더라도 실시간 데이타로 수신하여 주문 에 이용하는것에 장애가 없는 것으로 알고 있는데 제가 알고 있는것이 맞는것인지요 질문3 만약 이벤트 수식 없이도 아래와 같이 주문이 가능할지? 설명부탁드립니다. /* 사용된 객체 차트객체 = fchart(선물차트) -차트객체에 적용된 지표 명 's.거래량' plot1 =av(전체거래량),plot2=uv(상승체결량),plot3=dv(하락체결량) 종목객체 = future(선물종목) 계좌객체 = a1 수식내용 plot1값(av=전체거래량)이 700 보다 크고 plot2(uv=상승체결량) 가 plot3(dv=하락체결량) 보다 1.5배 많을때 선물(future) 현재가 보다 0.05 높은 지정가격에 매수 */ var av=0,uv=0,dv=0; function Main_OnStart() { Main.MessageLog("시작") } av = fchart.GetIndicatorData("s.거래량", 1, 0); // 분봉 전체거래량 uv = fchart.GetIndicatorData("s.거래량", 2, 0); // 분봉 상승체결량 dv = fchart.GetIndicatorData("s.거래량", 3, 0); // 분봉 하락체결량 if (av>700 && uv > dv*1.5) { a1.OrderBuy(future.code, 1, current + 0.05, 0); } }
프로필 이미지
nadogaja
2013-06-05
485
글번호 63993
시스템
답변완료

수고하십니다. 시스템관련 질의드립니다.

총호가잔량합과 선물의 가격변동에 대한 시스템을 만들고 싶은데요. 당일 선물지수 시가가 전일 종가대비 1.5%이상 갭으로 상승하면서 동시에 총호가잔량합(bids-asks)이 -5000 이하일때 시가에 선물1계약 sell 하는 시스템입니다. 포지션 진입은 시가에 1회만 하는 것으로하고 청산은 종가 청산입니다.
프로필 이미지
pinsane
2013-06-05
204
글번호 63992
시스템
답변완료

시스템식 질문입니다

해외선물 차트에서 조건 A 가 만족했을때 금일 171000 시작해서 다음날 130000 까지만 매매 하고 싶습니다
프로필 이미지
파인애플
2013-06-05
218
글번호 63991
시스템