커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내

안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
프로필 이미지
예스스탁
2026-02-27
2553
글번호 230811
지표
답변완료

예스글로벌 차트 중심선 수식

예스글로벌 차트에 당일 중심선을 넣고 싶습니다...수식이나 방법 부탁드립니다...전일고가 전일저가 전일 종가 시가 라인 설정방법도 부탁그립니다...
프로필 이미지
알파메가
2020-10-06
672
글번호 142895
지표
답변완료

수식 문의드립니다.

안녕하세요? 아래의 수식은 키움에서 사용한 수식인데 예스트레이더 분봉차트에 이 수식을 넣어 사용해 매매하고 싶습니다. 부탁드립니다. 감사합니다. valuewhen(1,(highest(h(1),period)<highest(h,period)),((highest(high,Period)+lowest(low,Period))/2)); highest(H, period)-(((highest(H, period)-CL)/5)*2)
프로필 이미지
시돈프리
2020-10-06
641
글번호 142894
지표
답변완료

문의드립니다.

아래수식을 예스로 변환부탁합니다. 어려운부분을 부탁드려 죄송합니다. 시스템신호만 부탁드립니다. periods = input(5, "Relevant Periods to identify OB") threshold = input(0.0, "Min. Percent move to identify OB", step = 0.1) usewicks = input(false, "Use whole range [High/Low] for OB marking?" ) showbull = input(true, "Show latest Bullish Channel?") showbear = input(true, "Show latest Bearish Channel?") showdocu = input(true, "Show Label for documentation tooltip?") ob_period = periods + 1 absmove = ((abs(close[ob_period] - close[1]))/close[ob_period]) * 100 relmove = absmove >= threshold bullishOB = close[ob_period] < open[ob_period] int upcandles = 0 for i = 1 to periods upcandles := upcandles + (close[i] > open[i]? 1 : 0) OB_bull = bullishOB and (upcandles == (periods)) and relmove OB_bull_high = OB_bull? usewicks? high[ob_period] : open[ob_period] : na OB_bull_low = OB_bull? low[ob_period] : na OB_bull_avg = (OB_bull_high + OB_bull_low)/2 bearishOB = close[ob_period] > open[ob_period] int downcandles = 0 for i = 1 to periods downcandles := downcandles + (close[i] < open[i]? 1 : 0) OB_bear = bearishOB and (downcandles == (periods)) and relmove OB_bear_high = OB_bear? high[ob_period] : na OB_bear_low = OB_bear? usewicks? low[ob_period] : open[ob_period] : na OB_bear_avg = (OB_bear_low + OB_bear_high)/2 plotshape(OB_bull, title="Bullish OB", style = shape.triangleup, color = color.white, size = size.tiny, location = location.belowbar, offset = -ob_period, text = "Bullish OB") bull1 = plot(OB_bull_high, title="Bullish OB open", style = plot.style_linebr, color = color.white, offset = -ob_period, linewidth = 3) bull2 = plot(OB_bull_low, title="Bullish OB low", style = plot.style_linebr, color = color.white, offset = -ob_period, linewidth = 3) fill(bull1, bull2, color=color.white, transp = 0, title = "Bullish OB fill") plotshape(OB_bull_avg, title="Bullish OB Average", style = shape.cross, color = color.white, size = size.normal, location = location.absolute, offset = -ob_period) plotshape(OB_bear, title="Bearish OB", style = shape.triangledown, color = color.blue, size = size.tiny, location = location.abovebar, offset = -ob_period, text = "Bearish OB") bear1 = plot(OB_bear_low, title="Bearish OB open", style = plot.style_linebr, color = color.blue, offset = -ob_period, linewidth = 3) bear2 = plot(OB_bear_high, title="Bearish OB high", style = plot.style_linebr, color = color.blue, offset = -ob_period, linewidth = 3) fill(bear1, bear2, color=color.blue, transp = 0, title = "Bearish OB fill") plotshape(OB_bear_avg, title="Bearish OB Average", style = shape.cross, color = color.blue, size = size.normal, location = location.absolute, offset = -ob_period) var line linebull1 = na // Bullish OB average var line linebull2 = na // Bullish OB open var line linebull3 = na // Bullish OB low var line linebear1 = na // Bearish OB average var line linebear2 = na // Bearish OB high var line linebear3 = na // Bearish OB open if OB_bull and showbull line.delete(linebull1) linebull1 := line.new(x1 = bar_index, y1 = OB_bull_avg, x2 = bar_index - 1, y2 = OB_bull_avg, extend = extend.left, color = color.white, style = line.style_solid, width = 1) line.delete(linebull2) linebull2 := line.new(x1 = bar_index, y1 = OB_bull_high, x2 = bar_index - 1, y2 = OB_bull_high, extend = extend.left, color = color.white, style = line.style_dashed, width = 1) line.delete(linebull3) linebull3 := line.new(x1 = bar_index, y1 = OB_bull_low, x2 = bar_index - 1, y2 = OB_bull_low, extend = extend.left, color = color.white, style = line.style_dashed, width = 1) if OB_bear and showbear line.delete(linebear1) linebear1 := line.new(x1 = bar_index, y1 = OB_bear_avg, x2 = bar_index - 1, y2 = OB_bear_avg, extend = extend.left, color = color.blue, style = line.style_solid, width = 1) line.delete(linebear2) linebear2 := line.new(x1 = bar_index, y1 = OB_bear_high, x2 = bar_index - 1, y2 = OB_bear_high, extend = extend.left, color = color.blue, style = line.style_dashed, width = 1) line.delete(linebear3) linebear3 := line.new(x1 = bar_index, y1 = OB_bear_low, x2 = bar_index - 1, y2 = OB_bear_low, extend = extend.left, color = color.blue, style = line.style_dashed, width = 1) chper = time - time[1] chper := change(chper) > 0 ? chper[1] : chper
프로필 이미지
as8282
2020-10-06
749
글번호 142891
시스템
답변완료

