커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1520
글번호 230811
답변완료
부탁드립니다 항상 감사합니다
// Impulse-MACD (ZLEMA-like mid) - 안정화 버전
input : lengthMA(34), lengthSignal(9);
var : src(0), hi(0), lo(0), ema1(0), ema2(0), mi(0);
var : md(0), sb(0), sh(0), mdc(0);
// Typical price
src = (H + L + C) / 3;
// 상/하단 밴드: 첫 바 안정화
hi = IFF(IsNaN(hi[1]) = true, MA(High, lengthMA), (hi[1] * (lengthMA - 1) + High) / lengthMA);
lo = IFF(IsNaN(lo[1]) = true, MA(Low , lengthMA), (lo[1] * (lengthMA - 1) + Low ) / lengthMA);
// ZLEMA-like mid
ema1 = EMA(src, lengthMA);
ema2 = EMA(ema1, lengthMA);
mi = ema1 + (ema1 - ema2);
// 밴드 돌출량(안이면 0)
md = IFF(mi > hi, mi - hi, IFF(mi < lo, mi - lo, 0));
// 시그널/히스토그램
sb = MA(md, lengthSignal);
sh = md - sb;
// 색상 결정 (막대 색상: 속성에서 '막대' 선택 권장)
// lime/green : 위쪽 강세, orange/red : 하단/약세
mdc = IFF(src > mi, IFF(src > hi, lime, green), IFF(src < lo, red, orange));
// === Plot ===
Plot1(0, "MidLine", Gray); // 0선
Plot2(md, "ImpulseMACD", mdc); // 본체(막대로 표시)
Plot3(sh, "ImpulseHisto", Blue); // 히스토그램(막대로 표시)
Plot4(sb, "ImpulseSignal", Maroon); // 시그널
보완부탁드립니다
2025-10-07
247
글번호 194517
답변완료
종목검색식 부탁드림니다.
즐거운 명절 보내셨는지요?
항상 노고에 감사드림니다.
아래의 수식을 종목검색식으로 부탁드림니다.
A=avg(C,Period)-avg(C,기간)*비율/100;
A1=sum(if(C-C(1)>0,C-C(1),0),Period)/sum(if(C-C(1)>0,C-C(1),C(1)-C),Period)*100;
A2=eavg(if(L(1)-L>0 && H-H(1)<L(1)-L,L(1)-L,0),Period)/eavg(max(max(H-L,abs(C(1)-H)),abs(C(1)-L)),Period)*100;
(L(1)<=A(1) or L<=A) && (A1(1)<=30 or A1 <=30) && (A2(1)>30 or A2>30) && C>O
지표변수
기간 20
비율 20
Period 14
2025-10-07
172
글번호 194516
답변완료
부탁드립니다 항상 감사합니다
일전에 작성해주신건데 해외선물 차트에 구현되는게 하나도없어서요.. 다시한번 부탁드리겠습니다
안녕하세요
예스스탁입니다.
1
// === 사용자 입력 ===
Input : 기준거래량배율(1.5), 체결강도EMA(20), OI_EMA단기(10), OI_EMA장기(60);
// === 변수 선언 ===
Var: 매수체결량(0), 매도체결량(0),
순매수체결량(0), 순매도체결량(0),
순체결강도(0), 체결EMA(0);
Var: OI변화(0), 누적OI(0), OI_EMA1(0), OI_EMA2(0);
Var: 기준거래량(0), 거래량필터패스(False), tx(0);
// === 거래량 필터 ===
기준거래량 = Average(Volume, 20);
#If Volume < 기준거래량 * 기준거래량배율 Then Return;
// === 체결강도 계산 ===
매수체결량 = IFF(Close > Close[1], Volume, 0);
매도체결량 = IFF(Close < Close[1], Volume, 0);
순매수체결량 = ACCUM(매수체결량);
순매도체결량 = ACCUM(매도체결량);
순체결강도 = ACCUM(매수체결량 - 매도체결량);
// === 체결강도 EMA ===
체결EMA = EMA(순체결강도, 체결강도EMA);
// === 체결강도 급증 알림 ===
If CrossUp(순체결강도, 체결EMA) Then
Begin
tx = Text_New_Self(Date, Time, Close, "체결강도↑");
Text_SetColor(tx, Red);
Text_SetStyle(tx, 2, 0);
End;
// === OI 변화 누적 및 이동평균 ===
OI변화 = OI - OI[1];
누적OI = ACCUMN(OI변화, DayIndex());
OI_EMA1 = EMA(누적OI, OI_EMA단기);
OI_EMA2 = EMA(누적OI, OI_EMA장기);
// === OI 교차 알림 ===
If CrossUp(OI_EMA1, OI_EMA2) Then
Begin
tx = Text_New_Self(Date, Time, Close, "OI↑");
Text_SetColor(tx, Green);
End;
If CrossDown(OI_EMA1, OI_EMA2) Then
Begin
tx = Text_New_Self(Date, Time, Close, "OI↓");
Text_SetColor(tx, Blue);
End;
// === 차트 출력 ===
Plot1(순매수체결량, "순매수");
Plot2(순매도체결량, "순매도");
Plot3(순체결강도, "순체결강도");
Plot4(체결EMA, "체결EMA");
Plot5(누적OI, "누적OI");
Plot6(OI_EMA1, "OI EMA10");
Plot7(OI_EMA2, "OI EMA60");
PlotBaseLine1(0);
2
// =================== 입력값 ===================
Input: 기준거래량배율(1.5), 체결EMA기간(20), OI_EMA단기(10), OI_EMA장기(60),
익절률(1.02), 손절률(0.985), 박스색(RGB(220,220,220));
// =================== 변수 ===================
Var: 매수체결량(0), 매도체결량(0), 순체결강도(0), 체결EMA(0);
Var: OI변화(0), 누적OI(0), OI_EMA1(0), OI_EMA2(0);
Var: 기준거래량(0), 진입가(0), 익절가(0), 손절가(0), 진입중(False), 박스ID(0);
// =================== 거래량 필터 ===================
기준거래량 = Average(Volume, 20);
#If Volume < 기준거래량 * 기준거래량배율 Then Return;
// =================== 체결강도 ===================
매수체결량 = IFF(Close > Close[1], Volume, 0);
매도체결량 = IFF(Close < Close[1], Volume, 0);
순체결강도 = ACCUM(매수체결량 - 매도체결량);
체결EMA = EMA(순체결강도, 체결EMA기간);
// =================== OI 누적 및 이동평균 ===================
OI변화 = OI - OI[1];
누적OI = ACCUMN(OI변화, DayIndex());
OI_EMA1 = EMA(누적OI, OI_EMA단기);
OI_EMA2 = EMA(누적OI, OI_EMA장기);
// =================== 진입 조건 ===================
If 진입중 == False AND
순체결강도 > 체결EMA AND
CrossUp(OI_EMA1, OI_EMA2)
Then
Begin
진입가 = Close;
익절가 = 진입가 * 익절률;
손절가 = 진입가 * 손절률;
진입중 = True;
// 박스 출력
박스ID = Box_New(Date, Time, 익절가, NextBarSdate, NextBarStime, 손절가);
Box_SetColor(박스ID, 박스색);
Box_SetStyle(박스ID, 1);
Box_SetSize(박스ID, 2);
// 진입 텍스트
Text_New(Date, Time, Close, "진입 ▶");
End;
// =================== 청산 조건 ===================
If 진입중 Then
Begin
Box_SetEnd(박스ID,NextBarSdate,NextBarStime,손절가);
If Close >= 익절가 Then
Begin
Text_New(Date, Time, Close, "익절");
진입중 = False;
End
Else If Close <= 손절가 Then
Begin
Text_New(Date, Time, Close, "손절");
진입중 = False;
End;
End;
3
// =================== 입력값 ===================
Input: 기준거래량배율(1.5), 체결EMA기간(20), OI_EMA단기(10), OI_EMA장기(60),
익절률(1.02), 손절률(0.985),
숏익절률(0.98), 숏손절률(1.015),
박스색_롱(RGB(220,220,220)), 박스색_숏(RGB(200,230,255));
// =================== 변수 ===================
Var: 매수체결량(0), 매도체결량(0), 순체결강도(0), 체결EMA(0);
Var: OI변화(0), 누적OI(0), OI_EMA1(0), OI_EMA2(0);
Var: 기준거래량(0), 진입가(0), 익절가(0), 손절가(0), 진입중(False), 숏진입(False);
Var: 박스ID(0);
// =================== 거래량 필터 ===================
기준거래량 = Average(Volume, 20);
#If Volume < 기준거래량 * 기준거래량배율 Then Return;
// =================== 체결강도 계산 ===================
매수체결량 = IFF(Close > Close[1], Volume, 0);
매도체결량 = IFF(Close < Close[1], Volume, 0);
순체결강도 = ACCUM(매수체결량 - 매도체결량);
체결EMA = EMA(순체결강도, 체결EMA기간);
// =================== OI 이동평균 ===================
OI변화 = OI - OI[1];
누적OI = ACCUMN(OI변화, DayIndex());
OI_EMA1 = EMA(누적OI, OI_EMA단기);
OI_EMA2 = EMA(누적OI, OI_EMA장기);
// =================== 롱 진입 ===================
If 진입중 == False AND 순체결강도 > 체결EMA AND CrossUp(OI_EMA1, OI_EMA2) Then
Begin
진입가 = Close;
익절가 = 진입가 * 익절률;
손절가 = 진입가 * 손절률;
진입중 = True;
숏진입 = False;
박스ID = Box_New(Date, Time, 익절가, NextBarSdate, NextBarStime, 손절가);
Box_SetColor(박스ID, 박스색_롱);
Box_SetStyle(박스ID, 1);
Box_SetSize(박스ID, 2);
Text_New(Date, Time, Close, "롱 진입 ▶");
End;
// =================== 숏 진입 ===================
If 진입중 == False AND 순체결강도 < 체결EMA AND CrossDown(OI_EMA1, OI_EMA2) Then
Begin
진입가 = Close;
익절가 = 진입가 * 숏익절률;
손절가 = 진입가 * 숏손절률;
진입중 = True;
숏진입 = True;
박스ID = Box_New(Date, Time, 익절가, NextBarSdate, NextBarStime, 손절가);
Box_SetColor(박스ID, 박스색_숏);
Box_SetStyle(박스ID, 1);
Box_SetSize(박스ID, 2);
Text_New(Date, Time, Close, "숏 진입 ▼");
End;
// =================== 청산 조건 ===================
If 진입중 Then
Begin
Box_SetEnd(박스ID,NextBarSdate,NextBarStime,손절가);
If 숏진입 == False Then // 롱
Begin
If Close >= 익절가 Then
Begin
Text_New(Date, Time, Close, "롱 익절 ✅");
진입중 = False;
End
Else If Close <= 손절가 Then
Begin
Text_New(Date, Time, Close, "롱 손절 ❌");
진입중 = False;
End;
End
Else // 숏
Begin
If Close <= 익절가 Then
Begin
Text_New(Date, Time, Close, "숏 익절 ✅");
진입중 = False;
End
Else If Close >= 손절가 Then
Begin
Text_New(Date, Time, Close, "숏 손절 ❌");
진입중 = False;
End;
End;
End;
4
Input: 진입가(350), 손절비율(0.985), 익절비율(1.015), 박스색상(Green), 손절색상(Red);
// 진입, 손절, 익절가 계산
Var: 익절가(0), 손절가(0), 손익비(0);
익절가 = 진입가 * 익절비율;
손절가 = 진입가 * 손절비율;
손익비 = Round((익절가 - 진입가) / (진입가 - 손절가), 2);
// 박스 출력 (익절)
Var: 익절박스(0);
// 박스 출력 (손절)
Var: 손절박스(0);
// 텍스트 출력: 손익비
Var: tx(0);
if Index == 1 Then
{
익절박스 = Box_New(Date, Time, 진입가, NextBarSdate, NextBarStime, 익절가);
Box_SetColor(익절박스, 박스색상);
Box_SetFill(익절박스, true);
손절박스 = Box_New(Date, Time, 손절가, NextBarSdate, NextBarStime, 진입가);
Box_SetColor(손절박스, 손절색상);
Box_SetFill(손절박스, true);
tx = Text_New(Date, Time, 손절가 - (진입가 - 손절가)/2, "손익비: " + NumToStr(손익비, 2));
Text_SetStyle(tx, 1, 0);
Text_SetColor(tx, Black);
Text_SetSize(tx, 10);
}
Else
{
Box_SetEnd(익절박스,NextBarSdate,NextBarStime,익절가);
Box_SetEnd(손절박스,NextBarSdate,NextBarStime,익절가);
Text_SetLocation(tx,NextBarSdate,NextBarStime, 손절가 - (진입가 - 손절가)/2);
}
5
Input: 진입가(0), 손절비율(1.015), 익절비율(0.985), 박스색상(Red), 손절색상(Green);
// === 익절/손절가 계산 ===
Var: 익절가(0), 손절가(0), 손익비(0);
익절가 = 진입가 * 익절비율;
손절가 = 진입가 * 손절비율;
손익비 = Round((진입가 - 익절가) / (손절가 - 진입가), 2);
// === 익절 박스 생성 ===
Var: 익절박스(0);
// === 손절 박스 생성 ===
Var: 손절박스(0);
// === 손익비 텍스트 출력 ===
Var: tx(0);
if Index == 1 Then
{
익절박스 = Box_New(Date, Time, 익절가, NextBarSdate, NextBarStime, 진입가);
Box_SetColor(익절박스, 박스색상);
Box_SetFill(익절박스, true);
손절박스 = Box_New(Date, Time, 진입가, NextBarSdate, NextBarStime, 손절가);
Box_SetColor(손절박스, 손절색상);
Box_SetFill(손절박스, true);
tx = Text_New(Date, Time, 손절가 + (손절가 - 진입가)/2, "손익비: " + NumToStr(손익비, 2));
Text_SetStyle(tx, 1, 1);
Text_SetColor(tx, Black);
Text_SetSize(tx, 10);
}
Else
{
Box_SetEnd(익절박스,NextBarSdate,NextBarStime,진입가);
Box_SetEnd(손절박스,NextBarSdate,NextBarStime,손절가);
Text_SetLocation(tx,NextBarSdate,NextBarStime,손절가 + (손절가 - 진입가)/2);
}
2025-10-07
380
글번호 194515
답변완료
수식 문의 드립니다
제목 : 수식 문의 드립니다
> 안녕하십니까?
매수: FORCE INDEX(2,5)의 FVALFAST가 0위에서 바로5봉전이내 고점대비 fvalfast값이 0.5% 상향시 즉시매수,
메도: FORCE INDEX(2,5)의 FVALFAST가 0 위에서 바로전 5봉이내중 최고점봉에서 고개숙였을때 그 고점대비 fvalfast값이 0.5% 하향시 즉시매도,
2025-10-07
185
글번호 194514
답변완료
수식 문의 드립니다
수식 부탁 드립니다.
1. 매수: 거래량이 이전5봉전중 전고전을 0.1% 상향과 동시에 즉시 매수
2. 매도: 거래량이 이전5봉전중 완성봉이 거래량 고점을 하향시 매도
매도: 거래량이 매입때봉의 완성봉 거래량 보다 작을시 매도
2025-10-07
207
글번호 194513
답변완료
종목검색식 부탁드립니다
1. 당일 거래량이 전일 거래량보다 "10배 이상(1,000%)"인
종목 검색식 부탁드려요.
2. 당일 거래량이 전일 거래량보다 10배 이상(1,000%)이고,
0봉전~60봉전까지 모든종목 검색식 부탁드립니다.
3. 종가가 "지수이평 112일선" 아래에 있고,
종가가 "10% 이하 상승" 종목검색식 부탁드려요.
4. 종가가 지수이평 112일선 아래에 있고,
종가가 "10% 이하 상승" 한
0봉전~60봉전까지 모든종목 검색식 부탁드립니다.
5. 캔들의 당일 고가가 (꼬리포함)10% 이상 상승하고,
캔들의 전체길이중,
꼬리의 길이가 전체길이의 30% 이상인
종목검색식 부탁드려요.(양봉 음봉 모두)
6. 캔들의 당일 고가가 (꼬리포함)10% 이상 상승하고,
캔들의 전체길이중,
꼬리의 길이가 전체길이의 30% 이상 이고(양봉,음봉 모두),
0봉전 ~60봉전까지 모든종목 검색식 부탁드립니다.
7. 일봉기준, 종가가 10% 이하 상승한 종목검색식 부탁드려요.
8. 0봉전~60봉전까지 중 최고 거래량 종목검색식 부탁드립니다.
-----------------------------------------------------
9. 아래수식을 참고하여,
수식2) 가 기준선 100을 돌파하는 종목 검색식 부탁드립니다.
10. 아래수식을 참고하여,
수식2) 가 기준선 100을 돌파하고,
0봉전~60봉전까지의 모든 종목 검색식 부탁드려요.
--아래---
(수식1)
V_CLOSE = C * V;
(수식2)
Avgvalue = avg(V_CLOSE, longlen);
// 평균편차는 근사치로 표준편차 활용
MD = stdev(V_CLOSE, longlen) * 1.25; // CCI 표준 계수 근사
ccx = if(MD != 0, (V_CLOSE - Avgvalue) / (0.015 * MD), 0);
(수식3)
ccx_sma = avg(ccx, shortlen);
- 지표조건설정
shortlen: 48
longlen: 76
기준선 0
-100
-200
100
200
2025-10-09
226
글번호 194512
답변완료
수식작성 부탁드립니다.
안녕하세요 운영자님
아래 이격도 지표의 선의 색을 지표속성창에서 단계별로 색을 변경할수 있도록 부탁드립니다.
즉, 101.0 ~100.5, 100.5~100, 100~99.5, 99.5~99.0 각각의 구간에서의 선의 색을 다르게 변경할 수 있도록 지표속성창에서 선의 색깔을 변경할 수 있도록 부탁드립니다.
Input : Period(20);
var : DParity(0);
DParity = Disparity(Period);
Plot1(DParity, "이격도");
PlotBaseLine1(101.0,"101.0");
PlotBaseLine2(100.5,"100.5");
PlotBaseLine3(100,"기준선");
PlotBaseLine4(99.5,"99.5");
PlotBaseLine5(99.0,"99.0");
2025-10-05
254
글번호 194511
답변완료
지표작성부탁드립니다
사용지표 : 1.price channel(20)
2.붙임지표(박스권 20 2)
지표식 조건 : 가격채널(20) 상단선과 붙임지표 박스권(2 2) 상단선이 일치하면
차트바탕에 노란색으로 표시되는 지표식 작성부탁합니다
붙임 : 박스권(20 2)
input : 기간(20),R(2);
var : TOP(0),LO(0),DOUBLE(0),idx(0);
TOP = HIGHEST(H,기간);
LO = LOWEST(L,기간);
if H > TOP[1] Then
{
DOUBLE = H;
idx = 0;
}
Else
{
if DOUBLE > 0 Then
idx = idx+1;
}
if idx == 기간-R Then
{
var1 = DOUBLE;
Var2 = LO;
}
Plot1(var1);
plot2(Var2);
2025-10-05
207
글번호 194510
답변완료
도움을 청합니다.
안녕하세요
아래 수식에서 Plot4 라인을 추가하되 Plot2와 Plot3의 중간선(50%)라인을 추가하고자 합니다.
부탁드리겠습니다.
추석연휴 즐거운시간 되시길 바랍니다.
========================
input : period(10),multiplier(3);
var : src(0), AtrV(0),upperBand(0),lowerBand(0), prevLowerBand(0), prevUpperBand(0);
var : prevSuperTrend(0), direction(0),alpha(0),source(0),SuperTrend(C);
if CurrentBar > 1 Then
{
src = (H+L)/2;
alpha = 1 / period ;
source = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV = alpha * source + (1 - alpha) * ATrV[1]; //지수가중이평방식
//ATrV = ma(source,AtrPeriod); //단순이평방식
upperBand = src + multiplier * AtrV;
lowerBand = src - multiplier * 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;
Plot1(SuperTrend,"SuperTrend",IFF(direction==1,Red,Blue));
}
input : 기간(45),R(2);
var : TOP(0),LO(0),DOUBLE(0),idx(0);
TOP = HIGHEST(H,기간);
LO = LOWEST(L,기간);
if H > TOP[1] Then
{
DOUBLE = H;
idx = 0;
}
Else
{
if DOUBLE > 0 Then
idx = idx+1;
}
if idx == 기간-R Then
{
var1 = DOUBLE;
Var2 = LO;
}
Plot2(var1);
plot3(Var2);
var : box(0);
Condition1 = supertrend > var1;
if Condition1 == true Then
{
if Condition1[1] == False Then
{
box = Box_New(sDate,sTime,H,NextBarSdate,NextBarStime,L);
Box_SetColor(box,lightYellow);
Box_SetFill(box,true);
Box_SetExtFill(box,true);
}
Else
{
Box_SetEnd(box,NextBarSdate,NextBarStime,l);
}
}
2025-10-05
196
글번호 194509