커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1509
글번호 230811
답변완료
수식 문의
키움 지표수식 입니다.
valuewhen(1, c>o && CrossUp(Amount, 100억), 시가) 수식 부탁드립니다.
건강하세요 !!
2023-08-28
1010
글번호 171910
답변완료
array
안녕하세요?
1. 매일 10~12 중 고저가 차이를 20일간 어레이에 저장했는데 오류가 납니다
수정 부탁드렵니다
if sTime == 110000
{
dailyHigh := high
dailyLow := low
}
else
sTime > 110000 sTime <=120000 Then
{
dailyHigh = max(dailyHigh, high)
dailyLow = min(dailyLow, low)
}
for cnt = 1 to 20
HL[cnt] = dailyHigh[cnt]- dailyLow[cnt]
2. 1분마다 올라가는 카운터 부탁드립니다
cnt = cnt +1
항상 감사합니다
2023-08-29
1008
글번호 171909
답변완료
부탁드립니다
5분봉에서 이동평균선 60선이 120선 골든크로스한지 200봉 이내에 2봉전 rsi(14)가 30 이상이고 1봉전 rsi(14)가 30밑으로 떨어졌을때 5분봉 1봉전 종가로 1차매수, 미체결시 15분뒤 취소주문
보유종목중에서 1차매수보다 1퍼센트 이상 하락하고 마찬가지로 5분봉 2봉전 rsi(14)가 30이상이고 1봉전 rsi(14)가 30밑으로 떨어졌을때 5분봉 1봉전 종가 +1호가로 2차매수,미체결시 15분뒤 취소주문
매도는 5분봉 1봉전 rsi(14)가 70 이상일때 5분봉 1봉전 종가에 매도, 미체결시 10분뒤 시장가매도
매수 매도 취소까지는 지정이 안된다고하면 매수매도수식이라도 부탁드립니다
nput : P(14);
var : RSIv(0);
RSIv = RSI(P);
if MarketPosition == 0 and RSIV[1] > 30 and RSIV <= 30 Then
{
if NextBarOpen >= C Then
Buy("b1.",AtStop,C);
Else
Buy("b1",AtLimit,C);
}
if MarketPosition == 1 Then
{
if MaxEntries == 1 and RSIV[1] > 30 and RSIV <= 30 and C <= LatestEntryPrice(0)*0.99 Then
{
if NextBarOpen >= C Then
Buy("b2.",AtStop,C);
Else
Buy("b2",AtLimit,C);
}
if RSIV[1] < 70 and RSIV >= 70 Then
{
if NextBarOpen <= C Then
ExitLong("bx.",AtStop,C);
Else
ExitLong("bx",AtLimit,C);
}
}
예전에 이수식을 받았었는데 1봉전 종가에 매수하려면 onclose를 써야하는거 아닌가요? 여기에 윗 질문에 추가할거 추가하고 수정할거 수정해서 부탁드립니다 감사합니다
2023-08-29
1028
글번호 171908
답변완료
수식문의
수고하십니다.
(문의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
686
글번호 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
1162
글번호 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
1680
글번호 171884
러블리 님에 의해서 삭제되었습니다.
2023-08-28
40
글번호 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
755
글번호 171881
이민섭 님에 의해서 삭제되었습니다.
2023-08-28
10
글번호 171880