커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4442
글번호 230811
답변완료
지표수정부탁드립니다.
Input:n(5);
Var:j(0),sBar(0),eBar(0),TL1(0),TL2(0),Text1(0),처리구분("");
Array:고점[10,2](0),저점[10,2](0); //가격,위치
처리구분 = "";
If Highest(H,n)[n+1] <= H[n] and H[n] > Highest(H,n) and
Lowest(L,n)[n+1] >= L[n] and L[n] < Lowest(L,n) Then
{
If 저점[1,1] > L[n] Then 처리구분 = "저점처리";
If 고점[1,1] < H[n] Then 처리구분 = "고점처리";
}
Else If Highest(H,n)[n+1] <= H[n] and H[n] > Highest(H,n) Then 처리구분 = "고점처리";
Else If Lowest(L,n)[n+1] >= L[n] and L[n] < Lowest(L,n) Then 처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
If 고점[1,2] < 저점[1,2] Then
{
For j = 10 DownTo 2
{
고점[j,1] = 고점[j-1,1];
고점[j,2] = 고점[j-1,2];
}
}
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H[n] Then
{
고점[1,1] = H[n]; 고점[1,2] = Index - n;
sBar = Index - 저점[1,2];
eBar = n;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],sDate[eBar],sTime[eBar],고점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1]*1.002,NumToStr(고점[1,1],2));
Text_SetStyle(Text1, 2, 1);
If 고점[2,1] > 고점[1,1] and 고점[2,1] > 고점[3,1] and 저점[2,1] < 저점[1,1] Then
{
TL_SetExtRight(TL2,False);
sBar = Index - 저점[2,2];
eBar = Index - 저점[1,2];
TL2 = TL_New(sDate[sBar],sTime[sBar],저점[2,1],sDate[eBar],sTime[eBar],저점[1,1]);
TL_SetExtRight(TL2,True);
TL_SetColor(TL2,BLUE);
}
}
}
If 처리구분 == "저점처리" Then
{
If 저점[1,2] < 고점[1,2] Then
{
For j = 10 DownTo 2
{
저점[j,1] = 저점[j-1,1];
저점[j,2] = 저점[j-1,2];
}
}
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L[n] Then
{
저점[1,1] = L[n];
저점[1,2] = Index - n;
sBar = Index - 고점[1,2]; eBar = n;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],sDate[eBar],sTime[eBar],저점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1]*0.998,NumToStr(저점[1,1],2));
Text_SetStyle(Text1, 2, 0);
If 저점[2,1] < 저점[1,1] and 저점[2,1] < 저점[3,1] and 고점[2,1] > 고점[1,1] Then
{
TL_SetExtRight(TL2,False);
sBar = Index - 고점[2,2];
eBar = Index - 고점[1,2];
TL2 = TL_New(sDate[sBar],sTime[sBar],고점[2,1],sDate[eBar],sTime[eBar],고점[1,1]);
TL_SetExtRight(TL2,True);
TL_SetColor(TL2,RED);
}
}
}
TL_SetSize(TL1,3);
TL_SetColor(TL1,GRAY);
TL_SetSize(TL2,3);
TL_SetColor(TL2,BLACK);
위의 수식을 적용하면 수치값이 너무 차트 위 아래로 간격이 넓습니다.
수치값이 차트 바로 위 아래로 나올수 있게 수정부탁드립니다. 꾸벅
2018-10-09
211
글번호 122547
답변완료
답변감사합니다 그런데
이평선 겹치기 적용을 어떻게 해야하는지 모르겠습니다.
수식을 입력해서 저장한 후 더블클릭했더니 차트 아래쪽에 공란의 지표가 하나 추가되고
기존의 이평선 수식에다 같이 집어넣었더니 아무런 일도 벌어지지 않습니다.
다른분한테 해주셨던 답변을 찾아보니 제게 주신 수식과는 다르던데 아마도 같은
결과가 나오는 지표인것 같긴 합니다. 그런데 그걸 해봐도 똑같은 일이 벌어지는걸 보니
아무래도 제가 수식을 적용하는 방법을 제대로 하지 않은 듯 합니다.
예스랭귀지편집기-지표 눌러서 수식 넣은 후 저장했는데
이평선은 이렇게 하면 안되는건가요?
+
(위의 질문을 드린 후, 지금 이리저리 적용을 해보니, 다른 이평선 수식에
답변 주신 수식을 같이 넣으면 나오긴 나오는데 다음의 조건이 맞춰져야 나옵니다.
300틱 차트봉 개수를 500개 정도로 하면 900틱의 이평선이 나옵니다.
대신 300틱의 10이평선이 사라집니다.
아무래도 기존의 10,20,30선 수식에서 10선이 900-15와 지정이 겹쳐져서 그런것 같습니다)
답변 부탁합니다. 좋은 하루 되세요.
-해주신 답변-
안녕하세요
예스스탁입니다.
nbar에 합칠봉수를 지정해 주시면 됩니다.
300틱에서 900틱이면 3입니다.
input : nbar(3),P(20);
var : idx(0),D1(0),TM(0),TF(0);
var : cnt(0),sum1(0),mav1(0);
Array : C1[100](0);
if Bdate != Bdate[1] Then{
D1 = sdate;
idx = 0;
}
Else
{
idx = idx+1;
}
if D1 > 0 then
{
TF = idx%nbar;
if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then
{
for cnt = 1 to 99
{
C1[cnt] = C1[cnt-1][1];
}
}
C1[0] = C;
if C1[P] > 0 then{
sum1 = 0;
for cnt = 0 to P-1{
sum1 = sum1+C1[cnt];
}
mav1 = sum1/P;
plot1(mav1);
}
}
즐거운 하루되세요
-제가했던 질문-
> 견유학자 님이 쓴 글입니다.
> 제목 : 질문드립니다.
> 제가 지금 보는 차트는 300틱 30이평선 입니다.
여기에다
900틱 20이평선을 겹쳐넣는 수식이 있을까요?
완전 똑같지는 않아도 거의 같은 정도면 만족합니다.
def1굵기의 녹색(GREEN)이면 좋겠습니다.
감사합니다.
-다른분의 유사질문에 해주셨던 답변. 수식 다름-
Re : 틱차트 이평선을 타틱차트에 적용
안녕하세요
예스스탁입니다.
다른주기는 차트보다 높은 주기만 가능하고
배수로 높아야만 가능합니다.
120틱에서 240틱, 360틱은 가능하지만 300틱은 가능하지 않습니다.
틱봉을 분봉에 적용은 계산가능하지 않습니다.
input : tick(360),P(20);
var : S1(0),D1(0),TM(0),TF(0),idx(0),bars(0);
var : cnt(0),sum1(0),mav1(0);
Array : C1[100](0);
bars = floor(tick/BarInterval);
if Bdate != Bdate[1] Then
{
idx = 0;
D1 = sdate;
}
Else
idx = idx+1;
if D1 > 0 then
{
TF = idx%bars;
if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then
{
for cnt = 1 to 99
{
C1[cnt] = C1[cnt-1][1];
}
}
C1[0] = C;
if C1[P] > 0 then{
sum1 = 0;
for cnt = 0 to P-1{
sum1 = sum1+C1[cnt];
}
mav1 = sum1/P;
plot1(mav1);
}
}
2018-10-09
223
글번호 122546
답변완료
질문입니다.
input : N(0);
var : cnt(0);
Array : DO[10](0),DH[10](0),DL[10](0),DC[10](0);
if (sdate != sdate[1] and stime >= 100000) or
(sdate == sdate[1] and (Stime == 100000 or (stime > 100000 and stime[1] < 100000))) Then{
DO[0] = O;
DH[0] = H;
DL[0] = L;
for cnt = 1 to 9{
DO[cnt] = DO[cnt-1][1];
DH[cnt] = DH[cnt-1][1];
DL[cnt] = DL[cnt-1][1];
DC[cnt] = DC[cnt-1][1];
}
}
if H > DH[0] Then
DH[0] = H;
if L < DL[0] Then
DL[0] = L;
DC[0] = C;
Plot1(DO[0]);
이거 사용하고 있는데
항셍 시가를 10시15분부터 출발해서 다음날 시가 10시15분까지 선으로 쭉 되어 있는데요
제가 원하는게
10시 15분 시가 출발해서 야간장까지 끝 선 끝나고! 야간장 시가 새로 출발해서 다음날 시가 10시 15분까지 선을 나오게 하면서 끝나게 할 수 없을까요?
지금 소스는 그냥 10시 15분 부터 다음날 10시 15분까지 유지 되어 있어서 좀 불편합니다. 잘 부탁드립니다.
감사합니다.
2018-10-08
194
글번호 122545
답변완료
검색식 작성부탁합니다
사용보조지표 : DMI 지표
지표기간(period) : 60
조건식
1. D+> D- 이고(AND), 2. DMI 가 50 돌파
1, 2 조건식 동시에 달성하는 조건검색식 부탁합니다
2018-10-08
212
글번호 122544
답변완료
이격도13
안녕하세요 관리자님!!
아래수식은 관리자님이 보내주신 전일의 최저,-(최고가)에서 시작하는 이격도의 접점을 분봉차트내에서 수평선으로 표시해주는 서식입니다.
다름이 아니오라 이 접점을 표시해주는 수평선을 중심선으로 하고 전일의 -(최고가),최저가에서 시작되는 이격도를 표현하고 싶습니다. 당연히 점접이 여러개이거나 없다면 마지막에 형성된 접점에서 오늘의 이격도가 시작되도록 부탁드립니다. 항상번거롭게 해드려 죄송합니다.
- 아 래 -
var : C1(0);
var1 = dayopen;
value1 = C/var1*100-100;#오늘주가
var2 = (DayHigh(1)-dayopen(1))+dayopen;
value2 = -(C/var2*100-100); #전일최고
var3 = dayopen-(DayOpen(1)-DayLow(1));
value3 = (C/var3*100-100); #전일최저
if crossup(value2,value3) or CrossDown(value1,value3) Then
C1 = C;
plot1(C1,"접점");
plot2(dayopen(0),"오늘시가");
2018-10-08
203
글번호 122543
답변완료
재질문 드립니다.
안녕하십니까 수식작성 진심으로 감사 드립니다
아래와 같이 관리자님 께서 작성 하여 주셨는데..검증과정에서는 이상이 없는데
시스템 적용시 매수 매도 신호가 안나옵니다..
필요 하시면 화면 첨부 하겠습니다.
감사합니다.
----------------------------------------------------
안녕하세요
예스스탁입니다.
Input : short(12), long(26), signal(9),Period(14),P(10);
Var : MACDO(0),DMIv(0),mav(0);
#MACDO 오실레티어
MACDO = MACD_OSC(short, long,signal);
#DMI
DMIv = DMI(Period);
#이평
mav = ma(C,P);
#이평,MACD오실레이터,DMI가 모두 상승일때 매수
#or로 변경 --> mav > mav[1] and (MACDO > MACDO[1] or DMIv > DMIv)
if mav > mav[1] and (MACDO > MACDO[1] and DMIv > DMIv) Then
buy("b");
#MACD오실레이터 하락하면 청산
if MarketPosition == 1 and MACDO < MACDO[1] Then
ExitLong("bx");
즐거운 하루되세요
> 대한이 님이 쓴 글입니다.
> 제목 : 수식 작성 문의 드립니다.
> 안녕하십니까
수식 부탁드립니다.
직접 해보고 싶었으나, 언제 완성될지 모르겠네요
일반 종목이나, ETF 30분봉에 적용 시켜볼 생각 입니다.
잘부탁 드립니다.
- 매수
1. MACD 오실레이터 AND DMI 상승(AND 나 OR 둘다 테스트 해볼 생각 입니다)
* 필터 : 현재 10일 평균가격이 직전 10일 평균가격보다 높을 경우
(10일선 하락 중인 경우 매수 안함)
- 매도
1. MACD 오실레이터 하락 전환
-MACD 오실레이터 하락, 상승은 음에서는 길이가 짧아지고, 양에서는 길어지면 상승으로 표현 했고 반대의 경우 하락
처음 입문하는 거라 이것 저것 모르는게 너무 많습니다.
공부의 의미로 주석도 달아 주시면 진심으로 감사하겠습니다.
잘부탁 드립니다.
수고하십시오.
2018-10-08
178
글번호 122542
답변완료
부탁드립니다.
항상 도움 주심에 깊이 감사 드립니다.
아래수식을 data2를 이용하여 현재 타주기 지표로 사용하고 있으나
시스템용으로 사용하고자 하니 불편하여
data2를 사용하지 않는
타주기 수식(분용)으로 부탁 드리고자 합니다.
함수로 변환하여 시스템용으로
사용코자 하오니 다소 번거럽더라도
간곡히 부탁 드립니다.
미리 경배로 감사 드립니다.
input:p1(5),p2(15),sig(3);
var:m1(0);
m1=(h+l)/2;
var1=ma(m1,p1)-ma(m1,p2);
var2=ma(var1,sig);
var3=c-var2;
2018-10-09
193
글번호 122541
답변완료
안녕하세요
0
2018-10-22
199
글번호 122540
답변완료
안녕하세요
0
2018-10-22
193
글번호 122539