커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

글번호 46959번 재질문(11-1)

안녕하세요? 글번호 46959번 재질문입니다. 아래의 스크립트에 주석으로 요청드립니다. 감사합니다. var : TF(0); var : Xtime(0), Etime(false),cnt(0),mav1(0),mav2(0); var : HV(0),LV(0),HV1(0),LV1(0),HV2(0),LV2(0); Array : HH[50](0),LL[50](0),CC[50](0); mav1 = ma(c,5); mav2 = ma(C,20); TF = TimeToMinutes(stime)%30; if Bdate != Bdate[1] Then{ Etime = true; if stime >= 090000 Then Xtime = 050000; Else Xtime = 060000; } if Bdate != Bdate[1] or (TF < TF[1] and stime > stime[1]) or date != date[1] Then{ HH[0] = H; LL[0] = L; for cnt = 1 to 49{ HH[cnt] = HH[cnt-1][1]; LL[cnt] = LL[cnt-1][1]; CC[cnt] = CC[cnt-1][1]; } } if H > HH[0] Then HH[0] = H; if L < LL[0] Then LL[0] = L; CC[0] = C; if HH[25+2] > 0 Then{ HV = HH[0]; LV = LL[0]; HV1 = HH[1]; LV1 = LL[1]; HV2 = HH[2]; LV2 = LL[2]; for cnt = 0 to 25{ if HH[cnt] > HV Then HV = HH[cnt]; if LL[cnt] < LV Then LV = LL[cnt]; if HH[cnt+1] > HV Then HV = HH[cnt+1]; if LL[cnt+1] < LV Then LV = LL[cnt+1]; if HH[cnt+2] > HV Then HV = HH[cnt+2]; if LL[cnt+2] < LV Then LV = LL[cnt+2]; } var1 = (HV+LV)/2; var2 = (HV1+LV1)/2; var3 = (HV2+LV2)/2; if Etime == true then{ if MarketPosition == 0 and CC[0] > var1 and CC[1] < var2 and CC[2] < var3 and C >= daylow+0.5 Then buy("b",AtMarket); if MarketPosition == 1 and c <= highest(H,BarsSinceEntry)-0.5 and CrossDown(mav1,mav2) Then ExitLong("bx",AtMarket); } } if stime == Xtime or (stime > Xtime and stime[1] < Xtime) Then{ Etime = false; ExitLong(); }
프로필 이미지
통큰베팅
2016-03-25
113
글번호 96583
시스템

회원 님에 의해서 삭제되었습니다.

프로필 이미지
회원
2016-03-25
30
글번호 96577
시스템
답변완료

특정 시간동안의 변동성을 구할 수 있는 식이 있나요?

특정 선물상품을 거래한다 쳤을때 예컨대 오후 10시~오전 6시 동안의 변동폭을 구할 수 있는 식이 있습니까? 일단 오후 10시에 무조건 매수진입해서, 오전 6시에 무조건 청산하는 식을 만들면 시스템 리포트상에 그 기간동안의 최대 손실폭이 나올것 같은데 이런식으로 설정해서 시간을 변수로 만들어 가장 변동성이 적은 시간대를 구하고 싶습니다. 그럼 오늘도 수고하십시오!
프로필 이미지
SaS하이에나
2016-03-25
125
글번호 96571
지표
답변완료

문의드립니다

if date != date[1] Then{ var1 = 0; var2 = 0; } If (C > O) or (C == O and C >= C[1]) Then var1 = var1+(V-V[1]); If !(C > O) or (C == O and C >= C[1]) Then var2 = var2+(V-V[1]); Plot1(var1, "상승거래량"); Plot2(var2, "하락거래량"); 당일상승거래량합계,하락거래량합계 누적합계수치를 지표상에(오른쪽에)나타나게 하고싶습니다 우리나라시간으로오전9시부터 다음날오전5시까지 적용 부탁드립니다 ~~미리감사드립니다
프로필 이미지
장군
2016-03-25
135
글번호 96570
지표
답변완료

문의드립니다

