커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

질문입니다.

안녕하세요. 늘 답변 주셔서 감사하고 막힌 문제를 해결 해주셔서 감사합니다. 아래 수식은 과거 게시판을 찾아서 올립니다. 이 수식에 제가 원하는 수식을 수성해주시면 너무 감사하겠습니다. ================================================= Input : length(12),추세선굵기(2);#굵기(0~6사이의 정수) input : 고저점값표시(1);#1이면 표시, 0이면 표시안함 input : 피보값표시(1);#1이면 표시, 0이면 표시안함 Var : j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0),T(0); var : tx(0),tx1(0),tx2(0),tx3(0),tx4(0),tx5(0),tx6(0),tx7(0); Array:valArr[20](0),barArr[20](0),turnPntArr[20](""),r[10](0); // 봉이 새로 생겼으므로 봉개수 관리하는 변수들의 봉개수 값 1씩 증가 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; // 전환점구분 null값으로 초기화; // if 고점조건, 저점조건 동시 만족시 { // if 전환점배열의 현재(배열상 1번째)값이 고점이면 전환점구분 = 저점; // else if 전환점배열의 현재 값이 저점이면 전환점구분 = 고점; // else if 고점조건 만족하면 전환점구분 = 고점; // else if 저점조건 만족하면 전환점구분 = 저점; 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 전환점구분에 값이 있을 때만 then 아래 실행, 없으면 통과 // if 신규 전환점구분이 현재(전환점배열 1번째)와 다르면 then // 배열값들을 이전값으로 Move; 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 전환점구분이 바뀌었거나 또는 // (전환점구분은 안바뀌었는데 // (이전 고점보다 높은 고점이 발생했거나 또는 // 이전 저점보다 낮은 저점이 발생했으면)) then If turnPntBit <> turnPntArr[1] or (turnPntBit == turnPntArr[1] and ((turnPntBit == "Hi" and valArr[1] < H) or (turnPntBit == "Lo" and valArr[1] > L))) Then { // 값 배열에는 고점 또는 저점을 대입; // 봉개수 배열에는 0값 대입; // 전환점 배열에 전환점구분값을 대입; valArr[1] = IFF(turnPntBit == "Hi",H,L); barArr[1] = 0; turnPntArr[1] = turnPntBit; // if 이전봉대비 전환점구분이 바뀌었다면 추세선 새로 그리고; // else 전환점구분이 안바뀌었으면 값만 바뀐거므로 추세선 연장; 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]); if turnPntArr[1][0] == "Hi" Then { T = 1; } if turnPntArr[1][0] == "Lo" Then { T = -1; } if 고저점값표시 == 1 and T != T[1] Then { tx = Text_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],NumToStr(valArr[2],2)); if t == 1 then { Text_SetStyle(tx,2,0); Text_SetColor(tx,BLUE); } Else { Text_SetStyle(tx,2,1); Text_SetColor(tx,RED); } } } Else TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]); } } TL_SetSize(TL1,추세선굵기); TL_SetColor(TL1,iff(t== 1,red,BLUE)); var : TTL1(0),TTL2(0),TTL3(0),TTL4(0),TTL5(0),TTL6(0),TTL7(0); if T == -1 then { r[0] = 0; r[1] = 0.236; r[2] = 0.382; r[3] = 0.50; r[4] = 0.618; r[5] = 0.764; r[6] = 1; var1 = valArr[1]+(valArr[2]-valArr[1])*R[0]; var2 = valArr[1]+(valArr[2]-valArr[1])*R[1]; var3 = valArr[1]+(valArr[2]-valArr[1])*R[2]; var4 = valArr[1]+(valArr[2]-valArr[1])*R[3]; var5 = valArr[1]+(valArr[2]-valArr[1])*R[4]; var6 = valArr[1]+(valArr[2]-valArr[1])*R[5]; var7 = valArr[1]+(valArr[2]-valArr[1])*R[6]; TL_Delete(TTL1); TL_Delete(TTL2); TL_Delete(TTL3); TL_Delete(TTL4); TL_Delete(TTL5); TL_Delete(TTL6); TL_Delete(TTL7); TTL1 = TL_New(sDate[barArr[1]],sTime[barArr[1]],valArr[1]+(valArr[2]-valArr[1])*R[0],sdate,stime,valArr[1]+(valArr[2]-valArr[1])*R[0]); TTL2 = TL_New(sDate[barArr[1]],sTime[barArr[1]],valArr[1]+(valArr[2]-valArr[1])*R[1],sdate,stime,valArr[1]+(valArr[2]-valArr[1])*R[1]); TTL3 = TL_New(sDate[barArr[1]],sTime[barArr[1]],valArr[1]+(valArr[2]-valArr[1])*R[2],sdate,stime,valArr[1]+(valArr[2]-valArr[1])*R[2]); TTL4 = TL_New(sDate[barArr[1]],sTime[barArr[1]],valArr[1]+(valArr[2]-valArr[1])*R[3],sdate,stime,valArr[1]+(valArr[2]-valArr[1])*R[3]); TTL5 = TL_New(sDate[barArr[1]],sTime[barArr[1]],valArr[1]+(valArr[2]-valArr[1])*R[4],sdate,stime,valArr[1]+(valArr[2]-valArr[1])*R[4]); TTL6 = TL_New(sDate[barArr[1]],sTime[barArr[1]],valArr[1]+(valArr[2]-valArr[1])*R[5],sdate,stime,valArr[1]+(valArr[2]-valArr[1])*R[5]); TTL7 = TL_New(sDate[barArr[1]],sTime[barArr[1]],valArr[1]+(valArr[2]-valArr[1])*R[6],sdate,stime,valArr[1]+(valArr[2]-valArr[1])*R[6]); TL_SetExtRight(TTL1,true); TL_SetExtRight(TTL2,true); TL_SetExtRight(TTL3,true); TL_SetExtRight(TTL4,true); TL_SetExtRight(TTL5,true); TL_SetExtRight(TTL6,true); TL_SetExtRight(TTL7,true); TL_SetExtRight(TTL7,true); TL_SetColor(TTL1,blue); TL_SetColor(TTL2,blue); TL_SetColor(TTL3,blue); TL_SetColor(TTL4,blue); TL_SetColor(TTL5,blue); TL_SetColor(TTL6,blue); TL_SetColor(TTL7,blue); if 피보값표시 == 1 then { Text_Delete(Tx1); Text_Delete(Tx2); Text_Delete(Tx3); Text_Delete(Tx4); Text_Delete(Tx5); Text_Delete(Tx6); Text_Delete(Tx7); tx1 = Text_New(sdate,stime,var1,NumToStr(var1,0)); tx2 = Text_New(sdate,stime,var2,NumToStr(var2,0)); tx3 = Text_New(sdate,stime,var3,NumToStr(var3,0)); tx4 = Text_New(sdate,stime,var4,NumToStr(var4,0)); tx5 = Text_New(sdate,stime,var5,NumToStr(var5,0)); tx6 = Text_New(sdate,stime,var6,NumToStr(var6,0)); tx7 = Text_New(sdate,stime,var7,NumToStr(var7,0)); Text_SetStyle(tx1,0,1); Text_SetStyle(tx2,0,1); Text_SetStyle(tx3,0,1); Text_SetStyle(tx4,0,1); Text_SetStyle(tx5,0,1); Text_SetStyle(tx6,0,1); Text_SetStyle(tx7,0,1); Text_SetColor(tx1,blue); Text_SetColor(tx2,blue); Text_SetColor(tx3,blue); Text_SetColor(tx4,blue); Text_SetColor(tx5,blue); Text_SetColor(tx6,blue); Text_SetColor(tx7,blue); } } #--하락적용--- if T == 1 Then { r[0] = 0; r[1] = 0.236; r[2] = 0.382; r[3] = 0.50; r[4] = 0.618; r[5] = 0.764; r[6] = 1; var1 = valArr[1]-(valArr[1]-valArr[2])*R[0]; var2 = valArr[1]-(valArr[1]-valArr[2])*R[1]; var3 = valArr[1]-(valArr[1]-valArr[2])*R[2]; var4 = valArr[1]-(valArr[1]-valArr[2])*R[3]; var5 = valArr[1]-(valArr[1]-valArr[2])*R[4]; var6 = valArr[1]-(valArr[1]-valArr[2])*R[5]; var7 = valArr[1]-(valArr[1]-valArr[2])*R[6]; TL_Delete(TTL1); TL_Delete(TTL2); TL_Delete(TTL3); TL_Delete(TTL4); TL_Delete(TTL5); TL_Delete(TTL6); TL_Delete(TTL7); TTL1 = TL_New(sDate[barArr[1]],sTime[barArr[1]],var1,sdate,stime,var1); TTL2 = TL_New(sDate[barArr[1]],sTime[barArr[1]],var2,sdate,stime,var2); TTL3 = TL_New(sDate[barArr[1]],sTime[barArr[1]],var3,sdate,stime,var3); TTL4 = TL_New(sDate[barArr[1]],sTime[barArr[1]],var4,sdate,stime,var4); TTL5 = TL_New(sDate[barArr[1]],sTime[barArr[1]],var5,sdate,stime,var5); TTL6 = TL_New(sDate[barArr[1]],sTime[barArr[1]],var6,sdate,stime,var6); TTL7 = TL_New(sDate[barArr[1]],sTime[barArr[1]],var7,sdate,stime,var7); TL_SetExtRight(TTL1,true); TL_SetExtRight(TTL2,true); TL_SetExtRight(TTL3,true); TL_SetExtRight(TTL4,true); TL_SetExtRight(TTL5,true); TL_SetExtRight(TTL6,true); TL_SetExtRight(TTL7,true); if 피보값표시 == 1 then { TL_SetColor(TTL1,red); TL_SetColor(TTL2,red); TL_SetColor(TTL3,red); TL_SetColor(TTL4,red); TL_SetColor(TTL5,red); TL_SetColor(TTL6,red); TL_SetColor(TTL7,red); Text_Delete(Tx1); Text_Delete(Tx2); Text_Delete(Tx3); Text_Delete(Tx4); Text_Delete(Tx5); Text_Delete(Tx6); Text_Delete(Tx7); tx1 = Text_New(sdate,stime,var1,NumToStr(var1,0)); tx2 = Text_New(sdate,stime,var2,NumToStr(var2,0)); tx3 = Text_New(sdate,stime,var3,NumToStr(var3,0)); tx4 = Text_New(sdate,stime,var4,NumToStr(var4,0)); tx5 = Text_New(sdate,stime,var5,NumToStr(var5,0)); tx6 = Text_New(sdate,stime,var6,NumToStr(var6,0)); tx7 = Text_New(sdate,stime,var7,NumToStr(var7,0)); Text_SetStyle(tx1,0,1); Text_SetStyle(tx2,0,1); Text_SetStyle(tx3,0,1); Text_SetStyle(tx4,0,1); Text_SetStyle(tx5,0,1); Text_SetStyle(tx6,0,1); Text_SetStyle(tx7,0,1); Text_SetColor(tx1,red); Text_SetColor(tx2,red); Text_SetColor(tx3,red); Text_SetColor(tx4,red); Text_SetColor(tx5,red); Text_SetColor(tx6,red); Text_SetColor(tx7,red); } } ===================================================================== 수정 사항 1. 이 수식은 추세선이 새로 발생할때 마다(계속그리는지그재그가 앞부분을 새로 새로 생길때 마다) 피보를 발생하고 있다. 이 부분에서 제가 원하는 것은 앞부분 추세선이 새로 발생할 때마다 피보가 자동으로 나오는게 아니라 추세선이 발생한 피보의 고가 저가를 고정하면서 그대로 두고 그 고가 저가를 뚫는 추세선이 발생하지 않는 한 계속 고정한다. 추세선 진행중에 고가 저가 중 하나 뚫으면 이 뚫은 새로운 추세선을 새로운 피보를 생성하고 전에 생성한 피보를 삭세 한다. 이렇게 반복적으로 계속그리는지그재그로 피보를 그어놓으면 좋겠습니다. 가능할까요? 요약하자면 1. 지그재그추세선에서 첫번째 피보 발생 2. 그 피보안에서 생성한 새로운추세선들이 첫번째 발생한 피보의 고가저가를 뚫지 않는한 새로운 피보를 발생하지 않는다. 3. 진행중에 첫번째 피보의 고가 저가중 하나를 뚫은 새로운 추세선이 발생히면 그 추세선기준으로 두번째 피보 발생한다. 4. 두번째 피보를 계속 유지하면서 새로운 추세선이 두번째 피보의 고가 저가를 뚫지 않는한 계속 고정한다. 5. 고점 저점이 낮아지면 파란색 피보, 저점 고점이 높아지면 빨간색 피보 이런식으로 계속 발생할 수 있다면 좋겠습니다. 가능할까요? 감사합니다.
프로필 이미지
스오어스
2019-01-11
195
글번호 125154
지표
답변완료

