커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

안녕하세요

안녕하세요^^ 아래 2번 지표식중에 가운데 중심추세선 수식을 제외하고 나머지 수식을 1번 추세선지표식에 합성을 부탁을 드립니다. 매번 도움주셔서 감사드립니다. 1번 지표 Input:length(10),종가사용여부(0),파동선두께(0.8),수치표시(1); Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(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,1] = LL; } Condition1 = Highest(HH,length) == HH and 최종고가 <> HH; Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL; 처리구분 = ""; 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 { 최종고가 = HH; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; 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)+NewLine+"매▼도"+"+"+NumToStr(abs(고[1,1]-저[1,1])/PriceScale,0)); Text_SetStyle(Text1, 2, 1); Text_SetColor(text1,BLUE); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,RED); } Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; 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)+NewLine+"매▼도"+"+"+NumToStr(abs(고[1,1]-저[1,1])/PriceScale,0)); PlaySound("C:₩예스트레이더₩data₩Sound₩Stop.wav"); } } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = LL; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; 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(abs(고[1,1]-저[1,1])/PriceScale,0)+NewLine+NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); Text_SetColor(text1,red); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,BLUE); } Else If 저[1,1] > LL then { 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; 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(abs(고[1,1]-저[1,1])/PriceScale,0)+NewLine+NumToStr(저[1,1],2)); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } } 최종꼭지점 = "저점"; } 2번 지표 input:barCnt(5); Var:j(0),turnPntBit(""),TL1(0),TL33(0),TL44(0),HD(0),HT(0),LD(0),LT(0),HH(0),LL(0); var : TL121(0),TL122(0),tx121(0),tx122(0); Array:valArr[10](0),barArr[10](0),turnPntArr[10](""); // 봉이 새로 생겼으므로 봉개수 관리하는 변수들의 봉개수 값 1씩 증가 For j = 0 To 9 { barArr[j] = barArr[j] + 1; } // 고점조건 = 5-1-5에서 가운데 고가가 좌측 5봉과 우측 5봉 고가보다 높다 // 저점조건 = 5-1-5에서 가운데 저가가 좌측 5봉과 우측 5봉 저가보다 낮다 Condition1 = Highest(H,barCnt)[barCnt+1] <= H[barCnt] and H[barCnt] > Highest(H,barCnt); Condition2 = Lowest(L,barCnt)[barCnt+1] >= L[barCnt] and L[barCnt] < Lowest(L,barCnt); // 전환점구분 null값으로 초기화; // if 고점조건, 저점조건 동시 만족시 then // if 이전 고점,저점 범위를 모두 벗어났을 때 // 전환점구분 = 고저점; // else if 이전 고점을 갱신했다면 전환점구분 = 고점; // else if 이전 저점을 갱신했다면 전환점구분 = 저점; // else if 전환점배열의 현재(배열상 1번째)값이 고점이면 전환점구분 = 저점; // else if 전환점배열의 현재 값이 저점이면 전환점구분 = 고점; // else if 고점조건 만족하면 전환점구분 = 고점; // else if 저점조건 만족하면 전환전구분 = 저점; turnPntBit = ""; If Condition1 and Condition2 Then { If Max(valArr[1],valArr[2]) < H[barCnt] and Min(valArr[1],valArr[2]) > L[barCnt] Then turnPntBit = "HiLo"; Else If Max(valArr[1],valArr[2]) < H[barCnt] Then turnPntBit = "Hi"; Else If Min(valArr[1],valArr[2]) > L[barCnt] Then turnPntBit = "Lo"; Else 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 전환점구분에 값이 있을 때만 아래 실행, 없으면 통과 If turnPntBit <> "" Then { // if 전환점구분이 고저점이면 then // 이전 파동은 연장시키고 아래에서 새로이 파동선을 추가토록 한다. If turnPntBit == "HiLo" Then { valArr[1] = IFF(turnPntArr[1] == "Hi",H[barCnt],L[barCnt]); barArr[1] = barCnt; TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]); If turnPntArr[1] == "Hi" Then turnPntBit = "Lo"; Else turnPntBit = "Hi"; } // if 신규 전환점구분이 현재(전환점배열 1번째)와 다르면 then // 배열값들을 이전값으로 Move; If turnPntBit <> turnPntArr[1] Then { for j = 8 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[barCnt]) or (turnPntBit == "Lo" and valArr[1] > L[barCnt]))) Then { // 값 배열에는 고점 또는 저점을 대입; // 봉개수 배열에는 입력변수의 봉개수 대입; // 전환점 배열에 전환점구분값을 대입; valArr[1] = IFF(turnPntBit == "Hi",H[barCnt],L[barCnt]); barArr[1] = barCnt; 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]); // Else // TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]); } } // TL_SetSize(TL1,0); // TL_SetColor(TL1,GREEN); var : TL11(0),TL12(0); if turnPntArr[1][0] == "Hi" Then { TL_delete(TL12); TL_Delete(TL11); TL11 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1],sDate[barArr[1]],sTime[barArr[1]],valArr[1]); TL_SetExtRight(TL11,true); TL_SetColor(TL11,BLUE); TL_SetSize(TL11,3); TL_Delete(TL121); var1 = valArr[1]-abs(valArr[1]-valArr[2])*0.382; var2 = valArr[1]-abs(valArr[1]-valArr[2])*0.618; TL_SetExtRight(TL121,true); TL_SetColor(TL121,GREEN); TL_SetSize(TL121,1); TL_Delete(TL122); TL_SetExtRight(TL122,true); TL_SetColor(TL122,GREEN); TL_SetSize(TL122,1); #텍스트 출력 #출력전에 이전에 출력한 것은 삭제(즉 매봉 새로 출력) Text_Delete(tx121); Text_Delete(tx122); #고점-38.2 값 출력 #고점-61.8 값 출력 tx121 = Text_New(sdate,stime,var1,NumToStr(var1,2)); tx122 = Text_New(sdate,stime,var2,NumToStr(var2,2)); } if turnPntArr[1][0] == "Lo" Then { TL_delete(TL11); TL_Delete(TL12); TL12 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1],sDate[barArr[1]],sTime[barArr[1]],valArr[1]); TL_SetExtRight(TL12,true); TL_SetColor(TL12,RED); TL_SetSize(TL12,3); TL_Delete(TL121); var1 = valArr[1]+abs(valArr[1]-valArr[2])*0.382; var2 = valArr[1]+abs(valArr[1]-valArr[2])*0.618; TL_SetExtRight(TL121,true); TL_SetColor(TL121,GREEN); TL_SetSize(TL121,1); TL_Delete(TL122); TL_SetExtRight(TL122,true); TL_SetColor(TL122,GREEN); TL_SetSize(TL122,1); #텍스트 출력 #출력전에 이전에 출력한 것은 삭제(즉 매봉 새로 출력) Text_Delete(tx121); Text_Delete(tx122); #저점+38.2 값 출력 #저점+61.8 값 출력 tx121 = Text_New(sdate,stime,var1,NumToStr(var1,2)); tx122 = Text_New(sdate,stime,var2,NumToStr(var2,2)); } if bdate != BDate[1] Then{ HD = sdate; HT = stime; LD = sdate; LT = stime; HH = H; LL = L; } if H > HH Then{ HH = H; HD = sdate; HT = stime; } TL_Delete(TL33); if turnPntArr[1][0] == "Hi" Then{ TL33 = TL_New(sDate[barArr[1]],sTime[barArr[1]],valArr[1],HD,HT,dayhigh); } if turnPntArr[1][0] == "Lo" Then{ TL33 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],HD,HT,dayhigh); } TL_SetExtRight(TL33,true); TL_setcolor(TL33,blue); TL_setsize(TL33,0.8); if L < LL Then{ LL = L; LD = sdate; LT = stime; } TL_Delete(TL44); if turnPntArr[1][0] == "Hi" Then{ TL44 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],LD,LT,daylow); } if turnPntArr[1][0] == "Lo" Then{ TL44 = TL_New(sDate[barArr[1]],sTime[barArr[1]],valArr[1],LD,LT,daylow); } TL_SetExtRight(TL44,true); TL_setcolor(TL44,blue); TL_setsize(TL44,0.8); #텍스트 출력값 위치를 항상 마지막완성봉 위치로 옮김 Text_SetLocation(Tx121,sdate,stime,Text_GetValue(Tx121)); Text_SetLocation(Tx122,sdate,stime,Text_GetValue(Tx122)); #텍스트는 정렬 Text_SetStyle(tx121,0,1); Text_SetS
프로필 이미지
천년의사랑
2019-01-13
283
글번호 125216
지표
답변완료

