커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

함수요청

안녕하세요? 아래 작성주신 스크립트를 응용하여 수정요청드립니다. -주종목: 크루드오일 -참조종목: 천연가스 -주기: 1분봉 -전략: 참조종목 당일 시가(O)와 참조종목 16:00분(써머타임 해지시 17:00) (C) 완성봉을 기준으로 O > C 인 경우 상방으로 O 를 터치한 경우 주종목 매도 O < C 인 경우 하방으로 O 를 터치한 경우 주종목 매수 참조종목의 시가와 특정시간의 가격을 비교하여 진입하고자 합니다. 따라서 특정시간의 가격이 돌파되는 시점에 1번(일중) 나오게 하고자 합니다. if bdate != bdate[1] Then var1 = 0; if (sdate != sdate[1] and stime >= 160000) or (sdate == sdate[1] and stime >= 160000 and stime[1] < 160000) Then { if C > dayopen Then var1 = 1; if C < dayopen Then var1 = 1; } if var1 == 1 and L > dayopen Then buy("b",atlimit,dayopen); if var1 == -1 and H < dayopen Then sell("s",atlimit,dayopen);
프로필 이미지
흰둥이아빠
2019-04-05
221
글번호 127636
시스템

요타 님에 의해서 삭제되었습니다.

프로필 이미지
요타
2019-04-05
1
글번호 127635
시스템
답변완료

수식 부탁드립니다.

data1에 5분봉 data2에 일봉 으로 셋팅하고 당일 제외 이전 20일 평균레인지(data2의 20일 평균)을 구하려고 합니다. 여기까진 별 문제가 없는데 이전 20일 레인지 중에 가장 큰 2개와 가장 작은 2개를 제외한 16일치의 평균레인지를 산출하고 싶습니다. 간혹 ETF 중에 오더에러성으로 이상한 가격에 체결되어서 평균레인지가 왜곡되는 경우가 있어서 이런 부분 제외하려는 의도입니다. 부탁드립니다. 감사합니다.
프로필 이미지
spark
2019-04-04
190
글번호 127634
시스템
답변완료

수식 문의

시뮬레이션을 위해 시간을 조절할 수 있는 수식으로 변경해주시기 바랍니다. input:만기청산시간(151840), 만기외 청산시간(153340) ******************************************************************* var : nday(0),Week(0); nday = date - int(date/100)*100; Week = DayOfWeek(date); if nday >= 8 and nday <= 14 and Week == 4 then SetStopEndofday(151840); Else SetStopEndofday(153340);
프로필 이미지
목마와숙녀
2019-04-04
191
글번호 127633
시스템
답변완료

함수변환요청

안녕하세요? 아래의 스크립트는 시그널랭귀지로 작성된 것입니다. 함수변환 요청드립니다. Vars : st(0), et(0), vTIME_Close(0); V1 = Dayofweek((10000 * Year(D)) + (100 * 3) + 1); If V1 = 0 Then Value2 = 8 Else Value2 = 15 - V1; // 3월 두번째 일요일 날짜 V2 = Dayofweek((10000 * Year(D)) + (100 * 11) + 1); If V2 = 0 Then Value4 = 1 Else value4 = 8 - V2; // 11월 첫번째 일요일 날짜 If date > (10000 * Year(D)) + (100 * 3) + value2 And date < (10000 * Year(D)) + (100 * 11) + value4 Then Begin st = 070000; // 써머타임 적용 시, 장시작 시간 et = 060000; // 써머타임 적용 시, 장종료 시간 vTIME_Close = 160000; End Else Begin st = 080000; // 장 시작 시간 et = 070000; // 장 종료 시간 vTIME_close = 170000; End; condition1 = (IntPortion(time/10000) > IntPortion(et/10000) And IntPortion(time[1]/10000) <= IntPortion(et/10000)) Or st <> st[1]; ///////////////////////////////////////////////////////////////// Vars : vDayOpen(0), vDayC(0); If condition1 Then vDayOpen = O; If TIME[1] < vTIME_Close And TIME >= vTIME_Close Then v99 = C; Vars : TCOND(False); IF vTIME_Close < et Then Begin If vTIME_close < TIME And TIME < et Then TCOND = True Else TCOND = False; End Else Begin If vTIME_Close < TIMe Or TIME < et Then TCONd = True Else TCOND = False; End; If TCOND Then Begin if O > C Then Sell("S", Atlimit, O); If O < C Then Buy("B", Atlimit, O); End;
프로필 이미지
흰둥이아빠
2019-04-04
226
글번호 127632
시스템
답변완료

진입제한2

