커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6995
글번호 230811
답변완료
잘 부탁드립니다
input : n1(10),n2(21),obLevel1(60),obLevel2(53),osLevel1(-60),osLevel2(-53);
var : ap(0),esa(0),dd(0),ci(0),tci(0),wt1(0),wt2(0);
ap = (h+l+c)/3 ;
esa = ema(ap, n1);
dd = ema(abs(ap - esa), n1);
ci = (ap - esa) / (0.015 * dd);
tci = ema(ci, n2);
wt1 = tci;
wt2 = ma(wt1,4);
plot1(0,"0",GRAY);
plot2(obLevel1,"obLevel1",red);
plot3(osLevel1,"osLevel1",green);
plot4(obLevel2,"obLevel2",red);
plot5(osLevel2,"osLevel2",green);
plot6(wt1,"wt1",green);
plot7(wt2,"wt2",red);
plot8(wt1-wt2,"wt1-wt2",blue);
1, 0선 아래에서 골드나는 매수
2, -50 -60선 아래서 골드발생만 매수
3, wt1 이 wt2 를 골드 하는 매수 매도 시스템응 부탁 드립니다
### 언제나 항상 많은 도움 감사드립니다 ###
### 부족한 설명이 있거나 부족한것이 있다면 검토해서 잘 부탁드립니다###
2022-12-11
1496
글번호 164495
답변완료
수식 검증 수정부탁드립니다.
트레이딩뷰 지표를 예스지표로 변환하려는데,
어디서 오류가 있는것인지 출력이 되지 않습니다.
점검 수정 부탁드립니다.
////////////////트레이딩뷰 원 지표식 //////////
study(title="UT Bot Alerts", overlay = true)
// Inputs
a = input(1, title = "Key Vaule. 'This changes the sensitivity'")
c = input(10, title = "ATR Period")
h = input(false, title = "Signals from Heikin Ashi Candles")
xATR = atr(c)
nLoss = a * xATR
src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = false) : close
xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss),
iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
pos = 0
pos := iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
ema = ema(src,1)
above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)
buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below
barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop
plotshape(buy, title = "Buy", text = 'Buy', style = shape.labelup, location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red, textcolor = color.white, transp = 0, size = size.tiny)
barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)
alertcondition(buy, "UT Long", "UT Long")
alertcondition(sell, "UT Short", "UT Short")
////////// 제가 변환해본 식 ////////
Input : a(1), length(10),크기(15);
var : truehighv(0),TrueLowv(0),TrueRangev(0),xatr(0),nLoss(0),src(0) ;
var : xClose(0),xOpen(0),xHigh(0),xLow(0);
var : xATRTrailingStop(0),poss(0), emav(0), ab(0), be(0),tx(0) ;
var : dir(0) ;
if index == 0 then
{
xOpen = open;
xClose = (O+H+L+C)/4;
xHigh = MaxList( high, xOpen, xClose);
xLow = MinList( low, xOpen,xClose);
}
else
{
xClose = (O+H+L+C)/4;
xOpen = (xOpen [1] + xClose [1])/2 ;
xHigh = MaxList(High, xOpen, xClose) ;
xLow = MinList(Low, xOpen, xClose) ;
}
////////
If xClose[1] > xHigh then
TrueHighv = xClose[1];
else
TrueHighv = xHigh;
If xClose[1] < xLow then
TrueLowv = xClose[1];
else
TrueLowv = xLow;
TrueRangev = TrueHighv - TrueLowv;
xatr = ma(TrueRangev,length);
nLoss = a * xatr ;
##########
src = xClose ;
xATRTrailingStop = 0.0 ;
xATRTrailingStop = iff(src > xATRTrailingStop[1] and src[1] > xATRTrailingStop[1],
max(xATRTrailingStop[1], src - nLoss),
iff(src < xATRTrailingStop[1] and src[1] < xATRTrailingStop[1],
min(xATRTrailingStop[1],src + nLoss),
iff(src > xATRTrailingStop[1], src - nLoss, src + nLoss)));
poss = 0 ;
poss = iff(src[1] < xATRTrailingStop[1] and src > xATRTrailingStop[1], 1,
iff(src[1] > xATRTrailingStop[1] and src < xATRTrailingStop[1], -1, poss[1])) ;
emav = ema(src,1);
if crossup(emav, xATRTrailingStop) Then ab == true ;
if crossup(xATRTrailingStop, emav) Then be == true ;
////////////
dir = iff(src > xATRTrailingStop and ab == true , 1 ,iff( src < xATRTrailingStop and be == true , -1 , dir));
if dir == 1 and dir[1] == -1
Then
{
tx = Text_New(sDate,sTime,low,"▲");
Text_SetStyle(tx,2,0);
Text_SetSize(tx, 크기);
Text_SetColor(tx,black);
}
if dir == -1 and dir[1] == 1
Then
{
tx = Text_New(sDate,sTime,high,"▼");
Text_SetStyle(tx,2,1);
Text_SetSize(tx, 크기);
Text_SetColor(tx,black);
}
//////////////
2022-12-11
2034
글번호 164494
답변완료
부탁 드립니다
도움에 감사 드립니다.
타주기(1.분봉용 2.일봉용)용 수식 부탁 드립니다.
미리 감사 드립니다.
input : p(20);
input : sig(9);
Var : BPower(0), SPower(0),netPower(0);
BPower = (((C-C[1])*3 + H-C[1])*100)/C[1];
SPower = (((C[1]-C)*3 + C[1]-L)*100)/C[1];
NetPower = ma(BPower-SPower,p);
var1=ma(NetPower,sig);
작성에 참고할 만한 수식)
var : S1(0),D1(0),TM(0),TF(0),cnt(0),ii(0),sum(0);
Array : CC[500](0),HH[500](0),LL[500](0),cts[500](0),VV[500](0);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%ntime;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and ntime > 1 and TM >= TM[1]+ntime) or
(Bdate == Bdate[1] and ntime == 1 and TM > TM[1]) Then
{
hh[0] = H;
LL[0] = l;
VV[0] = 0;
for cnt = 1 to 499
{
CC[cnt] = CC[cnt-1][1];
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
VV[cnt] = VV[cnt-1][1];
CTS[cnt] = CTS[cnt-1][1];
}
}
CC[0] = C;
VV[0] = VV[0] + v;
if HH[0] > 0 and H > HH[0] Then
HH[0] = H;
if LL[0] > 0 and L < LL[0] Then
LL[0] = L;
2022-12-10
1174
글번호 164493
답변완료
참조 데이터 변수선언
일봉챠트를 참조 데이타로 아래와 같이 작성하고 변수를 확인하면
아무런 변화없이 항상 '0' 입니다.
1 아니면 -1 이여야 하는데, 무엇이 잘못됐나요???
var : START("");
var : PBC(0); // 상승하락확인
// 일봉으로 확인
Var1 = (data6(O[2]) - data6(C[0]));
If var1 > 0 then {
PBC = -1;
}
If var1 < 0 then {
PBC = 1;
}
If START = "시작" then {
MessageLog("PBC=%0.0f", PBC);
}
START = "시작";
2022-12-10
1168
글번호 164492
회원 님에 의해서 삭제되었습니다.
2022-12-10
16
글번호 164491
답변완료
화면분할 좌우측 차트의 인식문제
화면분할시 좌측 우측 차트에서 발생되는 시그널을
인식할 수 있는 함수가 있는지요?
2022-12-10
983
글번호 164490
답변완료
문의
답변 수식에 input을 사용하여 시뮬레이션 해보았습니다.
6개 변수에 모두 -10 에서 10 까지 1 단위 사용함
up1
up2 값 변화 없음
dn1
dn2 값 변화 없음
zup 값 변화 없음
zdn
위 3개 변수에서 시뮬레이션이 작동하지 않는데 살펴주셨으면 합니다.
**********************************************************************************
input : up1(1),up2(2),dn1(-1),dn2(-2),zup(3),zdn(-3);
var : uptail(0),body(0),dntail(0),T(0);
uptail = H-max(c,o);
body = abs(C-O);
dntail = min(C-O)-L;
T = 0;
if C > O Then
{
if body > uptail+dntail and body > 0 Then
T = up1;
if body < uptail+dntail and uptail+dntail > 0 Then
T = up2;
}
Else if C < O Then
{
if body > uptail+dntail and body > 0 Then
T = dn1;
if body < uptail+dntail and uptail+dntail > 0 Then
T = dn2;
}
Else
{
if dntail > uptail and dntail > 0 Then
T = zup;
if dntail < uptail and uptail > 0 Then
T = zdn;
}
if AccumN(T,12) > 5 Then
Buy();
if AccumN(T,12) < -5 Then
SelL();
2022-12-10
1059
글번호 164489
답변완료
트렌드 쓰리바닥
inputs: ATRLength(20), Strength(22), ATRMult(1), 폭(0.25);
input : 쌍봉상(2),쌍봉하(2),쌍바닥상(2),쌍바닥하(2);
var : STrend(0),ATRv(0), avgv(0), dnv(0), upv(0), trend(1), flag(0), flagh(0), ST(0),hl(0);
var : idx(0),hh(0),ll(0),EP1(0),EP2(0);
var : ema1(0),ema2(0),ema3(0),h1(0),h2(0),h3(0),h4(0),L1(0),l2(0),l3(0),l4(0);
var :tx(0),tl(0),tx1(0),tx2(0);
Ep1 = 2/(ATRLength+1);
Ep2 = 2/(Strength+1);
idx = idx+1;
if idx < ATRLength Then
{
hh = DayHigh;
ll = daylow;
}
Else
{
hh = Highest(High, ATRLength);
ll = Lowest(Low, ATRLength);
}
if idx < Strength Then
{
h1 = DayHigh;
l1 = daylow;
}
Else
{
h1 = Highest(High, Strength);
l1 = Lowest(Low, Strength);
}
hl = hh-ll;
if idx == 1 Then
{
ema1 = hl;
ema2 = h;
ema3 = l;
}
Else
{
ema1 = hl * EP1 + ema1 * (1-EP1);
ema2 = h * EP2 + ema2 * (1-EP2);
ema3 = l * EP2 + ema3 * (1-EP2);
}
atrv = ema1;
avgv = (ema2+ema3)/2;
upv = avgv + ATRv;
dnv = avgv - ATRv;
if idx >= 2 then
{
if c > upv[1] and c > h1[1] then trend = 1;
else if c < dnv[1] and c < l1[1] then trend = -1;
if trend < 0 and trend[1] > 0 then flag=1; else flag=0;
if trend > 0 and trend[1] < 0 then flagh = 1; else flagh = 0;
if trend > 0 and dnv < dnv[1] then dnv=dnv[1];
if trend < 0 and upv > upv[1] then upv=upv[1];
if flag == 1 then upv = avgv + ATRv;
if flagh == 1 then dnv = avgv - ATRv;
if trend == 1 then ST = dnv; else ST = upv;
STrend = trend;
}
Plot1(st,"SuperTrend",iff(strend == 1,red,blue));
if Trend != Trend[1] Then
{
if Trend == 1 Then
{
var1 = h;
var2 = var1[1];
tx = Text_New(sDate,sTime, st-PriceScale*0,"●");
Text_SetColor(tx,Red);
Text_SetSize(tx,20);
Text_SetStyle(tx,2,2);
if Var4 > 0 and var3 <= Var4+PriceScale*쌍바닥상 and var3 >= Var4-PriceScale*쌍바닥하 Then
{
tx1 = Text_New(sDate,sTime, st-PriceScale*0,"●");
Text_SetColor(tx1,Magenta);
Text_SetSize(tx1,30);
Text_SetStyle(tx1,2,2);
}
}
Else
{
Var3 = l;
Var4 = Var3[1];
tx = Text_New(sDate,sTime, st+PriceScale*0,"●");
Text_SetColor(tx,Blue);
Text_SetSize(tx,20);
Text_SetStyle(tx,2,2);
if Var2 > 0 and var1 <= Var2+PriceScale*쌍봉상 and var1 >= Var2-PriceScale*쌍봉하 Then
{
tx2 = Text_New(sDate,sTime, st+PriceScale*0,"●");
Text_SetColor(tx2,Cyan);
Text_SetSize(tx2,30);
Text_SetStyle(tx2,2,2);
}
}
}
Else
{
if Trend == 1 Then
{
if h > var1 Then
var1 = h;
}
if Trend == -1 Then
{
if l < var3 Then
var3 = l;
}
}
if Trend != Trend[1] Then
{
if Trend == 1 Then
{
h2 = h;
h3 = h2[1];
h4 = h3[1];
if L4 > 0 and
max(L2,l3,l4) <= min(L2,l3,l4)+폭 Then
{
tx1 = Text_New(sDate,sTime, st-PriceScale*0,"●");
Text_SetColor(tx1,Black);
Text_SetSize(tx1,20);
Text_SetStyle(tx1,2,2);
}
}
Else
{
L2 = l;
l3 = l2[1];
l4 = l3[1];
}
}
Else
{
if Trend == 1 Then
{
if h > h2 Then
h2 = h;
}
if Trend == -1 Then
{
if l < L2 Then
L2 = l;
}
}
0.25p 내에서 쓰리바닥을 형성하는지를 실시간으로 보기위한 지표입니다.
1.트렌드 선이 음전환될 때, 음선내의 캔들 최저가를 기준으로 직전저점과 전전저점의 차이가 상하 관계없이
0.25p 이내이면 음선 상단에 동그라미 표시.
두 저점 차이가 0.25p 이상이면 무표시.
2.동그라미 삭제시점:직전저점과 전전저점 중에 높은 저점을 기준으로 하여
a,아래로 -0.25p 도달하기 전에 양전환시.
b,계속 하락하여 -0.25p를 하향 붕괴할 때.
(동그라미는 생성과 삭제를 반복합니다) 부탁드립니다.
2022-12-11
1339
글번호 164488
답변완료
재 문의 드려요
밑의 수식은 붕봉 상 30일 동안 최고 종가의 값이 나와요
제가 알고 싶은 것은 30일 동안 일 봉의 최고 종가를 분봉에 넣고 싶어요
var1 = highest(c,30); <<<< 일봉의 최고 종가를 분봉에 선을 긋고 싶어요
input : N(20);
var : cnt(0),hh(0);
Array : HC[100](0);
if sDate != sDate[1] Then
{
for cnt = 99 DownTo 1
{
HC[cnt] = HC[cnt-1];
}
HC[0] = C;
}
Else
{
if HC[0] > 0 and C > HC[0] Then
{
HC[0] = C;
}
}
if HC[n-1] > 0 Then
{
hh = 0;
For cnt = 1 to N
{
if hh == 0 or (hh > 0 and HC[cnt] > hh) Then
hh = hc[cnt];
}
Plot1(hh);
}
2022-12-09
1170
글번호 164487