종목검색식 부탁드려요

사용지표: DMI(14) 조건식 Drectional movement index 50이상 and DIPlus는 30이상 and DIMinus가 10이하 떨어진 종목 검색식 부탁합니다
프로필 이미지
파워
2019-01-11
245
글번호 125215
종목검색
답변완료

부탁드립니다

항상 수고가 많습니다 당월 시가 고가 저가 종가 중심가와 전월 시가 고가 저가 종가 중심가를 수평선으로 나타나게 해주시면 감사하겠습니다.
프로필 이미지
매화산삼
2019-01-11
247
글번호 125214
지표
답변완료

함수요청

안녕하세요? 아래는 시그널메이커(하나금융투자)로 사용했던 함수입니다. 예스트레이더로 사용할 수 있도록 함수 변환 요청드립니다. n번째 봉에서 손실이면 n+1 봉 시가에 청산 Param : pBarsSE(5); if BarsSinceEntry = pBarsSE And OpenPositionProfit < 0 Then Begin if SignalPosition = 1 Then ExitLong("SLEL",Atmarket) Else if SignalPosition = -1 Then ExitShort("SLES",Atmarket); End; ====================================================== n번째 봉에서 손실이면 n+1 봉 종가에 청산 Param : pBarsSE(5); var : preOPP(0); if BarsSinceEntry = pBarsSE + 1 And preOPP < 0 Then Begin if SignalPosition = 1 Then ExitLong("SLEL") Else if SignalPosition = -1 Then ExitShort("SLES"); End; preOPP = OpenPositionProfit;
프로필 이미지
흰둥이아빠
2019-01-11
326
글번호 125211
시스템
답변완료

