커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

주봉 인덱스

안녕하세요 이전 답변에 대한 재질문 드립니다. 말씀하신 주봉, 월봉에 인덱스를 부여할 수 있을까요..? 마치 주봉 차트에서 인덱스가 있듯이 일봉에서 함수로 표현된 주봉,월봉이 모두 인덱스 할당이 가능하여 맨 초기 주봉부터 현 주봉까지의 종가의 합을 구한다던가 그런 식의 구현이 가능한지 궁금합니다! /////////////////////////////////////////////////////////////////////////// 안녕하세요 예스스탁입니다. 주봉, 월봉의 시고저종은 별도로 불러오는 함수가 없습니다. 아래와 같이 계산해 사용하셔야 합니다. 각 배열변수 [0]은 당주/당월, [1]은 전주, 전월, [2]는 전전주, 전전월..순으로 값이 저장됩니다. var : cnt(0); Array : MO[50](0),MH[50](0),ML[50](0),MC[50](0); Array : WO[50](0),WH[50](0),WL[50](0),WC[50](0); if bdate > bdate[1]+30 Then { MO[0] = O; MH[0] = H; ML[0] = L; for cnt = 1 to 49 { MO[cnt] = MO[cnt-1][1]; MH[cnt] = MH[cnt-1][1]; ML[cnt] = ML[cnt-1][1]; MC[cnt] = MC[cnt-1][1]; } } MC[0] = C; if H > MH[0] Then MH[0] = H; if L < ML[0] Then ML[0] = L; if DayOfWeek(bdate) < DayOfWeek(bdate[1]) Then { WO[0] = O; WH[0] = H; WL[0] = L; for cnt = 1 to 49 { WO[cnt] = WO[cnt-1][1]; WH[cnt] = WH[cnt-1][1]; WL[cnt] = WL[cnt-1][1]; WC[cnt] = WC[cnt-1][1]; } } if H > WH[0] Then WH[0] = H; if L < WL[0] Then WL[0] = L; 즐거운 하루되세요 > 히익 님이 쓴 글입니다. > 제목 : 주봉 월봉 > 혹시 일봉 차트에서 예스랭귀지 작성 시 주봉, 월봉데이터를 불러오는 함수값이 있울까요?
프로필 이미지
히익
2022-07-11
1599
글번호 160615
시스템
답변완료

지표수식

안녕하세요 늘...항상 감사 드립니다 30분봉에 볼린저 밴드를 더 작은봉에 표현하고 싶습니다 예를들면 3분봉이나 5분봉에요.. 그리고 30분봉의 이평도 3분봉이나 5분봉에 볼 수 있게요... 부탁드립니다 꾸벅
프로필 이미지
하늘의거울
2022-07-11
1626
글번호 160614
지표
답변완료

수식 의뢰 드립니다!

안녕하세요! 궁금한게 있어서 문의드립니다! 1. 해외선물(국내선물 포함) > 예) 호주 달러와 뉴질랜드 달러 2종목을 한 챠트에 합쳐서 매매에 도움을 받고 싶습니다! 합치는 과정을 알려 주시길 부탁 드립니다! 2. 챠트에서 합쳐진 호주 달러의 현재가 와 뉴질랜드 달러의 현재가 간에 진폭 (가격의 격차)를 실시간으로 챠트에 숫자로 나타나는 수식을 만들어 매매에 도움을 받고 싶습니다! 항상 노고에 다시 한번 감사드립니다!
프로필 이미지
qha71
2022-07-11
1545
글번호 160613
지표
답변완료

데이타2수식으로 부탁드립니다.

var : price(0),a(0),b(0),size(0); price = close; size = iff((a[1]-a[2]) > 0 or (b[1]-b[2]) < 0 , atr(20) ,TrueRange); if a[1] > a[2] Then { Condition1 = true; var1 = 0; } Else { if Condition1 == true Then var1 = var1+1; } a = max(price,a[1]) - size/pow(10,2)*(var1*2); plot1(a,"a");
프로필 이미지
아름다운아침
2022-07-10
1407
글번호 160612
지표
답변완료

수식 부탁드립니다

