커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1537
글번호 230811
답변완료
문의드립니다.
항상 노고에 감사드립니다.
다름이 아니오라 60분차트에
1. 일봉볼린져(20,2) 상단, 중단, 하단
2. 주봉볼린져(20,2) 상단, 중단, 하단
3. 월봉볼린져(20,2) 상단, 중단, 하단
60분봉 차트에 위의 9가지 선들이 나오게 해주실수 있는지요?
항상 어려운부탁만 드려서 죄송합니다.
2023-05-04
1236
글번호 168705
답변완료
지표 질문입니다
틱 차트에서 현재 포함 최근 10분간 고가를 표시한다
틱 차트에서 현재 포함 최근 10분간 저가를 표시한다
감사합니다
2023-05-04
1174
글번호 168701
답변완료
박스 캔들 꼬리
input : 타주기분(1);
var : S1(0),D1(0),TM(0),TF(0),box(0);
var : oo(0),hh(0),ll(0),TL1(0),TL2(0),clr(0),ii(0);
Plot1(c);
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%타주기분;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or
(Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then
{
oo = O;
hh = H;
ll = L;
box = Box_New(sDate,sTime,oo,NextBarSdate,NextBarStime,c);
TL1 = TL_New(sDate,sTime,max(C,oo),sDate,sTime,hh);
TL2 = TL_New(sDate,sTime,min(C,oo),sDate,sTime,ll);
ii = 1;
}
Else
{
ii = ii +1;
if h > hh Then
hh = h;
if l < ll Then
ll = l;
var1 = Round(ii/2,1);
Box_SetEnd(box,sDate,sTime,C);
TL_SetBegin(TL1,sDate[var1],sTime[var1],max(c,oo));
TL_SetEnd(TL1,sDate[var1],sTime[var1],hh);
TL_SetBegin(TL2,sDate[var1],sTime[var1],min(c,oo));
TL_SetEnd(TL2,sDate[var1],sTime[var1],ll);
}
if C > oo Then
clr = Red;
else if C < oo Then
clr = Blue;
Else
clr = Green;
Box_SetColor(box,clr);
Box_SetSize(box,1);
Box_SetFill(box,true,255); #박스채움 투명도 설정 0(투명) ~ 255(불투명), 마지막 True 봉 뒤 배치
TL_SetStyle(TL1,5); # 윗꼬리 아랫꼬리 점선처리
TL_SetStyle(TL2,5); # 윗꼬리 아랫꼬리 점선처리
TL_SetColor(tl1,clr);
TL_SetColor(tl2,clr);
}
1), 윗꼬리 아랫꼬리를, equivolume 차트처럼 위 아래 끝까지 몸통과 동일 색의 박스로 연장 처리.
2), 수정한 1번 차트를, 봉 차트처럼 몸통 두께를 똑같이 하는 별도 수식. 감사합니다.
2023-05-04
1189
글번호 168700
답변완료
문의 드립니다.
늘감사합니다.
매수 : 1차매수 : 일봉에서 1일전 종가가 rsi 하단 아래 있고,
오늘 시가가 rsi 하단 위에서 5% 이상 갭 발생시.
2차매수 : 이후 하락해서 rsi 하단 터치시
3차매수 : 전일 고가 가격 터치시
4차매수 : 전일 종가 가격 터치시
** 봉 완성시 매수가아닌 도달시 즉시 주문 구현이 되면 좋겠습니다.
안될시. 1분봉에서 위 내용이 구현 되게 해주시면 감사 하겠습니다.
매수 금액 : 회차당 1백만
감가합니다
2023-05-04
925
글번호 168699
답변완료
수치표시좀 부탁 드립니다.
* 좋은 주말 됫십시요^^
* 아래 수식 에서 지그제그선이 나올때 수치가 나오게 수정 좀 부탁 드립니다.
마지막 선도 변하는 그대로 나오게 좀 부탁 드립니다.
<아래 수식>
input :Peodd(10),d색상두께(50),d두께c(1),긁씨크기d(10);
Var:상승색j(Red), 하락색j(LimE);
Var:JW(0),JWT(0),dTL5사각(0),dText1사각(0);
Var: h고11(0),h고12(0),h시간11(0),h시간12(0),H선TL1(0),H선TL(0),pvv(0),dTL(0),
h고21(0),h고22(0),h시간21(0),h시간22(0),hVlue11(0),hVlue12(0),
h고31(0),h고32(0),h시간31(0),h시간32(0);
Array:h고Val[20](0),L저val[20](0),h고Bar[20](0),L저Bar[20](0);
Array:Ldr[7](0),Ldfr[7](0);
var : Udbox(0),Udbox1(0);
Ldr[0] = 0;
Ldr[1] = 2;
Ldr[2] = 3.;
Ldr[3] = -1;
Ldr[4] = -2.;
Ldr[5] = 1;
Ldr[6] = 0.5;
For JW = 0 To 19
{
h고Bar[JW] = h고Bar[JW] + 1;
L저Bar[JW] = L저Bar[JW] + 1;
}
if crossup(c,highest(H,Peodd)[1]) Then
JWT = 1;
if CrossDown(c,Lowest(L,Peodd)[1]) Then
JWT = -1;
If JWT == -1 Then
{
If JWT[1] != -1 Then
{
For JW = 18 DownTo 0
{
L저val[JW+1] = L저val[JW];
L저Bar[JW+1] = L저Bar[JW];
//ZZ[j+1] = ZZ[j];
}
L저val[0] = L;
L저Bar[0] = 0;
//ZZ[0] = L;
h고11 = Date[h고Bar[0]];
h시간11 = stime[h고Bar[0]];
hVlue11 = h고Val[0];
h고12 = Date[L저Bar[0]];
h시간12 = stime[L저Bar[0]];
hVlue12 = L저val[0];
h고21 = Date[h고Bar[0]];
h시간21 = stime[h고Bar[0]];
h고22 = Date[0];
h시간22 = stime[0];
for JW = 0 to 6
{
Ldfr[JW] = L저val[1] + ((h고Val[0] - L저val[1]) * Ldr[JW]);
}
Box_SetEnd(Udbox,h고11,h시간11,hVlue11);
Udbox = box_new(h고11,h시간11,hVlue11,h고12,h시간12,hVlue12);
Box_SetColor(Udbox,하락색j);
Box_SetFill(Udbox,true,d색상두께);
dTL5사각 = TL_New(h고11,h시간11,hVlue11,h고12,h시간12,hVlue12);
TL_SetSize(dTL5사각,d두께c);
TL_SetColor(dTL5사각,Blue);
}
If L저val[0] > L Then
{
L저val[0] = L;
L저Bar[0] = 0;
//ZZ[0] = L;
h고12 = Date[L저Bar[0]];
h시간12 = stime[L저Bar[0]];
hVlue12 = L저val[0];
h고22 = Date[0];
h시간22 = stime[0];
// Box_SetEnd(Udbox,h고12,h시간12,hVlue12);
TL_SetEnd(dTL5사각,h고12,h시간12,hVlue12);
}
Box_SetEnd(Udbox,NextBarSdate,NextBarStime,hVlue12);
}
If JWT == 1 Then
{
If JWT[1] != 1 Then
{
For JW = 18 DownTo 0
{
h고Val[JW+1] = h고Val[JW];
h고Bar[JW+1] = h고Bar[JW];
//ZZ[j+1] = ZZ[j];
}
h고Val[0] = H;
h고Bar[0] = 0;
//ZZ[0] = H;
h고11 = Date[L저Bar[0]];
h시간11 = stime[L저Bar[0]];
hVlue11 = L저val[0];
h고12 = Date[h고Bar[0]];
h시간12 = stime[h고Bar[0]];
hVlue12 = h고Val[0];
h고31 = Date[L저Bar[0]];
h시간31 = stime[L저Bar[0]];
h고32 = Date[0];
h시간32 = stime[0];
for JW = 0 to 5
{
Ldfr[JW] = L저val[0] + ((h고Val[1] - L저val[0]) * Ldr[JW]);
}
Box_SetEnd(Udbox,h고11,h시간11,hVlue12);
Udbox = box_new(h고11,h시간11,hVlue11,h고12,h시간12,hVlue12);
Box_SetColor(Udbox,상승색j);
Box_SetFill(Udbox,true,d색상두께);
dTL5사각 = TL_New(h고11,h시간11,hVlue11,h고12,h시간12,hVlue12);
TL_SetSize(dTL5사각,d두께c);
TL_SetColor(dTL5사각,Red);
}
If h고Val[0] < H Then
{
h고Val[0] = H;
h고Bar[0] = 0;
//ZZ[0] = H;
h고12 = Date[h고Bar[0]];
h시간12 = stime[h고Bar[0]];
hVlue12 = h고Val[0];
h고32 = Date[0];
h시간32 = stime[0];
// Box_SetEnd(Udbox,h고12,h시간12,hVlue12);
TL_SetEnd(dTL5사각,h고12,h시간12,hVlue12);
}
Box_SetEnd(Udbox,NextBarSdate,NextBarStime,hVlue12);
}
고맙습니다. 좋은 주말 되십시요.
2023-05-04
1308
글번호 168698
답변완료
수식도움 부탁드립니다.
수고하십니다.
아래수식을 이용한 예스챠트에서는 지표가 출렁거리는데,
그림 아래와 같이 해당타주기분의 종가완성봉 기준으로 지표가 출력되도록 수정부탁드립니다.(그림참조)
감사합니다.
//=================
input : 분(NumericSimple),useClose(NumericSimple),length(NumericSimple),mult(NumericSimple);
var : ATrv(0),longStop(0),longStopprev(0),shortStop(0),shortStopPrev(0);
var : dir(0),dir1(0);
var : truehighv(0),TrueLowv(0),hsatr(0) ;
var : xClose(0),xOpen(0),xHigh(0),xLow(0);
var : xClose1(0),xOpen1(0),xHigh1(0),xLow1(0);
var : S1(0),D1(0),TM(0),TF(0),cnt(0),ii(0);
var : sum(0),longStop1(0),shortStop1(0),hv(0),lv(0);
Array : TrueRangev[100](0),AccumValue[100](0);
Array : oo[100](0),hh[100](0),ll[100](0),cc[100](0),hsc[100](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%분;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and 분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 분 > 1 and TM >= TM[1]+분) or
(Bdate == Bdate[1] and 분 == 1 and TM > TM[1]) Then
{
ii = ii +1;
For cnt = 99 DownTo 1
{
TrueRangev[cnt] = TrueRangev[cnt-1];
oo[cnt] = oo[cnt-1];
hh[cnt] = hh[cnt-1];
ll[cnt] = ll[cnt-1];
cc[cnt] = cc[cnt-1];
hsc[cnt] = hsc[cnt-1];
AccumValue[cnt] = AccumValue[cnt-1];
}
AccumValue[0] = AccumValue[0]+1;
oo[0] = o;
hh[0] = h;
ll[0] = l;
Xopen1 = xopen[1];
Xhigh1 = xhigh[1];
Xlow1 = xlow[1];
Xclose1 = xclose[1];
longStop1 = longStop[1];
ShortStop1 = shortStop[1];
dir1 = dir[1];
}
if hh[0] > 0 and h > hh[0] Then
hh[0] = h;
if ll[0] > 0 and l < ll[0] Then
ll[0] = l;
cc[0] = c;
if ii == 1 then
{
xOpen = oo[0];
xClose = (oo[0]+hh[0]+ll[0]+cc[0])/4;
xHigh = MaxList(hh[0], xOpen, xClose);
xLow = MinList(ll[0], xOpen,xClose);
}
else
{
xClose = (oo[0]+hh[0]+ll[0]+cc[0])/4;
xOpen = (xOpen1 + xClose1)/2 ;
xHigh = MaxList(hh[0], xOpen, xClose) ;
xLow = MinList(ll[0], xOpen, xClose) ;
}
hsc[0] = xclose ;
if ii > 1 Then
{
If xClose1 > xHigh then
TrueHighv = xClose1;
else
TrueHighv = xHigh;
If xClose1 < xLow then
TrueLowv = xClose1;
else
TrueLowv = xLow;
TrueRangev[0] = TrueHighv - TrueLowv;
}
if ii > 2 Then
{
if TrueRangev[length-1] > 0 Then
{
sum = 0;
For cnt = 0 to length-1
{
sum = sum + TrueRangev[cnt];
}
hsatr = sum/length;
}
atrv = mult * hsatr;
hv = 0;
lv = 0;
For cnt = 0 to length-1
{
if useClose == 1 Then
{
if hv == 0 or (hv > 0 and hsc[cnt] > hv) Then
hv = hsc[cnt];
if lv == 0 or (lv > 0 and hsc[cnt] < lv) Then
lv = hsc[cnt];
}
Else
{
if hv == 0 or (hv > 0 and hh[cnt] > hv) Then
hv = hh[cnt];
if lv == 0 or (lv > 0 and ll[cnt] < lv) Then
lv = ll[cnt];
}
}
longStop = hv - atrv;
longStopPrev = longStop1;
longStop = iff(hsc[1] > longStopPrev , max(longStop, longStopPrev) , longStop);
shortStop = lv + atrv;
shortStopPrev = shortStop1;
shortStop = iff(hsc[1] < shortStopPrev , min(shortStop, shortStopPrev) , shortStop);
dir = iff(hsc[0] > shortStopPrev , 1 ,iff(hsc[0] < longStopPrev , -1 , dir1));
}
}
//====================
2023-05-04
1634
글번호 168697
답변완료
문의드립니다
안녕하세요?
아래수식에서 plot1은잘되는데 소리출력이되지않습니다 ,소리출력 부탁드립니다
감사합니다
if ss==-1 and ss!=ss[1] and tt==1 and tt !=tt[1] Then
plot1(var1);
if var1==1 Then
PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav");
2023-05-04
1539
글번호 168696
답변완료
매수후 수동청산후 다시 매수로 진입하는 방법?
예를들어) 매수후에 수동으로 청산후 다시 매수로 재진입 할려고 하면
매수가 안되고 매도신호가 나온후에 다시 매수신호에 진입하는데...
수동청산후 매수신호에 바로 매수하는 수식이나 방법이 있나요?
2023-05-04
1257
글번호 168695
답변완료
시스템식 요청드립니다.
전에 아래와 같이 질문을 남겼었는데 답변을 주셨는데 안되는 부분이 있어
다시 올려봅니다.
1번에 2번에 답변을 보면 이전 직전에 대한 청산이 있어야 처음 매수매도진입이
가능한 걸로 나오는데....
처음에 시스템을 적용했더니. 가장 처음에 청산이 없다보니
아예 매수매도 진입이 안되더라구요
가능한 방법이 있는지 확인 부탁드리겠습니다.
------------------------------------------------------------------------------
질문 1)
아래의 해당식에서 조건을 추가하고 싶은 내용이 있는데 확인 부탁 드리겠습니다.
if MarketPosition == 0 and CrossDown(C,var3) Then
buy("매수1");
위 식에서는 포지션 가지고 있는게 없고, 변수3을 종가가 하향 돌파하면 매수하는 식인데,
추가하고 싶은 조건은
청산한지 30분 후 부터 적용 입니다.
예를들어
오후 11시 20분에 '익절청산' 이 되었다면, 11시 50분 전까지는
변수3을 종가가 하향 돌파하면 매수되지 않다가 50분 이후부터
적용하게 되도록 부탁드립니다.
질문 2)
if MarketPosition == 0 and CrossDown(C,var3) Then
buy("매수1");
if MarketPosition == 0 and CrossUp(C,var1) Then
Sell("매도2");
위의 식처럼 진입식이 있고,
ExitLong("매수-손절",AtStop,AvgEntryPrice-100);
ExitShort("매도-손절",AtStop,AvgEntryPrice+100);
위의 식처럼 손절청산 식이 있습니다.
매수 진입 후 매수-손절 로 청산 되었다면 그 다음은 매도 포지션으로 진입하고 싶어서
진입식을 아래와 같이 수정했습니다.
if MarketPosition == 0 and CrossDown(C,var3)
and IsExitName("매도-손절",1) == true Then
buy("매수1");
이렇게 수정하였더니, 가장 처음 시스템 적용했을때, 앞에 청산이 없어서
적용이 안됩니다.ㅜ.ㅜ
어떻게 적용해야 할까요??
------------------------------------------------------------------------------
답변
----------------------------------------------------------------------------
1
if MarketPosition == 0 and CrossDown(C,var3) and
(TotalTrades == 0 or (TotalTrades == 1 and TimeToMinutes(sTime) >= TimeToMinutes(ExitTime(1))+30)) Then
buy("매수1");
2
if MarketPosition == 0 and CrossDown(C,var3) and
(TotalTrades == 0 or (TotalTrades >= 1 and IsExitName("매도-손절",1) == true)) Then
buy("매수1");
if MarketPosition == 0 and CrossUp(C,var1) and
(TotalTrades == 0 or (TotalTrades >= 1 and IsExitName("매수-손절",1) == true)) Then
Sell("매도2");
ExitLong("매수-손절",AtStop,AvgEntryPrice-100);
ExitShort("매도-손절",AtStop,AvgEntryPrice+100);
-----------------------------------------------------------------------------------
2023-05-04
1247
글번호 168694