60714 답변 보완요청

60714의 보내주신 시스템을 적용해보니, "선언되지 않은 'T1'이 사용되었습니다."라는 오류메세지가 뜨네요. 그리고 var :count(0),T1(0); 로 수정해사용해보니 하루에 1번진입합니다. 보완요청드립니다. 감사합니다
프로필 이미지
tao
2019-01-11
164
글번호 125153
시스템
답변완료

문의드립니다~

제가 질문을 제대로 못했네요. 240일선과 960일선의 골든크로스가 나오고나서 여러가지매수신호중에서 "롱매수"라는 진입신호는 한번만 나오도록 240일선과 960일선의 데드크로스 나오고나서 여러가지매도신호중에서 "숏매도"라는 진입신호는 한번만 나오도록 240일선과 960일선의 골든크로스나오고나서 롱매수라는 진입신호는 한번만 나오는거에요. 240일선과 960일선의 데드크로스가 나오고나서 숏매도라는 진입신호가 한번만 나오고요. 그리고나서 또 240일선과 960일선의 골든크로스가 나오면 롱매수라는 진입신호가 또 한번만 나오고요. 간단한듯 하면서도 식으로 작성하기 어려워서 질문드립니다~ 감사합니다.~
프로필 이미지
겐지
2019-01-11
159
글번호 125152
시스템
답변완료