수고하십니다. 아래 지표에서 첨부 그림처럼 변곡점 상하 +/- 0.5 위치에 점표시를 하고 싶습니다. 수고하세요.. ########## Input:length(30); Var:최종고가(0),최종저가(0),최종변곡점(""),처리구분(""),sBar(0),TL1(0), 고추세기울기(0),고추세봉개수(0),고추세시작(0),고추세시작IDX(0),고추세최종(0), 저추세기울기(0),저추세봉개수(0),저추세시작(0),저추세시작IDX(0),저추세최종(0); Var:고1(0),고2(0),고3(0),고4(0),고5(0),고6(0),고7(0),고8(0),고9(0),고10(0), 저1(0),저2(0),저3(0),저4(0),저5(0),저6(0),저7(0),저8(0),저9(0),저10(0), 고1IDX(0),고2IDX(0),고3IDX(0),고4IDX(0),고5IDX(0), 고6IDX(0),고7IDX(0),고8IDX(0),고9IDX(0),고10IDX(0), 저1IDX(0),저2IDX(0),저3IDX(0),저4IDX(0),저5IDX(0), 저6IDX(0),저7IDX(0),저8IDX(0),저9IDX(0),저10IDX(0); var : t(0),ii(0); #==========================================# Condition1 = Highest(C,length) == C and 최종고가 <> C; Condition2 = Lowest (C,length) == C and 최종저가 <> C; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종변곡점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리 Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리 } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = C; // 신규고점을 체크하기 위해 저장 If 최종변곡점 == "저점" Then { 고9 = 고8; 고9IDX = 고8IDX; 고8 = 고7; 고8IDX = 고7IDX; 고7 = 고6; 고7IDX = 고6IDX; 고6 = 고5; 고6IDX = 고5IDX; 고5 = 고4; 고5IDX = 고4IDX; 고4 = 고3; 고4IDX = 고3IDX; 고3 = 고2; 고3IDX = 고2IDX; 고2 = 고1; 고2IDX = 고1IDX; 고1 = C; 고1IDX = Index; sBar = Index - 저1IDX; // 추세선 시작점의 위치, n봉전으로 표시 TL1 = TL_New(sDate[sBar],sTime[sBar],저1,sDate[0],sTime[0],고1); TL_SetSize(TL1,1); TL_SetColor(TL1,ReD); } Else If 고1 < C Then // 1번 고점보다 높은 고가 출현 { 고1 = C; 고1IDX = Index; TL_SetEnd(TL1,sDate[0],sTime[0],고1); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 } /* 고점추세선 */ If 고2IDX[1] <> 고2IDX Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음 { 고추세최종 = 0; 고추세기울기 = 0; 고추세시작 = 0; 고추세봉개수 = 0; If 고2 < 고3 Then { 고추세기울기 = (고2 - 고3)/(고2IDX - 고3IDX); 고추세시작 = 고3; 고추세시작IDX = 고3IDX; } Else If 고2 < 고4 Then { 고추세기울기 = (고2 - 고4)/(고2IDX - 고4IDX); 고추세시작 = 고4; 고추세시작IDX = 고4IDX; } Else If 고2 < 고5 Then { 고추세기울기 = (고2 - 고5)/(고2IDX - 고5IDX); 고추세시작 = 고5; 고추세시작IDX = 고5IDX; } Else If 고2 < 고6 Then { 고추세기울기 = (고2 - 고6)/(고2IDX - 고6IDX); 고추세시작 = 고6; 고추세시작IDX = 고6IDX; } Else If 고2 < 고7 Then { 고추세기울기 = (고2 - 고7)/(고2IDX - 고7IDX); 고추세시작 = 고7; 고추세시작IDX = 고7IDX; } Else If 고2 < 고8 Then { 고추세기울기 = (고2 - 고8)/(고2IDX - 고8IDX); 고추세시작 = 고8; 고추세시작IDX = 고8IDX; } Else If 고2 < 고9 Then { 고추세기울기 = (고2 - 고9)/(고2IDX - 고9IDX); 고추세시작 = 고9; 고추세시작IDX = 고9IDX; } 고추세봉개수 = Index - 고추세시작IDX; 고추세최종 = 고추세기울기 * 고추세봉개수 + 고추세시작; } Else If 고추세최종[1] > 0 Then { 고추세최종 = 고추세기울기 * (Index - 고추세시작IDX) + 고추세시작; } If 저추세최종[1] > 0 Then { 저추세최종 = 저추세기울기 * (Index - 저추세시작IDX) + 저추세시작; } 최종변곡점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = C; If 최종변곡점 == "고점" then { 저9 = 저8; 저9IDX = 저8IDX; 저8 = 저7; 저8IDX = 저7IDX; 저7 = 저6; 저7IDX = 저6IDX; 저6 = 저5; 저6IDX = 저5IDX; 저5 = 저4; 저5IDX = 저4IDX; 저4 = 저3; 저4IDX = 저3IDX; 저3 = 저2; 저3IDX = 저2IDX; 저2 = 저1; 저2IDX = 저1IDX; 저1 = C; 저1IDX = Index; sBar = Index - 고1IDX; TL1 = TL_New(sDate[sBar],sTime[sBar],고1,sDate[0],sTime[0],저1); TL_SetSize(TL1,1); TL_SetColor(TL1,BluE); } Else If 저1 > C then { 저1 = C; 저1IDX = Index; TL_SetEnd(TL1,sDate[0],sTime[0],저1); } /* 저점추세선 */ If 저2IDX[1] <> 저2IDX Then { 저추세최종 = 0; 저추세기울기 = 0; 저추세시작 = 0; 저추세봉개수 = 0; If 저2 > 저3 and 저3 > 0 Then { 저추세기울기 = (저2 - 저3)/(저2IDX - 저3IDX); 저추세시작 = 저3; 저추세시작IDX = 저3IDX; } Else If 저2 > 저4 and 저4 > 0 Then { 저추세기울기 = (저2 - 저4)/(저2IDX - 저4IDX); 저추세시작 = 저4; 저추세시작IDX = 저4IDX; } Else If 저2 > 저5 and 저5 > 0 Then { 저추세기울기 = (저2 - 저5)/(저2IDX - 저5IDX); 저추세시작 = 저5; 저추세시작IDX = 저5IDX; } Else If 저2 > 저6 and 저6 > 0 Then { 저추세기울기 = (저2 - 저6)/(저2IDX - 저6IDX); 저추세시작 = 저6; 저추세시작IDX = 저6IDX; } Else If 저2 > 저7 and 저7 > 0 Then { 저추세기울기 = (저2 - 저7)/(저2IDX - 저7IDX); 저추세시작 = 저7; 저추세시작IDX = 저7IDX; } Else If 저2 > 저8 and 저8 > 0 Then { 저추세기울기 = (저2 - 저8)/(저2IDX - 저8IDX); 저추세시작 = 저8; 저추세시작IDX = 저8IDX; } Else If 저2 > 저9 and 저9 > 0 Then { 저추세기울기 = (저2 - 저9)/(저2IDX - 저9IDX); 저추세시작 = 저9; 저추세시작IDX = 저9IDX; } 저추세봉개수 = Index - 저추세시작IDX; 저추세최종 = 저추세기울기 * 저추세봉개수 + 저추세시작; } Else If 저추세최종[1] > 0 Then { 저추세최종 = 저추세기울기 * (Index - 저추세시작IDX) + 저추세시작; } If 고추세최종[1] > 0 Then { 고추세최종 = 고추세기울기 * (Index - 고추세시작IDX) + 고추세시작; } 최종변곡점 = "저점"; }
프로필 이미지
오이도인
2022-07-10
1709
글번호 160611
지표
답변완료

