커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7876
글번호 230811
답변완료
상황에 따라 다른 조건 구현하기
예를 들어
20일 이평값>=100 일 경우 A조건일때 매수 하고, B 조건일때 매도하고
20일 이평값<100 일 경우 C조건일때 매수 하고, D 조건일대 매도하는 조건을 아주
많이 만들 경우 다음과 같이 하면 되나요?
var: A(0), B(0), c(0), D(0), case(0);
if ma(c, 20)>=100 then case=1;
if ma(c, 20)<100 then case=2;
A= case==1 and 그밖의 조건들;
B= case==1 and 그밖의 조건들;
C= case==2 and 그밖의 조건들;
D= case==2 and 그밖의 조건들;
if A then buy();
if B then sell();
if C then buy();
if D then sell();
이렇게 하면 되나요?
안되더라구요...
그럼^^
2004-06-18
1415
글번호 4149
답변완료
아래 번호 1969 문의내용 일부 추가부탁합니다
단순 스토케스틱에서
상부80
중심50
하부20
기준선 추가부탁합니다
2004-06-18
1298
글번호 4144
답변완료
초보
전일 종가 보다 +/-0.5p갭이 생길경우 9시 30분 이후에 진입 한다
1진입?
이평 5>20>50 매수 /매수 청산 5<50
이평 5<20<50 매도 /매도 청산 5>50
2진입
스윙 고점을 돌파하면 매수
스윙 저점을 이탈하면 매도
3진입--위 갭 시가가 형성 하면 시간 진입 제한 무시하고/당일 1회만 진입 한다
갭 상승---adx이 시스널 다운 하면 매도
갭 하락---adx이 시스널 업 하면 매수
진입제한---1.2.진입 해당
당일 고가 대비 저점이 -1p 이상 하락 이후 첫번째 매수 진입은 하지 말고 2번째 매수신호에서 진입 한다
이후 당일 전저점을 이탈한 저점이 나오면 첫번째 매수 진입은 하지 말고 2번째 매수신호에서 진입 한다
?
당일 저가 대비 고점이 1p 이상 상승 이후 첫번째 매도 진입은 하지 말고 2번째 매도신호에서 진입 한다
이후 당일 전고점을 돌파한 고점이 나오면 첫번째 매도 진입은 하지 말고 2번째 매도신호에서 진입 한다
?
1진입만 해당?
macd가 0선 이하 일때 는 매수진입 금지/매도포지션은 청산만 한다
macd가 0선 이상 일때 는 매도진입 금지/매수포지션은 청산만 한다
2진입만 해당
당일 저점(1) 이후 고점(2) 형성후 상승 폭(+2p이상)의 70%(3)이상 하락 하면 매도포시션 청산 만 하고 진입 금지
다시 2번 3번 의 하락폭의 60%이상 상승하면 진입 한다
3번을 이탈 하면 진입 한다
모든 청산은 3시 3분에 청산한다(5분차트 일경우 에는 3시로 설정 해야 하나요)
3시3분이후 에는 진입 금지
청산 ---(변수)
추적스탑
매수--목표 1p 고점 대비 -0.4p
매도--목표 -1p 고점 대비 0.4p
변동성추적스탑---2진입만 해당
atn이 (-0) 면 매수청산
atn이 (0) 면 매도청산
수익보전
매수--(0)%이상 상승후 진입가의 (0)%이상 까지 내려오면 매수청산
매도--(0)%이하 하락후 진입가의 (0)%이하 까지 올라오면 매수청산
손절매
매수 진입가의 (0)%하락하면 청산
매도 진입가의 (0)%이상하면 청산
다소 복잡할수도 있겠으나 초보로 중요한 기초자료 가 됩니다
특히 진입 제한은 자세한 주석도 부탁 합니다
2004-06-18
1335
글번호 4141
답변완료
추세선 지표에 그리기
추세선을 스캐스틱 지표에 그릴 수 있는 수식 요망
상승시는 저점을 연결한 추세선
하락시는 고점을 연결한 추세선
아래는 예스스탁에서 해주신 SWING 추세선이고요
input : len(11), Tch(0.7), period(200);
var : Lbar1(0), Lbar2(0), Lval1(0), Lval2(0), Hbar1(0), Hbar2(0), Hval1(0), Hval2(0);
var : UpTrend(0), DnTrend(0);
Lbar1 = swinglowbar(1, low, len, len, period);
Lbar2 = swinglowbar(2, low, len, len, period);
Lval1 = swinglow(1, low, len, len, period);
Lval2 = swinglow(2, low, len, len, period);
Hbar1 = swinghighbar(1, high, len, len, period);
Hbar2 = swinghighbar(2, high, len, len, period);
Hval1 = swinghigh(1, high, len, len, period);
Hval2 = swinghigh(2, high, len, len, period);
If Lval1 > Lval2 Then {
UpTrend = (Lval1 - Lval2)/(Lbar2 - Lbar1)*Lbar1 + Lval1;
plot1(UpTrend);
}
If Hval1 < Hval2 Then {
DnTrend = (Hval1 - Hval2)/(Hbar2 - Hbar1)*Hbar1 + Hval1 ;
plot2(DnTrend);
}
2004-06-18
1634
글번호 4139
답변완료
메일답변..
안녕하세요..메일로 보내지지 않아서 게시판에 올려 놓습니다.
[시스템식]
input : N(20);
var: 단기스톡_k(0),단기스톡_d(0),장기스톡_k(0),장기스톡_d(0);
var: ma5(0),ma20(0), ma40(0), ma60(0),ma120(0);
var: 고가라인(0),저가라인(0),중심라인(0),기준시간(0);
var : buyVal(0), bhigh(0), buyidx(0), cnt(0), bcond(0), sellval(0), sellidx(0), scond(0), preScond(0);
if date != date[1] then {cnt = 0; bcond = 0; scond = 0; preScond = scond[1];}
단기스톡_k = StochasticsK(20,5); 단기스톡_d = StochasticsD(20,5,5);
장기스톡_k = StochasticsK(60,7); 장기스톡_d = StochasticsD(60,7,7);
ma5 = ma(c,5); ma20 = ma(c,20); ma40 = ma(C,40); ma60 = ma(c,60); ma120 = ma(c,120);
기준시간 = stime>93500 && stime<143000 ; 고가라인 = timehigh(90000,93000);
저가라인 = timelow(90000,93000); 중심라인 = (timehigh(90000,93000)+timelow(90000,93000))/2 ;
if 기준시간 and cnt < 2 then { //매매횟수 2회로 제한
if CrossUp(C,고가라인) then {buy("고가돌파"); buyVal = C; bhigh = H; buyidx = accum(1); cnt = cnt + 1; bcond = 1;}//1번매수식
if CrossUp(C,중심라인) then {buy("중심돌파"); buyVal = C; buyidx = accum(1); cnt = cnt + 1; bcond = 2;}//2번매수식
if CrossDown(C,중심라인) then {sell("지지대붕괴"); sellVal = C; sellidx = accum(1); cnt = cnt + 1; scond = 1;}//1번매도식
if min(ma5, ma20, ma40) >= EnvelopeDown(120,0.2) && max(ma5, ma20, ma40) <= Envelopeup(120,0.2) && //2번매도식
CrossDown(c, EnvelopeDown(120,0.2)) && O > C && C < ma5 && C < ma20 then
{sell("이평수렴매도") ; sellVal = C; sellidx = accum(1); cnt = cnt + 1; scond = 2; }
}
if CrossUp(C,고가라인) then exitshort("고가돌파청산");
if CrossUp(C,중심라인) then exitshort("중심라인상향");
if CrossDown(C,중심라인) then exitlong("중심라인하향");
if min(ma5, ma20, ma40) >= EnvelopeDown(120,0.2) && max(ma5, ma20, ma40) <= Envelopeup(120,0.2) &&
CrossDown(c, EnvelopeDown(120,0.2)) && O > C && C < ma5 && C < ma20 then
exitlong("2번청산");
if bCond == 1 and C > buyVal + 1 and CrossDown(ma5,ma20) then exitlong("1"); //[질문-1]
if bCond == 1 and accum(1) > buyidx+12 and C < bhigh then exitlong("2"); //[질문-2]
if bCond == 2 and highest(H,accum(1)-buyidx) > 고가라인 and CrossDown(C, 고가라인-0.3) then exitlong("3");//[질문-3]
if sCond == 1 and lowest(L,accum(1)-sellidx) < 저가라인 and CrossUp(C, 저가라인) and 단기스톡_k > 단기스톡_d then exitshort("4");//[질문-4]
if preScond == 2 and dayOpen(0) < dayClose(1)-1 and C > H[dayindex()] then exitshort("5-1"); //[질문-5]-1
if sCond == 2 and accum(1) > sellidx+10 and C > Envelopeup(120,0.2) and C > L[accum(1)-sellidx] then exitshort("5-2"); //[질문-5]-2
if sCond == 2 and accumN(crossup(ma5,ma20),N)>=2 and crossup(ma5,ma20) and C > ma5 then exitshort("5-3");//[질문-5]-3
if SCond == 2 and accum(1) > sellidx+5 and EnvelopeDown(20,0.2) > EnvelopeDown(20,0.2)[1] and C > EnvelopeDown(20,0.2) then exitshort("5-4");//[질문-5]-4
if Scond == 2 and accum(1) < sellidx+5 and CrossUp(C, highest(H,5)[1]) then exitshort("5-5");//[질문-5]-5
2004-06-18
979
글번호 4138
답변완료
언제쯤 이 문제들이
exitlong("x", atmarket, DEF);
buy("buy", onclose, DEF, 1);
위 시스템식을 실행시키면 이상하게 동작합니다. 물론 원인은 예스프로에서 아직 한봉에서 exit과 entry가 동시에 수행이 안된다는 것 때문이란거 압니다.
하지만, 당연히 되어야 하는 것이고 (물론 가격조건을 복잡하게 주면 쉬운 일이 아니겠지만)...
그리고 뿐만 아니라 시스템 코드가 아주 길어지면....정말 희안하게 중간에 변수값이 막 바뀌거나 (특히 함수를 부른 후에(예:ma()) 분명히 index값이 N일때 buy하라고 되어있는데..그게 N보다 큰 임의의 곳에서 수행이 된다거나 하는....
정말 이상한 문제들이 발생합니다.
우선은 코드를 드린다고 하여도 그것은 그 코드로부터 발생한 문제들만 땜빵이 될텐데..
전반적으로 보면 함수호출과 관련된 부분 주변에서 예스가 제대로 처리를 못하고 있는 현상입니다. (전산과를 나왔기 때문에 그 정도 판단은 가능합니다)
특히나 그렇게 생각하는 것은 사용자 함수에서 사용자 함수를 부르지 못한다는 점에서 전 맛이 갔어요. 그럴 바엔 뭐하러 함수는 만듭니까? 컴파일러를 너무 급조한 듯한 느낌이 듭니다.
예스프로의 안정성을 전반적으로 살펴봐주시고, 무엇보다도 exit과 entry가 동일봉에서도 가능할 수 있도록 해주시길 바랍니다. 그게 안되면, 너무나도 황당하게 코딩이 되어야 하기 때문에...
그러한 코드를 길게 짜면 짤 수록 점점 희한한 말도 안되는 증상들이 괴롭히니 정말 집어 던지고 싶군요.
ps : 지금 그 문제의 코드를 계속 영역을 압박해서 오류를 발생시키는 부분을 찾았더니 역시 사용자 함수 부분입니다.
지표에서는 아주 멀쩡히 동작하는 함수들이, 시스템 코드에서 그 함수들을 불러 사용하면, 전혀 예기치 못하던 상황들이 발생하는군요. 일전에도 지표에서는 분명 1로 리턴되는 것을 확인했는데, 시스템 코드 내에선 함수가 리턴되기 전엔 분명 1이었던 것이 리턴되어 코드에서 변수로 받은 값은 0으로 되는 기이한 경우도 있어서 한동안 사용자 함수를 안쓰고 있었는데...이번에 잠시 그러한 예스의 버그를 망각하고 사용자 함수를 끼워 넣었더니 역시 그 부분 때문에 동작이 안되었네요.
이번엔 더 심각한 것이 자기 자신만의 값 또는 그 결과값만 헤집어 놓으면 다행이지만 다른 변수값들 마져도 마구 헝클어 놓아서 사용자 함수가 불리워진 이후의 코드들은 전혀 그 수행여부를 신뢰할 수 없게 된다는 심각한 버그입니다.
C든 VB든...일반 언어에서 함수가 함수를 부를 수 있는 것처럼 지금 예스의 말도 안되는 사용자 함수에서 사용자 함수를 부를 수 없는 것을 한시라도 빨리 고쳐서 정상적인 함수처럼 만들면서 지금 사용자 함수가 시스템 코드에서 발생시키는 갖가지 말도안되는 오류들을 동시에 잡아주시기 바랍니다.
이것 때문에 함수로 코딩했어야 하는 부분들을 모두 시스템 코드안에서 모조리 코드화 시키다보니 코드가 길어질 뿐만 아니라 중복된 코드 묶음들이 계속 발생해서 점점 디버깅시에 신경이 더 쓰이고...지금 미쳐버릴 지경입니다.
다른 이상한 업그레이드들 다 올 스톱 하시고..이런 근본적인거 부터 업그레이드시켜서 기능 보완 되는데로 최우선적으로 배포해주시고 공지로 좀 알려주시기 바랍니다.
정말...예스...너무 실망입니다.
아, 그리고...
print()같은 거좀 빨리좀 만들어 달라고 했는데 그거 그렇게 힘듭니까?
지표에서는 Plot으로 값이라도 확인하지...시스템 코드에선 그나마도 힘든데..디버깅이 얼마나 힘든지 아세요?
제발 print() 같이 디버깅에 필수적인 것들 좀 지원 좀 해/달/라/구/요~~~~~~~~~~~~
예스앞에 가서 데모라도 하고 불이라도 질러야 해줄겁니까? 네????
2004-06-18
1317
글번호 4136
답변완료
부탁드려요
for x=20 to 1 일때 x=x+1 로 값이 증가할 때
다음조건을 만족하면 매수,매도하는 식입니다.
20개봉 범위에서
1)..L[x-1]-L[x]>0 이다가 만약 처음으로 L[x-1]-L[x]<=0 일때 봉번호x를 x=Lvalue1하고 다시 L[x-1]-L[x]>0 이다가 L[x-1]-L[x]<=0 일때 x=Lvalue2라고 하고
2)..L[x-1]-L[x]<0 이고 만약 L[x-1]-L[x]>=0 일때 봉번호x를 x=Hvalue1 등으로 할당하고 다시 L[x-1]-L[x]<0 이다가 L[x-1]-L[x]>=0 일때 x=Hvalue2라고 하고
만약 ma(C,20) 상승중이면서
if L[Lvalue1]<=L[Lvalue2] 이고 L[Lvalue2]<=L[Lvalue2+1] 이면 매수하고
if L[Hvalue1]>=L[Hvalue2] 이고 L[Hvalue2]>=L[Hvalue2+1] 이면 매도하는 식 부탁해요.
2004-06-18
1312
글번호 4135
답변완료
스토케스틱 문의합니다
안녕하세요.예스트레이드 프로에서
지수스토케스틱 말구
단순 스토케스틱 파일 부탁합니다.
컴맹이라서요
미안합니다
2004-06-17
1115
글번호 4134
답변완료
잔고 재질문
아래에서
"옵션의 잔고(실계좌 잔고면 좋겠고, 안되면 신호상 계산되는 잔고라도)를
구현하는 수식이 있나요?
예컨대 옵션의 잔고 * 현재가 = 해당 옵션의 보유잔고의 프리미엄 평가합계를 이용하여
(혹은 해당 옵션의 보유잔고의 델타 합계,,,)
시스템을 구성하고 싶거든요."
질문을 드렸습니다.
우선 답변 감사드리고요,
"실제 계좌의 잔고를 확인하실 수는 없는" 것은 예상을 했는데
챠트의 시스템 신호상 발생한 잔고는 계산이 안 되나요?
예컨대 금액 기준으로 주문 수량이 나갈수 있던데
그럼 120계약(가변적이겠죠) 매수 잔고에서 어떤 조건하에서 일부수량 청산하고
나머지 잔고에 대한 프리미엄 평가합계나 민감도 합계를 계산하고
이를 기준으로 하여 어떤 조건하에서 다시 일부청산 또는 재진입하고,...
간단히 하면 실계좌 잔고는 아니더라도
이미 발생한 신호를 기준으로 잔고를 확인하여(주문 여부, 체결 여부 무관)
예컨대 다이내믹 헤징 같은게 시스템으로 구현이 가능한지요?
게시판의 다른 답변에서 일부청산이 안된다고 하셨는데
그럼 청산(exitlong/exitshort)이 아니라
신규주문(buy/sell)을 계속 누적시켜가는 방법으로는 가능한지요?
(청산주문 수식은 형식적으로 작성하여 집어놓고요)
2004-06-17
1026
글번호 4133