일전에 주신 답변 감사합니다. 보내주신 코딩은 Currentcontracts에서 3개의 진입수를 합산하여 처리하는 것 같습니다. 각 진입별로 계약수를 관리하다가 매도 조건에서 매도할수 없는지요? 그리고 Daytrading말고 매수조건 이후 매도조건 발생할때까지 길게 가져가는 것으로 하고 싶습니다. 아래와 같이 작성했는데, 시작 조건일의 첫번째 조건의 진입매수와 매도 3번을 정상적으로 작동하지만, 그 이후 여러개 진입이 동시에 일어날 경우, 매도가 1,2번은 생략되고 3번 매도만 발생하는 등의 문제가 있습니다. 아마도 B1, V1, i1, M1, E1,X1,z1 등을 언제 초기화하는가에 문제가 있는 것 같습니다. 아마도 M과 E에 대한 다른 접근이 필요한 것 같기도 합니다. var : B1(0),B2(0),B3(0); var : I1(0),I2(0),I3(0); var : V1(0),V2(0),V3(0); var : M1(0),M2(0),M3(0); var : E1(0),E2(0),E3(0); var : X1(0),X2(0),X3(0); IF SDate > 20160901 then Begin # 조건변수 처리 if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "DP_B" Then{ B1 = B1+1; i1 = index; V1 = V1+CurrentContracts-CurrentContracts[1]; #지정이름진입 수량 누적 M1 = M1+(CurrentContracts-CurrentContracts[1])*LatestEntryPrice(0); E1 = M1/V1;#평단가 } if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "CC_B" Then{ B2 = B2+1; i2 = index; V2 = V2+CurrentContracts-CurrentContracts[1]; M2 = M2+(CurrentContracts-CurrentContracts[1])*LatestEntryPrice(0); E2 = M2/V2; } if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "GS_B" Then{ B3 = B3+1; i3 = index; V3 = V3+CurrentContracts-CurrentContracts[1]; M3 = M3+(CurrentContracts-CurrentContracts[1])*LatestEntryPrice(0); E3 = M3/V3; } #### 매수조건 if DispBuy==1 and B1 < 2 Then{ if MarketPosition == 0 or LatestEntryName(0) != "DP_B" or (MarketPosition == 1 and LatestEntryName(0) == "DP_B" and index >= I1+20) Then buy("DP_B"); } if M_CCI == 1 and B2 < 2 Then{ if MarketPosition == 0 or LatestEntryName(0) != "CC_B" or (MarketPosition == 1 and LatestEntryName(0) == "CC_B" and index >= I2+20) Then buy("CC_B"); } iF crossDown(ma20, ma60) then CD_Check1 = index;{ if CD_Check1 + 11 < index then { if C <= 선행스팬2[52] and CrossUp(D_MA5, D_Dnline) then{ if MarketPosition == 0 or LatestEntryName(0) != "GS_B" or (MarketPosition == 1 and LatestEntryName(0) == "GS_B" and index >= I2+20) Then buy("GS_B"); } } } ### 매도 전략 if MarketPosition == 1 then{ if B1 >= 1 then{ if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "DP_S1" Then X1 = 1; if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "DP_S2" Then X1 = 2; if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "DP_S3" Then {X1 = 3; z1 = 1;} if X1 == 0 Then ExitLong("DP_S1",AtLimit,E1*1.05,"DP_B",Floor(V1*0.3),1); if X1 == 1 Then ExitLong("DP_S2",AtLimit,E1*1.10,"DP_B",Floor(V1*0.3),1); if X1 == 2 Then ExitLong("DP_S3",AtLimit,E1*1.15,"DP_B"); } } if MarketPosition == 1 then{ if B2 >= 1 then{ if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "CC_S1" Then X2 = 1; if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "CC_S2" Then X2 = 2; if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "CC_S3" Then {X2 = 3; z2 = 1;} if X2 == 0 Then ExitLong("CC_S1",AtLimit,E2*1.05,"CC_B",Floor(V2*0.3),1); if X2 == 1 Then ExitLong("CC_S2",AtLimit,E2*1.10,"CC_B",Floor(V2*0.3),1); if X2 == 2 Then ExitLong("CC_S3",AtLimit,E2*1.15,"CC_B"); } } if MarketPosition == 1 then{ if B3 >= 1 then{ if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "GS_S1" Then X3 = 1; if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "GS_S2" Then X3 = 2; if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "GS_S3" Then {X3 = 3; z3 = 1;} if X3 == 0 Then ExitLong("GS_S1",AtLimit,E3*1.05,"GS_B",Floor(V3*0.3),1); if X3 == 1 Then ExitLong("GS_S2",AtLimit,E3*1.10,"GS_B",Floor(V3*0.3),1); if X3 == 2 Then ExitLong("GS_S3",AtLimit,E3*1.15,"GS_B"); } } if CurrentContracts == 0 or z1[1] == 1 then {B1 = 0; V1 = 0; i1 = 0; M1 = 0; E1 = 0; X1 = 0; z1 = 0;} if CurrentContracts == 0 or z2[1] == 1 then {B2 = 0; V2 = 0; i2 = 0; M2 = 0; E2 = 0; X2 = 0; z2 = 0;} if CurrentContracts == 0 or z3[1] == 1 then {B3 = 0; V3 = 0; i3 = 0; M3 = 0; E3 = 0; X3 = 0; z3 = 0;}
프로필 이미지
짱짱해야지
2019-04-04
221
글번호 127631
시스템
답변완료

저번에 질문 올렸었는데요

