커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1515
글번호 230811
답변완료
시스템 작동 관련
input : 시작일(20251113),시작시간(090000); Input : Period(14); Var : value(0); value = WILLR(Period); if Bdate >= 시작일 and sTime >= 시작시간 Then Condition1 = true; Condition2 = true; # 매수/매도청산 If CrossUP(value, -80) Then { Buy(); } # 매도/매수청산 If CrossDown(value, -20) Then { Sell(); } 이 수식으로 시스템을 하면은 시작일과 시간을 트레이딩 시작 하기전 신호가 나오지 않아야 되는데.. 이전 신호도 나옵니다..해외선물 거래입니다..nh 선물에서 하고요..
2025-11-13
169
글번호 227990
답변완료
문의
sell 수식에서 익절 발생 후 그 이후 진입은 익절가보다 낮은 가격에서 진입하도록 수식을 수정했는데...익절가 발생 후 부터는 아예 진입을 하지 않는 수식이 되었습니다.살펴주십시요.첨부파일 1은 기존 수식 결과첨부파일 2는 수정 수식 결과***************************************************************************************************************************input : 최대(999999),최소(550);input : 진입시간(084700),진입제한시간(142400); input : 거래횟수(20),누적패수(5),연속패수(2),누적패수조정(2),bigdown(15.00),조정거래횟수(7),조정진입제한시간(113000); input : b1(50),진입눌림1(5),진입돌파1(0),X1(999999),청산눌림1(0),청산돌파1(0);input : 경과봉(0),b2(150),진입눌림2(5),진입돌파2(0),X2(999999),청산눌림2(0),청산돌파2(0);input : als(40),atr1(0),atr2(135);input : bls(130),btr1(0),btr2(182);input : s1lock(120000),익절가1(8);input : s2lock(115000),익절가2(4.9);input : 만기청산시간1(144500),만기외청산시간1(150000);input : 만기청산시간2(150000),만기외청산시간2(142400);var : T1(0),entry(0),HH(0),LL(0),EH(0),EL(0),E1(0),H1(0),i1(0),S1(0),L1(0),V1(0);Var : 당일거래횟수(0),진입끝시간(0),bigdownCond(False);var : Tcond(false);var : loss(0),consecLoss(0),패수(0),익절가(0);//영업일변경if bdate != bdate[1] Then{ //손실횟수 초기화 0 loss = 0; //연속손실횟수 초기화 0 consecLoss = 0; //패수는 누적패수 패수 = 누적패수; //익절1이나 익절2가 발생하면 청산가격 저장할 변수 익절가 = 0;}//청산발생if TotalTrades > TotalTrades[1] Then{ //손실이면 if PositionProfit(1) < 0 Then { //loss 1씩 증가 loss = loss+1; //consecLoss 1씩 증가 consecLoss = consecLoss+1; //consecLoss이 3이면 패수를 누적패수에서 누적패수조정으로 변경 if consecLoss == 연속패수 Then { 패수 = 누적패수조정; } } Else //손실이 아니면 consecLoss으로 초기화 consecLoss = 0; //청산으로 익절1이나 익절2이면 익절가에 청산가격 저장 if IsExitName("익절1",1) == true or IsExitName("익절2",1) == true Then 익절가 = ExitPrice(1); Else // 아니면 익절가 = 0; //익절가는 0}//영업일 변경if bdate != bdate[1] Then{ //손실횟수 초기화 0 loss = 0; //연속손실횟수 초기화 0 consecLoss = 0; //패수는 누적패수 패수 = 누적패수; //당일거래횟수는 거래횟수 당일거래횟수 = 거래횟수; //진입끝시간은 진입제한시간 진입끝시간 = 진입제한시간; //bigdownCond는 False bigdownCond = False;}//bigdownCond가 False인 상태에서//진입시간이후 조정진입제한시간 전에 시초가대비 BigDown이하 하락한 종가가 발생하면if bigdownCond == False and stime >= 진입시간 and sTime < 조정진입제한시간 and L <= DayOpen-BigDown Then //전일종가대비이면 DayOpen-> DayClose(1){ //BigDown는 true bigdownCond = true; //당일거래횟수는 조정거래횟수로 변경 당일거래횟수 = 조정거래횟수; //진입끝시간은 조정진입제한시간로 변경 진입끝시간 = 조정진입제한시간; //진입제한시간이후에 발생했다면 Tcond가 False이므로 //Tcond는 true로 변경 if sTime >= 진입제한시간 and Tcond == False Then Tcond = true;}if TotalTrades > TotalTrades[1] and PositionProfit(1) < 0 Then loss = loss+1;if (sdate != sdate[1] and stime >= 진입시간) or (sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) Then Tcond = true; if (sdate != sdate[1] and stime >= 진입끝시간) or (sdate == sdate[1] and stime >= 진입끝시간 and stime[1] < 진입끝시간) Then Tcond = false; if (sdate != sdate[1] and stime >= 진입시간) or (sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) Then{ T1 = TotalTrades; E1 = 0; HH = H; }if stime >= 진입시간 then{ if H > HH Then HH = H; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = (TotalTrades-T1)+1; if MarketPosition == 0 and entry == 0 Then { if E1 == 0 and C <= HH-PriceScale*B1 Then { E1 = 1; L1 = L; i1 = index; V1 = HH; //시작점 종가 } if E1 == 1 and index > i1 then{ if L < L1 Then L1 = L; #고가가 시작봉종가보다 작을 때만 눌림체크 if H <= V1 and H >= L1+PriceScale*진입눌림1 Then{ E1 = 2; i1 = index; S1 = L1; } } //시작점 종가보다 높은 가격이 발생하면 초기화 if E1 >= 1 and H > V1 Then{ E1 = 0; HH = H; } if loss < 패수 and E1 == 2 and index > i1 and C <= S1-PriceScale*진입돌파1 and Tcond == true and 최대 > C and C >= 최소 Then{ sell("s1"); } } if TotalTrades > TotalTrades[1] Then{ E1 = 0; HH = H; } if H > HH Then HH = H; if MarketPosition == 0 and entry >= 1 and entry < 당일거래횟수 Then{ if E1 == 0 and C <= HH-PriceScale*B2 Then{ E1 = 1; L1 = L; i1 = index; } if E1 == 1 and index > i1 then{ if L < L1 Then L1 = L; if H >= L1+PriceScale*진입눌림2 Then{ E1 = 2; i1 = index; S1 = L1; } } if loss < 패수 and E1 == 2 and index > i1 and C <= S1-PriceScale*진입돌파2 and Tcond == true and 최대 > C and C >= 최소 and (익절가 == 0 or (익절가 > 0 and C < 익절가)) Then //익절가가 0이거나 익절가가 0보다 크면 종가가 익절가보다 작다 Then{ sell("s2"); E1 = 0; } } if MarketPosition == -1 and IsEntryName("s1") == true Then{ if entry >= 1 then{ if CurrentContracts > CurrentContracts[1] Then{ EL = L; E1 = 0; } if L < EL Then{ EL = L; E1 = 0; } if E1 == 0 and C >= EL+PriceScale*X1 Then{ E1 = 1; H1 = H; i1 = index; } if E1 == 1 and index > i1 Then{ if H > H1 Then H1 = H; if L <= H1-PriceScale*청산눌림1 Then{ E1 = 2; I1 = index; S1 = H1; } } if E1 == 2 and index > i1 and C >= S1+PriceScale*청산돌파1 Then{ ExitShort("sx1"); E1 = 0; } } } if MarketPosition == -1 and IsEntryName("s2") == true Then{ if entry >= 1 then{ if CurrentContracts > CurrentContracts[1] Then{ EL = L; E1 = 0; } if L < EL Then{ EL = L; E1 = 0; } if E1 == 0 and C >= EL+PriceScale*X2 Then{ E1 = 1; H1 = H; i1 = index; } if E1 == 1 and index > i1 Then{ if H > H1 Then H1 = H; if L <= H1-PriceScale*청산눌림2 Then{ E1 = 2; I1 = index; S1 = H1; } } if E1 == 2 and index > i1 and C >= S1+PriceScale*청산돌파2 Then{ ExitShort("sx2"); E1 = 0; } } } if marketposition() == -1 and IsEntryName("s1") == true and stime<s1lock Then ExitShort("익절가1",Atlimit,EntryPrice-익절가1);if marketposition() == -1 and IsEntryName("s2") == true and stime<s2lock Then ExitShort("익절가2",Atlimit,EntryPrice-익절가2);if MarketPosition== -1 Then{ if IsEntryName("s1") == true Then { SetStopLoss(PriceScale*als,PointStop); SetStopTrailing(PriceScale*atr2,PriceScale*atr1,PointStop,1); } Else if IsEntryName("s2") == true Then { SetStopLoss(PriceScale*bls,PointStop); SetStopTrailing(PriceScale*btr2,PriceScale*btr1,PointStop,1); } Else { SetStopLoss(0); SetStopTrailing(0,0); }}var : Month(0),nday(0),week(0); month = int(date/100)-int(date/10000)*100; nday = date - int(date/100)*100; Week = DayOfWeek(date); if (nday >= 8 and nday <= 14 and week == 4) or (sdate == 20141008) then { if sdate < 20160801 Then SetStopEndofday(만기청산시간1); Else SetStopEndofday(만기청산시간2); } Else { if sdate < 20160801 Then SetStopEndofday(만기외청산시간1); Else SetStopEndofday(만기외청산시간2); }
2025-11-13
260
글번호 227989
답변완료
수식 부탁 드림니다
안녕하십니까?수식 부탁 드립니다1.기준선1(Highest(H, 기간1) + Lowest(L, 기간1))/22. 기준선2(Highest(H, 기간2) + Lowest(L, 기간2))/23.기준선3(Highest(H, 기간3) + Lowest(L, 기간3))/24.고점M1 = (Highest(H, 기간1) + Lowest(L, 기간1))/2;M2 = (Highest(H, 기간2) + Lowest(L, 기간2))/2;HighestSince(1, crossUp(M1, M2), M1)5.저점M1 = (Highest(H, 기간1) + Lowest(L, 기간1))/2;M2 = (Highest(H, 기간2) + Lowest(L, 기간2))/2;LowestSince(1, crossDown(M1, M2), M1)----------------------------------------------------기간1 = 5기간2 = 10기간3 = 20================================1. 5 이평ma(C, period1)고점, 저점2. 10이평ma(C, period2)고점, 저점3. 20 이평ma(C, period3)고점, 저점========================항상 감사 합니다
2025-11-13
199
글번호 227988
답변완료
부탁드립니다.
해선 5분봉 차트에서 전일 특정시간(예: 전일 13시10분)의 종가를 표시하는 수식을 부탁드립니다.
2025-11-13
138
글번호 227987
답변완료
검색식 문의 드립니다.
안녕하세요. 조건 검색시 부탁 드립니다.
2025-11-13
145
글번호 227986
답변완료
검색식 확인 부탁합니다.
input: starttime(90000), endtime(152000),starttimeB(90000), endtimeB(152000), billion(15), rising_rate(1.05), diff_limit(1.02);var: condA(false), condB(false), ma10(0), ma20(0), ma60(0),ma120(0), maxval(0), minval(0),maxval2(0), minval2(0);/* 이동평균 계산 */ma10 = ma(C, 10);ma20 = ma(C, 20);ma60 = ma(C, 60);ma120 = ma(C, 120);/* 최대/최소 계산 */maxval = maxlist(ma10, ma20, C);minval = minlist(ma10, ma20, C);maxval2 = maxlist(ma60, ma20, C);minval2 = minlist(ma60, ma20, C);condB = (stime >= starttimeB and stime <= endtimeB) and (((ma120 > ma120[1]) and (maxval2 / minval2 < diff_limit)) or ((ma60 > ma60[1]) and (maxval / minval < diff_limit))) ; if CountIf(condB == true, 390) >= 1 Then find(1);검색식 중에 일부분을 가져왔는데요. condB를 제외하면 검색이 되는데 condB를 포함하면 검색이 되지 않습니다.diff_limit를 크게 가져가도 검색이 되지 않아 무슨 문제인가 싶어서 질문드립니다.감사합니다.
2025-11-13
178
글번호 227984
답변완료
조건검색문의드립니다
2가지 검색식 문의드립니다 [1]A =H > C(1) * 1.15 &&C > O && C < C(1) * 1.07 &&H > C * 1.1 &&(거래대금 > 5000 or Highest(거래대금(1), 10) < 거래대금);기준가 = Valuewhen(1, A, C);기준봉상승률 = Valuewhen(1, A, C/C(1) * 100 - 100);현재봉상승률 = C/C(1) * 100 - 100;매수타점 =C > 기준가 * 1.02 &&C > C(1) * 1.02 && C < C(1) * 1.08 &&기준봉상승률 + 현재봉상승률 <= 10 &&BarsSince(A) < 5 &&(ma(C, 10) < C or ma(C, 20) > C);매수타점 && !매수타점(1)위 수식을 조건검색식으로 변환 부탁드립니다(BarSince함수가 예스트레이더에서 지원되는진 모르겠으나, 다른 비슷한 조건함수가 있다면 그것도 적용해서 수식완성좀 부탁드리겠습니다)[2]수식오류 정정 요청드립니다(첨부이미지 오류뜨서 문의드립니다) input : P2(20),N(60);var : LT(0),HT(0),newH(0),Box1(False),bs(NaN);var : TOP(0),BTM(0);LT=LOWEST(L,P2);HT=HIGHEST(H,P2);if H > HT[1] Then{ NewH = H; bs = 0;}Else bs = bs+1;BOX1=HIGHEST(H,P2-2)= O*1.05 and //%이상 양봉 V >= V[1]*2 and //전봉대비 거래량 2배 CountIf(TOP>= H and H >= BTM,N)[1] == N Then //최근 N일 고저가는 상단과 하단사이 Find(1);
2025-11-12
252
글번호 227983
답변완료
문의 드립니다
스탑주문이 설정되어 예를 들어 10종목이 설정되어 잇는데수익이 좋은 2종목이 잇어 스탑주문을 2종목만 해제하고 나머지 8종목은 그대로 설정 유지하는방법 문의 드립니다.스탑주문을 10종목 일괄 해제하고 개별적으로 종목마다 스탑주문을 걸어야 하나요
2025-11-12
169
글번호 227982
답변완료
검색식 부탁드립니다.
아래의 키움 수식을 예스트레이더 검색식으로 변환 부탁드립니다. 감사합니다.M=macd(12,26);Ms=eavg(M,9);조건1=Crossup(M,Ms);T12=Trix(12);T26=Trix(26);변동12=T12-T12(1);변동26=T26-T26(1);조건2=Crossup(변동12,변동26);시그마=(C-avg(c,20)) /Stdev(c,20);조건3=Crossup(시그마,0);Wr=WilliamsR(28);조건4=Crossup(Wr,-25);조건1 && 조건2 && 조건3 && 조건4
2025-11-12
192
글번호 227981