등락율 차트 부탁드려요

안녕하세요, 1)등락율차트를 구현하고 싶은데 당일시가기준과 전일종가기준 두가지로 바로바로 전환하여 사용할수 있게 부탁드립니다.(입력변수를 받아 바꾸면 바로 전환되거나, 차트표시 선택창에서 바로 클릭하여 선택하는 방법등이 있다는것 같은데요,제가 잘 모릅니다.) 2)그리고, 복수 종목의 차트를 띄운 상태에서 각각 종목의 현재 등락율차트 값을 합한 값을 나타내는 차트를 만드는 방법을 자세히 설명 부탁드리고 수식도 부탁드립니다. (A종목의 현재 등락율값과 B종목의 현재 등락율값을 합한 값을, 실시간으로 표시하는 차트를 만드는 것을 뜻합니다.) 감사합니다.
프로필 이미지
signal
2019-01-11
264
글번호 125209
지표
답변완료

수식 수정

여기서 일반거래량(V)이 아니라 아래와 같이 해주시면 고맙겠습니다 첫봉상승형체결거래량 < upvol(상승형 체결거래량) 첫봉하락형체결거래량 < DownVol(하락형 체결거래량) > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 체결거래량 수식 부탁드립니다 > 안녕하세요 예스스탁입니다. 소리출력함수는 사용자분이 지정한 경로의 wav파일이 구동됩니다. 아래는 예스트레이더에 기본으로 제공되는 wav파일을 지정했습니다. 원하시는 wav파일의 경로와 이름을 지정하시기 바랍니다. 게시판에서 식을 복사할 경우 경로명 중 ₩의 폰트가 깨질수 있으므로 ₩는 다시 타이핑하시기 바랍니다. if bdate != bdate[1] Then { var1 = Upvol; var2 = DownVol; } plot1(var1,"첫봉상승형거래량"); plot2(var2,"첫봉하락형거래량"); if V > var1 then { plot3(V,"거래량1"); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } if V > var2 then { plot4(V,"거래량2"); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } 즐거운 하루되세요 > 팔보채 님이 쓴 글입니다. > 제목 : 체결거래량 수식 부탁드립니다 > 질문1, upvol(상승형 체결거래량) -DownVol(하락형 체결거래량) 장시작 첫번째 캔들 상승형 체결거래량, 하락형 체결거래량 이은선을 부탁드립니다 질문2, 당일 장시작 첫번째 캔들 상승형 체결거래량, 하락형 체결거래량 보다 많은 체결거래량 부탁드립니다 질문3, 당일 장시작 첫번째 캔들 상승형 체결거래량, 하락형 체결거래량 보다 많은 체결거래량이 발생될때 소리나게 부탁드립니다
프로필 이미지
팔보채
2019-01-11
274
글번호 125206
지표
답변완료

macd 오실레이터 변환

언녕하세요 60789번질문 세번째 질문드립니다... 제가 말씀드린내용은 수치를 이야기 한게 아니라 솟피어리드를 전환선으로(수치가 아니라) 롱피어리드를 기준선으로 바꾸어 달라는 것입니다.. 바쁘시겠지만 부탁드립니다. 그 이유는 활용도가 있으리라 생각됩니다. 감사합니다
프로필 이미지
추세승리
2019-01-11
272
글번호 125205
지표
답변완료

TRIX 관련 문의 드립니다.

TRIX 5, 3 으로 진입 청산은 알겠는데요. TRIX 5, 3 으로 매수 진입 하고 난 후 TRIX 12, 9 로 매도 청산 하는 것은 모르겠습니다. 아래에서 어떻게 추가하면 되는지 부탁드립니다. Input : Period(5), sigPeriod(3); value1 = TRIX(Period); value2 = ema(value1, sigPeriod); # 매수/매도청산 If CrossUP(value1, value2) Then { Buy(); } # 매도/매수청산 If CrossDown(value1, value2) Then { Exitlong(); }
프로필 이미지
선물대장
2019-01-11
240
글번호 125190
시스템
답변완료

60806 추가 부탁드립니다~

추가 보완 부탁드립니다.
프로필 이미지
스캘퍼
2019-01-11
249
글번호 125186
지표