커뮤니티
예스랭귀지 Q&A
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1317
글번호 230811
답변완료
지표 변환 문의드립니다.
성실한 대답에 매번 감사하고 있습니다,
트레이딩 지표입니다.
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// KivancOzbilgic
//@version=4
study("Quantitative Qualitative Estimation", shorttitle="QQE",precision=4, resolution="")
src=input(close)
length = input(14,"RSI Length", minval=1)
SSF=input(5, "SF RSI SMoothing Factor", minval=1)
showsignals = input(title="Show Crossing Signals?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
RSII=ema(rsi(src,length),SSF)
TR=abs(RSII-RSII[1])
wwalpha = 1/ length
WWMA = 0.0
WWMA := wwalpha*TR + (1-wwalpha)*nz(WWMA[1])
ATRRSI=0.0
ATRRSI := wwalpha*WWMA + (1-wwalpha)*nz(ATRRSI[1])
QQEF=ema(rsi(src,length),SSF)
QUP=QQEF+ATRRSI*4.236
QDN=QQEF-ATRRSI*4.236
QQES=0.0
QQES:=QUP<nz(QQES[1]) ? QUP : QQEF>nz(QQES[1]) and QQEF[1]<nz(QQES[1]) ? QDN : QDN>nz(QQES[1]) ? QDN : QQEF<nz(QQES[1]) and QQEF[1]>nz(QQES[1]) ? QUP : nz(QQES[1])
QQF=plot(QQEF,"FAST",color.maroon,2)
QQS=plot(QQES,"SLOW",color=color.blue, linewidth=1)
plot(50,color=color.gray,style=6)
longFillColor = highlighting ? (QQEF>QQES ? color.green : na) : na
shortFillColor = highlighting ? (QQEF<QQES ? color.red : na) : na
fill(QQF, QQS, title="UpTrend Highligter", color=longFillColor)
fill(QQF, QQS, title="DownTrend Highligter", color=shortFillColor)
buySignalr = crossover(QQEF, QQES)
plotshape(buySignalr and showsignals ? QQES*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
sellSignallr = crossunder(QQEF, QQES)
plotshape(sellSignallr and showsignals ? QQES*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
alertcondition(cross(QQEF, QQES), title="Cross Alert", message="QQE Crossing Signal!")
alertcondition(crossover(QQEF, QQES), title="Crossover Alarm", message="QQE BUY SIGNAL!")
alertcondition(crossunder(QQEF, QQES), title="Crossunder Alarm", message="QQE SELL SIGNAL!")
alertcondition(crossover(QQEF, 50), title="Cross 50 Up Alert", message="QQE FAST Crossing 50 UP!")
alertcondition(crossunder(QQEF, 50), title="Cross 50 Down Alert", message="QQE FAST Crossing 50 DOWN!")
지표로 변환 부탁드립니다.
2025-05-20
367
글번호 190988
답변완료
부탁드립니다 항상 감사합니다
Input: P(0), length(10);
Var: j(0), lastHiVal(0), lastLoVal(0), sBar(0), eBar(0), TL1(0), TL2(0),
Text1(0), 처리구분(""), T(0), TL3(0), TL4(0), TL5(0), color(0),
waveCount(0), waveText(0);
Array: 고점 , 저점 ; // 가격, 위치
// 처리구분 결정
처리구분 = "";
If Highest(H, length) == H and lastHiVal <> H and
Lowest(L, length) == L and lastLoVal <> L Then
Begin
If 저점[1,1] > L Then 처리구분 = "저점처리";
If 고점[1,1] < H Then 처리구분 = "고점처리";
End
Else If Highest(H, length) == H and lastHiVal <> H Then
처리구분 = "고점처리";
Else If Lowest(L, length) == L and lastLoVal <> L Then
처리구분 = "저점처리";
// 고점 처리
If 처리구분 == "고점처리" Then
Begin
lastHiVal = H;
If 고점[1,2] < 저점[1,2] Then
Begin
For j = 10 Downto 2
Begin
고점[j,1] = 고점[j-1,1];
고점[j,2] = 고점[j-1,2];
End;
End;
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
Begin
고점[1,1] = H;
고점[1,2] = Index;
sBar = Index - 저점[1,2];
eBar = 0;
TL_Delete(TL2);
TL_Delete(TL3);
TL_Delete(TL4);
TL_Delete(TL5);
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
Begin
TL_Delete(TL1);
Text_Delete(Text1);
End;
TL1 = TL_New(sDate[sBar], sTime[sBar], 저점[1,1], sDate[eBar], sTime[eBar], 고점[1,1]);
TL2 = TL_New(sDate[sBar], sTime[sBar], 저점[1,1], sDate[eBar], sTime[eBar], 저점[1,1]);
TL3 = TL_New(sDate[sBar], sTime[sBar], 저점[1,1]+(고점[1,1]-저점[1,1])*0.382, sDate[eBar], sTime[eBar], 저점[1,1]+(고점[1,1]-저점[1,1])*0.382);
TL4 = TL_New(sDate[sBar], sTime[sBar], 저점[1,1]+(고점[1,1]-저점[1,1])*0.500, sDate[eBar], sTime[eBar], 저점[1,1]+(고점[1,1]-저점[1,1])*0.500);
TL5 = TL_New(sDate[sBar], sTime[sBar], 저점[1,1]+(고점[1,1]-저점[1,1])*0.618, sDate[eBar], sTime[eBar], 저점[1,1]+(고점[1,1]-저점[1,1])*0.618);
Text1 = Text_New(sDate[eBar], sTime[eBar], 고점[1,1], NumToStr(고점[1,1], P));
Text_SetStyle(Text1, 2, 1);
Text_SetColor(Text1, Blue);
color = -1;
waveCount += 1;
waveText = Text_New(sDate[eBar], sTime[eBar], 고점[1,1], ""Wave " + NumToStr(waveCount, 0) + """);
Text_SetStyle(waveText, 1, 0);
Text_SetColor(waveText, Blue);
End;
End;
// 저점 처리
If 처리구분 == "저점처리" Then
Begin
lastLoVal = L;
If 저점[1,2] < 고점[1,2] Then
Begin
For j = 10 Downto 2
Begin
저점[j,1] = 저점[j-1,1];
저점[j,2] = 저점[j-1,2];
End;
End;
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L Then
Begin
저점[1,1] = L;
저점[1,2] = Index;
sBar = Index - 고점[1,2];
eBar = 0;
TL_Delete(TL2);
TL_Delete(TL3);
TL_Delete(TL4);
TL_Delete(TL5);
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
Begin
TL_Delete(TL1);
Text_Delete(Text1);
End;
TL1 = TL_New(sDate[sBar], sTime[sBar], 고점[1,1], sDate[eBar], sTime[eBar], 저점[1,1]);
TL2 = TL_New(sDate[sBar], sTime[sBar], 고점[1,1], sDate[eBar], sTime[eBar], 고점[1,1]);
TL3 = TL_New(sDate[sBar], sTime[sBar], 고점[1,1]-(고점[1,1]-저점[1,1])*0.382, sDate[eBar], sTime[eBar], 고점[1,1]-(고점[1,1]-저점[1,1])*0.382);
TL4 = TL_New(sDate[sBar], sTime[sBar], 고점[1,1]-(고점[1,1]-저점[1,1])*0.500, sDate[eBar], sTime[eBar], 고점[1,1]-(고점[1,1]-저점[1,1])*0.500);
TL5 = TL_New(sDate[sBar], sTime[sBar], 고점[1,1]-(고점[1,1]-저점[1,1])*0.618, sDate[eBar], sTime[eBar], 고점[1,1]-(고점[1,1]-저점[1,1])*0.618);
Text1 = Text_New(sDate[eBar], sTime[eBar], 저점[1,1], NumToStr(저점[1,1], P));
Text_SetStyle(Text1, 2, 8);
Text_SetColor(Text1, Red);
color = 1;
waveCount += 1;
waveText = Text_New(sDate[eBar], sTime[eBar], 저점[1,1], ""Wave " + NumToStr(waveCount, 0) + """);
Text_SetStyle(waveText, 1, 0);
Text_SetColor(waveText, Red);
End;
End;
TL_SetSize(TL1, 0);
TL_SetColor(TL1, GRAY);
Plot1(color);
마찬가지로 오류가 나서요 예스트레이더
차트에 구현될수있게 수정 부탁드립니다 오늘도 화이팅이십니다
2025-05-20
292
글번호 190982
답변완료
부탁드립니다 항상 감사합니다
// ? RSI + MACD 숏 + 다중 목표가 TP3 + 손익비 박스 + 거래량 급증 + 텍스트 + 시간 제한
Input:
rsiLen(14), rsiCut(50),
macdFastLen(12), macdSlowLen(26), macdSignalLen(9),
tp1Ratio(0.995), tp2Ratio(0.990), tp3Ratio(0.985), slRatio(1.01),
volumeMultiplier(2.0), 평균거래량기간(20),
시작시간(93000), 종료시간(150000);
Var:
rsiVal(0), macdFastEMA(0), macdSlowEMA(0),
macdMain(0), macdSignal(0), macdHist(0),
진입가(0), TP1(0), TP2(0), TP3(0), SL(0),
거래량기준(0), 텍스트ID(0),
TL1(0), TL2(0), TL3(0), TL4(0),
박스상(0), 박스하(0),
매도조건(false);
// ▶? 1. RSI 계산
rsiVal = RSI(rsiLen);
// ▶? 2. MACD 수동 계산 (Index 기준 초기화 제거)
If CurrentBar = 1 Then
Begin
macdFastEMA = Close;
macdSlowEMA = Close;
macdMain = 0;
macdSignal = 0;
macdHist = 0;
End
Else
Begin
macdFastEMA = (Close * (2 / (macdFastLen + 1))) + macdFastEMA[1] * (1 - (2 / (macdFastLen + 1)));
macdSlowEMA = (Close * (2 / (macdSlowLen + 1))) + macdSlowEMA[1] * (1 - (2 / (macdSlowLen + 1)));
macdMain = macdFastEMA - macdSlowEMA;
macdSignal = (macdMain * (2 / (macdSignalLen + 1))) + macdSignal[1] * (1 - (2 / (macdSignalLen + 1)));
macdHist = macdMain - macdSignal;
End;
// ▶? 3. 평균 거래량 계산
거래량기준 = Average(Volume, 평균거래량기간);
// ▶? 4. 진입 조건 + 시간 필터
If Time >= 시작시간 and Time <= 종료시간 Then
Begin
If rsiVal < rsiCut and macdHist < 0 and macdHist[1] > 0 and Volume > 거래량기준 * volumeMultiplier Then
Begin
매도조건 = true;
진입가 = Close;
// 목표가 / 손절가 계산
TP1 = 진입가 * tp1Ratio;
TP2 = 진입가 * tp2Ratio;
TP3 = 진입가 * tp3Ratio;
SL = 진입가 * slRatio;
박스상 = SL;
박스하 = TP3;
// ?? 손익비 박스 (TL 선 4개)
TL1 = TL_New(Date, Time, 박스상, Date, Time, 박스하);
TL2 = TL_New(Date[1], Time[1], 박스상, Date[1], Time[1], 박스하);
TL3 = TL_New(Date[1], Time[1], 박스상, Date, Time, 박스상);
TL4 = TL_New(Date[1], Time[1], 박스하, Date, Time, 박스하);
TL_SetColor(TL1, RGB(255, 200, 200)); TL_SetSize(TL1, 1);
TL_SetColor(TL2, RGB(255, 200, 200)); TL_SetSize(TL2, 1);
TL_SetColor(TL3, RGB(255, 200, 200)); TL_SetSize(TL3, 1);
TL_SetColor(TL4, RGB(255, 200, 200)); TL_SetSize(TL4, 1);
// ?? 텍스트 알림
텍스트ID = Text_New(Date, Time, High, "*진입조건만족");
Text_SetColor(텍스트ID, RGB(255, 0, 0));
End;
End;
// ▶? 5. 목표가 / 손절가 Plot 시각화
If 매도조건 Then
Begin
Plot1(TP1, "TP1"); SetPlotColor(1, RGB(0, 150, 255));
Plot2(TP2, "TP2"); SetPlotColor(2, RGB(0, 100, 200));
Plot3(TP3, "TP3"); SetPlotColor(3, RGB(0, 50, 150));
Plot4(SL, "손절"); SetPlotColor(4, RGB(255, 0, 0));
End;
2.
Input : per(100), mult(3.0), 익절비율(1.01), 손절비율(0.995);
Var : upColor(Red), midColor(Green), downColor(Blue);
Var : src(0), filt(0), T(0), tx(0);
Var : wper(0), avrng(0), smrng(0);
Var : upward(0), downward(0), hband(0), lband(0), filtColor(0);
Var : 진입가(0), 박스ID(0), 텍스트ID(0), 거래량기준(0);
// 원본 데이터
src = Close;
// 필터 길이 및 스무딩
wper = per * 2 - 1;
avrng = EMA(AbsValue(src - src[1]), per);
smrng = EMA(avrng, wper) * mult;
// 필터 계산
filt = IFF(IsNaN(filt[1]) == true, src, filt[1]);
filt = IFF(src > filt,
IFF(src - smrng < filt, filt, src - smrng),
IFF(src + smrng > filt, filt, src + smrng));
// 방향 계산
upward = IFF(filt > filt[1],
IFF(IsNaN(upward[1]) == true, 0, upward[1]) + 1,
IFF(filt < filt[1], 0, IFF(IsNaN(upward[1]) == true, 0, upward[1])));
downward = IFF(filt < filt[1],
IFF(IsNaN(downward[1]) == true, 0, downward[1]) + 1,
IFF(filt > filt[1], 0, IFF(IsNaN(downward[1]) == true, 0, downward[1])));
// 상단/하단 밴드
hband = filt + smrng;
lband = filt - smrng;
// 색상
filtColor = IFF(upward > 0, upColor, IFF(downward > 0, downColor, midColor));
// 거래량 필터
거래량기준 = Average(Volume, 20);
// 차트 출력
Plot1(filt, "Range Filter", filtColor);
Plot2(hband, "High Band", upColor);
Plot3(lband, "Low Band", downColor);
// 시그널 조건 + 거래량 필터
If 거래량 > 거래량기준 Then
Begin
If (src > filt and upward > 0) Then
T = 1;
Else If (src < filt and downward > 0) Then
T = -1;
Else
T = 0;
End
Else
T = 0;
// 시그널 발생 시 텍스트 및 박스 출력
If T == 1 and T[1] != 1 Then
Begin
tx = Text_New(Date, Time, Low, "▲");
Text_SetColor(tx, upColor);
Text_SetStyle(tx, 2, 0);
진입가 = Close;
박스ID = Box_New(Date, Time, 진입가 * 익절비율, Date, Time + 10, 진입가 * 손절비율);
Box_SetColor(박스ID, upColor);
Box_SetBGColor(박스ID, RGB(255, 0, 0, 50)); // 투명도 50
End;
If T == -1 and T[1] != -1 Then
Begin
tx = Text_New(Date, Time, High, "▼");
Text_SetColor(tx, downColor);
Text_SetStyle(tx, 2, 0);
진입가 = Close;
박스ID = Box_New(Date, Time, 진입가 * 손절비율, Date, Time + 10, 진입가 * 익절비율);
Box_SetColor(박스ID, downColor);
Box_SetBGColor(박스ID, RGB(0, 0, 255, 50));
End;
3.// ============ 교차 함수 정의 ============
Function Cross(A, B)
Begin
Cross = (A > B and A[1] <= B[1]) or (A < B and A[1] >= B[1]);
End;
// ============ 변수 선언 ============
VAR: VALUE1(0), VALUE2(0), VALUE3(0),
VALUE4(0), VALUE5(0), VALUE6(0), VALUE7(0),
VAR13(0), VAR14(0), VAR15(0), VAR16(0);
// ============ 체결강도 계산 ============
VALUE1 = 0;
VALUE2 = 0;
If C > C[1] Then
VALUE1 = V;
Else If C < C[1] Then
VALUE2 = V;
VALUE3 = ACCUM(VALUE1 - VALUE2); // 체결강도 누적
// 이동평균선 기준선
VAR13 = EMA(VALUE3, 10);
VAR14 = EMA(VALUE3, 20);
VAR15 = EMA(VALUE3, 64);
VAR16 = EMA(VALUE3, 128);
// 교차 발생 시 시가 저장
If Cross(VALUE3, VAR13) Then VALUE4 = C;
If Cross(VALUE3, VAR14) Then VALUE5 = C;
If Cross(VALUE3, VAR15) Then VALUE6 = C;
If Cross(VALUE3, VAR16) Then VALUE7 = C;
// ============ 시각화 ============
Plot12(VALUE4, "OI_10", Yellow);
Plot13(VALUE5, "OI_20", Cyan);
Plot14(VALUE6, "OI_64", Green);
Plot15(VALUE7, "OI_128", Red);
4. // 체결강도 구분 초기화
VALUE1 = 0;
VALUE2 = 0;
If C > C[1] Then
VALUE1 = V; // 매수 체결로 간주
Else If C < C[1] Then
VALUE2 = V; // 매도 체결로 간주
VALUE3 = ACCUM(VALUE1 - VALUE2); // 체결강도 누적 (순매수량)
// 기준선(평균선)
VAR13 = EMA(VALUE3, 10);
VAR14 = EMA(VALUE3, 20);
VAR15 = EMA(VALUE3, 64);
VAR16 = EMA(VALUE3, 128);
// 교차 시가 출력
If Cross(VALUE3, VAR13) Then VALUE4 = C;
If Cross(VALUE3, VAR14) Then VALUE5 = C;
If Cross(VALUE3, VAR15) Then VALUE6 = C;
If Cross(VALUE3, VAR16) Then VALUE7 = C;
오류가계속나서요 예스트레이더에 구현될수있게 수정부탁드립니다 항상 수고많으십니다
2025-05-20
298
글번호 190981
남한산성 님에 의해서 삭제되었습니다.
2025-05-20
56
글번호 190980
답변완료
종목검색식 부탁드림니다.
항상 노고에 감사드림니다.
아래의 수식을 종목검색식으로 부탁드림니다.
A1=Crossdown(RSI(21), 38);
cnt=Countsince(date!=date(1), A1);
cnt== 1&& cnt(1) == 0
2025-05-19
276
글번호 190979
답변완료
연결선물 구분
안녕하세요?
라이브캐틀 연결선물 차트는 거래량 기준으로 가장 많은 종목을 최근원물을 정의하고 최근원물끼리 연결하여 연속된 차트를 생성하고 있는 듯 싶습니다.
그 개별차트를 연결하여 연결차트로 그릴 때 원물이 바뀌는 시점에 가격차트상에 세로선을 긋고 싶습니다.
감사합니다.
2025-05-19
228
글번호 190978
답변완료
미장 OHLC
안녕하세요 미국 정규장 OHLC 가격을 나타내는 사용자 함수 부탁드립니다. 나중에 지표로 표시 해서 사용할 예정입니다
NQ랑 ES에만 적용할 예정입니다. 거래소 시간 09~30분 같은데…
차트에서 시간은 거래소 시간으로 설정할 예정입니다.
RealO, RealH, ReaL, RealC 이렇게 설정해 주세요
그리고 realO[1]로 적으면 어제 본장의 오픈 가격이 오늘 표시되게 해주세요.
2025-05-19
258
글번호 190977
답변완료
수식 검증 좀 부탁드립니다!
청산이 잘 안됩니다. 수식 검증 좀 부탁드립니다!!
// 진입 전략: 이평선 기준, long은 이평 크로스 업, short은 초단기로만
Var: aa(0), bb(0);
Input: ss(3), sss(4); //진입변수
Var: yyy(1); //진입수량
aa = Average(close, ss); // 단기 이평선
bb = Average(close, ss*sss); // 장기 이평선
if CrossUp(aa,bb[1]) Then Buy ("매수", AtMarket,Def,yyy); // 단기 이평선이 장기 이평선을 골든크로스 시 롱 진입
input: SL(10), PT(10);
SetStopTrailing(SL,PT,PercentStop);
input: ShortHoldDay(2), SL_time(10);
if MarketPosition <0 and BarsSinceEntry > ShortholdDay Then {
ExitLong("EL_time",AtMarket);
ExitShort("ES_time",AtMarket);}
if SL_time > 0 Then SetStopLoss ((SL_time/BigPointValue),PointStop);
2025-05-19
287
글번호 190976
답변완료
시간설정
늘 감사합니다.
차트에 시간지정 설정하기
8시45분을 기준으로 15시45분 까지 약17분간격으로 검은색 세로선 그리기.
종료시간 까지 총25개 선입니다.
색상변경, 굵기변경, 시간간격을 변경하면 갯수가 변할수 있으면 너무 좋아요.
감사함니다
2025-05-20
262
글번호 190975