커뮤니티
예스랭귀지 Q&A
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1463
글번호 230811
고래상어의꿈 님에 의해서 삭제되었습니다.
2024-01-21
3
글번호 175939
답변완료
질문드려요
두가지 신호를 동시에 만족시키는 종목을 검색하고 싶어요
부탁드립니다.
신호1
a=avg(c,5);
b=avg(c,20);
d=avg(c,60);
D1=(A+B+D)/3;
A1=(highest(high,9)+lowest(low,9))/2;
B1=(highest(high,26)+lowest(low,26))/2;
B2=(A1+B1)/2;
A3=RSI(9)-50;
B3=CMO(12)*0.5;
B4=A3+B3;
B5=eavg(C,120);
(crossup(B2,D1) or crossup(D1,B5) or crossup(B2,B5))
신호2
Bu=BBandsUp(20,2);
CrossUp(C, Bu(25))
2024-01-21
1076
글번호 175938
답변완료
질문드려요
신호수식인데 이신호로 종목검색하고 싶어요
부탁드립니다.
M= ma(C, 240, 삼각);
HH = HighestSince(1, CrossUp(C, M), H);
Bs = BarsSince(CrossUp(C, M))+1;
cnt = CountSince(CrossUp(C, M), C>M);
조건=
Bs == cnt &&
CrossUp(C, HH(1)) &&
Bs>20;
첫신호 = CountSince(CrossUp(C, M), 조건);
첫신호 ==1 && 첫신호(1)==0
2024-01-21
1131
글번호 175937
답변완료
문의드립니다
렌코차트식 검색하다 발견한 지표식인데요
주봉에 적용하니까 이상하게 나옵니다 (오류)
그리고 upperline, lowline 등은 아예 표시도 안되네요
수정 좀 부탁합니다
감사합니다
input:renkoSize(0.5),length(10),NumATRs(1.5);
var:j(0),k(0),renkoCnt(0),gubun(0),Sum(0),trSum(0),atrV(0),time1(0),filename("renko3.txt"),printOK(False);
array:OO[50](0),HH[50](0),LL[50](0),CC[50](0),
TR[50](0), //True Range
upperLine[50](0), //상단채널
lowerLine[50](0), //하단채널
maV[50](0); //이평선
if stime >= 180000 or stime < 090000 then{
If index == 0 or (stime == 180000) or (stime > 180000 and stime[1] < 180000) Then { //break on session에 해당, 즉 일자가 바뀌면 새로 계산
gubun = 0; //방향을 초기화한다. 이후 형성되는 가격에 의해 방향이 계산
For j = 49 DownTo 1 { //금일 시가봉을 신규 추가
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
TR[j] = TR[j-1];
maV[j] = maV[j-1];
upperLine[j] = upperLine[j-1];
lowerLine[j] = lowerLine[j-1];
}
OO[0] = C; //분봉의 종가를 기반으로 계산하기 때문에 당일 시초가 아니다
HH[0] = C;
LL[0] = C;
CC[0] = C;
}
Else {
If gubun == 0 and CC[0] > 0 Then { //일 첫봉이 완성되지 않은 시점
If OO[0] - renkoSize >= C Then {
gubun = -1; //하락 방향
CC[0] = OO[0] - renkoSize; //음봉
HH[0] = OO[0];
LL[0] = CC[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]); //true range 계산식 참조
//macd 계산 당시와 마찬가지로 sum 값이 있을 때만 처리
If sum > 0 Then {
sum = sum + CC[0] - CC[length]; //이평선 계산 원리 그대로, 현재가를 더하고 n봉전 가격 뺌
trSum = trSum + TR[0] - TR[length]; //true range의 합을 계산
maV[0] = Sum / length; //n개의 종가 합을 n으로 나누어 이동평균 계산
atrV = trSum / length; //ATR 계산식 참조
upperLine[0] = maV[0] + atrV * NumATRs; //상단 밴드 계산
lowerLine[0] = maV[0] - atrV * NumATRs; //하단 밴드 계산
}
j = 0;
if printOK then print(filename,"1=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
Else If OO[0] + renkoSize <= C Then {
gubun = 1; //상승 방향
CC[0] = OO[0] + renkoSize; //양봉
HH[0] = CC[0];
LL[0] = OO[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
If sum > 0 Then { //계속 반복되는 공통 루틴이므로 if문 바깥으로 뺄까도 했으나
sum = sum + CC[0] - CC[length]; //더 복잡해지므로 copy & paste로 처리
trSum = trSum + TR[0] - TR[length];
maV[0] = Sum / length;
atrV = trSum / length;
upperLine[0] = maV[0] + atrV * NumATRs;
lowerLine[0] = maV[0] - atrV * NumATRs;
}
j = 0;
if printOK then print(filename,"2=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
If LL[0] - renkoSize >= C Then {
gubun = -1;
renkoCnt = Int(Round((LL[0]-C)/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
TR[j] = TR[j-renkoCnt];
maV[j] = maV[j-renkoCnt];
upperLine[j] = upperLine[j-renkoCnt];
lowerLine[j] = lowerLine[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = LL[j+1];
CC[j] = LL[j+1] - renkoSize;
HH[j] = OO[j];
LL[j] = CC[j];
TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
If sum > 0 Then {
sum = sum + CC[j] - CC[j+length];
trSum = trSum + TR[j] - TR[j+length];
maV[j] = Sum / length;
atrV = trSum / length;
upperLine[j] = maV[j] + atrV * NumATRs;
lowerLine[j] = maV[j] - atrV * NumATRs;
}
if printOK then print(filename,"3=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If HH[0] + renkoSize <= C Then {
gubun = 1;
renkoCnt = Int(Round((C-HH[0])/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
TR[j] = TR[j-renkoCnt];
maV[j] = maV[j-renkoCnt];
upperLine[j] = upperLine[j-renkoCnt];
lowerLine[j] = lowerLine[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = HH[j+1];
CC[j] = HH[j+1] + renkoSize;
HH[j] = CC[j];
LL[j] = OO[j];
TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
If sum > 0 Then {
sum = sum + CC[j] - CC[j+length];
trSum = trSum + TR[j] - TR[j+length];
maV[j] = Sum / length;
atrV = trSum / length;
upperLine[j] = maV[j] + atrV * NumATRs;
lowerLine[j] = maV[j] - atrV * NumATRs;
}
if printOK then print(filename,"4=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If sTime >= 45500 and stime < 090000 Then { //당일 종가봉에서
For j = 49 DownTo 1 {
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
TR[j] = TR[j-1];
maV[j] = maV[j-1];
upperLine[j] = upperLine[j-1];
lowerLine[j] = lowerLine[j-1];
}
If LL[1] > C Then { //종가가 이전 봉보다 아래 형성
OO[0] = LL[1];
CC[0] = C;
HH[0] = OO[0];
LL[0] = CC[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
} Else If HH[1] < C Then { //종가가 이전 봉보다 위에 형성
OO[0] = HH[1];
CC[0] = C;
HH[0] = CC[0];
LL[0] = OO[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
} Else { //종가가 이전 봉의 중간에 형성
OO[0] = C;
CC[0] = C;
HH[0] = C;
LL[0] = C;
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
}
If sum > 0 Then {
sum = sum + CC[0] - CC[length];
trSum = trSum + TR[0] - TR[length];
maV[0] = Sum / length;
atrV = trSum / length;
upperLine[0] = maV[0] + atrV * NumATRs;
lowerLine[0] = maV[0] - atrV * NumATRs;
}
j = 0; //채널 값을 새로이 계산
if printOK then print(filename,"5=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
if sum == 0 and CC[length] > 0 then {
for j = 0 to length - 1 {
sum = sum + CC[j];
trsum = trsum + max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
}
}
}
If OO[0] > 0 Then Plot1(OO[0],"OO",iff(OO[0] > CC[0],black,MAGENTA)); //지표속성 -> 차트표시 -> 채우기 -> OO < CC 면 빨강 추가
If CC[0] > 0 Then Plot2(CC[0],"CC"); // OO > CC 면 파랑 추가
if upperLine[0] > 100 then plot3(upperLine[0],"UpperBand");
if lowerLine[0] > 100 then plot4(lowerLine[0],"LowerBand");
if maV[0] > 100 then plot5(maV[0],"MidLine");
2024-01-21
1120
글번호 175936
답변완료
안녕하세요 수식문의 부탁드립니다^^
안녕하세요 언제나 친절한 답변에 감사드립니다.^^
현재 아래 수식에서 20일 이평선 상승중인 수식과
(예를들면 이전이평선값보다 현재이평선값이 높을때)
1이평,20일,240일 세가지이평선의 이격률을 설정하고 싶은데요
(예를들면 1이평과 20이평과 이격도 20이평과 240이평이 이격도 이런식으로요)
그리고 기간내 100억원이상 거래대금이 터진캔들이 출현했을때 입니다
(예를들면 30일 이내에 거래대금이 100억원이 캔들이 발생했을경우 검색)
잘부탁드리겠습니다^^
input : 단기(20),중기(60),장기(120),Period(20);
var : p(0),k(0),q(0),x(0),y(0),z(0),mav(0);
p = (highest(high,단기)+lowest(low,단기))/2;
k = (highest(high,중기)+lowest(low,중기))/2;
q = (p+k)/2;
x = (highest(high,장기)+lowest(low,장기))/2;
y = (highest(high,장기)+lowest(low,장기))/2;
z = (x+y)/2;
var1 = (q-z)/q*100;
mav = ma(c,Period);
if var1 >= 0 and C >= mav Then
find(1);
2024-01-22
1021
글번호 175935
답변완료
문의드립니다
1.
input : obLevel(70);
input : osLevel(30);
input : length(14);
var : src(0),ep(0),auc(0),adc(0),x1(0),ub(0),x2(0),lb(0);
src=close;
ep = 2 * length - 1;
auc = ema( max( src - src[1], 0 ), ep );
adc = ema( max( src[1] - src, 0 ), ep );
x1 = (length - 1) * ( adc * obLevel / (100-obLevel) - auc);
ub = iff( x1 >= 0, src + x1, src + x1 * (100-obLevel)/obLevel );
x2 = (length - 1) * ( adc * osLevel / (100-osLevel) - auc);
lb = iff( x2 >= 0, src + x2, src + x2 * (100-osLevel)/osLevel );
plot1(ub, "Resistance", red);
plot2(lb, "Support", green);
plot3(avg(ub, lb), "RSI Midline",gray);
2.
Input : Period(9),sig(10);
var : Relative(0),signal(0);
Relative = RSI(Period);
signal = ma(Relative,sig);
Plot1(Relative, "RSI");
Plot2(signal, "시그널");
PlotBaseLine1(30, "기준선 30");
PlotBaseLine2(70, "기준선 70");
......................................................................................................
1. 첫번째 시스템식을 구하고자 합니다
상기 1번식에서 plot2의 그린색이 캔들과 만나고 (and로 연결)
2번식에서 rsi가 시그널선을 하향 돌파 했을때 두조건이 모두 충족 되었을때 매도 신호를
둘중 하나라도 이탈 되면 청산신호를
반대로 상기 1번식에서 plot1 레드선이 캔들과 만나고
2번식에서 rsi가 시그널선을 상향 돌파했을때 두조건이 모두 충족되었을때 매수 신호를
둘중 하나라도 이탈되면 청산신호를 해주세요
2. 두번째 이렇게 만들어진 시스템식을 바탕화면에 색깔로 입히고 싶습니다 (이건 지표로 구현해 주세요)
즉 매수신호때는 빨간색 바탕화면으로,매도신호때는 파란색 바탕화면으로
......................................................................................................................................
3. 주챠트 2분봉의 캔들이 2분봉 볼밴하단에 부딪힐때, 데이타2 10분봉 역시 10분봉의 볼밴 하단 수치에 부딪힌다면
그때 주챠트 2분봉 캔들에 검색식으로 빨간색 점을 찍어 주세요
(예를 들어 오전 10시에 주챠트 2분봉 캔들은 주챠트 2분봉 볼밴하단에 부딪히고, 데이타2 10분봉의 캔들이 10분봉 볼밴하단에 부딪히면, 주챠트 10시봉(2분봉)에 빨간색 점을 찍어 주세요)
만약 반대로 주챠트 2분봉의 캔들이 볼밴 상단에 부딪힐때 같은 시각 데이타2 10분봉도 10분봉의 볼밴 상단 수치에 부딪힌다면
그때 그 캔들에 검색식으로 파란색 점을 찍어 주세요
4.
input : P1(7),P2(14),P3(21);
var : R1(0),R2(0),R3(0),TX(0);
R1 = RSI(P1);
R2 = RSI(P2);
R3 = RSI(P3);
Plot1(R1, "RSI1");
Plot2(R2, "RSI2");
Plot3(R3, "RSI3");
PlotBaseLine1(30, "기준선 30");
PlotBaseLine2(50, "기준선 50");
PlotBaseLine3(70, "기준선 70");
PlotBaseLine4(40, "기준선 40");
PlotBaseLine5(60, "기준선 60");
Condition1 = R1 > R2 and R2 > R3;
Condition2 = R1 < R2 and R2 < R3;
if Condition1 == true and Condition1 != Condition1[1] Then
{
TX = Text_New_Self(sDate,sTime,R3,"▲");
Text_SetStyle(TX,2,0);
Text_SetColor(TX,Red);
}
if Condition2 == true and Condition2 != Condition2[1] Then
{
TX = Text_New_Self(sDate,sTime,R3,"▼");
Text_SetStyle(TX,2,1);
Text_SetColor(TX,Blue);
}
상기 4번식을
plot1 rsi1이 기준선 60을 하향돌파하면 매도 신호를
plot1 rsi1이 기준선 40을 상향돌파하면 매수 신호를
나타내는 시스템으로 구현하고 싶습니다
한번에 여러개를 질문 드려 죄송합니다
감사합니다
2024-01-23
1324
글번호 175934
답변완료
[]와 () 설명 부탁드립니다
문의)
1. 어디에서 []를 쓰고 어디에서 ()쓰는지
2. ()쓰면 오류가 나는 이유
3. ()가 적용되지 않는 함수는
4. 오류없이 ()정상사용 시 0은 정상, 1은 엉뚱한 값으로 표시되는 이유
2024-01-21
1044
글번호 175933
답변완료
수식 수정요청
아래 수식은 5분봉 단타신호용입니다.
여기에 다음 사항만 추가하여 검색코자 하니 수정부탁드립니다.
-신호발생봉 앞 120봉 이내(120봉전 ~ 1봉전)에서 저가가 900봉 최저가인 경우
*** 혹시 아래 수식 및 위 요청과는 별도로
"1봉전 저가가 5분봉 900봉의 최저가"인 경우
를 검색할 수식이 가능할까요?***
==============================================================================
input : short(5),mid(20),long(60),percent(3),Multiple(1.5),midperiod(78);
var : 조건(False);
var1 = ma(C,short);
Var2 = ma(C,mid);
Var3 = ma(c,long);
var4 = Highest(H[1],5);
var5 = ma(V,5);
var6 = (highest(high,midPeriod)+lowest(low,midPeriod))/2;
var7 = ma(c,60);
Var8 = BollBandUp(20,2);
조건 = max(var1,Var2,Var3) < min(var1,Var2,Var3) * (1+Percent/100) &&
C > Var4[1] and
Var5 >= 5000 and
V > V[1] * Multiple and
C > var6 and
C > Var7 and
CrossUp(C,Var8) and
O*1.025 <= H;
if 조건==true Then
Find(1);
2024-01-21
1128
글번호 175932
답변완료
수식부탁드립니다.
수고하십니다. 늘 가정의 평안을 기원하며.
두가지의 수식을 부탁드립니다.
<첫번째>
볼린저밴드(20,2)
매도잔량이평(1)
-->당일 고가 돌파시 마다
볼린저밴드 하단선 하락 AND 매도잔량이평 상승시 표시
<두번째>
매도잔량이평(1)
호가잔량비율(1)
-> 당일 고가 돌파시 마다
매도잔량이평이 상승시 호가잔량비율은 하락 OR
매도잔량이평이 하락시 호가잔량비율은 상승 표시
감사합니다.
2024-01-20
961
글번호 175931