커뮤니티

예스랭귀지 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' 이것을 수정부탁합니다. 그리고 이 프로그램을 사용하면 당일 장중에 선물가격이 시가를 상승돌파하거나 하락돌파하는 경우에 계속적으로 매수 및 매도를 반복적으로 하는지를 여쭙고 싶습니다. 항상 감사합니다.
프로필 이미지
hello
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] 각각 매수 원하는 가격 돌파 시 자동으로 매수 주문 전송
프로필 이미지
autotra
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인 상태에서 반복)
프로필 이미지
zephie
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 문의에 대한 답변입니다 안녕하세요 예스스탁입니다. 외부변수가&#160;선언만&#160;되고&#160;수식에서&#160;사용이&#160;되어&#160;있지&#160;않았습니다. 수정한&#160;식입니다. input&#160;:&#160;날짜(20230302),매수가격(1000),익절가격(1200),손절가격(800); if&#160;NextBarSdate&#160;>=&#160;날짜&#160;Then { &#160;&#160;&#160;&#160;&#160;&#160;if&#160;NextBarSdate&#160;!=&#160;sDate&#160;Then &#160;&#160;&#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;MarketPosition&#160;==&#160;0&#160;and&#160;TotalTrades&#160;==&#160;0&#160;and&#160;NextBarOpen&#160;<=&#160;매수가격&#160;Then &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Buy("b1",AtStop,매수가격); &#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;Else &#160;&#160;&#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;MarketPosition&#160;==&#160;0&#160;and&#160;TotalTrades&#160;==&#160;0&#160;and&#160;DayHigh&#160;<&#160;매수가격&#160;Then &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Buy("b",AtStop,매수가격); &#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;if&#160;MarketPosition&#160;==&#160;1&#160;Then &#160;&#160;&#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExitLong("bp",AtLimit,익절가격); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExitLong("bl",AtStop,손절가격); &#160;&#160;&#160;&#160;&#160;&#160;} } 즐거운&#160;하루되세요
프로필 이미지
스누피독
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
지표