시뮬레이션, 진입가격이 정확한가요?

국내선물 매매시에 예&#47483;들어서 현재가가 200 이면 그래서 매수를 했다면, 200이라는 가격에 매수한것일수도 있지만, 1틱 손해로 200.1 가격에 매수가 되기도 하잖아요? 그래서 현재 가격이 아니라, 매도1위치의 가격이 중요한데요. 매도1의 가격을 가져올수 있나요? 매도5 매도4 매도3 매도2 매도1 매수1 매수2 매수3 매수4 매수5 현재가격이 "매도1", "매수1" 두 군데에서 왔다 갔다 하&#51654;아여. 그래서 저 한틱으로도 계산이 엄청 달라지거든요... 그래서 저는 매도1의 가격 또는 매수1의 가격을 가져오고 싶어서요. 1. 매도1위치의 가격 가져올수 있나요? 2. 자료보니까 예스스팟으로 해야 한다던데요. 예스스팟으로 매도1 (또는 매수1) 의 가격을 보고 진입하는 로직작성하면 시뮬레이션도 맞게 해볼 수 있나요? 3. 예스랭귀지는 증권사 서버에서 돌릴수 있다고 알고 있는데요 예스스팟도 증권사 서버에서 돌릴수 있나요?
프로필 이미지
나도아프다
2019-01-11
198
글번호 125151
시스템
답변완료