수식문의 드립니다

수고 많으십니다. (수식작성문의) -최근 20일간 거래일수 중에 최근 20일 저가보다 최고가가 70%이상 상승한 종목중, -최근 20일간 최고가에서 20%이상 하락한 종목중, -전일 and 전전일 저가가 5일이평선을 하회한 종목중, -금일종가가 5일이평선을 상회한 종목추출식 부탁드립니다.
프로필 이미지
kem111
2020-10-06
719
글번호 142883
종목검색
답변완료

청산식 추가

개별 종목 분봉 사용중입니다. 다음 식에 당일 거래량이 전일 거래량을 초과시 매도 하는 식을 추가하고 싶습니다. if sdate == 20200917 and stime == 090000 then buy(); if c < ma(C,20) then exitlong(); 즉, 20일선이하로 이탈하거나, 당일 거래량이 전일 거래량 초과시 시장가로 자동매도식을 만들려고 합니다. 항상 감사합니다.
프로필 이미지
묻어가는자
2020-10-06
752
글번호 142870
시스템
답변완료

문의드립니다~

var : Pt(50); var : Price(0),TL1(0); var : TL11(0),TL12(0),TL13(0),TL14(0),TL15(0),TL16(0),TL17(0),TL18(0); var : TL21(0),TL22(0),TL23(0),TL24(0),TL25(0),TL26(0),TL27(0),TL28(0); var1 = int(C/Pt); var2 = var1*Pt; var3 = c-var2; if var3 >= Pt/2 Then Price = var2+Pt; Else Price = var2; if index == 1 or (index > 1 and price != Price[1]) Then { TL_Delete(TL1); TL_Delete(TL11); TL_Delete(TL12); TL_Delete(TL13); TL_Delete(TL14); TL_Delete(TL15); TL_Delete(TL16); TL_Delete(TL17); TL_Delete(TL18); TL_Delete(TL21); TL_Delete(TL22); TL_Delete(TL23); TL_Delete(TL24); TL_Delete(TL25); TL_Delete(TL26); TL_Delete(TL27); TL_Delete(TL28); TL1 = TL_New(sdate[1],stime[1],Price,sdate,stime,Price); TL11 = TL_New(sdate[1],stime[1],Price+pt*1,sdate,stime,Price+pt*1); TL12 = TL_New(sdate[1],stime[1],Price+pt*2,sdate,stime,Price+pt*2); TL13 = TL_New(sdate[1],stime[1],Price+pt*3,sdate,stime,Price+pt*3); TL14 = TL_New(sdate[1],stime[1],Price+pt*4,sdate,stime,Price+pt*4); TL15 = TL_New(sdate[1],stime[1],Price+pt*5,sdate,stime,Price+pt*5); TL16 = TL_New(sdate[1],stime[1],Price+pt*6,sdate,stime,Price+pt*6); TL17 = TL_New(sdate[1],stime[1],Price+pt*7,sdate,stime,Price+pt*7); TL18 = TL_New(sdate[1],stime[1],Price+pt*8,sdate,stime,Price+pt*8); TL21 = TL_New(sdate[1],stime[1],Price-pt*1,sdate,stime,Price-pt*1); TL22 = TL_New(sdate[1],stime[1],Price-pt*2,sdate,stime,Price-pt*2); TL23 = TL_New(sdate[1],stime[1],Price-pt*3,sdate,stime,Price-pt*3); TL24 = TL_New(sdate[1],stime[1],Price-pt*4,sdate,stime,Price-pt*4); TL25 = TL_New(sdate[1],stime[1],Price-pt*5,sdate,stime,Price-pt*5); TL26 = TL_New(sdate[1],stime[1],Price-pt*6,sdate,stime,Price-pt*6); TL27 = TL_New(sdate[1],stime[1],Price-pt*7,sdate,stime,Price-pt*7); TL28 = TL_New(sdate[1],stime[1],Price-pt*8,sdate,stime,Price-pt*8); TL_SetExtLeft(TL1,true); TL_SetExtLeft(TL11,true); TL_SetExtLeft(TL12,true); TL_SetExtLeft(TL13,true); TL_SetExtLeft(TL14,true); TL_SetExtLeft(TL15,true); TL_SetExtLeft(TL16,true); TL_SetExtLeft(TL17,true); TL_SetExtLeft(TL18,true); TL_SetExtLeft(TL21,true); TL_SetExtLeft(TL22,true); TL_SetExtLeft(TL23,true); TL_SetExtLeft(TL24,true); TL_SetExtLeft(TL25,true); TL_SetExtLeft(TL26,true); TL_SetExtLeft(TL27,true); TL_SetExtLeft(TL28,true); TL_SetExtRight(TL1,true); TL_SetExtRight(TL11,true); TL_SetExtRight(TL12,true); TL_SetExtRight(TL13,true); TL_SetExtRight(TL14,true); TL_SetExtRight(TL15,true); TL_SetExtRight(TL16,true); TL_SetExtRight(TL17,true); TL_SetExtRight(TL18,true); TL_SetExtRight(TL21,true); TL_SetExtRight(TL22,true); TL_SetExtRight(TL23,true); TL_SetExtRight(TL24,true); TL_SetExtRight(TL25,true); TL_SetExtRight(TL26,true); TL_SetExtRight(TL27,true); TL_SetExtRight(TL28,true); } TL_setcolor(TL1,rgb(153,153,153)); TL_setcolor(TL11,rgb(153,153,153)); TL_setcolor(TL12,rgb(153,153,153)); TL_setcolor(TL13,rgb(153,153,153)); TL_setcolor(TL14,rgb(153,153,153)); TL_setcolor(TL15,rgb(153,153,153)); TL_setcolor(TL16,rgb(153,153,153)); TL_setcolor(TL17,rgb(153,153,153)); TL_setcolor(TL18,rgb(153,153,153)); TL_setcolor(TL21,rgb(153,153,153)); TL_setcolor(TL22,rgb(153,153,153)); TL_setcolor(TL23,rgb(153,153,153)); TL_setcolor(TL24,rgb(153,153,153)); TL_setcolor(TL25,rgb(153,153,153)); TL_setcolor(TL26,rgb(153,153,153)); TL_setcolor(TL27,rgb(153,153,153)); TL_setcolor(TL28,rgb(153,153,153)); ///////////////////////////////////////////////////////////////// Array : upLine[20](0),dnLine[20](0); var : cnt(0),mdline(0); if bdate != bdate[1] then{ var1 = int(C/50); var2 = var1*50; TL_Delete(mdLine); mdLine = TL_New(sdate[1],stime[1],var2,sdate,stime,var2); TL_SetExtLeft(mdLine,true); TL_SetExtRight(mdLine,true); for cnt = 1 to 19{ TL_Delete(upLine[cnt]); TL_Delete(dnLine[cnt]); upLine[cnt] = TL_New(sdate[1],stime[1],var2+50*cnt,sdate,stime,var2+50*cnt); dnLine[cnt] = TL_New(sdate[1],stime[1],var2-50*cnt,sdate,stime,var2-50*cnt); TL_SetExtLeft(upLine[cnt],true); TL_SetExtLeft(dnLine[cnt],true); TL_SetExtRight(upLine[cnt],true); TL_SetExtRight(dnLine[cnt],true); } } TL_setcolor(mdline,rgb(153,153,153)); TL_setcolor(upLine[1],rgb(153,153,153)); TL_setcolor(dnLine[1],rgb(153,153,153)); TL_setcolor(upLine[2],rgb(153,153,153)); TL_setcolor(dnLine[2],rgb(153,153,153)); TL_setcolor(upLine[3],rgb(153,153,153)); TL_setcolor(dnLine[3],rgb(153,153,153)); TL_setcolor(upLine[4],rgb(153,153,153)); TL_setcolor(dnLine[4],rgb(153,153,153)); TL_setcolor(upLine[5],rgb(153,153,153)); TL_setcolor(dnLine[5],rgb(153,153,153)); TL_setcolor(upLine[6],rgb(153,153,153)); TL_setcolor(dnLine[6],rgb(153,153,153)); ////////// 50포인트단위 가로선 수식2개입니다. 지표식으로 보고 있는데 화면을 확대하면 선이 사라졌다 생겼다가 해서요. 화면을 확대해도 선이 그대로 유지되게 할 순 없을까요? 수정 부탁드립니다. 선의 색상은 rgb(153,153,153)이구요. 감사합니다.~
프로필 이미지
겐지
2020-10-06
683
글번호 142869
지표
답변완료

