커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

수식 부탁드립니다.

수고하십니다. ^^; 지표를 구현하려하는데, 가능할지 여쭤봅니다. 1. 당일 최고점 봉 또는 최저점 봉이 나왔을때, 최고점or 최저점 봉 생성시 10이평값을 수평선으로 구현 가능할까요?. <최고점 or최저점봉 생성시 10이평값은 수평선 구현이 되고.. 10이평선은 계속 움직 입니다..> 2. 당일 최고점 봉이 갱신되기전까지 10이평값이 수평선으로 구현되다가 새로운 최고점봉이 생성시 다시금 최고점봉때의 10 이평값을 수평선으로 구현.... <최저점도 마찬가지구요... > 3. 최고점/최저점이 아니더라도 그냥 고점형성시 저점 형성시 10이평값을 수평선으로... 부탁드려봅니다.
프로필 이미지
파동홀릭
2017-07-10
148
글번호 111189
지표
답변완료

문의드립니다.

지난번에 이어 수식을 수정하다보니 다시 문의드립니다. 세로로 색채우기는 지난번 문의와 동일합니다. 조건은 삼각가중평균 20선이 <삼각가중평균 100선과 티론레벨스 중간선80선>을 모두 골든크로스할때와 데드크로스 할때를 색채우기 하고 싶습니다. 기간값은 변경 가능하게 부탁드립니다. 큰 도움을 주셔서 매번 감사드립니다. 수고하세요!!!
프로필 이미지
해암
2017-07-10
138
글번호 111188
지표
답변완료

문의드립니다.

2시 30분에서 50분까지의 최저값이 단순이평선 50(5분봉)보다 높고 10분 봉의 거래량지표에 양 봉이 3번째 생긴 후에 매수하되 하루에 1번만 거래한다는 수식을 전에 작성해주셨는데 여기서 일부 조건을 빼고 싶은데 제가 임의로 수식을 건드리니 오류가 생겨서 질문드립니다. 아래가 전에 작성해 주신 수식인데 여기서 2시 30분에서 50분까지의 최저값이 단순이평선보다 높은 경우라는 조건만 빼고 싶습니다. 답변 부탁드립니다. ---------------------------------------------------------------------------------------- input : ST(143000),ET(145000); var : T1(0,data1),entry(0,data1); var : V1(0,data1),V2(0,data1),V3(0,data2); if data1(Bdate != Bdate[1]) Then T1 = TotalTrades; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = TotalTrades-T1+1; v1 = data1(MidValue(ST,ET)); v2 = data1(ma(C,50)); if data1(Bdate != Bdate[1]) Then V3 = 0; if data2(Stime >= ET and V > V[1]) Then V3 = V3+1; if stime > ET and v1 > v2 and V3 >= 3 and entry < 1 Then buy(); ----------------------------------------------------------------------------------------
프로필 이미지
2gloo
2017-07-10
116
글번호 111187
시스템
답변완료

재 문의입니다.

