커뮤니티
예스랭귀지 Q&A
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1311
글번호 230811
답변완료
부틱드립니다
수고하십니다
아래수식을 예스로 부탁드립니다
//settings
length = input.int(14,minval = 2)
smoType1 = input.string('RMA','Method',options = ['EMA','SMA','RMA','TMA'])
src = input(close,'Source')
arsiCss = input(color_silver,'color',inline = 'rsicss')
autoCss = input(true,'Auto',inline = 'rsicss')
//signal line
smooth = input.int(14,minval = 1,group = 'Signal Line')
smoType2 = input.string('EMA','Method',options = ['EMA','SMA','RMA','TMA'], group = 'Signal Line')
signalCss = input( #ff5d00,'Color',group = 'Signal Line')
//OB/OS Style
obValue = input.FLoat(80,'Overbought',inline = 'ob', group = 'OB/OS Style')
obCss = input( #089981,'', inline = 'ob', group = 'OB/OS Style')
obAteaCss = input( color_new(#089981, 80),'',inline = 'ob', group = 'OB/OS Style')
osValue = input.FLoat(20, 'Oversold ',inline = 'os', group = 'OB/OS Style')
osCss = input( #f23645,'', inline = 'os', group = 'OB/OS Style')
osAreaCss = input( color_new(#f23645, 80),'',inline = 'os', group = 'OB/OS Style')
//Functions
ma(x, len, maType) =>
switch maType
'EMA' => ta.ema(x, len)
'SMA' => ta.sma(x, len)
'RMA' => ta.rma(x, len)
'TMA' => ta.sma(ta.sma(x, len), len)
//Augmented RSI
upper = ta.highest(src,length)
lower = ta.lowest(src,length)
r = upper - lower
d = src - src[1]
diff = upper > upper[1] ? r
: lower < lower[1] ? -r
: d
num = ma(diff, length,smoType1)
den = ma(math.abs(diff),length, smoType1)
arsi = num / den *50 + 50
signal = ma(arsi,smooth,smoType2)
//Plots
plot_rsi = plot(arsi,'Ultimate RSI'
,arsi > obvalue ? obCss
:arsi < osvalue ? osCss
:autoCss ? chart.fg_color : arsiCss)
plot(signal,'signal Line',signalCss)
//Levels
plot_up = plot(obvalue,color = na, editable = false)
plot_avg = plot(50, color = na, editable = false)
plot_dn = plot(osvalue, color = na, editable = false)
//OB-OS
fill(plot_rsi, plot_up, arsi > obvalue ? obAreaCss : na)
fill(plot_dn, plot_rsi, arsi < osvalue ? osAreaCss : na)
//Gradient
fill(plot_rsi, plot_avg, obvalue, 50, obAreaCss, color.new(chart.bg_color, 100))
fill(plot_avg, plot_rsi, 50, osvalue, color.new(chart.bg_color, 100),osAreaCss)
hline(obvalue,'Overbought')
hline(50,'Midline')
hline(osValue, 'Oversold')
//=== Supertrend 추가 ===
Periods = input.int(10, title ="ATR Period")
Multiplier = input.float(3.0, step=0.1,title ="ATR Multiplier")
changeATR = input.bool(true,title="change ATR Calculation Method ?")
atr2 = ta.sma(ta.tr, periods)
atr = changeATR ? ta.atr(Periods) : atr2
super_src = hl2
up = super_src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = super_src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
plot(trend == 1 ? up : na, title ="up trend", style = plot.styie_linebr, 1
plot(trend == -1 ? dn : na, title ="down trend", style = plot.styie_linebr ,1
2025-06-09
308
글번호 191554
답변완료
진입시간 문의
if stime > 084500 and stime <= 151700 and 수식A Then
Buy();
이전까지는 상기와 같은 시간에 수식A 만족시 매수하는 공식으로 매매를 했는데
IM투자증권이 야간거래까지 진행이 되다보니
084500 ~ 익일 053700 까지 수식 A에 맞으면 매수를 하는 형태의 거래를 하고 싶습니다.
알려주시면 감사하겠습니다.
추가적으로 084500 ~ 익일053700까지 거래중 고점 저점은 동일적용하고 싶습니다.
ex) 기존 저점에서 -0.5포 하락시 손절(매수상황시)
ex) 기존 고점에서 +0.5포 상승시 손절(매도상황시)
오늘 장을 보니 야간장 들어서면 바로 야간장 기준으로 고/저 점이 바뀌는것 같아서요..
2025-06-09
272
글번호 191553
답변완료
변환 부탁드립니다
다음수식 종목검색 부탁드립니다
HV=Highestsince(1, date(3) != date, V);
A=Valuewhen(1, HV== V && C > 0, H);
B=Valuewhen(1, HV== V && C > 0, L);
AA=(A-B) * 2 / 4 + B;
A1=eavg(C, 5);
B1=eavg(C, 10);
X=(A1 - B1);
조건=A1 > B1 && X > X(1) && AA >= L && H(1) > H && L(1) < L
2025-06-09
253
글번호 191551
관리자에 의해 예스스팟 QnA로 이동되었습니다
2025-06-10
11
글번호 191544
답변완료
부탁드립니다
예스식으로 바꿀려고 하는데 도움 좀 받을수 있을까요?
AA = if( (h>Btm) and (L!=Btm), 1,if (BB, 1, 0));
HH = if (AA, H, highestsince(1,AA==1, H));
제생각엔 "highestsince(1,AA==1, H)"만 따로 떼서
if AA==1 Then
DD=H;
라고 하고 그자리에 DD를 넣어주고, 앞조건 if 는 iff 로 하면 될까요?
도움 주신 것 미리 감사 드립니다
2025-06-10
265
글번호 191538
답변완료
변환 부탁드립니다.
안녕하세요?
아래 트뷰 지표를 나름 변경해 보았습니다. 예스랭귀지에서 에러는 발생하지 않는데, 화면에 아무것도 안나오네요. 제가 만든 스크립트 무시하더라도 최대한 트뷰와 비슷하게 수정부탁드립니다.
== 변경 ==
Input: left(14), right(14), areaOpt(0);
Input: showTop(True), showBtm(True);
Var: ph(false), pl(false);
Var: ph_top(0), ph_btm(0), ph_vol(0);
Var: pl_top(0), pl_btm(0), pl_vol(0);
Var: i(0);
Var: ph_boxID(0), pl_boxID(0), ph_tlID(0), pl_tlID(0), ph_txtID(0), pl_txtID(0);
ph = swinghigh(1, High, left, right, 0) != -1;
pl = swinglow(1, Low, left, right, 0) != -1;
If ph == True and showTop == True then {
ph_top = High[right];
If areaOpt == 0 then
ph_btm = Max(Close[right], Open[right]);
else
ph_btm = Low[right];
// 거래량 누적(박스범위 내)
ph_vol = 0;
For i = right To left + right - 1 {
If (Low[i] < ph_top and High[i] > ph_btm) then
ph_vol = ph_vol + Volume[i];
}
// 기존 오브젝트 삭제
If ph_boxID != 0 then Box_Delete(ph_boxID);
If ph_tlID != 0 then TL_Delete(ph_tlID);
If ph_txtID != 0 then Text_Delete(ph_txtID);
ph_boxID = Box_New(
sDate[left + right - 1], sTime[left + right - 1], ph_top,
sDate[right], sTime[right], ph_btm
);
Box_SetColor(ph_boxID, rgb(246,79,8));
Box_SetFill(ph_boxID, True, 120, True);
// 수평선(피벗 구간 전체)
ph_tlID = TL_New(sDate[left + right - 1], sTime[left + right - 1], ph_top, sDate[right], sTime[right], ph_top);
TL_SetColor(ph_tlID, rgb(246,79,8));
TL_SetSize(ph_tlID, 2);
// 거래량 라벨(박스 좌상단에 표시)
ph_txtID = Text_New(sDate[left + right - 1], sTime[left + right - 1], ph_top, "V:" + NumToStr(ph_vol, 0));
Text_SetStyle(ph_txtID, 1, rgb(246,79,8));
}
If pl == True and showBtm == True then {
pl_top = Iff(areaOpt == 0, Min(Close[right], Open[right]), High[right]);
pl_btm = Low[right];
pl_vol = 0;
For i = right To left + right - 1 {
If (Low[i] < pl_top and High[i] > pl_btm) then
pl_vol = pl_vol + Volume[i];
}
If pl_boxID != 0 then Box_Delete(pl_boxID);
If pl_tlID != 0 then TL_Delete(pl_tlID);
If pl_txtID != 0 then Text_Delete(pl_txtID);
pl_boxID = Box_New(
sDate[left + right - 1], sTime[left + right - 1], pl_top,
sDate[right], sTime[right], pl_btm
);
Box_SetColor(pl_boxID, rgb(10,139,109));
Box_SetFill(pl_boxID, True, 120, True);
pl_tlID = TL_New(sDate[left + right - 1], sTime[left + right - 1], pl_btm, sDate[right], sTime[right], pl_btm);
TL_SetColor(pl_tlID, rgb(10,139,109));
TL_SetSize(pl_tlID, 2);
pl_txtID = Text_New(sDate[left + right - 1], sTime[left + right - 1], pl_btm, "V:" + NumToStr(pl_vol, 0));
Text_SetStyle(pl_txtID, 1, rgb(10,139,109));
}
== 트뷰 ==
//@version=5
indicator("예시"
, overlay = true
, max_lines_count = 500
, max_labels_count = 500
, max_boxes_count = 500)
//------------------------------------------------------------------------------
//Settings
//-----------------------------------------------------------------------------{
length = input(14, 'Period')
area = input.string('Wick only', 'Swing Range', options = ['Wick only', 'Full Bar'])
//Style
showTop = input(true, '저항', inline = 'top', group = 'Style')
topCss = input(#f64f08, '' , inline = 'top', group = 'Style')
topAreaCss = input(#ff52525c, 'Area', inline = 'top', group = 'Style')
showBtm = input(true, '지지', inline = 'btm', group = 'Style')
btmCss = input(#0a8b6d, '' , inline = 'btm', group = 'Style')
btmAreaCss = input(#00897b53, 'Area', inline = 'btm', group = 'Style')
labelSize = input.string('Tiny', 'Labels Size', options = ['Tiny', 'Small', 'Normal'], group = 'Style')
//-----------------------------------------------------------------------------}
//Functions
//-----------------------------------------------------------------------------{
n = bar_index
get_counts(condition, top, btm)=>
var count = 0
var vol = 0.
if condition
count := 0
vol := 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 = count
if ta.crossover(target, 0)
lbl := label.new(x, y, str.tostring(vol, format.volume)
, style = lbl_style
, size = label_size
, color = #00000000
, textcolor = css)
if target > 0
label.set_text(lbl, str.tostring(vol, format.volume))
set_level(condition, crossed, value, count, vol, css)=>
var line lvl = na
target = count
if condition
if target[1] < 0[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 > 0
line.set_color(lvl, css)
set_zone(condition, x, top, btm, count, vol, css)=>
var box bx = na
target = count
if ta.crossover(target, 0)
bx := box.new(x, top, x + count, btm
, border_color = na
, bgcolor = css)
if target > 0
box.set_right(bx, x + count)
//-----------------------------------------------------------------------------}
//Global variables
//-----------------------------------------------------------------------------{
//Pivot high
var float ph_top = na
var float ph_btm = na
var bool ph_crossed = na
var ph_x1 = 0
var box ph_bx = box.new(na,na,na,na
, bgcolor = color.new(topAreaCss, 80)
, border_color = na)
//Pivot low
var float pl_top = na
var float pl_btm = na
var bool pl_crossed = na
var pl_x1 = 0
var 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 level
if ph and showTop
ph_top := high[length]
ph_btm := switch area
'Wick only' => math.max(close[length], open[length])
'Full Bar' => 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 level
if pl and showBtm
pl_top := switch area
'Wick only' => math.min(close[length], open[length])
'Full Bar' => 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)
//-----------------------------------------------------------------------------}
2025-06-09
383
글번호 191537
와우리 님에 의해서 삭제되었습니다.
2025-06-10
61
글번호 191535
답변완료
분봉에서 오늘 시초가 돌파 질문임미다 건강하세요
오늘 장이 시작되고 120분봉에서 현재가가 시초가 밑으로 한번은 0.4 % 이상 내려 왔다가
오늘 시초가를 돌파하는
종목 검색식 부탁드려요 아무리 공부해도 꼭 막히네요
2025-06-09
210
글번호 191523
우유 님에 의해서 삭제되었습니다.
2025-06-09
18
글번호 191515