커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6388
글번호 230811
답변완료
수식문의
수고하십니다.
(문의1) 아래수식을 예스수식으로 변환하여 종목검색을 하고 싶습니다.
HL = HighestSince(1,date!=date(1),C);
C1 = ValueWhen(1,CrossUp(time,T1),HL(1));#T1은 9시29분29초
BL = ValueWhen(1,C1>PreDayClose()*Mult,C1);#Mult는 1.03
CrossUp(C,BL) && C>O && time>=T2 #T2는 9시30분00초
(문의2) 아래조건으로 종목검색 수식요청
1.당일 주가가 전일대비 3%이상 상승
2.종가는 20일이평선 위에 있고 20일 이평선은 상승추세
3.일거래량은 10만주 이상이고 전일거래량배비 당일거래량 50%이상
4.5분봉기준 9시 30분미만의 최고종가가 전일(일봉)대비 3%이상이고
09시30분 이후 9시 30분미만의 최고종가를 현재가 돌파하는 봉을 검색
(문의3) 검색된 종목이 재검색시에도 계속유지될 수 있도록 부탁드립니다
2023-08-28
748
글번호 171888
답변완료
수식변환 부탁드립니다
안녕하세요
항상 감사드립니다.
예스 수식으로 지표식, 종목검색식 부탁드립니다.
수고 하십시요.
// Inputs
leftBars = input(10, title='PP Left Bars')
rightBars = input(10, title='PP Right Bars')
atr_length = input(100, title='ATR Length')
atr_mult = input(100, title='ATR Mult')
// Pivot High Significant Function
pivotHighSig(left, right) =>
pp_ok = true
atr = ta.atr(atr_length)
for i = 1 to left by 1
if high[right] < high[right + i] + atr * atr_mult
pp_ok := false
pp_ok
for i = 0 to right - 1 by 1
if high[right] < high[i] + atr * atr_mult
pp_ok := false
pp_ok
pp_ok ? high[right] : na
// Pivot Low Significant Function
pivotLowSig(left, right) =>
pp_ok = true
atr = ta.atr(atr_length)
for i = 1 to left by 1
if low[right] > low[right + i] - atr * atr_mult
pp_ok := false
pp_ok
for i = 0 to right - 1 by 1
if low[right] > low[i] - atr * atr_mult
pp_ok := false
pp_ok
pp_ok ? low[right] : na
swh = pivotHighSig(leftBars, rightBars)
swl = pivotLowSig(leftBars, rightBars)
swh_cond = not na(swh)
hprice = 0.0
hprice := swh_cond ? swh : hprice[1]
le = false
le := swh_cond ? true : le[1] and high > hprice ? false : le[1]
swl_cond = not na(swl)
lprice = 0.0
lprice := swl_cond ? swl : lprice[1]
se = false
se := swl_cond ? true : se[1] and low < lprice ? false : se[1]
// Pivots of pivots
ph1 = 0.0
ph2 = 0.0
ph3 = 0.0
pl1 = 0.0
pl2 = 0.0
pl3 = 0.0
pphprice = 0.0
pplprice = 0.0
ph3 := swh_cond ? nz(ph2[1]) : nz(ph3[1])
ph2 := swh_cond ? nz(ph1[1]) : nz(ph2[1])
ph1 := swh_cond ? hprice : nz(ph1[1])
pl3 := swl_cond ? nz(pl2[1]) : nz(pl3[1])
pl2 := swl_cond ? nz(pl1[1]) : nz(pl2[1])
pl1 := swl_cond ? lprice : nz(pl1[1])
pphprice := swh_cond and ph2 > ph1 and ph2 > ph3 ? ph2 : nz(pphprice[1])
pplprice := swl_cond and pl2 < pl1 and pl2 < pl3 ? pl2 : nz(pplprice[1])
if le and not na(pphprice) and pphprice != 0
strategy.entry('PivRevLE', strategy.long, comment='PivRevLE', stop=pphprice + syminfo.mintick)
if se and not na(pplprice) and pplprice != 0
strategy.entry('PivRevSE', strategy.short, comment='PivRevSE', stop=pplprice - syminfo.mintick)
// Plotting
plot(lprice, color=color.new(color.red, 55))
plot(hprice, color=color.new(color.green, 55))
plot(pplprice, color=color.new(color.red, 0), linewidth=2)
plot(pphprice, color=color.new(color.green, 0), linewidth=2)
2023-08-28
1300
글번호 171887
답변완료
박스 위치
input : Period(230);
Var:j(0),T(0),tl(0),TL1(0),tx(0) ,box(0),LL(0),HH(0),L1(0);
Var: date11(0),date12(0),time11(0),time12(0),
date21(0),date22(0),time21(0),time22(0),
date31(0),date32(0),time31(0),time32(0);
Array: HiVal[20](0),LoVal[20](0),HiBar[20](0),LoBar[20](0);
Plot1(0);
For j = 0 To 19
{
HiBar[j] = HiBar[j] + 1;
LoBar[j] = LoBar[j] + 1;
}
if crossup(c,highest(H,Period)[1]) Then
T = 1;
if CrossDown(c,Lowest(L,Period)[1]) 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,Blue);
TL_SetSize(TL1,2);
date21 = date[HiBar[0]];
time21 = stime[HiBar[0]];
date22 = date[0];
time22 = stime[0];
box = Box_New(date11,time11,LL,date12,time12,value12);
Text_SetSize(tx,25);
Text_SetColor(Tx,Red);
Text_SetStyle(tx,1,1);
Text_SetBold(tx,1);
if abs(value12[1]-value11[1]) < 0.7 Then
Text_Delete(tx);
tx = Text_New(sDate,stime,value12,NumToStr(value11-value12,2));
Text_SetColor(Tx,Blue);
Text_SetStyle(tx,1,0);
Text_SetSize(tx,25);
Text_SetBold(tx,1);
}
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];
Box_SetEnd(BOX,date12,time12,Value12);
Text_SetString(tx,NumToStr(value11-value12,2));
Text_SetLocation(tx,sDate,sTime,value12);
}
if value12 > value11-0.7 Then
{
Box_SetColor(box,Cyan);
Box_SetFill(box,true,50);
}
else if value12 <= value11-0.7 and value12 > value11-0.95 Then
{
Box_SetColor(box,Yellow);
Box_SetFill(box,true,90);
}
else if value12 <= value11-0.95 and value12 > value11-1.3 Then
{
Box_SetColor(box,Lime);
Box_SetFill(box,true,80);
}
else if value12 <= value11-1.3 and value12 > value11-1.6 Then
{
Box_SetColor(box,Cyan);
Box_SetFill(box,true,50);
}
else if value12 <= value11-1.6 and value12 > value11-2 Then
{
Box_SetColor(box,Blue);
Box_SetFill(box,true,25);
}
else
{
Box_SetColor(box,Lime);
Box_SetFill(box,true,35);
}
}
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,Red);
TL_SetSize(TL1,2);
date31 = date[LoBar[0]];
time31 = stime[LoBar[0]];
date32 = date[0];
time32 = stime[0];
box = Box_New(date11,time11,Value11,date12,time12,Value12);
Text_SetSize(tx,25);
Text_SetColor(Tx,Blue);
Text_SetStyle(tx,1,0);
Text_SetBold(tx,1);
if abs(value12[1]-value11[1]) < 0.7 Then
Text_Delete(tx);
tx = Text_New(sDate,stime,value12,NumToStr(value12-value11,2));
Text_SetColor(Tx,Red);
Text_SetStyle(tx,1,1);
Text_SetSize(tx,25);
Text_SetBold(tx,1);
}
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];
Box_SetEnd(box,date12,time12,Value12);
Text_SetString(tx,NumToStr(value12-value11,2));
Text_SetLocation(tx,sDate,sTime,value12);
}
if Value12 > value11+1.1 Then
{
Box_SetColor(box,Pink);
Box_SetFill(box,true,90);
}
else if value12 >= value11+0.8 and value12 <= value11+1.1 Then
{
Box_SetColor(box,Magenta);
Box_SetFill(box,true,40);
}
Else
{
Box_SetColor(box,Orange);
Box_SetFill(box,true,60);
}
}
하락 박스 상단은 그림같이 추세선 하단에 맞추고(LL), 박스 하단을 하락추세선 하단 -0.5p 아래에서 끊을 수 있을까요? 빗금친 부분만 박스. 크기별 색상 그대로 유지.
상승 박스는 반대.
안되면 상승 박스를 현재 하락 박스같이, 상승 박스 하단은 상승추세선 상단, 상승 박스 상단은 차트 상단으로 올려주세요. 하락은 내렸는데 상승은 안올라가네요. 감사합니다.
2023-08-28
1747
글번호 171884
러블리 님에 의해서 삭제되었습니다.
2023-08-28
42
글번호 171883
답변완료
문의 드립니다
1.
Input: Length(5), Pval(0.05);
Buy ("CBI_LE", AtStop, Highest(High, Length) + Pval);
ExitLong("CBI_SE", AtStop, Lowest(Low, Length) - Pval);
2.
Input: Length(5), Pval(0.05);
ExitShort ("CBI_LE", AtStop, Highest(High, Length) + Pval);
Sell("CBI_SE", AtStop, Lowest(Low, Length) - Pval);
----------------
1,2번 수식어에 2가지 조건일때 진입을 하고자 합니다.
1.
1번 수식어는 5 이동평균선이 80 이동평균선보다 위에 있고
이격도 80의 기준선이 100 이상 일때 진입입니다.
익절 100틱 손절 100틱
청산은 동일 합니다.
2.
2번 수식어는 5 이동평균선이 80 이동평균선보다 아래에 있고
이격도 80의 기준선이 100 이하 일때 진입입니다.
익절 100틱 손절 100틱
청산은 동일 합니다.
추가로 익절이나 손절 청산시 잔고가 소멸 되질않고 반대포지션의 수량이 계속진행형인데
잔고가 없게 할수 있는지 별도의 수식어도 부탁 드립니다.
미리 감사드립니다.
2023-08-28
820
글번호 171881
이민섭 님에 의해서 삭제되었습니다.
2023-08-28
10
글번호 171880
이민섭 님에 의해서 삭제되었습니다.
2023-08-28
12
글번호 171879
답변완료
부탁드립니다.
변형 부탁 드립니다.
price = input(hl2, "Price")
colorNormLength = input(3, "colorNormLength", input.integer)
dpoLength = input(13, "dpoLength", input.integer)
moboDisplace = input(0, "moboDisplace", input.integer)
moboLength = input(10, "moboLength", input.integer)
numDevDn = input(-0.8, "numDevDn", input.float)
numDevUp = input(0.8, "numDevUp", input.float)
coloredMobo = input(true, "coloredMobo")
coloredFill = input(true, "coloredFill")
breakArrows = input(true, "breakArrows")
moboShowMid = input(true, "moboShowMid")
//def DPO = price - Average(price[DPO_length / 2 + 1], DPO_length);
xsma = sma(price[dpoLength / 2 + 1], dpoLength)
//xsma = sma(price, dpoLength)
DPO = price - xsma
Midline = sma(DPO, moboLength)
sDev = stdev(DPO, moboLength)
LowerBand = Midline + numDevDn * sDev
UpperBand = Midline + numDevUp * sDev
plot(DPO, color=color.yellow,linewidth=2)
plot(Midline, color=Midline > Midline[1] ? color.lime : color.red,linewidth=2)
Upper = plot(UpperBand, color=color.black,linewidth=1)
Lower = plot(LowerBand, color=color.black,linewidth=1)
plot(0, color=color.white,linewidth=1)
Signal1 = DPO > UpperBand and DPO[1] < UpperBand[1]
Signal2 = DPO < LowerBand and DPO[1] > LowerBand[1]
wasUp = 1
wasDn = 1
wasUp := Signal1 ? 1 : (Signal2 ? 0 : nz(wasUp[1]))
wasDn := Signal2 ? 1 : (Signal1 ? 0 : nz(wasDn[1]))
//plotshape(Signal1 and wasDn[1] ? UpperBand : na, style=shape.arrowup, location=location.absolute, size=size.normal, color=color.red)
//plotshape(Signal2 and wasUp[1] ? LowerBand : na, style=shape.arrowdown, location=location.absolute, size=size.normal, color=color.green)
plotshape(Signal1 and wasDn[1] ? UpperBand : na, style=shape.labelup, location=location.absolute, size=size.normal, color=color.green, text="Buy",textcolor=color.white)
plotshape(Signal2 and wasUp[1] ? LowerBand : na, style=shape.labeldown, location=location.absolute, size=size.normal, color=color.red, text="Sell",textcolor=color.white)
fill(Upper, Lower, color=color.purple)
alertcondition(Signal1 and wasDn[1], "Break Out Arrow", "Break Out Arrow")
alertcondition(Signal2 and wasUp[1], "Break Down Arrow", "Break Down Arrow")
2023-08-28
1040
글번호 171878
답변완료
수식 문의드립니다.
안녕하세요.
해외선물 틱 차트로 거래하려고 하는데요
틱 차트는 하나의 봉이 만들어지는 시간이 매번 다른 것으로 알고 있는데요
봉이 만들어지는 시간이 30초 이하일 경우에 진입을 하고(BUY, SELL)
봉이 만들어지는 시간이 50초 이상일 경우에 청산을 하는(Exitlong, Exitshort)
함수는 어떻게 작성할 수 있을까요?
항상 감사드립니다.
2023-08-27
1179
글번호 171877