아래 코드로 답변 해주셨는데 한가지 더 궁금한점이 있어 글 올립니다. 제가 개장시간을 잘못 알고 있었는데요. 18시에 개장해서 익일 17:45에 마감이던데요 아래전략을 적용하고싶으면 1. 90000 --> 180000 2. SetStopEndofday(044000); 에서 044000 --> 174500 으로만 교체하면 되는건가요? 3. SetStopEndofday(0); 이게 의미하는바가 무엇이죠? 왜 필요한지 궁금합니다 4. 분봉 적용 맞지요? ---------------------------------------------------------------------- 안녕하세요 예스스탁입니다. 랭귀지에서 종가가 들어오는 시점은 장이 종료된 시점입니다. 당일청산시간을 종가보다 조금 앞의 시간으로 설정하셔야 합니다. 44분으로 지정해 드립니다. var : OO(0),HH(0),LL(0),OO1(0),HH1(0),LL1(0); var : entry(0); if sdate != sdate[1] Then SetStopEndofday(044000); if (sdate != sdate[1] and stime >= 90000) or (sdate == sdate[1] and stime >= 90000 and stime[1] < 90000) Then { SetStopEndofday(0); OO = O; HH = H; LL = L; OO1 = OO[1]; HH1 = HH[1]; LL1 = LL[1]; entry = 0; } if H > HH Then HH = H; if L < LL Then LL = L; if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then entry = entry+1; if HH1 > 0 and LL1 > 0 and entry < 1 then { if MarketPosition <= 0 and H < OO+(HH1-LL1)*0.5 Then buy("b",AtStop,OO+(HH1-LL1)*0.5); if MarketPosition <= 0 and L > OO-(HH1-LL1)*0.5 Then sell("s",AtStop,OO-(HH1-LL1)*0.5); } 즐거운 하루되세요 > 에이치 님이 쓴 글입니다. > 제목 : 질문드립니다. > 해외 선물 백테스팅 해보려구 하는데요. 래리 윌리엄스 전략을 구현해보려고합니다. 개장시간이 09:00~04:45 인데 시가 -> 09:00(T) 가격 range -> 전날 09:00(T-1) ~ 04:45(T) 동안 최고가 - 최저가 1. 현재가가 시가 + range * 0.5 를 돌파할때 매수 2. 현재가가 시가 - range *0.5 를 돌파할때 매도 3. 종가(04:45 시점)청산 * 같은날에 매수/매도가 중복되서 들어가지 않도록 한번만 진입 을 구현하고 싶습니다. 부탁드리겠습니다
프로필 이미지
에이치
2019-04-04
214
글번호 127630
시스템
답변완료

질문드립니다.

1. 매입평균가 N%수익시 전량청산식이 아래가 맞나요? if MarketPosition == 1 Then ExitLong("bx",Atlimit,AvgEntryPrice*1.N,"",Floor(MaxContracts*1.0),1); 맞다면, 매입평균가 3% 손실시 전량청산식 부탁드립니다. 트레일링스탑도 위와같이 작성해주시면 감사하겠습니다. // 2. 아래는 감사히 짜주신 로직인데요. 여기에 추가로 N%상승한 캔들의 윗꼬리가 몸통보다작고 장대 캔들이후 지금까지 생성된 캔들의 거래대금이 N%상승한장대봉 거래대금보다 적은 종목검색으로 부탁드립니다. input : N(15),aa(5),xx(5); var : mav(0); mav = ma(C,3); if C >= O*(1+N/100) Then { var1 = 0; var2 = c; Condition1 = false; } Else { var1 = var1+1; if var1 == 3 and var2 > 0 and (mav <= var2*(1+aa/100) and mav >= var2*(1-xx/100)) then { Condition1 = true; if Condition1 == true Then find(1); } } 3. 위 검색식으로 찾은 종목 진입 청산 이후 N%장대봉 발생시 조건초기화(3캔들부터 거래) 4. a라는 조건 발생시 더이상 진입신호 X
프로필 이미지
stockric
2019-04-05
212
글번호 127627
시스템
답변완료

문의드립니다

안녕하세요!! 아래지표도 "틱챠트용"으로 변환 부탁드립니다 * 지난번 문의때 함께 질문 드렸어야했는데.. 귀찮게해드려서 죄송합니다 input : N(60),HHMMSS(150000); var : HH(0,data2),LL(0,data2),HH1(0,data2),LL1(0,data2),OO(0,data2),CC(0,data2),CC1(0,data2); var : Var4(0,data2),var12(0,data2); if data2(dayindex == 0) Then Var4 = 0; Else Var4 = Var4+data2(BarInterval); var12 = Var4%N; if data2(dayindex == 0 or (stime <= HHMMSS and var12 == 0)) Then { HH = data2(H); LL = data2(L); OO = data2(O); HH1 = HH[1]; LL1 = LL[1]; CC1 = CC[1]; } if data2(H) > HH Then HH = data2(H); if data2(L) < LL Then LL = data2(L); CC = data2(c); plot1(HH1,"고가-1"); plot2(LL1,"저가-1"); plot3(OO,"oo"); plot4(CC1,"종가-1");
프로필 이미지
유로파54
2019-04-04
195
글번호 127622
지표