커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7991
글번호 230811
답변완료
수식 부탁드립니다.
수식 변환 부탁드립니다. 미리 감사 드립니다.//@version=6indicator("Breakout Boxes [ChartPrime]", overlay = true, max_boxes_count = 500, max_labels_count = 500, calc_bars_count = 5000)type pivot float val int indextype Box box body box sell box buyvar Highs = pivot.new()var Lows = pivot.new()var upperBox = Box.new()var lowerBox = Box.new()// --------------------------------------------------------------------------------------------------------------------}// 📌 𝙐𝙎𝙀𝙍 𝙄𝙉𝙋𝙐𝙏𝙎// --------------------------------------------------------------------------------------------------------------------{pivotLen = input.int(5, "Pivot Detection Length")boxWidth1 = input.int(5, "Upper Box Width", inline = "up")/10, boxUpCol = input.color(#ce1c7b, "", inline = "up")boxWidth2 = input.int(5, "Lower Box Width", inline = "lw")/10, boxDnCol = input.color(#1ed87e, "", inline = "lw")// --------------------------------------------------------------------------------------------------------------------}// 📌 𝙄𝙉𝘿𝙄𝘾𝘼𝙏𝙊𝙍 𝘾𝘼𝙇𝘾𝙐𝙇𝘼𝙏𝙄𝙊𝙉𝙎// --------------------------------------------------------------------------------------------------------------------{ph = ta.pivothigh(pivotLen, pivotLen)pl = ta.pivotlow(pivotLen, pivotLen)aTr = ta.atr(200)atr0 = aTr * 0.2atr1 = aTr * boxWidth1atr2 = aTr * boxWidth2// Upper Box Detectionif not na(ph) if math.abs(Highs.val-ph) < atr0 if upperBox.body.get_right() > bar_index-pivotLen upperBox.buy.set_right(upperBox.body.get_left()) upperBox.buy.set_border_color(color(na)) upperBox.sell.set_right(upperBox.body.get_left()) upperBox.sell.set_border_color(color(na)) upperBox.body.set_right(upperBox.body.get_left()) upperBox.body.set_border_color(color(na)) upperBox.body := box.new(Highs.index, Highs.val+atr1, bar_index, Highs.val, bgcolor = color(na), border_color = boxUpCol, text_halign = text.align_right, border_width = 2) upperBox.buy := box.new(Highs.index, math.avg(Highs.val+atr1, Highs.val), Highs.index, Highs.val, border_color = boxUpCol, bgcolor = color.new(boxUpCol, 90), text_halign = text.align_left) upperBox.sell := box.new(Highs.index, math.avg(Highs.val+atr1, Highs.val), Highs.index, Highs.val+atr1, border_color = boxUpCol, bgcolor = color.new(boxUpCol, 90), text_halign = text.align_left) Highs.val := ph Highs.index :=bar_index[pivotLen]// Lower Box Detectionif not na(pl) if math.abs(Lows.val-pl) < atr0 if lowerBox.body.get_right() > bar_index-pivotLen lowerBox.buy.set_right(lowerBox.body.get_left()) lowerBox.buy.set_border_color(color(na)) lowerBox.sell.set_right(lowerBox.body.get_left()) lowerBox.sell.set_border_color(color(na)) lowerBox.body.set_right(lowerBox.body.get_left()) lowerBox.body.set_border_color(color(na)) lowerBox.body := box.new(Lows.index, Lows.val, bar_index, Lows.val-atr2, bgcolor = color(na), border_color = boxDnCol, text_halign = text.align_right, border_width = 2) lowerBox.buy := box.new(Lows.index, math.avg(Lows.val-atr2, Lows.val), Lows.index, Lows.val-atr2, border_color = boxDnCol, bgcolor = color.new(boxDnCol, 90), text_halign = text.align_left) lowerBox.sell := box.new(Lows.index, math.avg(Lows.val-atr2, Lows.val), Lows.index, Lows.val, border_color = boxDnCol, bgcolor = color.new(boxDnCol, 90), text_halign = text.align_left) Lows.val := pl Lows.index :=bar_index[pivotLen]// --------------------------------------------------------------------------------------------------------------------}// 📌 𝙑𝙄𝙎𝙐𝘼𝙇𝙄𝙕𝘼𝙏𝙄𝙊𝙉// --------------------------------------------------------------------------------------------------------------------{// Upeer Boxif not na(upperBox.body) Buy = 0. Sell = 0. upperBox.body.set_right(bar_index) for i = 0 to bar_index - (upperBox.body.get_left() - 5) if close[i] > open[i] Buy += volume[i] else Sell += volume[i] tot = Buy + Sell upperBox.body.set_text("Total " + str.tostring(tot, format.volume)) size = int((upperBox.body.get_right() - upperBox.body.get_left())) mid = math.avg(upperBox.body.get_bottom(), upperBox.body.get_top()) upperBox.buy.set_right(upperBox.body.get_left()+int(size*(Buy/tot))) upperBox.buy.set_text("+Volume " + str.tostring(Buy/tot*100, format.percent) ) upperBox.sell.set_right(upperBox.body.get_left()+int(size*(Sell/tot))) upperBox.sell.set_text("-Volume " + str.tostring(Sell/tot*100, format.percent) )// Lower Boxif not na(lowerBox.body) Buy = 0. Sell = 0. lowerBox.body.set_right(bar_index) for i = 0 to bar_index - (lowerBox.body.get_left() - 5) if close[i] > open[i] Buy += volume[i] else Sell += volume[i] tot = Buy + Sell lowerBox.body.set_text("Total " + str.tostring(tot, format.volume)) size = int((lowerBox.body.get_right() - lowerBox.body.get_left())) mid = math.avg(lowerBox.body.get_bottom(), lowerBox.body.get_top()) lowerBox.buy.set_right(lowerBox.body.get_left()+int(size*(Buy/tot))) lowerBox.buy.set_text("+Volume " + str.tostring(Buy/tot*100, format.percent) ) lowerBox.sell.set_right(lowerBox.body.get_left()+int(size*(Sell/tot))) lowerBox.sell.set_text("-Volume " + str.tostring(Sell/tot*100, format.percent) )// Breakout signalsif barstate.isconfirmed if ta.crossover(close, upperBox.body.get_top()) upperBox := Box.new(na, na, na) label.new(bar_index, low-aTr, "⯁\nBreakUp", textcolor = boxUpCol, style = label.style_label_up, color = color.new(boxUpCol, 80)) if ta.crossunder(close, lowerBox.body.get_bottom()) lowerBox := Box.new(na, na, na) label.new(bar_index, high+aTr, "BreakDn\n⯁", textcolor = boxDnCol, style = label.style_label_down, color = color.new(boxDnCol, 80))// --------------------------------------------------------------------------------------------------------------------}
2025-11-20
1023
글번호 228283
답변완료
글번호 228190 부탁드립니다
다시한번 봐주세요
2025-11-20
255
글번호 228282
답변완료
시스템매매 관련 문의합니다..^^*
수고가 많으십니다... 주식 시스템 자동매매을 이용하고 있습니다... 매수는 잘되는데, 매도(익절청산) [SetStopProfittarget(7, PercentStop);]은 시스템에는 매도 표시가 되는데, 실제로 계좌보면 매도가 실행이 안되고 있습니다.. 원인을 찾고 있습니다.. 해결방법이 없는지요... 매수는 시스템 트레이딩설정에 분할매매 설정된 상태이며, 매수는 제가 지정한 변수대로 정확히 잘 매수 되고 있습니다... 부탁드리겠습니다...^^*
2025-11-20
819
글번호 228281
답변완료
문의드립니다
아래수식에서 매수와 매도 동시발생시 진입금지부탁드립니다.늘감사드립니다.input : 기준금액(1000000),단위(50000),단위수량(10);input : short(12),long(26);var : macd2(0,Data2);macd2 = Data2(macd(short,long));if MarketPosition == 0 and data2(CrossUp(macd2,0)) Then Buy("b",OnClose,Def,Floor(Floor(기준금액/c)/단위수량)*단위수량);if MarketPosition == 1 Then{ var1 = C*CurrentContracts; var2 = var1-기준금액; var3 = IntPortion(var2/단위); if var3 > 0 and abs(var3)*단위 > C Then { ExitLong("bx",OnClose,Def,"",floor(Floor((abs(var3)*단위)/C)/단위수량)*단위수량,2); } if Data2(CrossDown(macd2,0)) Then ExitLong("x"); if var3 < 0 and abs(var3)*단위 > C Then { Buy("bb",OnClose,floor(Floor((abs(var3)*단위)/C)/단위수량)*단위수량); } }
2025-11-20
421
글번호 228278
답변완료
시스템함수에 식을 만들려고 합니다.
안녕하세요항상 고생이 많으십니다^^식을 2개 만들려고 합니다.1) 1분봉상 최근 100분동안 최고점과 최저점을 계산해서최저점으로부터 최고점의 상승률2) 분봉상에서 5일선과 10일선의 이격률 차이부탁 드립니다.감사합니다!!
2025-11-20
411
글번호 228277
답변완료
글번호 228177
예스랭귀지는 질문올리면 만 하루 정도면 답을 해주시는데 예스스팟은 18일 질문을 올렸는데 답이 없어서 확인 좀 부탁드립니다. 예스스팟Q&A 글번호 228177 입니다.스팟을 처음 사용하는 거라 비교적 간단한 질문입니다. 부탁드립니다.
2025-11-20
463
글번호 228276
답변완료
진입후 최고가를 찾아주세요.
시스템수식 중 진입후 최고가 기준 청산수식이 아래와 같이 있는데if MarketPosition<>0 Then{ if Highest(c,BarsSinceEntry+1) > EntryPrice *(1+(손절*1)) Then ExitLong("R0청산",AtStop,EntryPrice*(1+0.01));수식중 Highest(c,BarsSinceEntry+1)가 최대봉수 1024 에 걸려 신호가 발생하지 않는 문제가 있네요.진입후 최고가를 다른방법으로 표현해 주시면 감사하겠습니다.
2025-11-20
377
글번호 228269
답변완료
문의 드립니다.
안녕하세요 ~예전에 수식이 안된다고 했는데, 현재는 가능한지 재 확인 요청 드립니다. RSI(5) 70이상일때, 현재가격이 아래의 수식을 돌파하는 종목 검색식 입니다. A=avg(c,2);B=A+AvgIf(c-A,1,0.0)+1.4*Stdevif(c-A,1,0.0);D=Bbandsup(9,2);d1=crossup(D,B);d2=crossdown(D,B);valuewhen(1, d1 or d2,o)감사합니다.
2025-11-20
425
글번호 228268
답변완료
Chandelier Exit 코딩을 부탁드립니다.
//@version=6// Copyright (c) 2019-present, Alex Orekhov (everget)// Chandelier Exit script may be freely distributed under the terms of the GPL-3.0 license.indicator('Chandelier Exit', shorttitle = 'CE', overlay = true)const string calcGroup = 'Calculation'length = input.int(22, title = 'ATR Period', group = calcGroup)mult = input.float(3.0, step = 0.1, title = 'ATR Multiplier', group = calcGroup)useClose = input.bool(true, title = 'Use Close Price for Extremums', group = calcGroup)const string visualGroup = 'Visuals'showLabels = input.bool(true, title = 'Show Buy/Sell Labels', group = visualGroup)highlightState = input.bool(true, title = 'Highlight State', group = visualGroup)const string alertGroup = 'Alerts'awaitBarConfirmation = input.bool(true, title = 'Await Bar Confirmation', group = alertGroup)//---atr = mult * ta.atr(length)longStop = (useClose ? ta.highest(close, length) : ta.highest(length)) - atrlongStopPrev = nz(longStop[1], longStop)longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStopshortStop = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atrshortStopPrev = nz(shortStop[1], shortStop)shortStop := close[1] < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStopvar int dir = 1dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dirconst color textColor = color.whiteconst color longColor = color.greenconst color shortColor = color.redconst color longFillColor = color.new(color.green, 85)const color shortFillColor = color.new(color.red, 85)buySignal = dir == 1 and dir[1] == -1longStopPlot = plot(dir == 1 ? longStop : na, title = 'Long Stop', style = plot.style_linebr, linewidth = 2, color = longColor)plotshape(buySignal ? longStop : na, title = 'Long Stop Start', location = location.absolute, style = shape.circle, size = size.tiny, color = longColor)plotshape(buySignal and showLabels ? longStop : na, title = 'Buy Label', text = 'Buy', location = location.absolute, style = shape.labelup, size = size.tiny, color = longColor, textcolor = textColor)sellSignal = dir == -1 and dir[1] == 1shortStopPlot = plot(dir == 1 ? na : shortStop, title = 'Short Stop', style = plot.style_linebr, linewidth = 2, color = shortColor)plotshape(sellSignal ? shortStop : na, title = 'Short Stop Start', location = location.absolute, style = shape.circle, size = size.tiny, color = shortColor)plotshape(sellSignal and showLabels ? shortStop : na, title = 'Sell Label', text = 'Sell', location = location.absolute, style = shape.labeldown, size = size.tiny, color = shortColor, textcolor = textColor)midPricePlot = plot(ohlc4, title = '', display = display.none, editable = false)fill(midPricePlot, longStopPlot, title = 'Long State Filling', color = (highlightState and dir == 1 ? longFillColor : na))fill(midPricePlot, shortStopPlot, title = 'Short State Filling', color = (highlightState and dir == -1 ? shortFillColor : na))await = awaitBarConfirmation ? barstate.isconfirmed : truealertcondition(dir != dir[1] and await, title = 'CE Direction Change', message = 'Chandelier Exit has changed direction, {{exchange}}:{{ticker}}')alertcondition(buySignal and await, title = 'CE Buy', message = 'Chandelier Exit Buy, {{exchange}}:{{ticker}}')alertcondition(sellSignal and await, title = 'CE Sell', message = 'Chandelier Exit Sell, {{exchange}}:{{ticker}}')
2025-11-20
1401
글번호 228262