커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
5502
글번호 230811
답변완료
행복; 지표식 작성 바랍니다
한국의 금융산업 발전을 위해 불철주야 애쓰시는 귀하의 노고를 높이 평가합니다
지표식 관련입니다
< 질문 >
주기; 60분봉
- 5일 이평선이 20일 이평선을 상향돌파하는 시점이 sdate, sTime 이고
이 시점의 종가를 close 라고 할 때
- 종가 위치에 '종가*1.1'의 가격을 소수점 2자리 숫자로 표시하려고
- Text_New(sDate, sTime, Close, NumToStr(Close * 1.1, 2));
로 작성하였습니다
- sDate와 sTime가 2020년 11월 27일이고 10시00분00초 라고 할 때
3봉 전인 2020년 11월 26일 14시00분00초에 표시되도록 하려고
- Text_New(sDate, sTime[3], Close, NumToStr(Close * 1.1, 2));
로 작성하였습니다
- 그러나 표시는 2020년 11월 27일 14시00분00초에 표시되었습니다
무엇이 잘못되었는지요?
수식 작성 바랍니다^^
2020-11-30
847
글번호 144307
답변완료
수식문의
종목검색식 말고 지표에 표시되는 수식 부탁드립니다.
안녕하세요
예스스탁입니다.
input : short(5),mid(20),long(60),percent(5);
var1 = ma(c,short);
Var2 = ma(C,mid);
Var3 = ma(C,long);
if max(var1,Var2,Var3) < min(var1,Var2,Var3) * (1+Percent/100) &&
HIGHEST(H, 4)[1] < C
and O < C
and V[1]*2 <= V Then
Find(1);
즐거운 하루되세요
> 주야뛰자 님이 쓴 글입니다.
> 제목 : 신호검색문의요
> max( avg(C,short), avg(C,mid), avg(C,long)) <
min( avg(C,short), avg(C,mid), avg(C,long)) * (1+Percent/100) &&
HIGHEST(H, 4, 1) < C
and O < C
and V(1)*2 <= V
지표변수
short 5
mid 20
long 60
percent 5
영웅문 신호검색식입니다.
변환부탁드립니다.
2020-11-30
733
글번호 144306
답변완료
수식 문의
종목검색식 말고 지표에 표시되는 수식 부탁드립니다.
안녕하세요
예스스탁입니다.
input : short(5),mid(20),long(60),percent(5);
var1 = ma(c,short);
Var2 = ma(C,mid);
Var3 = ma(C,long);
var4 = ma(v,5);
var5 = Sar(0.02,0.2);
if max(var1,Var2,Var3) < min(var1,Var2,Var3) * (1+Percent/100) &&
HIGHEST(H, 4)[1] < C
and O < C
and ((C[1]*1.021 <= C) or (O*1.021 <= C))
and (C-O)*2 >= (H-C)
and (C-O)*0.9 >= (O-L)
and V[1]*1.5 <= V
and var4 >= 9000
and DayClose(1) >= 950
and Crossup(C,Var5) Then
Find(1);
즐거운 하루되세요
> 주야뛰자 님이 쓴 글입니다.
> 제목 : 신호검색문의요
> max( avg(C,short), avg(C,mid), avg(C,long)) <
min( avg(C,short), avg(C,mid), avg(C,long)) * (1+Percent/100) &&
HIGHEST(H, 4, 1) < C
and O < C
and ((C(1)*1.021 <= C) or (O*1.021 <= C))
and (C-O)*2 >= (H-C)
and (C-O)*0.9 >= (O-L)
and V(1)*1.5 <= V
and avg(V, 5) >= 9000
and PreDayClose() >= 950
and Crossup(C,SAR(0.02, 0.2))
지표변수
short 5
mid 20
long 60
percent 5
영웅문 신호검색입니다.
변환부탁드립니다
2020-11-30
743
글번호 144305
답변완료
수식문의
find함수는 종목검색식에서만 사용 가능하다고 하네요.
종목 검색식 아니라 지표에 표기되는 수식으로 부탁드립니다.
안녕하세요
예스스탁입니다.
input : short(5),mid(20),long(60),percent(5);
var1 = ma(c,short);
Var2 = ma(C,mid);
Var3 = ma(C,long);
var4 = ma(v,5);
var5 = Sar(0.02,0.2);
var6 = BollBandUp(20,2);
if max(var1,Var2,Var3) < min(var1,Var2,Var3) * (1+Percent/100) &&
HIGHEST(H, 4)[1] < C
and O < C
and ((C[1]*1.025 <= C) or (O*1.025 <= C))
and (C-O)*2.5 >= (H-C)
and V[1]*1.2 <= V
and var4 >= 30000
and DayClose(1) >= 950
and Crossup(C,Var5)
and CrossUp(h,Var6) Then
Find(1);
즐거운 하루되세요
> 주야뛰자 님이 쓴 글입니다.
> 제목 : 신호검색문의요
> max( avg(C,short), avg(C,mid), avg(C,long)) <
min( avg(C,short), avg(C,mid), avg(C,long)) * (1+Percent/100) &&
HIGHEST(H, 4, 1) < C
and O < C
and ((C(1)*1.025 <= C) or (O*1.025 <= C))
and (C-O)*2.5 >= (H-C)
and V(1)*1.2 <= V
and avg(V, 5) >= 30000
and PreDayClose() >= 950
and Crossup(C,SAR(0.02, 0.2))
and CrossUp(h,BBandsUp(20, 2))
지표변수
short 5
min 20
long 60
percent 5
영웅문 신호검색식입니다.변환부탁드립니다.
2020-11-30
734
글번호 144304
답변완료
안녕하세요?
안녕하세요?
전에 만들어주신 지표식을 가지고 시스템에 적용중에
수식작성에 어려움이 있어 문의 드립니다.
파라미딩을 이용하니 스위칭 부분이 이뤄지지 않습니다.
1. 아래 수식에서 var10 이나 var20 : 이부분이 항상 첫진입니다.
(ⓐ 부분 1계약 매수 or 매도)
L 이 var10 이탈하면 매도 1계약 이거나
H 가 var20 돌파하면 매수 1계약
if a3 > 0 and u == 1 then
Var10 = a3;
if b3 > 0 and uu == 1 then
Var20 = b3;
결과값 var10,var20
2. 1번 진입이후
매도 진입일때 value5 돌파하면 추가 1계약 매도 이거나
매수 진입일때 value6 이탈하면 추가 1계약 매수 입니다.
총2계약만 진입입니다.
3. 2계약 진입이후
h > DayHigh(0)[1] 이면 2계약매도분 청산후 매수1계약으로 스위칭.
L < DayLow(0)[1] 이면 2계약매수분 청산후 매도1계약으로 스위칭.
4. 스위칭이후
var10 : 진입하지 않음 value5 : 1계약 추가진입.(매도)
var20 : 진입하지 않음 value6 : 1계약 추가진입.(매수)
감사합니다.
수식 앞부분은 생략하고 시스템부분만 적었습니다.
if a3 > 0 and u == 20000 then
Var10 = a3;
if b3 > 0 and uu == 20000 then
Var20 = b3;
ClearDebug();
input : starttime(100000),endtime(050000);
var : Tcond(false);
if (sdate != sdate[1] and stime >= starttime) or
(sdate == sdate[1] and stime >= starttime and stime[1] < starttime) then
{
Tcond = true;
}
if (sdate != sdate[1] and stime >= endtime) or
(sdate == sdate[1] and stime >= endtime and stime[1] < endtime) then
{
Tcond = false;
if MarketPosition == 1 Then
exitlong();
if MarketPosition == -1 Then
ExitShort();
}
if Tcond == true then
{
If MarketPosition == 0 and L < Var10 Then // ⓐ
Sell("1차S",AtStop,var10);
If MarketPosition == -1 and MaxEntries == 1 and H > value5 Then
Sell("2차S",AtStop,value5);
If MarketPosition == -2 and MaxEntries == 2 and h > DayHigh(0)[1] Then
Buy("S-B",AtStop,DayHigh(0)[1]);
If MarketPosition == 0 and H > Var20 Then //ⓐ
Buy("1차B",AtStop,var20);
If MarketPosition == 1 and MaxEntries == 1 and L < value6 Then
Buy("2차B",AtStop,value6);
If MarketPosition == 2 and MaxEntries == 2 and L < DayLow(0)[1] Then
Sell("S-S",AtStop,DayLow(0)[1]);
}
2020-12-01
675
글번호 144292
답변완료
매년 특정월/특정일 매수
<1> 매년 12월 15일 오후 12시에 매수해서 다음 해 6월 14일 오후 12시에 매도하는 수식 부탁드립니다.
<2> 매년 12월 두번째주 화요일 오후 12시에 매수해서 다음 해 6월 세번째주 월요일 오후 12시에 매도하는 수식 부탁드립니다.
두 경우 각각 만약 해당일자가 휴일이면 바로 다음 business day에 실행되게 부탁드립니다.
2020-11-30
860
글번호 144283
답변완료
청산관련
수고하십니다
나스닥기준으로 당일오전4시에 청산후
당일 시장재시작후 오전6시 청산전 포지션을
시장가로 다시 포지션잡는게 가능할까요?
2020-11-30
615
글번호 144277
2wnwn 님에 의해서 삭제되었습니다.
2020-11-30
10
글번호 144268
답변완료
지표문의
1.아래 지표를 적용하면 수치가 표시되는데 없애고 굵기 조정하게 수정 좀해주세요
2.inputs : ShowAll(true);
var : BoxTop(0), BoxBtm(0), Ctr(0), BBD(0), BBT(0), EBD(0), EBT(0), UpBand(0), DnBand(0), CurrState(1),
TextId(-1), TopId(-1), TopIdP(-1), BtmId(-1), BtmIdP(-1), LSId(-1), LSIdP(-1), RSId(-1), RSIdP(-1),
HiFirst(true), LoFirst(false), State1(false), State2(false), State3(false), State4(false), State5(false),
DrawBox(false), ValidBox(false), HadBreak(false), NewBox(false);
if index == 1 then begin
BoxTop = high;
BoxBtm = low;
State1 = true;
BBD = date;
BBT = time;
end;
if NewBox and high > UpBand then begin
BBD = date;
BBT = time;
TL_SetEnd(TopId, BBD, BBT, UpBand);
TL_SetEnd(BtmId, BBD, BBt, DnBand);
RSIdP = RSId ;
RSId = TL_New(BBD, BBT, DnBand, BBD, BBT, UpBand);
if ShowAll == false and RSIdP <> -1 then TL_Delete( RSIdP ) ;
if HiFirst then TL_SetColor(RSId, yellow);
else TL_SetColor(RSId, magenta);
NewBox = false;
State1 = true;
LoFirst = false;
HiFirst = true;
end;
if NewBox and low < DnBand then begin
BBD = date;
BBT = time;
TL_SetEnd(TopId, BBD, BBT, UpBand);
TL_SetEnd(BtmId, BBD, BBt, DnBand);
RSIdP = RSId;
RSId = TL_New(BBD, BBT, DnBand, BBD, BBT, UpBand);
if ShowAll == false and RSIdP <> -1 then TL_Delete(RSIdP);
if HiFirst then TL_SetColor(RSId, yellow) ;
else TL_SetColor(RSId, magenta);
NewBox = false;
State1 = true;
HiFirst = false;
LoFirst = true;
end;
if HiFirst then begin
if State4 then begin
if high > BoxTop then begin
BoxTop = high;
State1 = true;
State4 = false;
CurrState = 1;
end
else begin
if low < BoxBtm then begin
State4 = false;
State3 = true;
BoxBtm = low;
CurrState = 3;
end
else begin
State4 = false;
State5 = true;
CurrState = 5;
end;
end;
end;
if State3 then begin
if high > BoxTop then begin
BoxTop = high;
State1 = true;
State3 = false;
CurrState = 1;
end
else begin
if low < BoxBtm then begin
State3 = true;
BoxBtm = low;
CurrState = 3;
end
else begin
State3 = false;
State4 = true;
CurrState = 4;
end;
end;
end;
if State2 then begin
if high > BoxTop then begin
BoxTop = high;
State1 = true;
State2 = false;
CurrState = 1;
end
else begin
State2 = false;
State3 = true;
BoxBtm = low;
CurrState = 3;
end;
end;
if State1 then begin
if high > BoxTop then begin
BoxTop = high;
State1 = true;
CurrState = 1;
end
else begin
State1 = false;
State2 = true;
CurrState = 2;
end;
end;
end
else begin #{ Using LoFirst }
if State4 then begin
if low < BoxBtm then begin
BoxBtm = low;
State1 = true;
State4 = false;
CurrState = 1;
end
else begin
if high > BoxTop then begin
State3 = true;
State4 = false;
BoxTop = high;
CurrState = 3;
end
else begin
State4 = false;
State5 = true;
CurrState = 5;
end;
end;
end;
if State3 then begin
if low < BoxBtm then begin
BoxBtm = low;
State1 = true;
State3 = false;
CurrState = 1;
end
else begin
if high > BoxTop then begin
State3 = true;
BoxTop = high;
CurrState = 3;
end
else begin
State3 = false;
State4 = true;
CurrState = 4;
end;
end;
end;
if State2 then begin
if low < BoxBtm then begin
Boxbtm = low;
State1 = true;
State2 = false;
CurrState = 1;
end
else begin
State2 = false;
State3 = true;
BoxTop = high;
CurrState = 3;
end;
end;
if State1 then begin
if low < BoxBtm then begin
BoxBtm = low;
State1 = true;
CurrState = 1;
end
else begin
State1 = false;
State2 = true;
CurrState = 2;
end;
end;
end; #{ END IF HIFIRST OR LOFIRST }
if State5 then begin
DrawBox = true;
EBD = date;
EBT = time;
end;
if DrawBox then begin
TopIdP = TopId;
BtmIdP = BtmId;
LSIdP = LSId;
TopId = TL_New(BBD, BBT, BoxTop, EBD, EBT, BoxTop);
BtmId = TL_New(BBD, BBT, BoxBtm, EBD, EBT, BoxBtm);
LSId = TL_New(BBD, BBT, BoxBtm, BBD, BBT, BoxTop);
if ShowAll == false then begin
if TopIdP <> -1 then TL_Delete(TopIdP);
if BtmIdP <> -1 then TL_Delete(BtmIdP);
if LSIdP <> -1 then TL_Delete(LSidP);
end;
if HiFirst then begin
TL_SetColor(TopId, yellow);
TL_SetColor(BtmId, yellow);
TL_SetColor(LSId, yellow);
end
else begin
TL_SetColor(TopId, magenta);
TL_SetColor(BtmId, magenta);
TL_SetColor(LSId, magenta);
end;
State1 = false;
State2 = false;
State3 = false;
State4 = false;
State5 = false;
DrawBox = false;
ValidBox = true;
end;
if ValidBox then begin
UpBand = BoxTop;
DnBand = BoxBtm;
ValidBox = false;
NewBox = true;
BoxTop = high;
BoxBtm = low;
end;
if HiFirst then TextId = Text_New(date, time, high * 1.0005, NumToStr(CurrState, 0));
else TextId = Text_New(date, time, low * 0.9995, NumToStr(CurrState, 0));
3.작성해준 지표인데요
" _intercept"여기서 애러가 나세요
수정 좀 해주세요.
Input:Period(14),n(0),multi(0.5),Left(3),Right(3);
Var:기울기(0),절편(0),회귀선(0),회귀선tmp(0),채널폭(0),j(0),T(0);
var : 상단1(0),상단2(0),하단1(0),하단2(0),TL1(0),TL2(0);
기울기 = LRS(C, Period)[n];
절편 = _intercept(C,Period)[n];
회귀선 = 기울기 * Index + 절편;
채널폭 = 0;
for j = n to Period + n - 1
{
회귀선tmp = 기울기 * Index[j] + 절편;
채널폭 = max(채널폭,max(abs(H[j] - 회귀선tmp),abs(회귀선tmp - L[j])));
}
if 회귀선 > 회귀선[1] Then
T = 1;
if 회귀선 < 회귀선[1] Then
T = -1;
상단2 = 회귀선 + 채널폭 * multi;
상단1 = 회귀선 + 채널폭;
하단1 = 회귀선 - 채널폭;
하단2 = 회귀선 - 채널폭 * multi;
plot1(회귀선,"회귀선",iff(T==1,RED,BLUE));
plot2(상단1);
plot3(하단1);
plot4(상단2);
plot5(하단2);
if SwingHigh(1,상단2,left,right,left+right+1) != -1 Then
{
var1 = 상단1[right];
TL1 = TL_New(sDate[right],sTime[right],var1,sDate,sTime,var1);
TL_SetColor(TL1,BLUE);
}
Else
TL_SetEnd(TL1,sDate,sTime,var1);
if Swinglow(1,하단2,left,right,left+right+1) != -1 Then
{
var2 = 하단1[right];
TL2 = TL_New(sDate[right],sTime[right],var2,sDate,sTime,var2);
TL_SetColor(TL2,RED);
}
Else
TL_SetEnd(TL2,sDate,sTime,var2);
4.그럼 수고하세요
2020-11-30
719
글번호 144267