변환 문의

안녕하세요. 계속 일봉으로의 변환 요청 드렸는데 매번 감사드립니다. 1) 아래 식은 지표인데요. 분봉에서 일봉 기준으로 사용하고 싶습니다. 변환요청 부탁드립니다.. 매번 감사합니다. for문 같은 경우 data2가 안먹기도 하고.. 시스템을 종목을 돌려보면서 해보려다보니 data2로는 어려운 점이 많네요. 2) 전체 종목을 돌려볼 수 있는 기능은 개발 일정에 없으신지 궁금합니다. 예를들면.. pgDn 버튼을 누르면 다음 종목으로 이동 input : PeriodAR(10); var : Counter(0), Lowval(0), Highval(0), DownVel(0),UpVel(0), DnAroon(0),UpAroon(0) ; Lowval= Lowest(Low, PeriodAR+1); Highval = Highest(High, PeriodAR+1); For counter= 0 To PeriodAR { If Low[counter] == Lowval Then DownVel = counter; If High[counter] == highval Then UpVel = counter; } DnAroon = 100*(PeriodAR-DownVel)/PeriodAR; UpAroon = 100*(PeriodAR-UpVel)/PeriodAR; Input : shortPeriod(12), longPeriod(26), PeriodMACD(9); Var : valueMACD(0) , macdosc(0) ; valueMACD = MACD(shortPeriod, longPeriod); Input : PeriodDMI(14) ; var : DMIv(0),DP(0),DM(0); DMIv = DMI(PeriodDMI); DP = DIPlus(PeriodDMI); DM = DIMinus(PeriodDMI); Input : PeriodRSI(9); var : Relative(0), val(0); Relative = RSI(PeriodRSI); val = 0; if UpAroon >= DnAroon and valueMACD >= ma(valueMACD, 9) and DP > DM and Relative >= ma(Relative, 5) Then { val = H*1.1; Plot1(val, "D"); }
프로필 이미지
롬롬7
2020-10-06
817
글번호 142868
시스템
답변완료

