커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

문의드립니다..

받은 아래식입니다. 24:00에 청산이 되는군요. 조건 충족시까지 계속 가져가려면 어떻게 하나요 ? 익일 05:00에 전량 청산하려고 하면 또 어떻게 합니까..? 감사합니다.. ------------------------------- var : tcond(false); if stime >= 170000 and stime[1] < 170000 Then { tcond = true; var1 = c; } if sdate != sdate[1] Then { tcond = false; if MarketPosition == 1 Then exitlong(); if MarketPosition == -1 Then ExitShort(); } if Tcond == true then { if MarketPosition >= 0 and H < var1+0.002 Then sell("s1",Atlimit,var1+0.002,1); if MarketPosition == -1 then { ExitShort("sp",atlimit,AvgEntryPrice-0.005); ExitShort("sl",AtStop,AvgEntryPrice+0.005); if MaxEntries == 1 Then sell("s2",AtLimit,var1+0.004,1); if MaxEntries == 2 Then sell("s3",AtLimit,var1+0.006,1); } if MarketPosition <= 0 and L > var1-0.002 Then buy("b1",Atlimit,var1-0.002,1); if MarketPosition == 1 then { ExitLong("bp",atlimit,AvgEntryPrice+0.005); ExitLong("bl",AtStop,AvgEntryPrice-0.005); if MaxEntries == 1 Then Buy("b2",AtLimit,var1-0.004,1); if MaxEntries == 2 Then Buy("b3",AtLimit,var1-0.006,1); } }
프로필 이미지
호시우보
2018-06-28
194
글번호 120121
시스템
답변완료

수식 문의드립니다.

