커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
5517
글번호 230811
답변완료
프로그램문의에 대한 재문의
if MarketPosition==1 and NextBarSdate ! = sDate and NextBarOpen<=C-0.5 Then Sell();
if MarketPosition== -1 and NextBarSdate ! = sDate and NextBarOpen >= C + 0.5 Then Buy();
if MarketPosition== 1 and dayOpen > DayClose(1) and crossDown(C, DayOpen-0.5) Then Sell();
if MarketPosition == -1 and DayOpen < DayClose(1) and CrossUp (C,DayOpen+0.5) Then Buy();
*위의 프로그램은 어제 작성해주신 프로그램입니다. 이를 Yeslanguage 편집기에 넣고 실행을 했는데 다음과 같은 오류메시지가 떴네요.
줄수 열수 설명
1 38 문법에러, 잘못된 토큰 "!", 올수있는 것: Then'
2 40 문법에러, 잘못된 토큰 "!", 올수있는 것: Then'
이것을 수정부탁합니다. 그리고 이 프로그램을 사용하면 당일 장중에 선물가격이 시가를 상승돌파하거나 하락돌파하는 경우에 계속적으로 매수 및 매도를 반복적으로 하는지를 여쭙고 싶습니다. 항상 감사합니다.
2023-06-30
1611
글번호 170238
답변완료
함수요청
안녕하세요?
아래글번호 82692번 재질문입니다.
작성주신 스크립트를 적용하면 당일 진입에 당일 청산이 되지 않고 포지션이 오버나이트 됩니다.
검수 부탁드립니다.
*전략
나스닥 선물 1분봉 거래를 하고자 합니다.
[써머타임 적용시]
당일 시초가가 일봉상 최근 n개봉 고점 돌파시 익봉시가 매수
당일 시초가가 일봉상 최근 n개봉 저점 이탈시 익봉시가 매도
2시 30분 청산
[써머타임 해지시]
당일 시초가가 일봉상 최근 n개봉 고점 돌파시 익봉시가 매수
당일 시초가가 일봉상 최근 n개봉 저점 이탈시 익봉시가 매도
3시 30분 청산
하루 1번 진입과 당일 청산입니다.
2023-06-30
1409
글번호 170237
답변완료
분봉에서 전주 주봉의 ATR
분봉에서 전주 주봉의 ATR값을 표현해주는 사용자 함수 부탁드립니다!
해당 사용자 함수로 지표 만들어서 쓰고싶습니다!
2023-06-30
1526
글번호 170236
답변완료
어떤 식으로 수식을 짜면 좋을까요?
[조건 1] 오전 9시 15분 이후에
[조건 2] A, B, C 3개 종목의 현재 주가가 각각 매수 원하는 가격 아래에 있는지 확인하고
[조건 3] 각각 매수 원하는 가격 돌파 시 자동으로 매수 주문 전송
2023-06-30
1272
글번호 170229
답변완료
수식문의드립니다.
아래 수식 부탁 드립니다.
12분봉 기준 macd>0 일 경우 매수진입 후 3분봉 기준 20이평선 하회 시 청산 (3분봉 기준 20이평선 다시 복귀시 재매수 후 훼손시 청산의 프로세스를 12분봉 기준 macd>0인 상태에서 반복)
12분봉 기준 macd<0일 경우 매도진입 후 3분봉 기준 20이평선 상회 시 청산 (3분봉 기준 20이평선 다시 복귀시 재매도 후 훼손시 청산의 프로세스를 12분봉 기준 macd<0인 상태에서 반복)
2023-06-30
1435
글번호 170226
답변완료
macd기준선
macd기준선0을 위에서 종가가 60일이평위에 매수 매수하기전에 들어가있는 포지션이 있으면 정리후 매수
macd기준선0을 아래에서 종가가 60일아래에 있을때 매도하지전에 들어가있는 포지션이 있으면 정리후 매도
2023-06-30
1504
글번호 170222
답변완료
macd기준선
macd기준선0을 위에서 종가가 60일이평위에 매수 매수하기전에 들어가있는 포지션이 있으면 정리후 매수
macd기준선0을 아래에서 종가가 60일아래에 있을때 매도하지전에 들어가있는 포지션이 있으면 정리후 매도
2023-06-30
1070
글번호 170221
답변완료
식 부탁드립니다.
안녕하세요
아래 식에서
매수가격, 익절가격, 손절가격에
각각
매수량, 익절수량, 손절매도수량을
설정할수 있게 부탁드립니다.
---------------
81618 문의에 대한 답변입니다
안녕하세요
예스스탁입니다.
외부변수가 선언만 되고 수식에서 사용이 되어 있지 않았습니다.
수정한 식입니다.
input : 날짜(20230302),매수가격(1000),익절가격(1200),손절가격(800);
if NextBarSdate >= 날짜 Then
{
      if NextBarSdate != sDate Then
      {
            if MarketPosition == 0 and TotalTrades == 0 and NextBarOpen <= 매수가격 Then
                  Buy("b1",AtStop,매수가격);
      }
      Else
      {
            if MarketPosition == 0 and TotalTrades == 0 and DayHigh < 매수가격 Then
                  Buy("b",AtStop,매수가격);
      }
      
      
      if MarketPosition == 1 Then
      {
            ExitLong("bp",AtLimit,익절가격);
            ExitLong("bl",AtStop,손절가격);
      }
}
즐거운 하루되세요
2023-06-30
1041
글번호 170220
답변완료
문의 드립니다.
적용가능한 수식으로 변형 부탁 드립니다.
1.=======================================================================
indicator('HIGH AND LOW Optimized Trend Tracker', 'HL OTT', overlay=true)
length = input.int(2, 'OTT Period', minval=1)
percent = input.float(0.6, 'OTT Optimization Coeff', step=0.1, minval=0)
hllength = input.int(10, 'Highest and Lowest Length', minval=1)
src = ta.highest(high, hllength)
srcl = ta.lowest(low, hllength)
highlighting = input(title='Highlighter On/Off ?', defval=true)
mav = input.string(title='Moving Average Type', defval='VAR', options=['SMA', 'EMA', 'WMA', 'DEMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF', 'HULL'])
Var_Func(src, length) =>
valpha = 2 / (length + 1)
vud1 = src > src[1] ? src - src[1] : 0
vdd1 = src < src[1] ? src[1] - src : 0
vUD = math.sum(vud1, 9)
vDD = math.sum(vdd1, 9)
vCMO = nz((vUD - vDD) / (vUD + vDD))
VAR = 0.0
VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1])
VAR
VAR = Var_Func(src, length)
DEMA = 2 * ta.ema(src, length) - ta.ema(ta.ema(src, length), length)
Wwma_Func(src, length) =>
wwalpha = 1 / length
WWMA = 0.0
WWMA := wwalpha * src + (1 - wwalpha) * nz(WWMA[1])
WWMA
WWMA = Wwma_Func(src, length)
Zlema_Func(src, length) =>
zxLag = length / 2 == math.round(length / 2) ? length / 2 : (length - 1) / 2
zxEMAData = src + src - src[zxLag]
ZLEMA = ta.ema(zxEMAData, length)
ZLEMA
ZLEMA = Zlema_Func(src, length)
Tsf_Func(src, length) =>
lrc = ta.linreg(src, length, 0)
lrc1 = ta.linreg(src, length, 1)
lrs = lrc - lrc1
TSF = ta.linreg(src, length, 0) + lrs
TSF
TSF = Tsf_Func(src, length)
HMA = ta.wma(2 * ta.wma(src, length / 2) - ta.wma(src, length), math.round(math.sqrt(length)))
Var_Funcl(srcl, length) =>
valphal = 2 / (length + 1)
vud1l = srcl > srcl[1] ? srcl - srcl[1] : 0
vdd1l = srcl < srcl[1] ? srcl[1] - srcl : 0
vUDl = math.sum(vud1l, 9)
vDDl = math.sum(vdd1l, 9)
vCMOl = nz((vUDl - vDDl) / (vUDl + vDDl))
VARl = 0.0
VARl := nz(valphal * math.abs(vCMOl) * srcl) + (1 - valphal * math.abs(vCMOl)) * nz(VARl[1])
VARl
VARl = Var_Funcl(srcl, length)
DEMAl = 2 * ta.ema(srcl, length) - ta.ema(ta.ema(srcl, length), length)
Wwma_Funcl(srcl, length) =>
wwalphal = 1 / length
WWMAl = 0.0
WWMAl := wwalphal * srcl + (1 - wwalphal) * nz(WWMAl[1])
WWMAl
WWMAl = Wwma_Funcl(srcl, length)
Zlema_Funcl(srcl, length) =>
zxLagl = length / 2 == math.round(length / 2) ? length / 2 : (length - 1) / 2
zxEMADatal = srcl + srcl - srcl[zxLagl]
ZLEMAl = ta.ema(zxEMADatal, length)
ZLEMAl
ZLEMAl = Zlema_Funcl(srcl, length)
Tsf_Funcl(srcl, length) =>
lrcl = ta.linreg(srcl, length, 0)
lrc1l = ta.linreg(srcl, length, 1)
lrsl = lrcl - lrc1l
TSFl = ta.linreg(srcl, length, 0) + lrsl
TSFl
TSFl = Tsf_Funcl(srcl, length)
HMAl = ta.wma(2 * ta.wma(srcl, length / 2) - ta.wma(srcl, length), math.round(math.sqrt(length)))
getMA(src, length) =>
ma = 0.0
if mav == 'SMA'
ma := ta.sma(src, length)
ma
if mav == 'EMA'
ma := ta.ema(src, length)
ma
if mav == 'WMA'
ma := ta.wma(src, length)
ma
if mav == 'DEMA'
ma := DEMA
ma
if mav == 'TMA'
ma := ta.sma(ta.sma(src, math.ceil(length / 2)), math.floor(length / 2) + 1)
ma
if mav == 'VAR'
ma := VAR
ma
if mav == 'WWMA'
ma := WWMA
ma
if mav == 'ZLEMA'
ma := ZLEMA
ma
if mav == 'TSF'
ma := TSF
ma
if mav == 'HULL'
ma := HMA
ma
ma
getMAl(srcl, length) =>
mal = 0.0
if mav == 'SMA'
mal := ta.sma(srcl, length)
mal
if mav == 'EMA'
mal := ta.ema(srcl, length)
mal
if mav == 'WMA'
mal := ta.wma(srcl, length)
mal
if mav == 'DEMA'
mal := DEMAl
mal
if mav == 'TMA'
mal := ta.sma(ta.sma(srcl, math.ceil(length / 2)), math.floor(length / 2) + 1)
mal
if mav == 'VAR'
mal := VARl
mal
if mav == 'WWMA'
mal := WWMAl
mal
if mav == 'ZLEMA'
mal := ZLEMAl
mal
if mav == 'TSF'
mal := TSFl
mal
if mav == 'HULL'
mal := HMAl
mal
mal
MAvg = getMA(src, length)
fark = MAvg * percent * 0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir == 1 ? longStop : shortStop
HOTT = MAvg > MT ? MT * (200 + percent) / 200 : MT * (200 - percent) / 200
HOTTC = color.blue
MAvgl = getMAl(srcl, length)
farkl = MAvgl * percent * 0.01
longStopl = MAvgl - farkl
longStopPrevl = nz(longStopl[1], longStopl)
longStopl := MAvgl > longStopPrevl ? math.max(longStopl, longStopPrevl) : longStopl
shortStopl = MAvgl + farkl
shortStopPrevl = nz(shortStopl[1], shortStopl)
shortStopl := MAvgl < shortStopPrevl ? math.min(shortStopl, shortStopPrevl) : shortStopl
dirl = 1
dirl := nz(dirl[1], dirl)
dirl := dirl == -1 and MAvgl > shortStopPrevl ? 1 : dirl == 1 and MAvgl < longStopPrevl ? -1 : dirl
MTl = dirl == 1 ? longStopl : shortStopl
LOTT = MAvgl > MTl ? MTl * (200 + percent) / 200 : MTl * (200 - percent) / 200
LOTTC = color.red
HOTTLine = plot(nz(HOTT[2]), title='HOTT', color=color.new(HOTTC, 0), linewidth=2, style=plot.style_line)
LOTTLine = plot(nz(LOTT[2]), title='LOTT', color=color.new(LOTTC, 0), linewidth=2, style=plot.style_line)
FillColor = highlighting ? color.new(#9915FF, 80) : na
fill(HOTTLine, LOTTLine, title='Highligter', color=FillColor)
color1 = close > HOTT[2] ? #00FFFF : close < LOTT[2] ? #FF00FF : na
barcolor(color1)
alertcondition(ta.crossover(close, HOTT[2]), title='Price Crossover Alarm', message='PRICE OVER HOTT - BUY SIGNAL!')
alertcondition(ta.crossunder(close, LOTT[2]), title='Price Crossunder Alarm', message='PRICE UNDER LOTT - SELL SIGNAL!')
2.=======================================================================
fHV(_src, _len, _avg) =>
r = math.log(_src / nz(_src[1], _src))
rAvg = ta.sma(r, _len)
hv = math.sqrt(math.sum(math.pow(r - rAvg, 2), _len) / (_len - 1)) * math.sqrt(_avg)
hv
// HVP inspired by @balipour, implimented @cheatcountry
fHVP(_hv, _avg) =>
count = 0.
for i = 0 to _avg - 1 by 1
count += (nz(_hv[i]) < _hv ? 1 : 0)
count
hvp = count / _avg * 100
hvp
indicator(title='Historical Volatility Percentile: Price and Volume', shorttitle='HVVP', precision=2)
src = input(close, title='Source')
len = input(22, title='Length')
avg = input(88, title='Lookback Length')
smalen = input(22, title='Average Length')
vPR = input(5, title='Percent Rank Limit')
bc = input(true, title='Include Source')
vc = input(true, title='Include Volume')
pc = input(true, title='Include Percent Rank')
sc = input(true, title='Include SMA')
//calculate for source term
hv = fHV(src, len, avg)
hvp = bc ? fHVP(hv, avg) : 0
//calculate for the volume term
hvv = fHV(math.log10(volume), len, avg)
hvvp = vc ? fHVP(hvv, avg) : 0
//combine both volitility measurements, normalize back to 100
VV = bc and vc ? (hvp + hvvp) / 2 : hvp + hvvp
hc = VV > 90 ? color.maroon : VV > 79 ? color.orange : VV >= 71 ? color.yellow : VV >= 50 ? color.green : VV <= 30 ? color.gray : color.blue
plot(VV, style=plot.style_columns, color=hc, title = "Histogram")
//Percent Rank and ploting
prc = bc ? ta.percentrank(hvp, avg) : na
prv = vc ? ta.percentrank(hvvp, avg) : na
pvv_check = prv > 100 - vPR and prc > 100 - vPR and bc and vc
pvv_check_2 = prv < vPR and prc < vPR and bc and vc
//ploting the down arrows
//plotshape(prc > 100 - vPR and not pvv_check and bc and pc ? VV : na, location=location.absolute, style=shape.triangledown, color=color.new(color.yellow, 30), size=size.tiny, offset=0)
plotshape(prv > 100 - vPR and not pvv_check and vc and pc ? VV : na, location=location.absolute, style=shape.triangledown, color=color.new(color.yellow, 30), size=size.tiny, offset=0, title="DWN ARW Yellow")
plotshape(pvv_check and pc ? VV : na, location=location.absolute, style=shape.triangledown, color=color.new(color.red, 30), size=size.tiny, offset=0, title="DWN ARW Red")
//plotting the up arrows
//plotshape(prc < vPR and not pvv_check_2 and bc and pc ? 0 : na, location=location.absolute, style=shape.triangleup, color=color.new(color.yellow, 30), size=size.tiny, offset=0)
plotshape(prv < vPR and not pvv_check_2 and vc and pc ? 0 : na, location=location.absolute, style=shape.triangleup, color=color.new(color.yellow, 30), size=size.tiny, offset=0, title="UP ARW Yellow")
plotshape(pvv_check_2 and pc ? 0 : na, location=location.absolute, style=shape.triangleup, color=color.new(color.red, 30), size=size.tiny, offset=0, title="UP ARW Red")
//SMAs for price and volume
SVV = bc and vc ? (hvp + hvvp) / 2 : hvp + hvvp
plot(sc ? ta.sma(SVV, smalen) : na, color=color.new(color.blue, 0), linewidth=2, title="MA Line")
3.=======================================================================
curtaLength = input(title="Curta (Short) Length", type=integer, defval=3)
mediaLength = input(title="Media (Medium) Length", type=integer, defval=8)
longaLength = input(title="Longa (Long) Length", type=integer, defval=20)
src = input(title="Source", type=source, defval=close)
applyFilling = input(title="Apply Ribbon Filling ?", type=bool, defval=true)
highlightCrossovers = input(title="Highlight Crossovers ?", type=bool, defval=true)
media = sma(src, mediaLength)
curta = sma(src, curtaLength) / media
longa = sma(src, longaLength) / media
curtaPlot = plot(curta, title="Curta", color=green)
plot(1, title="Media", color=black, transp=0)
longaPlot = plot(longa, title="Longa", color=red)
fillColor = applyFilling ? (curta > longa ? #0ebb23 : red) : color(white, 100)
fill(curtaPlot, longaPlot, color=fillColor, transp=80)
plotshape(crossover(curta, longa) and highlightCrossovers ? avg(longa, longa[1]) : na, title="Crossover", location=location.absolute, style=shape.circle, size=size.tiny, color=green, transp=20)
plotshape(crossunder(curta, longa) and highlightCrossovers ? avg(longa, longa[1]) : na, title="Crossunder", location=location.absolute, style=shape.circle, size=size.tiny, color=red, transp=20)
2023-06-30
2762
글번호 170219