문의 드립니다.

안녕하세요. 아래에서 일목표 수익(200틱), 일손절(300틱) 추가해 주시고, 매수 진입후 청산시 매수 재진입은 하지 않고 매도 신호만 진입하고, 매도 진입후 청산시 매도 재진입은 하지 않고 매수 신호만 진입하도록 수정 부탁드립니다. // 매매시간 Input : starttime(90000),endtime(050000); Var : cond1(false),cond2(false); Var : Tcond(false); if (sdate != sdate[1] and stime >= starttime) or (sdate == sdate[1] and stime >= starttime and stime[1] < starttime) then { Tcond = true; } if (sdate != sdate[1] and stime >= endtime) or (sdate == sdate[1] and stime >= endtime and stime[1] < endtime) then { Tcond = false; } // 매매 Input : shortPeriod(12), longPeriod(26), ST(100), TP(100); Var : value(0); value = MACD(shortPeriod, longPeriod); # 매수/매도청산 If Tcond and CrossUP(value, 0) Then { Buy(); } # 매도/매수청산 If Tcond and CrossDown(value, 0) Then { Sell(); } //청산 If MarketPosition == 1 Then ExitLong("EB", AtStop, EntryPrice - ST*PriceScale); If MarketPosition == -1 then ExitShort("ES", AtStop, EntryPrice + ST*PriceScale); If MarketPosition == 1 Then Exitlong("XB", atlimit, EntryPrice + TP*PriceScale); If MarketPosition == -1 Then ExitShort("XS", atlimit, EntryPrice - TP*PriceScale); //종가청산 If (sdate != sdate[1] and stime >= endtime) or (sdate == sdate[1] and stime >= endtime and stime[1] < endtime) then { if MarketPosition == 1 Then ExitLong("bx",AtMarket); if MarketPosition == -1 Then ExitShort("sx",AtMarket); }
프로필 이미지
eiger
2020-10-05
908
글번호 142867
시스템
답변완료