NO. 54023 과 연결 입니다. 의사 전달이 잘 안된것같아 다시 문의 합니다. 그러니까 1번 지표식에 2번 지표식의 꺾은선지표를 var99 위치에 올 수 있도록 1번 지표식을 변경하여 주시면 감사 하겠습니다. < 1번 지표식 > input : A(3),MU(2); var : upv(0),dnv(0),Ov(0); var99 = 꺾은선 # <<<===== 요기를 2번지표식의 꺾은선으로 대체하여 주십시요 # Ov = DayClose(1); if Bdate!=Bdate[1] Then { upv = Ov+atr(A)*MU; dnv = Ov-atr(A)*MU; } if Bdate == Bdate[1] Then { if CrossUp(var99,upv) Then { upv = upv[1]+atr(A)*MU; dnv = upv[1]; } if CrossDown(var99,dnv) Then { upv = dnv[1]; dnv = dnv[1]-atr(A)*MU; } } plot1(var99); plot2(upv); plot3(dnv); #==================================================================# #==================================================================# < 2번 지표식 > Input:전환가격(1),종가사용여부(1),파동선두께(1),수치표시(1); Var:j(0),jj(0),HH(0),LL(0),hiBar(0),loBar(0),최종꼭지점(""),처리구분(""), TL1(0),Text1(0); Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# HH = IFF(종가사용여부 == 1,C,H); LL = IFF(종가사용여부 == 1,C,L); If Index == 0 Then { 고[1,1] = HH; 고[1,2] = 0; 고[1,3] = sDate; 고[1,4] = sTime; 저[1,1] = LL; 저[1,2] = 0; 저[1,3] = sDate; 저[1,4] = sTime; } If Index > 0 Then // Index가 0일때는 이전 봉이 없으므로 Index가 1일때부터 1씩 증가 { hiBar = hiBar + 1; // 최고점을 찍은 고[저]가의 위치를 저장 해놓기 위해 봉번호를 카운트한다. loBar = loBar + 1; } If HH[hiBar] < HH Then hiBar = 0; // 현재 봉이 최고가이면 봉번호를 0으로 초기화 If LL[loBar] > LL Then loBar = 0; Condition1 = 저[1,1] + 전환가격 < HH and hiBar == 0; // 전저점에서 전환가격만큼 더한 값보다 고가가 크다면 추세가 변한 것으로 보고 신규 고점으로 인식 Condition2 = 고[1,1] - 전환가격 > LL and loBar == 0; // 전고점에서 전환가격만큼 뺀 값보다 저가가 작다면 추세가 변한 것으로 보고 신규 저점으로 인식 처리구분 = ""; If Condition1 and Condition2 Then // 고점과 저점 조건 동시 만족 { If 최종꼭지점 == "저점" Then { If 저[1,1] > LL Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If 고[1,1] < HH Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; If 처리구분 == "고점처리" Then { If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = HH[hiBar]; 고[1,2] = Index - hiBar; 고[1,3] = sDate[hiBar]; 고[1,4] = sTime[hiBar]; hiBar = -1; // 다음 봉의 고가가 기준 고가로 인식되려면 hiBar 값이 0이 되어야 한다. // 봉이 바뀔 때마다 hiBar의 값을 1씩 증가시키므로 다음 봉의 hiBar 값은 0이 된다. loBar = -1; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); If 수치표시 == 1 Then { Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2)); Text_SetStyle(Text1, 2, 1); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,BLACK); } Else If 고[1,1] < HH[hiBar] Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = HH[hiBar]; 고[1,2] = Index - hiBar; 고[1,3] = sDate[hiBar]; 고[1,4] = sTime[hiBar]; hiBar = -1; loBar = -1; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 If 수치표시 == 1 Then { Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } } 최종꼭지점 = "고점"; } If 처리구분 == "저점처리" Then { If 최종꼭지점 == "고점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = LL[loBar]; 저[1,2] = Index - loBar; 저[1,3] = sDate[loBar]; 저[1,4] = sTime[loBar]; hiBar = -1; loBar = -1; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); If 수치표시 == 1 Then { Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,BLACK); } Else If 저[1,1] > LL[loBar] Then { 저[1,1] = LL[loBar]; 저[1,2] = Index - loBar; 저[1,3] = sDate[loBar]; 저[1,4] = sTime[loBar]; hiBar = -1; loBar = -1; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); If 수치표시 == 1 Then { Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } } 최종꼭지점 = "저점"; } var1 = iff(최종꼭지점 == "고점",1,iff(최종꼭지점 == "저점",-1,0)); if var1 = -1 Then{ PLOT1(저[2,1]); PLOT2(고[1,1]); } Else{ PLOT1(저[1,1]); PLOT2(고[2,1]); }
프로필 이미지
너무조아
2017-07-10
167
글번호 111183
지표

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

프로필 이미지
요타
2017-07-11
24
글번호 111182
시스템
답변완료

수정을 부탁드림니다.