상승률 합

안녕하세요 개발자님. 차트 초기 봉부터 가격 상승률의 총합을 구하려고 합니다. 근데 거의 모든 자산에서 1025 봉 부터 오류가 나오더라구요. 올바른 값이 나오게 하려면 어떻게 해야할까요? 항상 도움주셔서 감사합니다. Var11=Round((C/C[1]-1)*100,2); Var10=0; ////////////////////////////////////////////////////////// Var : cnt(0); For cnt = 0 to Index-1 step 1 { Var10=Var10+Var11[cnt]; } ///////////////////////////////////////////////////////// MessageLog("%.2f %.2f %.2f",Var11,Var10,Index);
프로필 이미지
히익
2022-07-10
1573
글번호 160610
시스템
답변완료

super trend 지표

갬블러님의 super trend지표를 보고 매수/매도 시스템식으로 하고 싶은데 이렇게하면 되는지 검토 부탁드립니다. [지표식] input : factor(3), AtrPeriod(10); var : src(0), AtrV(0),upperBand(0),lowerBand(0), prevLowerBand(0), prevUpperBand(0); var : prevSuperTrend(0), superTrend(C), direction(0),alpha(0),source(0); if CurrentBar > 1 Then { src = (H+L)/2; // ATR계산(ATR 계산시 지수가중이동평균(rma)이용) alpha = 1 / AtrPeriod ; source = max(high - low, abs(high - close[1]), abs(low - close[1])); ATrV = alpha * source + (1 - alpha) * ATrV[1]; upperBand = src + factor * AtrV; lowerBand = src - factor * AtrV; prevLowerBand = lowerBand[1]; prevUpperBand = upperBand[1]; if lowerBand > prevLowerBand or close[1] < prevLowerBand Then lowerBand = lowerBand; Else lowerBand = prevLowerBand; if upperBand < prevUpperBand or close[1] > prevUpperBand Then upperBand = upperBand; Else upperBand = prevUpperBand; if C > UpperBand Then direction = 1; if C < LowerBand Then direction = -1; if direction == 1 Then supertrend = lowerband; Else supertrend = upperband; } if C > superTrend Then { Plot1(superTrend,"UpTrend", Pink, 0, 5); NoPlot(2); } Else { Plot2(superTrend,"DnTrend", green, 0, 5); NoPlot(1); } if direction == 1 and direction[1] == -1 Then plot3(superTrend,"BuyStart",Red,0,15); if direction == -1 and direction[1] == 1 Then plot4(superTrend,"SellStart",Blue,0,15); [매수매도 시스템식] input : factor(3), AtrPeriod(10); var : src(0), AtrV(0),upperBand(0),lowerBand(0), prevLowerBand(0), prevUpperBand(0); var : prevSuperTrend(0), superTrend(C), direction(0),alpha(0),source(0); if CurrentBar > 1 Then { src = (H+L)/2; // ATR계산(ATR 계산시 지수가중이동평균(rma)이용) alpha = 1 / AtrPeriod ; source = max(high - low, abs(high - close[1]), abs(low - close[1])); ATrV = alpha * source + (1 - alpha) * ATrV[1]; upperBand = src + factor * AtrV; lowerBand = src - factor * AtrV; prevLowerBand = lowerBand[1]; prevUpperBand = upperBand[1]; if lowerBand > prevLowerBand or close[1] < prevLowerBand Then lowerBand = lowerBand; Else lowerBand = prevLowerBand; if upperBand < prevUpperBand or close[1] > prevUpperBand Then upperBand = upperBand; Else upperBand = prevUpperBand; if C > UpperBand Then direction = 1; if C < LowerBand Then direction = -1; if direction == 1 Then supertrend = lowerband; Else supertrend = upperband; } if direction == 1 and direction[1] == -1 Then Buy(); if direction == -1 and direction[1] == 1 Then Sell();
프로필 이미지
theogo66
2022-07-10
1907
글번호 160609
시스템
답변완료

수식 부탁합니다

MACD(12,26,9) Golden Cross 발생종목 전제 조건 1) MACD Dead cross 발생 한후 2번째 Golden Cross 일것
프로필 이미지
미래테크
2022-07-10
1541
글번호 160608
종목검색
답변완료

