커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7962
글번호 230811
답변완료
예스종목검색식 변환요청
항상 감사드립니다.다음 신호조건식을 예스 종목검색식으로 변환부탁드립니다.수고하십시오..A=(L(11) + L(10)+L(9) + L(8) + L(7) + L(6) + L(5)+L(4) + L(3) + L(2) +L(1)+ L+L(20)+L(40)+L(60)+L(100)+L(120)+L(150)+L(200)+L+L)/21;A1=(L(11) + L(10)+L(9) + L(8) + L(7) + L(6) + L(5)+L(4) + L(3) + L(2) +L(1)+ L+L(40)+L(60)+L(100)+L(120)+L(150)+L(200)+L+L)/20;A2=(L(11) + L(10)+L(9) + L(8) + L(7) + L(6) + L(5)+L(4) + L(3) + L(2) +L(1)+ L+L(60)+L(100)+L(120)+L(150)+L(200)+L+L)/19;A3=(L(11) + L(10)+L(9) + L(8) + L(7) + L(6) + L(5)+L(4) + L(3) + L(2) +L(1)+ L+L(100)+L(120)+L(150)+L(200)+L+L)/18;B=max(A, A1, A2, A3);D=min(A, A1, A2, A3);E=(B+D)/2;Q=E*0.88;Z=L<=Q;M=floor(date/100)%100;B1=Lowestsince(1, M!=M(1), L);Z1=L==B1;Z && Z1
2026-08-22
499
글번호 233358
답변완료
요청 드립니다.
안녕하세요항상 빠른 답변 감사 드립니다.아래 식을 지표식, 종목검색식 변환 요청 드립니다.혹 분봉 및 일봉 적용시 설정 값 변경을 해줘야 한다면 자세한 안내 부탁드립니다.그럼 좋은 하루 되세요// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/// © LuxAlgo//@version=5indicator("Liquidity Swings [LuxAlgo]" , overlay = true , max_lines_count = 500 , max_labels_count = 500 , max_boxes_count = 500)//------------------------------------------------------------------------------//Settings//-----------------------------------------------------------------------------{length = input(14, 'Pivot Lookback')area = input.string('Wick Extremity', 'Swing Area', options = ['Wick Extremity', 'Full Range'])intraPrecision = input(false, 'Intrabar Precision', inline = 'intrabar')intrabarTf = input.timeframe('1', '' , inline = 'intrabar')filterOptions = input.string('Count', 'Filter Areas By', options = ['Count', 'Volume'], inline = 'filter')filterValue = input.float(0, '' , inline = 'filter')//StyleshowTop = input(true, 'Swing High' , inline = 'top', group = 'Style')topCss = input(color.red, '' , inline = 'top', group = 'Style')topAreaCss = input(color.new(color.red, 50), 'Area', inline = 'top', group = 'Style')showBtm = input(true, 'Swing Low' , inline = 'btm', group = 'Style')btmCss = input(color.teal, '' , inline = 'btm', group = 'Style')btmAreaCss = input(color.new(color.teal, 50), 'Area', inline = 'btm', group = 'Style')labelSize = input.string('Tiny', 'Labels Size', options = ['Tiny', 'Small', 'Normal'], group = 'Style')//-----------------------------------------------------------------------------}//Functions//-----------------------------------------------------------------------------{n = bar_indexget_data()=> [high, low, volume][h, l, v] = request.security_lower_tf(syminfo.tickerid, intrabarTf, get_data())get_counts(condition, top, btm)=> var count = 0 var vol = 0. if condition count := 0 vol := 0. else if intraPrecision if n > length if array.size(v[length]) > 0 for [index, element] in v[length] vol += array.get(l[length], index) < top and array.get(h[length], index) > btm ? element : 0 else vol += low[length] < top and high[length] > btm ? volume[length] : 0 count += low[length] < top and high[length] > btm ? 1 : 0 [count, vol]set_label(count, vol, x, y, css, lbl_style)=> var label lbl = na var label_size = switch labelSize 'Tiny' => size.tiny 'Small' => size.small 'Normal' => size.normal target = switch filterOptions 'Count' => count 'Volume' => vol if ta.crossover(target, filterValue) lbl := label.new(x, y, str.tostring(vol, format.volume) , style = lbl_style , size = label_size , color = #00000000 , textcolor = css) if target > filterValue label.set_text(lbl, str.tostring(vol, format.volume))set_level(condition, crossed, value, count, vol, css)=> var line lvl = na target = switch filterOptions 'Count' => count 'Volume' => vol if condition if target[1] < filterValue[1] line.delete(lvl[1]) else if not crossed[1] line.set_x2(lvl, n - length) lvl := line.new(n - length, value, n, value , color = na) if not crossed[1] line.set_x2(lvl, n+3) if crossed and not crossed[1] line.set_x2(lvl, n) line.set_style(lvl, line.style_dashed) if target > filterValue line.set_color(lvl, css)set_zone(condition, x, top, btm, count, vol, css)=> var box bx = na target = switch filterOptions 'Count' => count 'Volume' => vol if ta.crossover(target, filterValue) bx := box.new(x, top, x + count, btm , border_color = na , bgcolor = css) if target > filterValue box.set_right(bx, x + count)//-----------------------------------------------------------------------------}//Global variables//-----------------------------------------------------------------------------{//Pivot highvar float ph_top = navar float ph_btm = navar bool ph_crossed = navar ph_x1 = 0var box ph_bx = box.new(na,na,na,na , bgcolor = color.new(topAreaCss, 80) , border_color = na)//Pivot lowvar float pl_top = navar float pl_btm = navar bool pl_crossed = navar pl_x1 = 0var box pl_bx = box.new(na,na,na,na , bgcolor = color.new(btmAreaCss, 80) , border_color = na)//-----------------------------------------------------------------------------}//Display pivot high levels/blocks//-----------------------------------------------------------------------------{ph = ta.pivothigh(length, length)//Get ph counts[ph_count, ph_vol] = get_counts(ph, ph_top, ph_btm)//Set ph area and levelif ph and showTop ph_top := high[length] ph_btm := switch area 'Wick Extremity' => math.max(close[length], open[length]) 'Full Range' => low[length] ph_x1 := n - length ph_crossed := false box.set_lefttop(ph_bx, ph_x1, ph_top) box.set_rightbottom(ph_bx, ph_x1, ph_btm)else ph_crossed := close > ph_top ? true : ph_crossed if ph_crossed box.set_right(ph_bx, ph_x1) else box.set_right(ph_bx, n+3)if showTop //Set ph zone set_zone(ph, ph_x1, ph_top, ph_btm, ph_count, ph_vol, topAreaCss) //Set ph level set_level(ph, ph_crossed, ph_top, ph_count, ph_vol, topCss) //Set ph label set_label(ph_count, ph_vol, ph_x1, ph_top, topCss, label.style_label_down)//-----------------------------------------------------------------------------}//Display pivot low levels/blocks//-----------------------------------------------------------------------------{pl = ta.pivotlow(length, length)//Get pl counts[pl_count, pl_vol] = get_counts(pl, pl_top, pl_btm)//Set pl area and levelif pl and showBtm pl_top := switch area 'Wick Extremity' => math.min(close[length], open[length]) 'Full Range' => high[length] pl_btm := low[length] pl_x1 := n - length pl_crossed := false box.set_lefttop(pl_bx, pl_x1, pl_top) box.set_rightbottom(pl_bx, pl_x1, pl_btm)else pl_crossed := close < pl_btm ? true : pl_crossed if pl_crossed box.set_right(pl_bx, pl_x1) else box.set_right(pl_bx, n+3)if showBtm //Set pl zone set_zone(pl, pl_x1, pl_top, pl_btm, pl_count, pl_vol, btmAreaCss) //Set pl level set_level(pl, pl_crossed, pl_btm, pl_count, pl_vol, btmCss) //Set pl labels set_label(pl_count, pl_vol, pl_x1, pl_btm, btmCss, label.style_label_up)//-----------------------------------------------------------------------------}
2026-08-21
1284
글번호 233357
답변완료
종목검색이 잘 되지 않아서 문의
[3202] 파워종목검색에서 일봉 기준봉 0으로 사용하고 있습니다.키움 조건식은AA=TEMA(C,60);BB=(Highest(H,26)+Lowest(L,26))/2;CrossUp(BB,AA);입니다.예스트레이더에서는 키움 TEMA를AA=EMA(EMA(EMA(C,60),60),60);로 변환하고 BB는 동일하게 사용했습니다.현재봉 신규 발생만 검색하기 위해Condition1=BB>AA;if Condition1==true and Condition1[1]==False Then Find(1);로 작성하고 일봉 기준봉 0으로 검색했습니다.그런데 탑코미디어는 2026년 8월 3일경 이미 해당 돌파가 발생한 것으로 확인되는데, 2026년 8월 21일 기준봉 0 검색결과에도 나타납니다.별도로 BB>AA와 BB[1]<=AA[1]을 각각 검색했을 때는 탑코미디어가 두 조건 모두 검색되지 않습니다.동일 종목에서 개별 조건은 False인데 이를 신규 발생 조건으로 구성한 검색에서는 종목이 검색되는 이유와, 당일(0봉) 신규 돌파 종목만 검색하는 정확한 파워종목검색 작성 방법을 확인 부탁드립니다.
2026-08-21
892
글번호 233352
답변완료
예스종목검색식 변환 요청
죄송하고 감사합니다.다음 조건식 예스 종목검색식으로 변환 부탁드립니다.분기 = (floor(date/100)%100)%3;A=Valuewhen(1, 분기==1 && 분기(1)==0, H);crossup(C, A)제가 한 번 해봤더니 엉뚱한 것들만 검색되네요..=====================var : 분기(0),A(Nan);분기 = (floor(date/100)%100)%3;if 분기==1 && 분기[1]==0 ThenA = H;if CrossUp(C, H) ThenFind(1);==================
2026-08-21
272
글번호 233350
답변완료
수고하십니다. 키움수식 파워종목 검색식 부탁드립니다.
A=(highest(high,9)+lowest(low,9))/2;B=(highest(high,26)+lowest(low,26))/2;B1=(avg(C*V,10)-avg(C*V,20))/avg(C*V,10)*100;B2=CMO(9);(CROSSUP(C,A) or CROSSUP(C,B) or CROSSUP(A,B)) AND B1>B1(1) AND (CROSSUP(B2,-50) OR CROSSUP(B2,0))감사합니다
2026-08-21
399
글번호 233342
답변완료
예스종목검색식 변환 요청
항상 죄송하고 감사합니다.다음 조건식을 예스 종목검색식으로 변환 부탁드립니다.A=macd(12, 26);b=EAVG(a, 3);Y=VALUEWHEN(1, a>B, L);조건=C-Y;D=valuewhen(1, crossdown(조건, 0), L);A=macd(12, 26);b=EAVG(a, 3);Y1=VALUEWHEN(1, a<B, L);조건1=C-Y1;D1=valuewhen(1, crossup(조건1,0),L);E=valuewhen(1, L>D1, L, 0);조건2=D>E && C>D;K=valuewhen(1, 조건2, L);조건3=crossup(C, K) && C>K;cnt=countsince(조건3, ma(C,5) > ma(C, 6) && ma(C, 5)>K)==1;cnt && !cnt(1)
2026-08-21
330
글번호 233341
답변완료
예스종목검색식 변환 요청
항상 빠른 답변 감사드립니다.다음 조건식을 예스 종목검색식으로 변환 부탁드립니다.수고하십시오...A=macd(12, 26);b=EAVG(a, 3);Y=VALUEWHEN(1, a>B, L);조건=C-Y;D=valuewhen(1, crossdown(조건, 0), L);A=macd(12, 26);b=EAVG(a, 3);Y1=VALUEWHEN(1, a<B, L);조건1=C-Y1;D1=valuewhen(1, crossup(조건1,0),L);E=valuewhen(1, L>D1, L, 0);조건2=D>E && C>D;K=valuewhen(1, 조건2, L);crossup(C, K)
2026-08-21
274
글번호 233340
답변완료
수식 부탁드립니다.
옵션 가격을 불러오는데 a컴퓨터는 잘불러옴 그런데 b 컴퓨터는 종목을 찾을수가 없다고 함 객체 속성도 맞추었는데 ,,
2026-08-21
149
글번호 233339
답변완료
시스템 포트폴리오 분석 해석
안녕하세요.전략식을 만들고, 시스템 포트폴리오 분석을 통하여 전략식을 분석하려고 하는데, cagr이랑 mdd를 어떻게 구하는지 모르겠어서 질문 드립니다.제가 다른 프로그램을 사용하다가 예스트레이딩으로 넘어와서 제가 못 찾은 건지, 다른 분들은 어떻게 하시는 건지 궁금합니다.연평균 손익과, 최대손실폭이 cagr이랑 mdd인거 같은데 다른 곳에서는 %로 나타났었는데, 여기서는 다르게 표현이 되서 혹시 %로 보려면 어떻게 볼 수 있는지 궁금합니다.해석하기가 힘듭니당.. ㅠ
2026-08-20
314
글번호 233338