커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

함수변환요청

안녕하세요? 아래의 스크립트는 시그널랭귀지로 작성된 것입니다. 함수변환 요청드립니다. 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
177
글번호 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
196
글번호 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
195
글번호 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
197
글번호 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
181
글번호 127622
지표
답변완료

함수요청

안녕하세요? 크루드오일 1분봉으로 매매를 하고자 합니다. 특정시간 봉 완성의 종가를 지정할 수 있는지요? 가령 아침의 시가(O)와 16:00분(써머타임 해지시 17:00) (C) 완성봉을 기준으로 O > C 이면 O 값에 지정가 매도 O < C 이면 O 값에 지정가 매수 하는 예제를 작성 부탁드립니다.
프로필 이미지
흰둥이아빠
2019-04-04
181
글번호 127616
시스템
답변완료

문의드립니다.

도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다. 1. 기타 직접 만든 수식인데요. 잘못된 거 없는 거 같은데 비용이 아난티 같은 종목에서 2000(거의 10%를 넘게) 넘게 나와요. 계산해보면 대강 200~300원 나와야하거든요. 뭘 잘못계산한 건지 모르겠습니다. input : 세금(0.3), 수수료(0.015), 슬리피지(2), 호가단위(100); var: 비용(0),봉나누기비용(0); // 세금 + 수수료 + 슬리피지 비용 = (DayOpen * (세금/100)) + (DayOpen * (수수료/100) *2) + (호가단위 * 슬리피지); // 만약 양봉이면(dayclose-dayopen) > 0 if (DayClose - dayopen) > 0 then // 봉나누기 비용은 당일고가 - 당일저가를 비용으로 나누기 봉나누기비용 = (DayHigh-DayLow)/ 비용; else // 만약 음봉이면 봉나누기비용은 0.1(무조건 1이하)로 한다. 봉나누기비용 = 0.1; plot1(봉나누기비용); PlotBaseLine1(1,"아무리 잘해도 손해선"); MessageLog("%.f",비용);
프로필 이미지
잡다백수
2019-04-04
210
글번호 127615
시스템
답변완료

매매시간 요청 드립니다.

* 좋은 하루 되십시요^^ * 요청 사항: 마지막 매매 시간(매매(매수 or 매도 or 청산 등 모든 거래 포함)을 기준으로 5분 대기후 매매하는 수식 방법 좀 요청 드립니다. 즉 어떤 매매든 시스템 시작 할려면 마지막 거래 이후 4분 경과후 시스탬 로직이 적용 되도록 부탁 드립니다. ( 단 첫 거래는 10시 정각에 매수 했다 바로 매도 하도록 부탁 드립니다.) var1 = ma(c,5); var2 = ma(c,20); if crossup(var1,var2) then buy(); if crossdown(var1,var2) then sell(); * 매번 부탁 만 드리고 항상 고맙습니다^^
프로필 이미지
요타
2019-04-04
187
글번호 127614
시스템
답변완료

안녕하세요

안녕하세요. 수고 많으십니다. 다름아니라 아래수식은 20 이동평균선이 당일 중심선 Per3(50.0)을 관통할때 매도 매수를 할려고하는데 잘 안되네요. 수식보안 부탁드립니다. 감사합니다. 수고 하세요. var : pp(0),tx(0); var1 = ma(C,20); input : Per1(23.6),Per2(38.2),Per3(50.0),Per4(61.8),Per5(76.4); var : cnt(0),HH(0),LL(0),RR(0),Tcond(false); if (sdate != sdate[1] and stime >= 000000) or (sdate == sdate[1] and stime >= 000000 and stime[1] < 000000) Then { Tcond = true; HH = H; LL = L; } if (sdate != sdate[1] and stime >= 160000) or (sdate == sdate[1] and stime >= 160000 and stime[1] < 160000) Then { Tcond = true; HH = H; LL = L; } if (sdate != sdate[1] and stime >= 233000) or (sdate == sdate[1] and stime >= 233000 and stime[1] < 233000) Then { Tcond = true; HH = H; LL = L; } if Tcond == true then { if H > HH then HH = H; if L < LL Then LL = L; RR = HH-LL; } if L > O[1] and crossup( var1)>,Per3(50.0) Then buy(); if H < O[1] and CrossDown( var1>Per3(50.0) Then sell();
프로필 이미지
탐라
2019-04-04
161
글번호 127613
시스템