커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

종목검색 수식요청드립니다..

안녕하세요. 영웅문에서의 수식인데 이것을 예스랭귀지로의 변경이 필요해서 문의드립니다. 1,2번이 기본검색식(영웅문 검색식) 3번이 응용검색식입니다..가능하다면 셋 다 구현해주시면 감사하겠습니다. 3번의 조건이 너무 조잡하여 구현이 안되면 1번,2번만이라도 잘 부탁드리겠습니다.. 꾸벅.. 1.지수이동평균선240(M240)을 상향돌파 이후 이평선을 '한번'도 하향 이탈하지 않고 상향돌파 이후 최소 '20'봉 이상 진행 후 ( 지수이동평균선240을 상향돌파 한 후의) 전고점 상향 돌파 시 (N번째신호) 표시 2.지수이동평균선240(M240)을 상향돌파 이후 이평선을 '한번'도 하향 이탈하지 않고 상향돌파 이후 최소 '20'봉 이상 진행 후 ( 지수이동평균선240을 상향돌파 한 후의) 전고점 상향 돌파 시 (첫번째신호) 표시 3.1번의 조건에서 몇가지 수정하겠습니다.. 지수이동평균선240을 이탈한 후 25일이 초과되면 돌파를 초기화한다. (즉, 25일내로 회복하면 하나의 돌파로 간주한다.) 지수이동평균선240(M240)을 상향돌파 이후 이평선을 '2번'까지는 하향 이탈해도 괜찮다. (단, 이탈했을시 각 이탈 시 '25'일 내로 다시 이동평균선240 위로 올라와야한다. (예) 2번이탈시, 첫번째 이탈 시 20일후 회복, 2번째이탈 시 15일 후 회복 총합은 35일이 넘었지만, 각각 25일 이내면 가능함 (이탈 전 '첫' )상향돌파 이후 최소 '20'봉 이상 진행 후 (이탈하더라도 20봉의 갯수는 계속 카운트 된다. 첫 상향돌파 후 20봉이므로) (이탈 전 '첫' 지수이동평균선240을 상향돌파 한 후의) 전고점 상향 돌파 시 (첫신호 or 2번째신호 or 3번째신호) 표시 영웅문 수식1: M= ma(c, 240, 종류); //종류:지수 HH= Highestsince(1, crossup(c,m), H); Bs= barssince(crossup(c,M))+1; cnt= countsince(crossup(c,m), C>M); Bs == cnt and crossup(c, hh(1)) and Bs > 지연일 //지연일:20일 영웅문 수식2: M= ma(c, 240, 종류); //종류:지수 HH= Highestsince(1, crossup(c,m), H); Bs= barssince(crossup(c,M))+1; cnt= countsince(crossup(c,m), C>M); 조건= Bs == cnt and crossup(c, hh(1)) and Bs > 지연일; //지연일:20일 첫신호= countsince(crossup(c,m), 조건); 첫신호==1 and 첫신호(1)==0
프로필 이미지
downlord
2024-01-22
1122
글번호 175944
종목검색
답변완료

문의

안녕하세요 예스스탁입니다. var : cnt(0); Array : WeekH[10](0),WeekL[10](0),WeeKC[10](0); if DayOfWeek(Bdate) < DayOfWeek(Bdate[1]) Then { For cnt = 9 DownTo 1 { WeekH[cnt] = WeekH[cnt-1]; WeekL[cnt] = WeekL[cnt-1]; WeekC[cnt] = WeekC[cnt-1]; } WeekH[0] = H; WeekL[0] = L; } if WeekH[0] > 0 and H > WeekH[0] Then WeekH[0] = H; if WeekL[0] > 0 and L < WeekL[0] Then WeekL[0] = L; WeekC[0] = c; if WeekH[1] > 0 and WeekL[1] > 0 Then { Plot1(WeekH[1],"전주고가"); Plot2(WeekL[1],"전주저가"); Plot3(WeekC[1],"전주종가"); } if WeekH[0] > 0 and WeekL[0] > 0 Then { Plot4(WeekH[1],"이번주고가"); Plot5(WeekL[1],"이번주저가"); } 여기에서 이번주 시가를 외부변수로 해서 밤11시반으로 나타나게 부탁드립니다
프로필 이미지
레전드
2024-01-21
1251
글번호 175943
지표
답변완료

수식 도움 요청드립니다

수고에 늘 감사드립니다. 아래 수식을 예스랭귀지로 변환하고자 도움을 요청 드립니다. 매번 수고에 거듭 감사드립니다. //@version=5 indicator(title='Super trend B', overlay=true) length = input.int(20, minval=1) src = close mult1 = input.float(0.5, minval=0.001, maxval=50, title=" multiflier") basis = ta.sma(src, length) upper1 = basis + mult1 * ta.stdev(src, length) lower1 = basis - mult1 * ta.stdev(src, length) plot(basis, "Basis", color=#FF6D00) plot(upper1, "Upper 1", color=#2962FF) plot(lower1, "Lower 1", color=#2962FF) // INPUTS // st_mult = input.float(3, title='SuperTrend Multiplier', minval=0, maxval=100, step=0.01) st_period = input.int(7, title='SuperTrend Period', minval=1) // CALCULATIONS // up_lev = upper1 - st_mult * ta.atr(st_period) dn_lev = lower1 + st_mult * ta.atr(st_period) up_trend = 0.0 up_trend := close > up_trend ? math.max(up_lev, up_trend) : up_lev down_trend = 0.0 down_trend := close < down_trend ? math.min(dn_lev, down_trend) : dn_lev // Calculate trend var trend = 0 trend := close > down_trend ? 1 : close < up_trend ? -1 : nz(trend, 1) // Calculate SuperTrend Line st_line = trend == 1 ? up_trend : down_trend // Plotting //plot(st_line[1], color=trend == 1 ? color.green : color.red, style=plot.style_cross, linewidth=2, title='SuperTrend') buy = ta.crossover(close, st_line) sell = ta.crossunder(close, st_line) //plotshape(crossover( close, st_line), location = location.belowbar, color = color.green,size=size.tiny) //plotshape(crossunder(close, st_line), location = location.abovebar, color = color.red,size=size.tiny) //plotshape(buy, title='buy', text='Buy', color=color.new(color.green, 0), style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.new(color.white, 0)) //plot for buy icon plotshape(sell, title='sell', text='Sell', color=color.new(color.red, 0), style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.new(color.white, 0)) //plot for sell icon // multiplier = input.float(title='DEV', defval=2, minval=1) src5 = close len5 = input.int(title='Linear length', defval=150, minval=1) offset = 0 calcSlope(src5, len5) => sumX = 0.0 sumY = 0.0 sumXSqr = 0.0 sumXY = 0.0 for i = 1 to len5 by 1 val = src5[len5 - i] per = i + 1.0 sumX += per sumY += val sumXSqr += per * per sumXY += val * per sumXY slope = (len5 * sumXY - sumX * sumY) / (len5 * sumXSqr - sumX * sumX) average = sumY / len5 intercept = average - slope * sumX / len5 + slope [slope, average, intercept] var float tmp = na [s, a, i] = calcSlope(src5, len5) vwap1 = i + s * (len5 - offset) sdev = ta.stdev(close, len5) dev = multiplier * sdev top = vwap1 + dev bott = vwap1 - dev // z1 = vwap1 + dev x1 = vwap1 - dev low1 = ta.crossover(close, x1) high1 = ta.crossunder(close, z1) plotshape(low1, title='b', text='BUY', color=color.new(color.green, 0), style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.new(color.white, 0)) //plot for buy icon //plotshape(high1, title='high', text='HIGH', color=color.new(color.green, 0), style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.new(color.white, 0)) //plot for sell icon /////// Alerts ///// //alertcondition(buy, title='buy') alertcondition(sell, title='sell') alertcondition(low1, title='buy') //alertcondition(high1, title='buy tp')
프로필 이미지
이큐
2024-01-21
1390
글번호 175942
지표
답변완료

부탁좀 드립니다.

상승 하는 20일선을 15일 기간안에서 (5일도 좋고, 7일도 좋고..) 20선을 돌파 했다가, 이탈 하고 재 돌파한 종목을 찾을 수 있을까요? 부탁 드립니다.
프로필 이미지
hg950265
2024-01-21
1282
글번호 175941
종목검색
답변완료

수식요청

안녕하세요 수식부탁드립니다 이평60선 볼밴과 이평폭 +- 10틱이내 매수식 가격이 이평 60선을 하락이나 상승후 이평 60선이 볼밴 하한선과의 폭이 +- 10틱이내인 상태에서 가격이 이평 60선을 터치나 하락후 상승시 첫봉에서 매수 매도식 가격이 이평60선을 상승이나 하락후 이평 60선이 볼밴 상한선과의 폭이 -+10틱이내 가격이 이평60선을 터치나상승후 하락시 첫봉에서 매도
프로필 이미지
아트정
2024-01-21
1206
글번호 175940
시스템

고래상어의꿈 님에 의해서 삭제되었습니다.

프로필 이미지
고래상어의꿈
2024-01-21
3
글번호 175939
종목검색
답변완료

질문드려요

두가지 신호를 동시에 만족시키는 종목을 검색하고 싶어요 부탁드립니다. 신호1 a=avg(c,5); b=avg(c,20); d=avg(c,60); D1=(A+B+D)/3; A1=(highest(high,9)+lowest(low,9))/2; B1=(highest(high,26)+lowest(low,26))/2; B2=(A1+B1)/2; A3=RSI(9)-50; B3=CMO(12)*0.5; B4=A3+B3; B5=eavg(C,120); (crossup(B2,D1) or crossup(D1,B5) or crossup(B2,B5)) 신호2 Bu=BBandsUp(20,2); CrossUp(C, Bu(25))
프로필 이미지
아빠주식
2024-01-21
1180
글번호 175938
종목검색
답변완료

질문드려요

신호수식인데 이신호로 종목검색하고 싶어요 부탁드립니다. M= ma(C, 240, 삼각); HH = HighestSince(1, CrossUp(C, M), H); Bs = BarsSince(CrossUp(C, M))+1; cnt = CountSince(CrossUp(C, M), C>M); 조건= Bs == cnt && CrossUp(C, HH(1)) && Bs>20; 첫신호 = CountSince(CrossUp(C, M), 조건); 첫신호 ==1 && 첫신호(1)==0
프로필 이미지
아빠주식
2024-01-21
1231
글번호 175937
종목검색
답변완료

문의드립니다

렌코차트식 검색하다 발견한 지표식인데요 주봉에 적용하니까 이상하게 나옵니다 (오류) 그리고 upperline, lowline 등은 아예 표시도 안되네요 수정 좀 부탁합니다 감사합니다 input:renkoSize(0.5),length(10),NumATRs(1.5); var:j(0),k(0),renkoCnt(0),gubun(0),Sum(0),trSum(0),atrV(0),time1(0),filename("renko3.txt"),printOK(False); array:OO[50](0),HH[50](0),LL[50](0),CC[50](0), TR[50](0), //True Range upperLine[50](0), //상단채널 lowerLine[50](0), //하단채널 maV[50](0); //이평선 if stime >= 180000 or stime < 090000 then{ If index == 0 or (stime == 180000) or (stime > 180000 and stime[1] < 180000) Then { //break on session에 해당, 즉 일자가 바뀌면 새로 계산 gubun = 0; //방향을 초기화한다. 이후 형성되는 가격에 의해 방향이 계산 For j = 49 DownTo 1 { //금일 시가봉을 신규 추가 OO[j] = OO[j-1]; HH[j] = HH[j-1]; LL[j] = LL[j-1]; CC[j] = CC[j-1]; TR[j] = TR[j-1]; maV[j] = maV[j-1]; upperLine[j] = upperLine[j-1]; lowerLine[j] = lowerLine[j-1]; } OO[0] = C; //분봉의 종가를 기반으로 계산하기 때문에 당일 시초가 아니다 HH[0] = C; LL[0] = C; CC[0] = C; } Else { If gubun == 0 and CC[0] > 0 Then { //일 첫봉이 완성되지 않은 시점 If OO[0] - renkoSize >= C Then { gubun = -1; //하락 방향 CC[0] = OO[0] - renkoSize; //음봉 HH[0] = OO[0]; LL[0] = CC[0]; TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]); //true range 계산식 참조 //macd 계산 당시와 마찬가지로 sum 값이 있을 때만 처리 If sum > 0 Then { sum = sum + CC[0] - CC[length]; //이평선 계산 원리 그대로, 현재가를 더하고 n봉전 가격 뺌 trSum = trSum + TR[0] - TR[length]; //true range의 합을 계산 maV[0] = Sum / length; //n개의 종가 합을 n으로 나누어 이동평균 계산 atrV = trSum / length; //ATR 계산식 참조 upperLine[0] = maV[0] + atrV * NumATRs; //상단 밴드 계산 lowerLine[0] = maV[0] - atrV * NumATRs; //하단 밴드 계산 } j = 0; if printOK then print(filename,"1=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]); } Else If OO[0] + renkoSize <= C Then { gubun = 1; //상승 방향 CC[0] = OO[0] + renkoSize; //양봉 HH[0] = CC[0]; LL[0] = OO[0]; TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]); If sum > 0 Then { //계속 반복되는 공통 루틴이므로 if문 바깥으로 뺄까도 했으나 sum = sum + CC[0] - CC[length]; //더 복잡해지므로 copy & paste로 처리 trSum = trSum + TR[0] - TR[length]; maV[0] = Sum / length; atrV = trSum / length; upperLine[0] = maV[0] + atrV * NumATRs; lowerLine[0] = maV[0] - atrV * NumATRs; } j = 0; if printOK then print(filename,"2=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]); } } If LL[0] - renkoSize >= C Then { gubun = -1; renkoCnt = Int(Round((LL[0]-C)/renkoSize,9)); if renkoCnt > 49 then renkoCnt = 49; For j = 49 DownTo renkoCnt { OO[j] = OO[j-renkoCnt]; HH[j] = HH[j-renkoCnt]; LL[j] = LL[j-renkoCnt]; CC[j] = CC[j-renkoCnt]; TR[j] = TR[j-renkoCnt]; maV[j] = maV[j-renkoCnt]; upperLine[j] = upperLine[j-renkoCnt]; lowerLine[j] = lowerLine[j-renkoCnt]; } For j = renkoCnt-1 DownTo 0 { OO[j] = LL[j+1]; CC[j] = LL[j+1] - renkoSize; HH[j] = OO[j]; LL[j] = CC[j]; TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]); If sum > 0 Then { sum = sum + CC[j] - CC[j+length]; trSum = trSum + TR[j] - TR[j+length]; maV[j] = Sum / length; atrV = trSum / length; upperLine[j] = maV[j] + atrV * NumATRs; lowerLine[j] = maV[j] - atrV * NumATRs; } if printOK then print(filename,"3=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]); } } Else If HH[0] + renkoSize <= C Then { gubun = 1; renkoCnt = Int(Round((C-HH[0])/renkoSize,9)); if renkoCnt > 49 then renkoCnt = 49; For j = 49 DownTo renkoCnt { OO[j] = OO[j-renkoCnt]; HH[j] = HH[j-renkoCnt]; LL[j] = LL[j-renkoCnt]; CC[j] = CC[j-renkoCnt]; TR[j] = TR[j-renkoCnt]; maV[j] = maV[j-renkoCnt]; upperLine[j] = upperLine[j-renkoCnt]; lowerLine[j] = lowerLine[j-renkoCnt]; } For j = renkoCnt-1 DownTo 0 { OO[j] = HH[j+1]; CC[j] = HH[j+1] + renkoSize; HH[j] = CC[j]; LL[j] = OO[j]; TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]); If sum > 0 Then { sum = sum + CC[j] - CC[j+length]; trSum = trSum + TR[j] - TR[j+length]; maV[j] = Sum / length; atrV = trSum / length; upperLine[j] = maV[j] + atrV * NumATRs; lowerLine[j] = maV[j] - atrV * NumATRs; } if printOK then print(filename,"4=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]); } } Else If sTime >= 45500 and stime < 090000 Then { //당일 종가봉에서 For j = 49 DownTo 1 { OO[j] = OO[j-1]; HH[j] = HH[j-1]; LL[j] = LL[j-1]; CC[j] = CC[j-1]; TR[j] = TR[j-1]; maV[j] = maV[j-1]; upperLine[j] = upperLine[j-1]; lowerLine[j] = lowerLine[j-1]; } If LL[1] > C Then { //종가가 이전 봉보다 아래 형성 OO[0] = LL[1]; CC[0] = C; HH[0] = OO[0]; LL[0] = CC[0]; TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]); } Else If HH[1] < C Then { //종가가 이전 봉보다 위에 형성 OO[0] = HH[1]; CC[0] = C; HH[0] = CC[0]; LL[0] = OO[0]; TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]); } Else { //종가가 이전 봉의 중간에 형성 OO[0] = C; CC[0] = C; HH[0] = C; LL[0] = C; TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]); } If sum > 0 Then { sum = sum + CC[0] - CC[length]; trSum = trSum + TR[0] - TR[length]; maV[0] = Sum / length; atrV = trSum / length; upperLine[0] = maV[0] + atrV * NumATRs; lowerLine[0] = maV[0] - atrV * NumATRs; } j = 0; //채널 값을 새로이 계산 if printOK then print(filename,"5=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]); } } if sum == 0 and CC[length] > 0 then { for j = 0 to length - 1 { sum = sum + CC[j]; trsum = trsum + max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]); } } } If OO[0] > 0 Then Plot1(OO[0],"OO",iff(OO[0] > CC[0],black,MAGENTA)); //지표속성 -> 차트표시 -> 채우기 -> OO < CC 면 빨강 추가 If CC[0] > 0 Then Plot2(CC[0],"CC"); // OO > CC 면 파랑 추가 if upperLine[0] > 100 then plot3(upperLine[0],"UpperBand"); if lowerLine[0] > 100 then plot4(lowerLine[0],"LowerBand"); if maV[0] > 100 then plot5(maV[0],"MidLine");
프로필 이미지
러블리
2024-01-21
1330
글번호 175936
지표