커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8202
글번호 230811
답변완료
지표식 질문입니다
1틱차트에서
거래량 이동평균선을 만들고 싶은데
1틱 거래량이 평균적으로 1~10 정도 거래되는데
갑자기 천단위 백단위 1틱이 튀어나오면 거래량 이동평균선이 많이 깨지는데
1틱이 100 이하 거래량은 정상적 거래량 이동평균선
1틱이 100 초과 거래량은 100으로 계산해서 거래량 이동평균선을 만들고 싶습니다
2014-03-05
165
글번호 73196
러블리 님에 의해서 삭제되었습니다.
2014-03-05
17
글번호 73195
답변완료
문의드립니다.
If crossup(ma(c,5), ma(c,20)) then condition1 = true;
분봉에서 장중에 5이평이 20이평을 크로스업하면 트루인 식인데
장중에 이 현상이 한번이라도 발생하면 발생한 이후에는 당일 장중 내내 조건식을 true로 하려면 어떻게 해야 합니까?
2014-03-05
165
글번호 73194
답변완료
문의 드립니다.
안녕하세요. 관리자님
항상 친절히 가르쳐 주심에 감사드립니다.
아래과 같은 내용을 주식 시스템트레이딩으로 작성하려합니다. 부탁드립니다.
==================================================================================
(입력변수)
기준가1=직접입력=price1
기준가2=직접입력=price2
투자금액=직접입력=totalmoney
분할매수금액1=totalmoney/2=money1 ( 투자금액의 50%를 먼저 매수한다.)
분할매수금액2=(totalmoney/2)/2=money2,money3 ( 나머지 투자금액 50%를 절반씩 2번에 걸쳐서 분할매수한다.)
기준가(price0) : price1 이상 price2 이하 범위의 가격 (차트에서 가장 먼저 기준가의 범위에 드는 가격을 만나면 분할매수를 시작한다)
분할매수간격=기준가(price0)에 맞으면 투자금액의 50% 금액을 매수하고 나머지는 호가창 아래로 한단계씩 분할매수 예약한다.
매수조건=차트의 가격이 기준가의 범위에 드는 가격을 만나면 매수시작하고 호가창 아래금액으로 2단계 예약매수
매도조건=수익률이 3%를 넘으면 바로 손절가를 3%에 맞추어(보유선 개념) 3% 미만으로 내려가기전에 손절시킨다. 수익률이 3% 이상으로 계속 추세를 따라 올라가면 보유하다가 현재 총수익률의 20%가 뒤로 밀리면(뒤로 20%까지 밀려도 최소 수익률 3%는 확보한다) 청산한다.
목표수익률= 3% 이상
손절= -3% (수익률이 3% 미만일 경우의 손절라인 이며 수익률이 0~3% 미만의 값이면 매수진입 당일 14:40분에 매도처리하고 수익률이 -3% 이상의 손실중이면 익일까지 보유하며 익일에도 동일한 원칙을 적용한다.)
[매매방법]
시스템트레이딩이 시작되고 주가가 기준가의 범위에 들어오면 우선 money1 만큼 매수한후 주가가 내려가면 호가창 분할매수로 money2, money3 순으로 매수를 한다.
수익률이 3%가 되기전에 -3%가 되면 손절처리하고 수익률이 3% 이상이 되면 손절라인은 3%로 맞춰진다. 3%이상의 수익률이 뒤로 밀려도 최소 3% 밑으로 밀리기 전에 손절되어야 한다.
현재 수익률이 1% 라고 하면 당일 14:40분까지 3%를 넘지 못할 경우 매도처리한다.
====================================================================================
이상과 같습니다. 가르침 부탁드립니다.
감사합니다.
2014-03-04
179
글번호 73193
답변완료
메모리 부족현상
아래는 사용자 함수명 _vps 로 초봉에서 긴주기의 거래량을 알기 위해
만들어진 수식입니다
MessageLog("up %.f, down %.f",_vps(60,1,0),_vps(60,2,0));
사용한 챠트는 10초 챠트 입니다.
전략식에서 위 처럼 디버깅을 하면 메모리가 부족하다면서 꺼져 버립니다.
그런데 사용자 함수를 쓰지 않고 본 수식에 직접 구현해서 쓰면 오류가 없습니다.
무슨 차이인가요... 사용자 함수화 하면 더 많은 메모리를 사용하는것인가요?
자세한 설명부탁 드립니다.
///////////////////////////////////////////////////////////
input:기간(Numeric),v0up1down2(Numeric),전일값(Numeric);
var: start_m(0),start_s(0),start_ms(0);
var: end_m(0),end_s(0),end_ms(0);
var : pass_S(0),renew_s(0);
array: vps[3,5000](0);// 기간별 거래량합
//--------------------------------------[ 시작 기준초 ]
if dayindex == 0 Then{
start_m = TimeToMinutes(stime)*60;
start_s = FracPortion(stime/100)*100;//시작시간 초
start_ms = start_m+start_s;
}
//------------------------------------------------------
//------------------------------------[ 끝 시간 기준초 ]
end_m = TimeToMinutes(time)*60;// 분을 초로 환산
end_s = FracPortion(time/100)*100;// 나머지 초
end_ms = end_m+end_s; // 환산 초 + 나머지 초
//------------------------------------------------------
pass_s = end_ms - start_ms;
renew_s = pass_s%기간; // 갱신기간 기본 "90초"
var:cns(0),cnt(0),cnt1(0);
if dayindex == 0 then{
for cnt = 0 to 2{
for cnt1 = 0 to cns
vps[cnt,cnt1] = 0;
}
cns=0;
}
if renew_s < renew_s[1] then{
cns = cns+1;
for cnt = 0 to 2
vps[cnt,0] = 0;
for cnt1 = 1 to cns{
vps[0,cnt1] = vps[0,cnt1-1][1];
vps[1,cnt1] = vps[1,cnt1-1][1];
vps[2,cnt1] = vps[2,cnt1-1][1];
}
}
vps[0,0] = vps[0,0]+v;
vps[1,0] = vps[1,0]+upvol;
vps[2,0] = vps[2,0]+downvol;
if renew_s < renew_s[1] then{
}
_vps=vps[v0up1down2,전일값];
//MessageLog("cns %.f",cns);
//MessageLog("0: %.f,1: %.f,2: %.f",vps[0,0],vps[1,0],vps[2,0]);
//MessageLog("3: %.f,4: %.f,5: %.f",vps[0,1],vps[1,1],vps[2,1]);
2014-03-04
272
글번호 73175
nadogaja 님에 의해서 삭제되었습니다.
2014-03-04
0
글번호 73174
답변완료
공개 테스트 언제 올라올까요?
안녕하세요.
2월중 공개테스트로 올린 시스템이 있는데요.
1주일정도 걸린다고 본것 같아서 기다리다가, 언제쯤 올라올지 궁금해서 문의합니다.
2014-03-04
204
글번호 73173
답변완료
RSI 지지 저항선
안녕하세요?
많은 도움에 감사드리며, 아래의 키움지표 RSI 지지선 저항선 수식을 우리 트레이더에서 에서 활용해 보고 싶습니다.
저항선
a= (sum(if(c-c(1)>0,c-c(1),0),period)/sum(if(c-c(1)>0,c-c(1),c(1),period)*100);
b=a>=70;
valuewhen(1,b,h)
지지선
a= (sum(if(c-c(1)>0,c-c(1),0),period)/sum(if(c-c(1)>0,c-c(1),c(1),period)*100);
b=a<=30;
valuewhen(1,b,l)
도움에 감사드립니다.
2014-03-04
252
글번호 73172
답변완료
재문의 드립니다.
안녕하세요.
시스템식을 작성해 주셨는데...
선물 5분봉 신호가 이상하게 나와서 재문의 드립니다.
첫번째 매수,매도 신호후 청산이 안되서 식을 보니
청산에서 exitlong(); 이 두번되어 있어서 하나는 exitshort();로 수정하였습니다.
수정후, 청산은 되는것 같은데.....
청산이 너무 일찍 됩니다.
금일(3월4일(화)) 오전 9시 40분 매도 진입은 맞습니다.
그러나 10시 40분 청산이 나왔는데요. 이것이 잘못된 신호 입니다.
아래 청산조건대로라면 홀딩해서 가지고 있어야 합니다.
변수값 넣어주는 값의 의미를 잘 모르겠습니다.
죄송하지만 변수값의 의미를 주석처리 해주시면 감사드리겠습니다.
어려우시겠지만 검토 부탁드립니다.
감사합니다.
==================================================================================
청산조건은 : 매수시 : 파라볼릭의 반대신호 발생 and price roc 0 하향 돌파시 청산
매도시 : 파라볼릭의 반대신호 발생 and price roc 0 골드 돌파시 청산
==================================================================================
============================================================================
Input : af(0.02), maxAF(0.2),Period(10),P1(5),P2(34),P3(7);
Var : sarv(0,data1),PricROC(0,data1),MACDOSC(0,data1);
var : Bcond1(0,data1),Bcond2(0,data1),Bcond3(0,data1);
var : Scond1(0,data1),Scond2(0,data1),Scond3(0,data1);
var : cnt(0,data1),count(0,data1);
count = 0;
for cnt = 0 to 20{
if sdate == EntryDate(cnt) Then
count = count+1;
}
sarv = data1(sar(af,maxAF));
PricROC = data1(PROC(Period));
MACDOSC = data1(MACD_OSC(P1,P2,P3));
Bcond1 = iff(C > sarv,1,0);
Bcond2 = iff(PricROC > 0,1,0);
Bcond3 = iff(MACDOSC > 0,1,0);
Scond1 = iff(C < sarv,1,0);
Scond2 = iff(PricROC < 0,1,0);
Scond3 = iff(MACDOSC < 0,1,0);
if count == 0 and stime >= 93000 then{
If MarketPosition == 0 and
data2(c) > 50 And
Bcond1 == 1 And
Bcond2 == 1 And
Bcond3 == 1 then
Buy("b1",AtMarket);
If MarketPosition == 0 and
data2(c) < -50 And
Scond1 == 1 And
Scond2 == 1 And
Scond3 == 1 then
sell("s1",AtMarket);
}
if count > 0 and count < 3 then{
If MarketPosition <= 0 and
data2(c) > 50 And
data1(countif(C>sarv,5) == 5) And
Bcond2 == 1 And
Bcond3 == 1 then
Buy("b2",AtMarket);
If MarketPosition >= 0 and
data2(c) < -50 And
data1(countif(C<sarv,5) == 5) And
Scond2 == 1 And
Scond3 == 1 then
sell("s2",AtMarket);
}
if MarketPosition == 1 and Scond1 == 1 and Scond2 == 1 Then
ExitLong();
if MarketPosition == -1 and Bcond1 == 1 and Bcond2 == 1 Then
Exitshort();
setstoploss(0.95, pointstop);
setstopendofday(145000);
========================================================================
+++++++++++++++++
선물 5분봉 기준
+++++++++++++++++
================
1. 당일추세
================
가-1) 외국인 거래소 순매수 금액 > 50억 ==> 매수
가-2) 외국인 거래소 순매수 금액 < -50억 ==> 매도
================
2. 진입
================
추세대로 매수만 또는 매도만 진입함
9시 30분 이후 진입
1. 파라볼릭 신호(af:0.02 afmax:02) 빨간색: 매수 파란색 : 매도
2. price roc(10) 기준선 > 0 : 매수, 0 < 기준선 : 매도
3. macd 오실레이터(5,34,7)가 매수시에는 골드중이어야 하고
매도시에는 데드중이어야 함
-------
매수시
-------
위의 매수 진입조건이 만족하면
다음봉 시가 매수
-------
매도시
-------
위의 매도 진입조건이 만족하면
다음봉 시가 매도
-------
청산
-------
청산조건은 : 매수시 : 파라볼릭의 반대신호 발생 and price roc 0 하향 돌파시 청산
매도시 : 파라볼릭의 반대신호 발생 and price roc 0 골드 돌파시 청산
-------
진입필터
-------
첫번재 진입 : 9시 30분 진입
두번재 진입 부터는 필터 적용 : 매수면 첫번째 청산후
두번째, 세번째 진입은 파라볼릭 매도 5개이상 신호뜨고 두번째 세번째 진입신호
적용 합니다.
매도이면 반대로 입니다.
일일 3회 매매제한
setstoploss(0.95, pointstop);
setstopendofday(145000);
2014-03-04
232
글번호 73170