안녕하세요 두가지입니다. 1.아래지표식(RENKO_MACD)에서 MACD 대신에 RENKO_RSI 지표식을 부탁드립니다. input:renkoSize(0.5),p1(12),p2(26),p3(9); input : 마지막봉시간(065900); var:j(0),k(0),renkoCnt(0),gubun(0),filename("renko2.txt"),printOK(False), sum(0),ema1_OK(false),ema2_OK(false),sig_OK(False),idx(0); array:OO[50](0),HH[50](0),LL[50](0),CC[50](0),ma1[50](0),ma2[50](0), ema1[50](0),ema2[50](0),macdVal[50](0),macdSig[50](0); if Bdate != Bdate[1] Then idx = 0; idx = idx+1; If idx == 0 Then { //break on session에 해당, 즉 일자가 바뀌면 새로 계산 gubun = 0; //방향을 초기화한다. 이후 형성되는 가격에 의해 방향이 계산 For j = 49 DownTo 1 { //금일 시가봉을 신규 추가 OO[j] = OO[j-1]; HH[j] = HH[j-1]; LL[j] = LL[j-1]; CC[j] = CC[j-1]; ema1[j] = ema1[j-1]; ema2[j] = ema2[j-1]; macdVal[j] = macdVal[j-1]; macdSig[j] = macdSig[j-1]; } OO[0] = C; //분봉의 종가를 기반으로 계산하기 때문에 당일 시초가 아니다 HH[0] = C; LL[0] = C; CC[0] = C; } Else { If gubun == 0 and CC[0] > 0 Then { //일 첫봉이 완성되지 않은 시점 If OO[0] - renkoSize >= C Then { gubun = -1; CC[0] = OO[0] - renkoSize; HH[0] = OO[0]; LL[0] = CC[0]; //지수이평을 계산할 수 있을 만큼 렌코가 만들어진 이후 계산 시작 if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1]; if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1]; if ema2_OK then macdVal[0] = ema1[0] - ema2[0]; if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1]; j = 0; if printOK then print(filename, "1=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f", j,gubun,OO[j],HH[j],LL[j],CC[j]); } Else If OO[0] + renkoSize <= C Then { gubun = 1; CC[0] = OO[0] + renkoSize; HH[0] = CC[0]; LL[0] = OO[0]; if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1]; if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1]; if ema2_OK then macdVal[0] = ema1[0] - ema2[0]; if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1]; j = 0; if printOK then print(filename, "2=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f", j,gubun,OO[j],HH[j],LL[j],CC[j]); } } If LL[0] - renkoSize >= C Then { gubun = -1; renkoCnt = Int(Round((LL[0]-C)/renkoSize,9)); if renkoCnt > 49 then renkoCnt = 49; For j = 49 DownTo renkoCnt { OO[j] = OO[j-renkoCnt]; HH[j] = HH[j-renkoCnt]; LL[j] = LL[j-renkoCnt]; CC[j] = CC[j-renkoCnt]; if ema1_OK then ema1[j] = ema1[j-renkoCnt]; if ema2_OK then ema2[j] = ema2[j-renkoCnt]; if ema2_OK then macdVal[j] = macdVal[j-renkoCnt]; if sig_OK then macdSig[j] = macdSig[j-renkoCnt]; } For j = renkoCnt-1 DownTo 0 { OO[j] = LL[j+1]; CC[j] = LL[j+1] - renkoSize; HH[j] = OO[j]; LL[j] = CC[j]; if ema1_OK then ema1[j] = (CC[j]-ema1[j+1])*(2/(p1+1))+ema1[j+1]; if ema2_OK then ema2[j] = (CC[j]-ema2[j+1])*(2/(p2+1))+ema2[j+1]; if ema2_OK then macdVal[j] = ema1[j] - ema2[j]; if sig_OK then macdSig[j] = (macdVal[j] - macdSig[j+1])*(2/(P3+1))+macdSig[j+1]; if printOK then print(filename, "3=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]); } } Else If HH[0] + renkoSize <= C Then { gubun = 1; renkoCnt = Int(Round((C-HH[0])/renkoSize,9)); if renkoCnt > 49 then renkoCnt = 49; For j = 49 DownTo renkoCnt { OO[j] = OO[j-renkoCnt]; HH[j] = HH[j-renkoCnt]; LL[j] = LL[j-renkoCnt]; CC[j] = CC[j-renkoCnt]; ema1[j] = ema1[j-renkoCnt]; ema2[j] = ema2[j-renkoCnt]; macdVal[j] = macdVal[j-renkoCnt]; macdSig[j] = macdSig[j-renkoCnt]; } For j = renkoCnt-1 DownTo 0 { OO[j] = HH[j+1]; CC[j] = HH[j+1] + renkoSize; HH[j] = CC[j]; LL[j] = OO[j]; if ema1_OK then ema1[j] = (CC[j]-ema1[j+1])*(2/(p1+1))+ema1[j+1]; if ema2_OK then ema2[j] = (CC[j]-ema2[j+1])*(2/(p2+1))+ema2[j+1]; if ema2_OK then macdVal[j] = ema1[j] - ema2[j]; if sig_OK then macdSig[j] = (macdVal[j] - macdSig[j+1])*(2/(P3+1))+macdSig[j+1]; if printOK then print(filename, "4=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f", j,gubun,OO[j],HH[j],LL[j],CC[j]); } } Else If stime >= 마지막봉시간 and stime[1] < 마지막봉시간 Then { //당일 종가봉에서 For j = 49 DownTo 1 { OO[j] = OO[j-1]; HH[j] = HH[j-1]; LL[j] = LL[j-1]; CC[j] = CC[j-1]; ema1[j] = ema1[j-1]; ema2[j] = ema2[j-1]; macdVal[j] = macdVal[j-1]; macdSig[j] = macdSig[j-1]; } If LL[1] > C Then { //종가가 이전 봉보다 아래 형성 OO[0] = LL[1]; CC[0] = C; HH[0] = OO[0]; LL[0] = CC[0]; } Else If HH[1] < C Then { //종가가 이전 봉보다 위에 형성 OO[0] = HH[1]; CC[0] = C; HH[0] = CC[0]; LL[0] = OO[0]; } Else { //종가가 이전 봉의 중간에 형성 OO[0] = C; CC[0] = C; HH[0] = C; LL[0] = C; } if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1]; if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1]; if ema2_OK then macdVal[0] = ema1[0] - ema2[0]; if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1]; j = 0; //마지막 1봉만 출력 if printOK then print(filename, "5=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f", j,gubun,OO[j],HH[j],LL[j],CC[j]); } } if ema1_OK == False and CC[p1] > 0 then { //지수이평 계산 가능할 때까지 대기 sum = 0; for j = 0 to p1 - 1 { sum = sum + CC[j]; } ema1[0] = sum/p1; //처음 값은 단순이평값으로 ema1_OK = True; //다음 봉부터 지수이평 계산되도록 설정 } if ema2_OK == False and CC[p2] > 0 then { sum = 0; for j = 0 to p2 - 1 { sum = sum + CC[j]; } ema2[0] = sum/p2; ema2_OK = True; } if sig_OK == False and CC[P2+p3] > 0 then { sum = 0; for j = 0 to p3 - 1 { sum = sum + macdVal[j]; } macdSig[0] = sum/p3; sig_OK = True; } Plot1(macdVal[0],"macd"); Plot2(macdSig[0],"macd signal"); PlotBaseLine1(0); 2.아래지표식 Range Bar MACD 에서 MACD 대신에 Range Bar Stochastics(단순이평적용) 부탁드립니다. Input:tick(20); Input:shortPeriod(12), longPeriod(26), Period(9); Var:j(0),k(0),n(0),trend(0),tickVal(0),oneTick(0),count(0),remain(0); Var:epS(0),epL(0),ep(0),JISU1(0),JISU2(0),SigV(0),PreJISU1(0),preJISU2(0),PreSigV(0); // macdV(0),macdS(0),macdO(0); Array:OO[1000](0),HH[1000](0),LL[1000](0),CC[1000](0),val[4](0); Array:MacdVal[1000](0),MacdSig[1000](0),MacdOsc[1000](0); #==============================================================================# # Range Bar Chart 계산 #==============================================================================# If Index == 0 Then { tickVal = tick * PriceScale; oneTick = PriceScale; OO[0] = O; HH[0] = O; LL[0] = O; CC[0] = O; } count = 0; val[0] = O; val[3] = C; If O > C Then { val[1] = H; val[2] = L; If L < C Then trend = 1; Else trend = -1; } Else If O < C Then { val[1] = L; val[2] = H; If H > C Then trend = -1; Else trend = 1; } Else If C[1] > O Then { val[1] = L; val[2] = H; If H > C Then trend = -1; Else trend = 1; } Else If C[1] < O Then { val[1] = H; val[2] = L; If L < C Then trend = 1; Else trend = -1; } Else If trend == 1 Then { val[1] = H; val[2] = L; If L < C Then trend = 1; Else trend = -1; } Else If trend == -1 Then { val[1] = L; val[2] = H; If H > C Then trend = -1; Else trend = 1; } For k = 0 To 3 { If HH[0] > 0 && HH[0] < val[k] Then { While val[k] - LL[0] > tickVal { HH[0] = LL[0] + tickVal; CC[0] = HH[0]; For j = 998 DownTo 0 { OO[j+1] = OO[j]; HH[j+1] = HH[j]; LL[j+1] = LL[j]; CC[j+1] = CC[j]; } count = count + 1; OO[0] = HH[1] + oneTick; LL[0] = OO[0]; } If val[k] - LL[0] <= tickVal Then { HH[0] = val[k]; CC[0] = val[k]; } } Else If LL[0] > val[k] Then { While HH[0] - val[k] > tickVal { LL[0] = HH[0] - tickVal; CC[0] = LL[0]; For j = 998 DownTo 0 { OO[j+1] = OO[j]; HH[j+1] = HH[j]; LL[j+1] = LL[j]; CC[j+1] = CC[j]; } count = count + 1; OO[0] = LL[1] - oneTick; HH[0] = OO[0]; } If HH[0] - val[k] <= tickVal Then { LL[0] = val[k]; CC[0] = val[k]; } } Else { CC[0] = val[k]; } } #==============================================================================# # Range Bar Chart MACD 값 계산 #==============================================================================# If Index == 0 Then { epS = 2/(shortPeriod+1); epL = 2/(longPeriod+1); ep = 2/(Period+1); } If count > 0 Then { For n = count DownTo 1 { For j = 998 DownTo 1 { MacdVal[j+1] = MacdVal[j]; MacdSig[j+1] = MacdSig[j]; MacdOsc[j+1] = MacdOsc[j]; } PreJISU1 = JISU1; PreJISU2 = JISU2; PreSigV = SigV; JISU1 = CC[n] * epS + PreJISU1 * (1-epS); JISU2 = CC[n] * epL + PreJISU2 * (1-epL); MacdVal[1] = JISU1 - JISU2; SigV = MacdVal[1] * ep + PreSigV * (1-ep); MacdSig[1] = SigV; MacdOsc[1] = MacdVal[1] - MacdSig[1]; } } Else { Value1 = CC[0] * epS + PreJISU1 * (1-epS); Value2 = CC[0] * epL + PreJISU2 * (1-epL); MacdVal[0] = Value1 - Value2; Value3 = MacdVal[0] * ep + PreSigV * (1-ep); MacdSig[0] = Value3; MacdOsc[0] = MacdVal[0] - MacdSig[0]; } If DayIndex == 0 Then remain = 0; remain = remain + count; n = remain; Plot1(MacdVal[n]); Plot2(MacdSig[n]); If remain > 0 Then remain = remain - 1; PlotBaseLine1(0, "기준선1");
프로필 이미지
뉴스타트
2016-03-25
190
글번호 96569
지표
답변완료

안녕하세요

제가 잘 몰라서요 1번질문: var1 = ma(c,3); var2 = ma(C,5); var3 = ma(c,20); if MarketPosition <= 0 and crossup(var2,var3) Then buy("매수"); if MarketPosition == 0 and MarketPosition(1) == 1 and CrossDown(var1,var2) and var1 > var3 Then buy("재매수"); if MarketPosition <= 0 and CrossDown(var2,var3) Then sell("매도"); if MarketPosition == 0 and MarketPosition(1) == 1 and CrossUp(var1,var2) and var1 < var3 Then sell("재매도"); SetStopLoss(PriceScale*5,PointStop); SetStopProfittarget(PriceScale*5,PointStop); 앞전에 부탁해서 만들어주셨는데요 익절하고 손절 없애주시면 감사하겠습니다 2번질문 Input: SPeriod(12), LPeriod(29); Var: ma1(0), ma2(0), MACDv(0); ma1 = (dayOpen()-ema(C, SPeriod))+dayOpen(); ma2 = (dayOpen()-ema(C, LPeriod))+dayOpen(); MACDv = ma1-ma2; plot1(MACDV); //역 plot2(MACD(SPeriod,LPeriod));//정 차트상 지표속성에서 변수값이 안나오게 해주시면 감사하겠습니다 3번질문 Input: SPeriod(12), LPeriod(29); Var: ma1(0), ma2(0), MACDv(0); ma1 = (dayOpen()-ema(C, SPeriod))+dayOpen(); ma2 = (dayOpen()-ema(C, LPeriod))+dayOpen(); MACDv = ma1-ma2; plot1(MACDV); //역 plot2(MACD(SPeriod,LPeriod));//정 매수 매도 신호로 바꿔주시면 감사하겠습니다 1번부터-3번까지 질문해놓았습니다 잘 몰라서 이렇게 부탁드립니다 수고하세요
프로필 이미지
강인함
2016-03-25
153
글번호 96568
시스템
답변완료

수식문의

수고하십니다. 첨부파일처럼 양이나 음오실 신규 발생시 해당하는 봉의 시가~종가까지 색깔을 입혀서 현재까지 나타나게 할수있나요? 3개까지 입니다. 즉, 다음에 새로 나타나면 그전전것은 사라집니다. 감사합니다.
프로필 이미지
저은아빠
2016-03-24
144
글번호 96567
지표

회원 님에 의해서 삭제되었습니다.

프로필 이미지
회원
2016-03-25
31
글번호 96566
시스템
답변완료

문위드립니다

당일에 고저가가 자동으로 표시돼게해주세요 홍콩항생의경우 시가가 저녁18시에 시작돼서 피보나치가 그려지는데요... 요것을 시가가 아침장시작시간 10시 15분분터 시가시작으로.... 24시 까지를 하루로보고 그려지게할수있나요. 그냥 피보나치하니 시가가 18시부터 시작하는것을---아침 10시15분부터 시작 하는걸루요 감사합니다
프로필 이미지
이공주7
2016-03-24
201
글번호 96565
지표