커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7223
글번호 230811
답변완료
수식수정부탁드립니다
Input:chRate(0.5); //전환율 또는 변동률
Var:j(0),upTr(100),dnTr(-100),upRate(0),dnRate(0),trnd(0),TL(0),
date11(0),date12(0),time11(0),time12(0),TL1(0),
date21(0),date22(0),time21(0),time22(0),TL2(0),
date31(0),date32(0),time31(0),time32(0),TL3(0);
Array:hiVal[10](0),loVal[10](0),hiBar[10](0),loBar[10](0);
//hiVal[1]은 전고점, hiVal[2]는 전전고점, hiVal[3]은 전전전고점
//hiVal[0]은 변곡점 이후 현재봉까지의 고점. 현재 고점은 진행중이므로 계속 바뀐다.
//loVal[0]은 반대 개념
var : TL13(0),TL14(0),color(0);
upRate = 1 + (chRate/100); //상승률
dnRate = 1 - (chRate/100); //하락률
for j = 1 to 9 { //전고,전저점을 9개까지 보관
loBar[j] = loBar[j] + 1; //전저점의 위치. 현재 봉으로부터 떨어져 있는 거리
hiBar[j] = hiBar[j] + 1; //전고점의 위치
}
if hiVal[0] <= H or hiVal[0] == 0 then { //전고,전저점 이후 현재까지의 고점
hiVal[0] = H; //0을 체크한 이유는 초기에 값이 없는 구간이 생기기 때문
hiBar[0] = 0; //현재 고점의 위치가 0이란 것은 현재봉의 고가가 구간 고점이라는 의미
}
else {
hiBar[0] = hiBar[0] + 1; //현재 고점의 위치
}
if loVal[0] >= L or loVal[0] == 0 then { //전고,전저점 이후 현재까지 저점
loVal[0] = L;
loBar[0] = 0;
}
else {
loBar[0] = loBar[0] + 1; //현재 구간 저점의 위치
}
if trnd != dnTr && hiVal[0] > H && hiVal[0] * dnRate > L then trnd = dnTr;
//저가가 고가 대비 변동률보다 밑으로 떨어지면 하락추세로 설정
//단, 현재봉의 고가가 변곡점 이후 최고가이면 상승 추세가 진행중이라고 본다.
//그래서 현재봉의 고가가 hiVal[0]보다 작다는 조건이 추가되었다.
else if trnd != upTr && loVal[0] < L && loVal[0] * upRate < H then trnd = upTr;
//고가가 저가 대비 변동률보다 높으면 상승추세로 설정
if trnd[1] == upTr and trnd == dnTr then { //상승추세였다가 하락추세로 바뀌었다면
for j = 8 downto 1 { //새로운 전고점이 생기는 것이므로
hiVal[j+1] = hiVal[j]; //전고점을 하나씩 뒤로 보낸다.
hiBar[j+1] = hiBar[j]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다.
}
hiVal[1] = hiVal[0]; //새로운 전고점에 현재 고점을 대입
hiBar[1] = hiBar[0];
hiVal[0] = H; //전고점이 확정되었으므로 전고점 이후 최고가는 현재봉의 고가
hiBar[0] = 0;
loVal[0] = L;
loBar[0] = 0;
//전고점이 새로 생긴 것이니까 전저점에서 전고점까지 추세선을 긋는다.
date11 = date[loBar[1]]; //추세선 시작일. 전저점의 날짜
time11 = stime[loBar[1]]; //추세선 시작시간
Value11 = loVal[1]; //추세선 시작가격
date12 = date[hiBar[1]]; //추세선 종료일. 전고점의 날짜
time12 = stime[hiBar[1]]; //추세선 종료시간
Value12 = hiVal[1]; //추세선 종료가격
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
//TL_New는 신규 추세선을 그려주는 함수
}
if trnd[1] == dnTr and trnd == dnTr and //추세는 하락 상태에서 바뀌지 않았는데
hiVal[1] < hiVal[0] and //전고점보다 더 높은 고점이 출현했다면
hiVal[0] * dnRate > L then {
hiVal[1] = hiVal[0]; //전고점을 현재의 고점으로 바꿔준다.
hiBar[1] = hiBar[0];
hiVal[0] = H;
hiBar[0] = 0;
loVal[0] = L;
loBar[0] = 0;
//전고점이 추가된 게 아니고 바뀐 것이므로 종료일,종료시간,종료가격만 바꿔준다.
date12 = date[hiBar[1]]; //추세선 종료일
time12 = stime[hiBar[1]];
Value12 = hiVal[1];
TL_SetEnd(TL1, date12,time12,Value12);
//TL_SetEnd는 기존추세선의 종료지점을 변경해주는 추세선 함수이다.
//TL_Delete 함수를 써서 직전의 추세선을 지우고 다시 TL_New로 추세선을 추가해도 된다.
}
if trnd[1] == dnTr and trnd == upTr then { //추세가 하락에서 상승으로 바뀌었을 경우
for j = 8 downto 1 {
//이전저점은 전전저점으로, 전전저점은 전전전저점으로 번호를 부여
loVal[j+1] = loVal[j];
loBar[j+1] = loBar[j];
}
loVal[1] = loVal[0];
loBar[1] = loBar[0];
loVal[0] = L;
loBar[0] = 0;
hiVal[0] = H;
hiBar[0] = 0;
date11 = date[hiBar[1]]; //전저점이 새로이 생긴 것이므로 시작점은 전고점이 된다.
time11 = stime[hiBar[1]];
Value11 = hiVal[1];
date12 = date[loBar[1]];
time12 = stime[loBar[1]];
Value12 = loVal[1];
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
}
if trnd[1] == upTr and trnd == upTr and //추세는 상승을 유지하고 있는데
loVal[1] > loVal[0] and //전저점보다 낮은 저가가 출현했다면
loVal[0] * upRate < H then {
loVal[1] = loVal[0]; //직전의 전저점만 바꿔준다.
loBar[1] = loBar[0];
loVal[0] = L;
loBar[0] = 0;
hiVal[0] = H;
hiBar[0] = 0;
date12 = date[loBar[1]];
time12 = stime[loBar[1]];
Value12 = loVal[1];
TL_SetEnd(TL1, date12,time12,Value12);
}
if trnd == upTr and loVal[2] > loVal[1] then{
TL_SetColor(TL1,blue);
color = red;
}
else if trnd == dnTr and hiVal[2] < hiVal[1] then{
TL_SetColor(TL1,blue);
color = red;
}
else{
TL_SetColor(TL1,blue);
color = red;
}
TL_SetSize(TL1,0);
TL_SetColor(TL2,red);
TL_SetColor(TL3,blue);
if var1 <= 0 and Trnd == uptr and Trnd != Trnd[1] Then{
var1 = 1;
value1 = loval[1];
TL1 = Text_New(sdate[lobar[1]],stime[lobar[1]],value1-PriceScale*5,"▲");
TL_SetColor(TL,red);
TL_SetSize(TL,2);
Text_SetStyle(TL1,2,2);
Text_SetColor(TL1,red);#텍스트 색상
}
if var1 >= 0 and Trnd == dntr and Trnd != Trnd[1] then{
var1 = -1;
value1 = hival[1];
TL2 = Text_New(sdate[hibar[1]],stime[hibar[1]],value1+PriceScale*5,"▼");
TL_SetColor(TL,blue);
TL_SetSize(TL,2);
Text_SetStyle(TL2,2,2);#텍스트 좌우 상하 정렬
Text_SetColor(TL2,blue);#텍스트 색상
}
var11= hival[0];
var12= loval[0];
value22 =hival[0]-(hival[0]*0.00618);
value23 =loval[0]+(loval[0]*0.00618);
if c < var11 and c > value22 then{
plot1(value22,"하락");
TL_SetExtRight(value22,true);
if c > Var12 and c<value23 then {
plot2(value23,"상승");
TL_SetExtRight(value24,true);
} }
위수식은 그림과같이 점그래프가 나타나게 작성한것입니다
그림 ①과같이 ②부분에서도 상승(하락) 계속 점그래프가 표시될수있도록 수식수정부탁드립니다
2018-10-30
320
글번호 123204
답변완료
59861추가 질문 부탁 드립니다.(내용무)
.
2018-10-30
150
글번호 123203
답변완료
수식 검토 부탁드립니다
아래의 수식에서 RSI가 과매도 구간을 CROSS-UP하면 1차 매수를 하고,
그 이후에 또 다시 과매도 구간에 진입한 후 다시 CROSS-UP하면 2차매수를 하고
싶은데 2차 매수가 이뤄지지 않습니다. 수식 검토 부탁드립니다.
input : P(20),Period3(14),dv(2),sto1(25),sto2(6),sto3(6),MAP(5),N(21),
금액1(1000000),금액2(2000000),RS과매수수준(80), RS과매도수준(30);
var : BBup(0),BBdn(0),BBMid(0),stok(0),stoD(0),RS(0);
# RSI
RS = RSI(Period3);
If MarketPosition == 0 and CrossUP(RS, RS과매도수준) Then
{
Buy("1차매수",OnClose,def,Floor(금액1/C));
}
If MaxEntries == 1 and CrossUP(RS, RS과매도수준) Then
{
Buy("2차매수",OnClose,def,Floor(금액1/C));
}
# 매도/매수청산
If CrossDown(RS, RS과매수수준) Then
{
ExitLong();
}
2018-10-30
158
글번호 123200
태양같이 님에 의해서 삭제되었습니다.
2018-10-30
32
글번호 123199
태양같이 님에 의해서 삭제되었습니다.
2018-10-30
0
글번호 123198
답변완료
문의 드립니다.
다음과 같이
타주기_분용 부탁 드려도 될런지요?
input:p1(20);
var:varq1(0),varq2(0),varq3(0);
varq1=nthhighest(1,v[1],p1);
if v>varq1 then {
var1=H;
}
2018-10-30
134
글번호 123192
루루 님에 의해서 삭제되었습니다.
2018-10-30
11
글번호 123188
답변완료
수식작성 요청 드립니다.
안녕하세요?
언제나 도와주심에 감사합니다.
아래와 같은 수식작성 도움요청 드립니다.
* 진입조건
매수 : 1개 이전봉(외부변수) 또는 2개 이전봉(외부변수) 중에서 출현한 음봉과 종가가 같은
양봉 출현시 매수진입.
매도 : 1개 이전봉(외부변수) 또는 2개 이전봉(외부변수) 중에서 출현한 양봉과 종가가 같은
음봉 출현시 매도진입.
- 즉, 진입봉 기준 x개전봉 또는 x개전봉 중 하나의 양봉 종가와 음봉종가가 같을때 매수진
입. 매도는 그 반대로.
* 청산조건
익절 : 1p(외부변수)
손절 : 1p (외부변수)
감사합니다.
2018-10-30
164
글번호 123187
답변완료
수식작성에 많은 도움받고 있습니다.
어제 아래와 같은 수식을 만들어 주셔서 많은 공부가 되었습니다.
=============================================================
<조건>
현금: 100만원.
사용챠트는 1분봉 입니다.
매수조건 완성시 시장가로 100% 매수후
당일 종가때 40% 매도하고
나머지 수량은 일봉차트상 주가가 5일 이평선보다 높으면 계속 보유하고
5일 이평선보다 낮아질 경우 전량매도 하는 겁니다.
input : 금액(1000000),P(5);
var : sum(0),mav(0),cnt(0);
sum = 0;
for cnt = 0 to P-1
{
sum = sum + DayClose(cnt);
}
mav = sum/P;
if MarketPosition == 0 and 매수조건 Then
buy("b",OnClose,def,Floor(금액/C));
if sdate == EntryDate and NextBarSdate != sdate Then
{
var1 = Floor(MaxContracts*0.4);
ExitLong("bx1",OnClose,def,"",var1,1);
}
if sdate > EntryDate and c < mav Then
ExitLong("bx2");
==========================================================
위의 수식에 한가지 더 조건을 부여하고 싶은데요
조건은 이렇습니다.
현금: 100만원.
사용챠트는 1분봉 입니다.
매수조건 완성시 시장가로 100% 매수후
당일 종가때 40% 매도하고
다음날 시가때 50% 매도하고
나머지10% 수량은 일봉차트상 주가가 5일 이평선보다 높으면 계속 보유하고
5일 이평선보다 낮아질 경우 전량매도 하는 겁니다.
이때, 주가가 계속 5일 이평선보다 높아서 10%의 주식을 보유중인상태에서
1분봉 챠트상 다시 매수조건이 발생하여
현재 보유중인 주식(10%) 금액을 제외한 90% 현금으로 시장가 매수하고
당일 종가때 시장가 매수한 주식의 40% 매도하고
다음날 시가때 50% 매도.
나머지 10%는 일봉챠트상 5일 이평보다 높으면 계속보유하고...
주가가 일봉챠트 5일 이평보다 계속 높은상태로 유지가 된다면
계속 무한 반복되겠죠.. 그러다가 5일 이평보다 주가가 낮아지면 모두 청산..
이런식으로 수식을 작성하고 싶은데 가능할런지... 부탁드립니다....
2018-10-29
172
글번호 123186