안녕하세요. 늘 친절한 답변에 감사드립니다. 수식 문의 드립니다. 1. 당일 일중거래에 적용하고자 합니다. 손절과 익절을 진입가 대비 퍼센트로 주고 싶은데 시뮬레이션 최적화를 할 수 있도록 외부변수로 설정해주고 싶습니다. 당일 차트의 시봉을 1번봉으로 해서 3번봉부터 5번봉 까지 세 봉의 고가, 저가, 종가, 중간값 4개를 내부변수로 놓습니다. (1) 세 봉의 고저폭이 당일 시가 대비 0.3프로 이하이면 가. 세 봉의 머리의 합과 꼬리의 합을 비교하여 머리 합이 더 크면 5번봉의 종가로 매도해줍니다. 매도해주었는데 세 봉의 고가+1틱에 도달하면 1틱 아래로 매도를 청산해주고 반대로 매수 진입해줍니다. 다시 세 봉의 저가-1틱에 도달하면 1틱 위로 매수를 청산해주고 반대로 매도 진입해줍니다. 두 번 연이어 손실이 발생하면 그 날의 거래는 중단합니다. 손절은 세 봉의 중간값을 기준으로 0.2프로를 적용하고 익절은 세 봉의 중간값을 기준으로 0.4프로를 적용해줍니다. (매수 주문을 했는데 손절 계산가가 300.13이 나왔으면 손절가는 300.10으로 불리하게 해주고 손절감시가 300.05에 도달하면 300.10으로 매수청산되게 주문을 넣고 싶습니다.) (매수 주문을 했는데 익절 계산가가 300.13이 나왔으면 익절주문가는 300.10으로 넣고 싶습니다.) 나. 세 봉의 머리의 합과 꼬리의 합이 같으면 세 번째 봉이 양봉이면 종가로 매도 주문을 넣어주고 싶습니다. (2) 5번째 봉의 종가와 세 봉의 중간값의 차이가 그 날 시가의 0.1프로 이하이면 현재가가 세 봉의 고가 &#8211;1틱에 도달하면 매도주문을 넣어주고 현재가가 세 봉의 저가+1틱에 도달하면 매수주문을 넣어주는데 오후 1시까지 한 주문이 먼저 걸리면 다른 주문은 취소해주고 싶습니다. 매도 주문이 먼저 걸렸을 때에는 세 봉의 중간값에 도달하면 현재가로 매도를 청산해주고 매수로 진입해줍니다. 익절은 0.4프로를 적용해주고 손절은 세 봉의 저가-1틱에 도달하면 저가로 매수청산해주고 다시 매도로 진입해줍니다. 이 때 손절은 0.3프로 적용해주고 익절은 세 봉의 중간값 기준 0.4프로를 적용해줍니다. (3) 5번째 봉의 종가와 세 봉의 중간값의 차이가 그 날 시가의 0.1프로보다 크면 / 종가가 중간값보다 높으면 중간값에 도달하면 중간값으로 매수주문을 넣어줍니다. (중간값이 300.13으로 계산이 되면 300.10으로 넣어주고 싶습니다.) 중간값이 걸린 후 세 봉의 고가-1틱에 도달하면 매수를 청산해주고 매도로 바꾸어줍니다. 그리고 다시 중간값이 걸리면 매도를 청산해주고 매수로 바꾸어줍니다. 두 번째 걸린 중간값 매수는 다시 고가 &#8211;1틱 가격에 도달해도 청산해주지 않습니다. / 종가가 중간값보다 낮으면 중간값으로 매도주문을 넣어줍니다. (중간값이 300.13으로 계산되면 300.15로 매도주문을 넣어주고 싶습니다.) (4) 오후 1시까지 세 봉의 고가를 돌파한 신고가가 발생하고 세 봉의 저가를 돌파하는 신저가가 발생하지 않은 경우 방향을 매수로 결정하고 오후 1시에 보유한 진입이 매도이면 모두 청산해주고자 합니다. 세 봉의 고가를 돌파한 신고가가 발생하고 다시 세 봉의 저가를 돌파한 신저가가 발생한 경우 방향을 매도로 결정해주고 오후 1시에 보유한 진입이 매수이면 모두 청산해주고자 합니다. (5) 신고가 신저가가 연속해서 발생할 때 마지막에 발생한 게 신고가이면 방향을 매수로 결정해주고 마지막에 발생한 게 신저가이면 방향을 매도로 결정해주고 싶습니다. (6) 오후 1시까지 세 봉의 저가 매도 기준 0.3프로 익절가에 도달했는데 다시 오후 1시까지 세 봉의 중위값으로 돌아온 경우 기존 매도진입을 모두 청산해주고 매수진입해주고 싶습니다. (7) 손절을 설정해줄 때 오전 1100까지의 고가와 저가를 계산한 후 매도의 손절은 오전 1100까지의 고가를 돌파하는 신고가가 발생한 경우 신고가보다 5틱 아래 가격에 0.3프로를 더한 가격으로 손절가를 설정해주고 싶습니다. (8) 그 날 진입의 손실의 합이 2.5이상이면 모든 보유 진입을 청산해주고자 합니다. (9) 그 날 진입의 수익의 합이 3.5이상이면 모든 보유 진입을 청산해주고자 합니다. (10) 보유한 모든 진입은 종가에 청산해주고 싶습니다. 질문이 많아 죄송합니다. 감사합니다.
프로필 이미지
만법귀일
2018-06-28
220
글번호 120120
시스템
답변완료

청산식 수정요망

청산식으로 아래와 같이 했는데 않됩니다 수정부탁드립니다 If C[0]>C[1] Then { Condition11=True; Var1=C[0]; } If CountIF(Condition11==True,2)>0 and C[0]>C[1] and C[0]>Var1 Then { Condition12=True; Var2=C[0]; Var3=Index; } If CountIF(Condition12==True,2)>0 and C[0]>C[1] and C[0]>Var2 Then { Condition13=True; Var4=C[0]; Var5=Index; Var6=((var2-Var1)+(Var4-Var2))*0.5 * 0.6; } If Condition13==True and MarketPosition==1 and Index<var5+7 and C[0]<var2+ Var6*(Index-Var5) Then exitlong("bx5",AtMarket);
프로필 이미지
티끌
2018-06-28
272
글번호 120108
시스템
답변완료

문의드립니다