매수;장기파동(length)이 상방(최저점이 꺽인이후)단기파동(length1)이 단기파동의전저점을 갱신하거나 같을때 이후 상방으로 파동이 꺽인지점 청산;장기파동이 하방으로 꺽인지점 매도:장기파동이 하방(최고점이 꺽인이후)단기파동이 단기파동의전고점을갱신하거나 같을때 이후 하방으로 파동이 꺽엿을때 청산;장기파동이 하방에서 상방으로 꺽엿슬때 수식; Input:length(20); Var:j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0); var : UpTL_chk(false),DnTL_chk(false); Array:valArr[20](0),barArr[20](0),turnPntArr[20](""); Input:length1(10); var:lastHiVal1(0),lastLoVal1(0),turnPntBit1(""),TL11(0); Array:valArr1[20](0),barArr1[20](0),turnPntArr1[20](""); For j = 0 To 19 { barArr[j] = barArr[j] + 1; } Condition1 = Highest(H,length) == H and lastHiVal <> H; Condition2 = Lowest(L,length) == L and lastLoVal <> L; If Condition1 Then lastHiVal = H; If Condition2 Then lastLoVal = L; turnPntBit = ""; If Condition1 and Condition2 Then { If turnPntArr[1] == "Hi" Then turnPntBit = "Lo"; Else If turnPntArr[1] == "Lo" Then turnPntBit = "Hi"; } Else If Condition1 Then turnPntBit = "Hi"; Else If Condition2 Then turnPntBit = "Lo"; If turnPntBit == "Hi" or turnPntBit == "Lo" Then { If turnPntBit <> turnPntArr[1] Then { for j = 18 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,4); TL_SetColor(TL1,GREEN); # 진입 체크 TL_SetSize(TL1,4); TL_SetColor(TL1,GREEN); For j = 0 To 19 { barArr1[j] = barArr1[j] + 1; } Condition11 = Highest(H,length1) == H and lastHiVal1 <> H; Condition12 = Lowest(L,length1) == L and lastLoVal1 <> L; If Condition11 Then lastHiVal1 = H; If Condition12 Then lastLoVal1 = L; turnPntBit1 = ""; If Condition11 and Condition12 Then { If turnPntArr1[1] == "Hi" Then turnPntBit1 = "Lo"; Else If turnPntArr1[1] == "Lo" Then turnPntBit1 = "Hi"; } Else If Condition11 Then turnPntBit1 = "Hi"; Else If Condition12 Then turnPntBit1 = "Lo"; If turnPntBit1 == "Hi" or turnPntBit1 == "Lo" Then { If turnPntBit1 <> turnPntArr1[1] Then { for j = 18 downto 1 { valArr1[j+1] = valArr1[j]; barArr1[j+1] = barArr1[j]; turnPntArr1[j+1] = turnPntArr1[j]; } } If turnPntBit1 <> turnPntArr1[1] or (turnPntBit1 == turnPntArr1[1] and ((turnPntBit1 == "Hi" and valArr1[1] < H) or (turnPntBit1 == "Lo" and valArr1[1] > L))) Then { valArr1[1] = IFF(turnPntBit1 == "Hi",H,L); barArr1[1] = 0; turnPntArr1[1] = turnPntBit1; If turnPntArr1[1][1] <> turnPntArr1[1][0] Then TL11 = TL_New(sDate[barArr1[2]],sTime[barArr1[2]],valArr1[2],sDate[barArr1[1]],sTime[barArr1[1]],valArr1[1]); Else TL_SetEnd(TL11,sDate[barArr1[1]],sTime[barArr1[1]],valArr1[1]); } } TL_SetSize(TL11,4); TL_SetColor(TL11,GREEN); If turnPntArr[1][1] <> turnPntArr[1][0] and turnPntArr[1][0] == "Lo" Then var1 = valArr[2]; if turnPntArr[1][1] <> turnPntArr[1][0] and turnPntArr[1][0] == "Hi" Then var2 = valArr[2]; If turnPntArr1[1][1] <> turnPntArr1[1][0] and turnPntArr1[1][0] == "Lo" Then var11 = valArr1[2]; if turnPntArr1[1][1] <> turnPntArr1[1][0] and turnPntArr1[1][0] == "Hi" Then var22 = valArr1[2]; # 매수진입 IF var1 == var11 and var1[1] != var11[1] then buy("buy") ; # 매도진입 IF var2 == var22 and var2[1] != var22[1] then sell("sell") ; # 매수청산 IF Marketposition == 1 and turnPntArr1[1][1] <> turnPntArr1[1][0] and turnPntArr1[1][0] == "Lo" Then { ExitLong("BX11"); } # 매도청산 IF Marketposition == -1 and turnPntArr1[1][1] <> turnPntArr1[1][0] and turnPntArr1[1][0] == "Hi" Then { ExitShort("SX11"); } ##### 당일청산 ##### if stime == 050000 or (stime > 055000 and stime[1] < 050000) then { # 포지션 청산 exitlong("BDF1"); exitshort("SDF1"); }
프로필 이미지
수루지
2017-07-10
146
글번호 111167
시스템
답변완료

문의드립니다.

문의드립니다. 1. 시스템(자동) 상태로 인하여 매수 진입을 하였는데 잔량문제로 인하여 실제 상으로는 체결이 되지 않았습니다. 그런데 바로 청산이 자동이로 이루어져 의도치 않게 실제로 매도 진입만 이루어져 손실이 발생하게 된 경우 대비책은 없을까요? 2. 5분봉을 사용할 경우 같은 봉에서 매매와 청산이 바로 가능하게 할 수 있을까요?
프로필 이미지
예스슷탁
2017-07-10
102
글번호 111166
시스템
답변완료

문의드립니다.

키움수식 변환 부탁드립니다. 수식1, 수식2가 하나의 지표입니다. -수식1- B = sum(if(C >= O*(1+1/100) or (C(1)*1.02<=H and C>=O) or (C(2)>O(2)*1.01 and C(1)>O(1)*1.01 and C>=O) , V, if(C <= O*(1-1/100) or (C < O and C(1)*1.03 <= H) or (C(1)*0.99>=C and C < O) or (C(1)*0.97>=L and C < O) or (H(1)*0.97 > C and O>C) , -V, 0))); D = valuewhen(1, date == 날짜 and date(1) != 날짜, B(1)); B - D -수식2- E = B -D; F = highestsince(1, date == 날짜 and date(1) != 날짜, E); F/2 감사합니다~
프로필 이미지
시스트
2017-07-10
135
글번호 111165
지표
답변완료

틱을 이용한 지표 부탁드립니다.

틱을 이용해서 지표를 만들어고자 하는데요.. plot1(ticks); 기본 틱인데.. 궁금한 부분은 여기에서 MACD오실레이터 처럼 막대 그래프를 그렸으면 합니다. 제한은 예를 들어 250 캔들에서 10틱이상 매수거래 개수는 양(+) 쪽으로 10틱이상 매도거래는 음(-)쪽으로 그래프가 그려졌으면 합니다.
프로필 이미지
타잔94
2017-07-10
136
글번호 111160
지표