커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1531
글번호 230811
답변완료
부탁드립니다.
1. 직전 봉이 음봉이면서 종가가 양봉일 때, 종가가 직전 음봉 길이의 3분의 2 이상이면 파란색으로, 직전 봉이 양봉이면서 종가가 음봉일 때, 종가가 직전 양봉 길의의 3분의 1 이하이면 빨강색으로 구현해 주세요
2. 종가가 양봉이면서 가장 최근 양봉의 최고가와 가장 최근 음봉의 종가 보다 높으면 파란색으로, 종가가 음봉이면서 가장 최근 음봉의 최저가보다 낮고 가장 최근 양봉의 종가보다 낮으면 빨강색으로 구현해 주세요
고맙습니다.
2025-08-26
175
글번호 193503
답변완료
94021
94021에 추가질문 있읍니다.
2025-08-25
179
글번호 193502
답변완료
안녕하세요. 문제가 있는데 어떻게 해결해야할까요?
담당자님 안녕하세요. 무더위에 항상 고생 많으십니다.
예스트레이더에서 SuperTrend와 EMA(12,26) 조합으로 숏 전용 전략을 테스트하고 있습니다.
현재 사용 중인 전략의 주요 로직은 다음과 같습니다.
진입 조건
포지션 없음 (MarketPosition = 0)
1.EMA12 < EMA26 (데드크로스 상태)
2.종가 < SuperTrend 라인
청산 조건
숏 포지션 보유 중 (MarketPosition = -1)
1.EMA12 > EMA26 (골든크로스 상태)
2.종가 > SuperTrend 라인
그런데 실전 차트에서 다음과 같은 문제가 발생합니다.
청산 조건이 충족된 이전 봉에서 바로 청산되지 않고, 한두 봉 뒤에서야 청산됩니다.
어떤 구간에서는 EMA 데드크로스와 SuperTrend 매도 조건이 순서만 달랐을 뿐 모두 발생했는데도, 진입이 전혀 이루어지지 않습니다.
첨부한 차트 이미지를 보시면,
첫 번째 이미지는 EMA와 SuperTrend 매도 신호가 모두 발생했지만 진입이 전혀 이뤄지지 않은 사례입니다.
두 번째 이미지는 청산 조건이 전전봉에서 충족됐지만 실제 청산은 그 다음 봉에서 이뤄진 사례입니다.
제가 적용한 코딩도 남겨드리겠습니다.
Inputs:
factor (3), // SuperTrend ATR 배수
AtrPeriod (14), // SuperTrend ATR 기간
shortLen (12), // EMA 단기 기간
longLen (26); // EMA 장기 기간
Vars:
src (0),
trv (0),
atrv (0),
upperBand (0),
lowerBand (0),
prevUB (0),
prevLB (0),
dir (0),
supertrend (0),
emaShort (0),
emaLong (0);
// === 1) SuperTrend 계산 ===
if CurrentBar > 1 then {
src = (High + Low) / 2;
trv = MaxList(High - Low,
MaxList(Abs(High - Close[1]),
Abs(Low - Close[1])));
atrv = EMA(trv, AtrPeriod);
upperBand = src + factor * atrv;
lowerBand = src - factor * atrv;
prevUB = upperBand[1];
prevLB = lowerBand[1];
if (lowerBand <= prevLB and Close[1] >= prevLB) then
lowerBand = prevLB;
if (upperBand >= prevUB and Close[1] <= prevUB) then
upperBand = prevUB;
if Close > upperBand then
dir = 1;
else if Close < lowerBand then
dir = -1;
if dir == 1 then
supertrend = lowerBand;
else
supertrend = upperBand;
}
// === 2) EMA 계산 ===
emaShort = EMA(Close, shortLen);
emaLong = EMA(Close, longLen);
// === 3) 숏 진입·청산만 ===
// 숏 진입: 포지션 없고 EMA < & 가격 < SuperTrend
if MarketPosition == 0
and emaShort < emaLong
and Close < supertrend then {
Sell("ShortEntry");
}
// 숏 청산: 숏 보유 중 EMA > & 가격 > SuperTrend
if MarketPosition < 0
and emaShort > emaLong
and Close > supertrend then {
ExitShort("ShortExit");
}
2025-08-25
281
글번호 193500
최태수 님에 의해서 삭제되었습니다.
2025-08-25
0
글번호 193499
답변완료
사용자함수 질문입니다.
선생님 큰 도움이 되었습니다.
1. HighD/LowD의 일봉 경계 시각
예스트레이더 코인 암호화폐 분봉에서 HighD(1), LowD(1)의 “전일”은 KST 00:00~24:00(캘린더 데이) 기준인가요?
혹은 다른 타임존/세션을 사용하나요?
2. 동일 봉에서 타겟·스탑·반대신호 동시 근접 시 우선순위
다음 봉에서 AtLimit(≥)과 AtStop(≤) 둘 다 만족 가능한 경우, 시뮬레이터는 어떤 순서(예: 시가→고가→저가→종가)로 가격을 가정하여 어느 쪽을 먼저 트리거하나요?
우선순위 규칙이 정해져 있으면 알려주세요.
3. BarsSinceEntry==0 시점의 OHLC 사용 가능 여부
진입이 다음 봉 진행 중에 발생한 뒤, 그 같은 봉이 ‘완성’되었을 때 BarsSinceEntry==0 조건으로 수식을 고정하면, 그 시점의 **해당 봉의 H/L(완성값)**을 참조해도 되나요?
(즉, **엔트리 봉 완성값(H, L)**을 BarsSinceEntry==0에서 안전하게 읽을 수 있는지)
늘 감사합니다 선생님. 좋은 하루 되십시오!
2025-08-25
252
글번호 193498
답변완료
종목 검색식 부탁드립니다.
A=(DayHigh()+DayLow())/2;
B1=if(predayclose()>predayopen(),
(predayhigh()+predaylow()+predayclose()+predayhigh())/2-predaylow(),
(if(predayclose()<predayopen(),
(predayhigh()+predaylow()+predayclose()+predaylow())/2-predaylow()
(predayhigh()+predaylow()+predayclose()+predayclose())/2-predaylow())
)
);
B2=if(predayclose()>predayopen(),
(predayhigh()+predaylow()+predayclose()+predayhigh())/2-predayhigh(),
(if(predayclose()<predayopen(),
(predayhigh()+predaylow()+predayclose()+predaylow())/2-predayhigh()
(predayhigh()+predaylow()+predayclose()+predayclose())/2-predayhigh())
)
);
조건=A>B1 && A>B2;
조건 && !조건(1)
===== 위의 수식을 예스랭귀지로 변환가능한지요? ======
분봉에서도 사용가능한지도 궁금해요.
2025-08-25
252
글번호 193497
답변완료
검색식 부탁 드려요
1. 아래수식을 참고하여,
(수식2)가 기준선0 선을 돌파하는 양봉캔들의 모든종목 검색식 부탁합니다.
2. 아래수식을 참고하여,
(수식2)가 기준선0 선 위에 있는 모든종목 검색식 부탁드려요
----------수식-------
(수식1)
x=sum(((h+l+c)/3)*v);
z=valuewhen(1, date != date(1) , X(1));
x1=sum(v);
z1=valuewhen(1, date != date(1) , X1(1));
VWAP=(x-z)/(x1-z1);
(수식2)
WOP = avg(VWAP, wopPeriod);
VWAPPO = (C - WOP)/WOP*100;
(수식3)
ITS = avg(C, itsPeriod);
OVER = avg(WOP, overPeriod);
Vegeta = (ITS - OVER)/OVER*100;
(수식4)
Blockchain = (WOP - OVER)/OVER*100;
- 지표조건설정
wopPeriod : 14
itsPeriod : 11
overPeriod : 7
2025-08-25
277
글번호 193496
답변완료
수식작성 부탁드립니다.
안녕하세요 운영자님
input : P(10);
var : R(0);
R = RSI(P);
if CrossUp(R,55) Then
Buy();
if CrossDown(R,45) Then
Sell();
위의 수식에서
매수진입한 후 R값이 55 이하가 되면 매수한 계약이 청산
매도진입한 후 R값이 45 이상이 되면 매도한 계약이 청산되도록 부탁드립니다.
수고하세요.
2025-08-25
209
글번호 193495
답변완료
추세선 색깔, 두께 지정 선택 수정 부탁드립니다
아래 수식의 추세선 색깔과 두께을 입력하지 않고 버튼으로 본인이 선택을 하는
수식으로 수정 부탁드립니다
===========================================================
input : Period(35),선두께(2);
Var:상승색(Turquoise), 하락색(Turquoise);
Var:j(0),T(0);
Var: date11(0),date12(0),time11(0),time12(0),TL1(0),TL(0),tl9(0),
date21(0),date22(0),time21(0),time22(0),diff(0),diffr(0),
date31(0),date32(0),time31(0),time32(0),tx(0),tx1(0),tl4(0),box(0);
Array:HiVal[20](0),LoVal[20](0),HiBar[20](0),LoBar[20](0);
Array:r[7](0),fr[7](0),TL2[7](0),TL3[7](0),TX2[7](0),TX3[7](0);
For j = 0 To 19
{
HiBar[j] = HiBar[j] + 1;
LoBar[j] = LoBar[j] + 1;
}
if monthhigh(0)[1] < monthhigh(0) Then
T = 1;
if monthlow(0)[1] > monthlow(0) Then
T = -1;
If T == -1 Then
{
If T[1] != -1 Then
{
For j = 18 DownTo 0
{
LoVal[j+1] = LoVal[j];
LoBar[j+1] = LoBar[j];
}
LoVal[0] = L;
LoBar[0] = 0;
date11 = date[HiBar[0]];
time11 = stime[HiBar[0]];
Value11 = HiVal[0];
date12 = date[LoBar[0]];
time12 = stime[LoBar[0]];
Value12 = LoVal[0];
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
TL_SetColor(TL1,하락색);
date21 = date[HiBar[0]];
time21 = stime[HiBar[0]];
date22 = date[0];
time22 = stime[0];
for j = 0 to 6
{
fr[j] = LoVal[1] + ((HiVal[0] - LoVal[1]) * r[j]);
}
var1 = Index;
Var2 = var1[1];
if var2 > 0 Then
{
diff = value12;
diffr = (value12-value11)/value11*100;
TX = Text_New(sDate,sTime,value12,NumToStr(diffr,0)+"%");
Text_SetStyle(tx,1,0);
Text_SetColor(tx,Blue);
Text_SetSize(tx,12);
}
}
If LoVal[0] > L Then
{
LoVal[0] = L;
LoBar[0] = 0;
date12 = date[LoBar[0]];
time12 = stime[LoBar[0]];
Value12 = LoVal[0];
TL_SetEnd(TL1, date12,time12,Value12);
date22 = date[0];
time22 = stime[0];
diff = value12;
diffr = (value12-value11)/value11*100;
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
var1 = Index;
if var2 > 0 Then
Box_SetEnd(box,date12,time12,Value12);
{
Text_SetLocation(tx,sDate,sTime,value12);
Text_SetString(tx,NumToStr(diffr,0)+"%");
}
}
}
If T == 1 Then
{
If T[1] != 1 Then
{
For j = 18 DownTo 0
{
HiVal[j+1] = HiVal[j];
HiBar[j+1] = HiBar[j];
}
HiVal[0] = H;
HiBar[0] = 0;
date11 = date[LoBar[0]];
time11 = stime[LoBar[0]];
Value11 = LoVal[0];
date12 = date[HiBar[0]];
time12 = stime[HiBar[0]];
Value12 = HiVal[0];
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
TL_SetColor(TL1,상승색);
date31 = date[LoBar[0]];
time31 = stime[LoBar[0]];
date32 = date[0];
time32 = stime[0];
for j = 0 to 5
{
fr[j] = LoVal[0] + ((HiVal[1] - LoVal[0]) * r[j]);
}
var1 = Index;
Var2 = var1[1];
if var2 > 0 Then
{
diff = value12;
diffr = (value12-value11)/value11*100;
TX = Text_New(sDate,sTime,value12,NumToStr(diffr,0)+"%");
Text_SetStyle(tx,2,1);
Text_SetColor(tx,Red);
Text_SetSize(tx,12);
}
}
If HiVal[0] < H Then
{
HiVal[0] = H;
HiBar[0] = 0;
date12 = date[HiBar[0]];
time12 = stime[HiBar[0]];
Value12 = HiVal[0];
TL_SetEnd(TL1, date12,time12,Value12);
date32 = date[0];
time32 = stime[0];
diff = value12;
diffr = (value12-value11)/value11*100;
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
var1 = Index;
if var2 > 0 Then
Box_SetEnd(box,date12,time12,Value12);
{
Text_SetLocation(tx,sDate,sTime,value12);
Text_SetString(tx,NumToStr(diffr,0)+"%");
Text_SetStyle(tx,1,1);
}
}
}
TL_SetSize(TL1,선두께);
TL_SetDrawMode(TL1,0);
Text_SetSize(tx,15);
2025-08-25
269
글번호 193484