문의 드립니다.~~~~

전에 올려주신 답변인데 이해가 부족하여 공부를 위해 자세한 주석 부탁드립니다. 그리고 고점 저점에 대한 판단은 n틱이상 조정 받은 전고점과 전저점을 고점과 저점의 판단 기준으로 삼고 싶습니다. > 예스요 님이 쓴 글입니다. > 제목 : 문의 드립니다.~~~~ > 항상 감사합니다. -전저점 대비 a틱(변수)이상 상승 후 b틱(변수)이상 하락시 고점처리 ( 챠트에 저점과 고점을 차이 틱수를 고점에 출력하고 저점과 고점을 연결하는 추세선(빨강)그림 ) -전고점 대비 b틱(변수)이상 하락 후 a틱(변수)이상 상승시 저점 처리( 챠트에 고점과 저점의 차이 차이 틱수를 저점에 출력하고 고점과 저점을 연결하는 추세선(파랑)그림) -매수진입: 저점 형성후 전고점을 돌파하여 전고점대비 c틱(변수) 상승지점에서 매수 진입. -매도진입: 고점 형성후 전저점을 돌파하여 전저점대비 c틱(변수) 하락지점에서 매도 진입. - 장중 내내 위 진입을 계속 반복하는 수식 부탁드립니다. 안녕하세요 예스스탁입니다. 올리신 내용에 기준이 되는 고점과 저점 판단에 대한 내용이 없습니다. 게시판에 많이 사용되는 지그재그 식을 이용해 작성해 드립니다. input:length(5),a틱(10),b틱(10),c틱(5); Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),Text1(0),process(0),T(0); Array:HH[10,2](0),LL[10,2](0); process = 0; If Highest(H,length) == H and lastHiVal <> H and Lowest(L,length) == L and lastLoVal <> L Then { If LL[1,1] > L Then process = -1; If HH[1,1] < H Then process = 1; } Else If Highest(H,length) == H and lastHiVal <> H Then process = 1; Else If Lowest(L,length) == L and lastLoVal <> L Then process = -1; If process == 1 Then { T = 1; lastHiVal = H; If HH[1,2] < LL[1,2] Then { For j = 10 DownTo 2 { HH[j,1] = HH[j-1,1]; HH[j,2] = HH[j-1,2]; } } If HH[1,2] < LL[1,2] or HH[1,1] < H Then { HH[1,1] = H; HH[1,2] = Index; sBar = Index - LL[1,2]; eBar = 0; If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then { TL_Delete(TL1); Text_Delete(Text1); } if LL[1,1] > 0 Then { TL1 = TL_New(sDate[sBar],sTime[sBar],LL[1,1],sDate[eBar],sTime[eBar],HH[1,1]); Text1 = Text_New(sDate[eBar],sTime[eBar],HH[1,1],"+"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,0)); Text_SetStyle(Text1, 2, 1); } Else { Text_Delete(text1); Text1 = Text_New(sDate[eBar],sTime[eBar],HH[1,1],"+"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,2)); Text_SetStyle(Text1, 2, 1); } Text_SetStyle(Text1, 2, 1); } if MarketPosition <= 0 and HH[2,1] >= LL[2,1]+PriceScale*a틱 and LL[1,1] <= HH[2,1]-PriceScale*b틱 Then Buy("b",AtStop,HH[2,1]+PriceScale*c틱); } If process == -1 Then { T = -1; lastLoVal = L; If LL[1,2] < HH[1,2] Then { For j = 10 DownTo 2 { LL[j,1] = LL[j-1,1]; LL[j,2] = LL[j-1,2]; } } If LL[1,2] < HH[1,2] or LL[1,1] > L Then { LL[1,1] = L; LL[1,2] = Index; sBar = Index - HH[1,2]; eBar = 0; If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then { TL_Delete(TL1); Text_Delete(Text1); } if HH[1,1] > 0 Then { TL1 = TL_New(sDate[sBar],sTime[sBar],HH[1,1],sDate[eBar],sTime[eBar],LL[1,1]); Text1 = Text_New(sDate[eBar],sTime[eBar],LL[1,1],"-"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,0)); Text_SetStyle(Text1, 2, 0); } Else { Text_Delete(text1); Text1 = Text_New(sDate[eBar],sTime[eBar],LL[1,1],"-"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,0)); Text_SetStyle(Text1, 2, 0); } } if MarketPosition >= 0 and LL[2,1] <= HH[2,1]-PriceScale*a틱 and HH[1,1] >= LL[2,1]+PriceScale*b틱 Then Sell("s",AtStop,LL[2,1]-PriceScale*c틱); }
프로필 이미지
예스요
2022-07-10
1912
글번호 160607
시스템