수고가 많습니다 ^^ 아래수식은 어느 회원분이 오래전에 문의하신것을 검색한것인데요 이수식 2개를 각각 '가중" 으로 변환부탁드리겠습니다 그리고 아래 "수식1"의 "조건4"에서 "(L,40)"의 40은 무엇을 뜻하는것인지 설명좀 부탁드리겠습니다 사용용도에따라 이수치를 변경하여 적용할수있을지를 판단해보기위함입니다 감사합니다 (수식1) input:shortperiod(12),Longperiod(26); if nthhighest(1,macd(shortperiod,Longperiod),100) > //조건1 nthhighest(2,macd(shortperiod,Longperiod),100) and //조건2 macd(shortperiod,Longperiod) > macd(shortperiod,Longperiod)[1] and //조건3 (L<Lowest(L,40)[1] || L[1] < Lowest(L,40)[2]) then //조건4 plot1(L-(pricescale*2),"저↗상승div"); if nthLowest(1,macd(shortperiod,Longperiod),100) < //조건1 nthLowest(2,macd(shortperiod,Longperiod),100) and //조건2 macd(shortperiod,Longperiod) < macd(shortperiod,Longperiod)[1] and //조건3 (h> highest(h,40)[1] || h[1] > highest(h,40)[2]) then //조건4[] plot2(h+(pricescale*2),"고↘하락div"); (수식2) Input : Period1(12), Period2(26), Period3(9); input : Left(3),right(3); var : MACDV(0),MACDS(0),Hcnt(0),Lcnt(0); MACDV = MACD(Period1,Period2); if SwingHighbar(1,MACDV,Left,right,Left+right+1) != -1 Then{ Hcnt = Hcnt+1; var1 = MACDV[Right]; var2 = var1[1]; var3 = H[right]; var4 = var3[1]; #지표상승 가격하락 if Hcnt >= 2 and var1 < var2 and var3 > var4 Then plot1(H,"하락다이버전스"); } if SwingLowBar(1,MACDV,Left,right,Left+right+1) != -1 Then{ Lcnt = Lcnt+1; var11 = MACDV[Right]; var12 = var11[1]; var13 = L[right]; var14 = var13[1]; #지표 상승 가격하락 if Lcnt >= 2 and var11 > var12 and var13 < var14 Then plot2(L,"상승다이버전스"); }
프로필 이미지
유로파54
2018-06-28
263
글번호 120107
지표
답변완료

문의드립니다.

선물차트 기준으로 문의드립니다. 가중이평 20선이 <단순이평 100선과 tirone levels 지표(기간값 100)의 중간선>을 모두 크로스했을때를 시스템으로 나타내고자 합니다. == 반드시 두선을 모두 크로스해야 합니다. 골든이면 매수, 데드크로스면 매도로 표현하고자 합니다. 각 지표의 기간값은 변경 가능하게 부탁드립니다. 수식을 어떻게 작성해야 하는지요? 부탁드립니다. 그리고 항상 감사드립니다. 수고하세요!!!
프로필 이미지
해암
2018-06-27
197
글번호 120106
시스템
답변완료

수정부탁드립니다

58363번 5일선기준선20일교차시60일교차시120일교차시 매수/매도신호발생 체크표시을활수있게해주세요 감사합니다
프로필 이미지
용각산
2018-06-27
208
글번호 120105
시스템
답변완료

전일주가이격도

안녕하세요 관리자님 더운 여름 수고많으십니다. 아래의 지난번 작성해주신 지표 아주아주 잘쓰고 있습니다. -아 래- var1 = (DayHigh(1)-dayopen(1))+dayopen; value1 = C/var1*100-100; var2 = dayopen-(DayOpen(1)-DayLow(1)); value2 = C/var2*100-100; plot1(value1,"고가"); plot2(value2,"저가"); plot3(0,"중심선"); 다름이아니오라 상기의 이격도을 표현했을때 전일의 최고,최저 이격도의 값을 오늘의 이격도에 직선으로 표현하고 싶습니다. 도와주십시요
프로필 이미지
카카
2018-06-27
209
글번호 120104
지표
답변완료