수식문의 드립니다.

안녕하세요 담당자님 우선 감사 드립니다. 아래 지그재그에 chngRate이 다른 지그재그선을 하나 더 그어보고 싶은데요 어떻게 해야되는지 문의 드립니다. 예를 들어 0.1짜리 지그재그 한개 0.5짜리 지그재그 한개 이렇게 표시되게 만들고 싶습니다. 미리 답변에 대한 감사 드립니다. Input:chngRate(0.1); Var:j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0),T(0); Array:valArr[10](0),barArr[10](0),turnPntArr[10](""); For j = 0 To 9 { barArr[j] = barArr[j] + 1; } Condition1 = Min(valArr[1],valArr[2]) * (1 + (chngRate/100)) < H and lastHiVal < H; Condition2 = Max(valArr[1],valArr[2]) * (1 - (chngRate/100)) > L and (lastLoVal > L || lastLoVal == 0); If Condition1 Then { lastHiVal = H; lastLoVal = 0; } If Condition2 Then { lastLoVal = L; lastHiVal = 0; } turnPntBit = ""; If Condition1 and Condition2 Then { If Max(valArr[1],valArr[2]) < H and Min(valArr[1],valArr[2]) > L Then turnPntBit = "HiLo"; Else If Max(valArr[1],valArr[2]) < H Then turnPntBit = "Hi"; Else If Min(valArr[1],valArr[2]) > L Then turnPntBit = "Lo"; } Else If Condition1 Then turnPntBit = "Hi"; Else If Condition2 Then turnPntBit = "Lo"; If turnPntBit <> "" Then { If turnPntBit == "HiLo" Then { valArr[1] = IFF(turnPntArr[1] == "Hi",H,L); barArr[1] = 0; TL_SetEnd(TL1,sDate[barArr[1]+20],sTime[barArr[1]+20],valArr[1]); If turnPntArr[1] == "Hi" Then turnPntBit = "Lo"; Else turnPntBit = "Hi"; } If turnPntBit <> turnPntArr[1] Then { for j = 8 downto 1 { valArr[j+1] = valArr[j]; barArr[j+1] = barArr[j]; turnPntArr[j+1] = turnPntArr[j]; } } If turnPntBit <> turnPntArr[1] or (turnPntBit == turnPntArr[1] and ((turnPntBit == "Hi" and valArr[1] < H) or (turnPntBit == "Lo" and valArr[1] > L))) Then { valArr[1] = IFF(turnPntBit == "Hi",H,L); barArr[1] = 0; turnPntArr[1] = turnPntBit; If turnPntArr[1][1] <> turnPntArr[1][0] Then { TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],sDate[barArr[1]],sTime[barArr[1]],valArr[1]); } Else TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]); } } TL_SetSize(TL1,2); TL_SetColor(TL1,blue); if turnPntArr[1][0]== "Hi" Then T = 1; if turnPntArr[1][0]== "Lo" Then T = -1; if T == 1 and CrossUp(C,(valarr[2]+valArr[3])/2) Then Buy(); if T == -1 and CrossDown(C,(valarr[2]+valArr[3])/2) Then Sell();
프로필 이미지
blueo
2020-10-05
821
글번호 142866
시스템