plot 함수는 yeslanguage에서 사용못하나요?

안녕하세요. stime이 지남에 따라 변하는 사용자 임의의 data1을 연결선물 지수의 중심선를 이용하여 선 또는 점 으로 그려보고 싶은데요. data1의 크기는 +5 ~ -5 정도 입니다. 이전의 답변글을 보면서 가능한지궁금해서요 var : TLM(0),TLD(0); var : data(0): if index == 0 Then{ var1 = sdate; var2 = stime; } TLM = TL_New(var1,var2,(dayhigh+daylow)/2,sdate,stime,(dayhigh+daylow)/2); TL_SetColor(TLM,BLUE);#TL2추세선의 색상 TL_SetSize(TLM,1); #TL2추세선의 굵기(0~8) TLM = TL_New(var1,var2,(dayhigh+daylow)/2+data1,sdate,stime,(dayhigh+daylow)/2+data1); TL_SetColor(TLM,RED);#TL2추세선의 색상 TL_SetSize(TLM,1); #TL2추세선의 굵기(0~8)
프로필 이미지
하이엔드
2019-01-11
195
글번호 125150
지표
답변완료

stime을 사용한 일정한 시간간격 데이타를 수집하고자 합니다.

안녕하세요. stime 기준으로 1분동안에 05초 부터 55초 까지 10초간격으로 6번동안 사용자가 원하는 data를 저장하고 싶습니다. data는 가격이 될수도 있고, 특정시간의 거래량이 될수도있고 거래금액이 될수도 있겟죠 예로 array: buf_c[6](0),buf_m[6](0); if stime ==090005 then buf[0] = Data2; if stime == 090015 then buf[1] = Data2; if stime ==090025 then buf[2] = Data2; if stime ==090035 then buf[3] = Data2; if stime ==090045 then buf[4] = Data2; if stime ==090055 then buf[5] = Data2; 1분간의 데이터를 5초부터 55초까지 6회에 걸처 수집하였는데요. 이런식으로 하면 안되잖아요? 도와주세요. 부탁합니다.
프로필 이미지
하이엔드
2019-01-11
217
글번호 125149
사용자 함수
답변완료

시스템

안녕하세요 미리감사 드려요 아래식에서 매수/매도 진입후 청산식을 부탁드립니다 청산식은 if MarketPosition == 1 then RSI가 70이상에서 다이버전스발생시 매수청산 if MarketPosition == -1 then RSI가 30이하에서 다이버전스발생시 매도청산 주말 잘보내시고 감사인사 드립니다 Input : Period(20), MultiD(2); var : BBmd(0),BBup(0),BBdn(0); BBmd = ma(C,Period); BBup = BollBandUp(Period,MultiD); BBdn = BollBandDown(Period,MultiD); if crossup(C,BBup) Then buy(); if CrossDown(C,BBdn) Then sell();
프로필 이미지
달마7
2019-01-11
181
글번호 125148
시스템
답변완료

청산식 문의

수고하십니다. 청산식에서 100틱 수익 청산 20틱 손실 청산 당일종가 청산 을 수식으로 부탁드립니다. 아울러 60768번 문의글 재문의 한 질문도 답변 부탁드립니다. 수고하세요.
프로필 이미지
당일선물
2019-01-11
178
글번호 125147
시스템

캐논 님에 의해서 삭제되었습니다.

프로필 이미지
캐논
2019-01-10
30
글번호 125146
지표