일봉종가

1봉전 일봉 종가와 장중 0봉전 3분봉 고가비교 H[0]/dayclose[1]<1.2 아닌가요? 확인해보니 적용안되고 매일 첫봉에만 한정해서 검색이 됩니다. 원레이런거에요?
프로필 이미지
sondik
2018-06-27
195
글번호 120103
지표
답변완료

수식 수정 부탁드립니다.

안녕하세요? 수식 수정하고 싶어서 다시 글 남깁니다. 아래식중 맨 아래쪽에 if H >= LatestEntryPrice(0)*1.05 Then Condition4 = true; if Condition4 == true Then ExitLong("bx2",AtStop,LatestEntryPrice(0)*1.02); 이부분을 보면 익절이 같은조건으로 마지막 진입에서 5% 올랐다가 2%까지 내려오면 익절이 나가게 되어있는데.. 1차 2차 3차 매수후 올랐다가 내리는 폭을 조절해서 익절을 하고 싶습니다. 예를 들어 1차매수 시점 진입후 5% 올랐다가 2% 까지 내려오면 익절 2차매수 시점 진입후 7% 올랐다가 4% 까지 내려오면 익절 3차매수 시점 진입후 6% 올랐다가 3% 까지 내려오면 익절 이런식으로 추가하고 싶습니다. 감사합니다. input : 투자금액(1000000),투자비율1(45),투자비율2(30),투자비율3(25); input : P1(9),P2(14); var : count(0),sumV1(0),sumV2(0); var : mav1(0),mav2(0); var : m1(0),m2(0),m3(0),dd(0),entry(false); sumV1 = 0; sumV2 = 0; for count = 0 to P2{ if count < P1 Then sumV1 = sumV1+DayClose(count); if count < P2 Then sumV2 = sumV2+DayClose(count); } maV1 = sumV1 / P1; maV2 = sumV2 / P2; m1 = 투자금액*(투자비율1/100); m2 = 투자금액*(투자비율2/100); m3 = 투자금액*(투자비율3/100); if bdate != bdate[1] Then { dd = dd+1; entry = true; } if TotalTrades > TotalTrades[1] and MarketPosition == 0 Then entry = false; if MarketPosition == 0 and Condition1 == false and L < mav1 and entry == true Then { buy("b1",AtLimit,mav1,Floor(m1/mav1)); } if MarketPosition == 1 Then { if CurrentContracts > CurrentContracts[1] Then { Condition1 = false; Condition2 = false; Condition4 = false; if MaxEntries == 1 Then var1 = dd; } if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "bl1" Then Condition3 = true; if MaxEntries == 1 and L > mav2 Then buy("b2",AtLimit,mav2,Floor(m2/mav2)); if MaxEntries == 2 Then { buy("b3",AtLimit,LatestEntryPrice(0)*0.95,Floor(m3/LatestEntryPrice(0)*0.95)); } if MaxEntries == 3 then { if Condition3 == false then ExitLong("bl1",AtStop,LatestEntryPrice(0)*0.95,"",Floor(MaxContracts*0.5),1); ExitLong("bl2",AtStop,LatestEntryPrice(0)*0.90); } if Condition1 == false then { ExitLong("bp1",atlimit,AvgEntryPrice*1.05,"",Floor(MaxContracts*0.5),1); } if Condition2 == false then { ExitLong("bp2",atlimit,AvgEntryPrice*1.10,"",Floor(MaxContracts*0.3),1); } ExitLong("bp3",atlimit,AvgEntryPrice*1.15); if NextBarSdate > sdate and dd >= var1+4 Then exitlong("bx1",AtMarket); if H >= LatestEntryPrice(0)*1.05 Then Condition4 = true; if Condition4 == true Then ExitLong("bx2",AtStop,LatestEntryPrice(0)*1.02); } Else { Condition3 = false; }
프로필 이미지
부자청년28
2018-06-27
198
글번호 120102
시스템