커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6191
글번호 230811
답변완료
안녕하세요
반갑습니다
1.obv
2.mfi
(변수:18.9)
각 볼린져 벤드 가능하면 부탁합니다
감사합니다.
2017-11-30
181
글번호 114586
답변완료
문의드립니다.
어제보다 더 춥습니다. 건강 잘 챙기시구요.
아래와 같은 수식을 부탁드립니다.
1.매매시간
10시 ~ 04시까지 매매후 종료
2.진입조건(1계약 진입)
매수 : 양봉 종가가 20일선 아래에서 위로 골든크로스 한후 다시 음봉 종가가 20일선 아래로 데드크로스 하고 다음 봉의 종가가 다시 20일선 위로 골든크로스 할때 매수(매도는 반대)
3.청산/손절
-청산: 3가지
20틱수익 도달시 청산
10틱이상 15틱미만 수익시 5틱수익까지 후퇴하면 5틱수익 청산
15틱이상 수익시 10틱수익까지 후퇴하면 10틱수익 청산
-손절: 둘중에 먼저 도달하는 조건을 실행
수익이 10틱 미만일때 -30틱에서 손절 되거나
수익이 10틱 미만일때 매수의 경우 5일선이 20일선을 데드크로스하면 손절(매도는 반대)
4.매매종료
매매시간 이내에(10시 ~ 04시까지) 당일 누적수익을 50틱이상 달성한 순간부터 당일 누적수익에서 60% 손실이 발생하기 전에는 매매시간 종료까지 매매를 계속함.
누적 총수익에서 60% 손실이 발생하면 즉시 당일 매매종료하고 a.wav 파일 실행
5.당일 누적수익 표시
실시간 현재의 캔들 고점+5틱 위에 확정된 당일 실시간 현재의 누적수익을 계속 표시
수고하세요^^
2017-11-30
160
글번호 114585
답변완료
VI관련 질문입니다.
var : up1(0), up2(0), up3(0), up4(0), up5(0),up6(0),Up7(0);
var : dn1(0), dn2(0), dn3(0), dn4(0), dn5(0),dn6(0),dn7(0);
var : a1(0),a2(0),b1(0),b2(0);
if o[1]==h[1]&&o[1]==l[1]&&(v[1]==0||v[1]>=1)&&v>=1 Then{
a1 = o*1.1;
b1 = o*0.9;
}
if date >= 19981207 then
{
if CodeCategory() == 2 then
{
if date >= 20030721 then
{
up1 = int(a1/100+0.00001)*100;
up2 = int(a1/100+0.00001)*100;
up3 = int(a1/100+0.00001)*100;
up4 = int(a1/50+0.00001)*50;
up5 = int(a1/10+0.00001)*10;
up6 = int(a1/5+0.00001)*5;
up7 = int(a1/1+0.00001)*1;
}
else {
up1 = int(a1/1000+0.00001)*1000;
up2 = int(a1/500+0.00001)*500;
up3 = int(a1/100+0.00001)*100;
up4 = int(a1/50+0.00001)*50;
up5 = int(a1/10+0.00001)*10;
up6 = int(a1/10+0.00001)*10;
up7 = int(a1/1+0.00001)*1;
}
}
Else
{
up1 = int(a1/1000+0.00001)*1000;
up2 = int(a1/500+0.00001)*500;
up3 = int(a1/100+0.00001)*100;
up4 = int(a1/50+0.00001)*50;
up5 = int(a1/10+0.00001)*10;
up6 = int(a1/5+0.00001)*5;
up7 = int(a1/1+0.00001)*1;
}
if CodeCategory() == 1 || CodeCategory() == 2 then
{
if sdate < 20101004 Then
{
If a1 >= 500000 Then
a2 = up1;
Else If a1 >= 100000 Then
a2 = iff(up2>=500000, up1, up2);
Else If a1 >= 50000 Then
a2 = iff(up3>=100000, up2, up3);
Else If a1 >= 10000 Then
a2 = iff(up4>=50000, up3, up4);
Else If a1 >= 5000 Then
a2 = iff(up5>=10000, up4, up5);
Else If a1 >= 1000 Then
a2 = iff(up5>=5000, up5, up6);
Else
a2 = iff(up6>=1000, up6, up6);
}
Else
{
If a1 >= 500000 Then
a2 = up1;
Else If a1 >= 100000 Then
a2 = iff(up2>=500000, up1, up2);
Else If a1 >= 50000 Then
a2 = iff(up3>=100000, up2, up3);
Else If a1 >= 10000 Then
a2 = iff(up4>=50000, up3, up4);
Else If a1 >= 5000 Then
a2 = iff(up5>=10000, up4, up5);
Else If a1 >= 1000 Then
a2 = iff(up5>=5000, up5, up6);
Else
a2 = iff(up6>=1000, up6, up7);
}
}
else if CodeCategory() == 8 || CodeCategory() == 9 then { // ETF
a2 = up6;
}
}
if date >= 19981207 then
{
if CodeCategory() == 2 then
{
if date >= 20030721 then
{
dn1 = int(b1/100+0.00001)*100;
dn2 = int(b1/100+0.00001)*100;
dn3 = int(b1/100+0.00001)*100;
dn4 = int(b1/50+0.00001)*50;
dn5 = int(b1/10+0.00001)*10;
dn6 = int(b1/5+0.00001)*5;
dn7 = int(b1/1+0.00001)*1;
}
else {
dn1 = int(b1/1000+0.00001)*1000;
dn2 = int(b1/500+0.00001)*500;
dn3 = int(b1/100+0.00001)*100;
dn4 = int(b1/50+0.00001)*50;
dn5 = int(b1/10+0.00001)*10;
dn6 = int(b1/10+0.00001)*10;
dn7 = int(b1/1+0.00001)*1;
}
}
Else
{
dn1 = int(b1/1000+0.00001)*1000;
dn2 = int(b1/500+0.00001)*500;
dn3 = int(b1/100+0.00001)*100;
dn4 = int(b1/50+0.00001)*50;
dn5 = int(b1/10+0.00001)*10;
dn6 = int(b1/5+0.00001)*5;
dn7 = int(b1/1+0.00001)*1;
}
if CodeCategory() == 1 || CodeCategory() == 2 then
{
if sdate < 20101004 Then
{
If b1 >= 500000 Then
b2 = dn1;
Else If b1 >= 100000 Then
b2 = iff(dn2>=500000, dn1, dn2);
Else If b1 >= 50000 Then
b2 = iff(dn3>=100000, dn2, dn3);
Else If b1 >= 10000 Then
b2 = iff(dn4>=50000, dn3, dn4);
Else If b1 >= 5000 Then
b2 = iff(dn5>=10000, dn4, dn5);
Else If b1 >= 1000 Then
b2 = iff(dn5>=5000, dn5, dn6);
Else
b2 = iff(dn6>=1000, dn6, dn6);
}
Else
{
If b1 >= 500000 Then
b2 = dn1;
Else If b1 >= 100000 Then
b2 = iff(dn2>=500000, dn1, dn2);
Else If b1 >= 50000 Then
b2 = iff(dn3>=100000, dn2, dn3);
Else If b1 >= 10000 Then
b2 = iff(dn4>=50000, dn3, dn4);
Else If b1 >= 5000 Then
b2 = iff(dn5>=10000, dn4, dn5);
Else If b1 >= 1000 Then
b2 = iff(dn5>=5000, dn5, dn6);
Else
b2 = iff(dn6>=1000, dn6, dn7);
}
}
else if CodeCategory() == 8 || CodeCategory() == 9 then { // ETF
b2 = dn6;
}
}
plot1(floor(a2));
plot2(Ceiling(b2));
위 수식이 게시판에서 본 vi수식인데 적용하고나니 첨부한 그림처럼 엔벨로프처럼 나옵니다.
vi가격에 맞게 표시하는 방법없나요?
그리고 상승이나 하락 vi해제후 1분동안 매수금지 시스템식을 만드는 방법을 가르쳐주세요
그리고 시초가가찍히고 10봉뒤부터 매수하는 시스템식도 함께 만들어주세요.
2017-11-30
205
글번호 114584
답변완료
재문의드립니다
55692다시한번재문의드립니다~수식만들어주셔서감사드립니다 다시한번수정부탁드립니다
현재진행된선에서 위수평하고 아래수평만 나오게하고십습니다 , 이전수평은사라지게부탁합니다
2017-11-30
167
글번호 114583
답변완료
문의드립니다.
예스랭귀지 메뉴얼을 보다가 아래와 같은 문구를 발견하였습니다.
=======================================================================================
타종목참조를 이용할 경우 시장 구조적인 문제 때문에 시뮬레이션과 실제매매를 완전히 일치시킬 수 있는 방법은 없지만, 매매의 시간주기를 길게 사용함으로써 발생빈도를 줄일 수 있다.
=======================================================================================
혹시 저 위에서 설명하신, 매매의 시간주기를 길게하는 방법은 어떤것이 있는지요?
감사합니다.
2017-11-29
176
글번호 114582
답변완료
수식요청(본전매도)
* 항상 많은 도움 고맙습니다.
* 매수후 매수가격 보다 2% 이상 올랐다가 본전 오면 매도 주문이 안됨니다....
* 수정좀 부탁 드립니다.
if MarketPosition == 1 Then {
if CurrentContracts == MaxContracts Then
{ ExitLong("본전매도",atlimit,AvgEntryPrice*1.025,"",int MaxContracts*0.5),1); }
2017-11-29
169
글번호 114581
답변완료
수식 문의 드립니다.
먼저 오후에 주신 답변 감사드립니다.
그런데 작성해주신 코드로는 작동해야할 부분에서 전혀 작동을 하지 않고 있습니다.
1년 기간을 잡아도 신호발생이 전혀 없습니다.
제가 주신 코드가 잘 해석이 안되서, 어디를 고쳐야할지 막막해서 재질문드립니다.
어딘가 잘못되어있는 것 같긴한데, 혹시 봐주실 수 있으실지요?
그리고 가능하다면, 코드 이해가 안되서 그러는데 혹시 간단히 주석을 달아주실수 있으실지요?
주신 답변을 아래에 그대로 붙였습니다.
감사합니다.
=================================================================================
안녕하세요
예스스탁입니다.
input : ST(120000),ET(120100);
var : cnt(0),sum(0),mav(0);
Array : VV[100](0);
if stime == ST or (stime > ST and stime[1] < ST) Then{
VV[0] = 0;
for cnt = 1 to 99{
VV[cnt] = VV[cnt-1][1];
}
}
if stime >= ST and stime < ET Then{
VV[0] = VV[0] + v;
if NextBarStime > ET and VV[20] > 0 Then{
sum = 0;
for cnt = 1 to 20{
sum = sum +VV[cnt];
}
mav = sum/20;
if VV[0] > mav Then
buy();
}
}
즐거운 하루되세요
> ywesry 님이 쓴 글입니다.
> 제목 : 수식 문의 드립니다.
> 1분봉을 이용해서 수식을 구현해보고자 합니다.
오늘 12시00분 부터 12시01분의 거래량이
과거 20일동안의 12시00분 부터 12시01분 사이의 거래량들 평균과 비교해서 크면 매수
라는 함수를 구현하고 싶은데 가능할지요?
예전에 V(1)[1] 이런 것이 있던 것 같아서요.
만약 위에 것이 가능하다면,
1분봉으로 12시00분부터 12시03분 사이의 3분동안의 거래량도 위와같은 방법이 가능할까요?
감사합니다.
2017-11-29
176
글번호 114580
답변완료
55624번글 분할매매 관련 재질문
질문을 통해 아래와 같은 수식(기준자산을 3등분하여 매수/매도)을 받았습니다.
input : 기준자산(50000000);
if MarketPosition == 0 and stime == 143000 Then{ //새벽 2시30분이면 023000
var1 = 기준자산*(1/3);
buy("b1",OnClose,def,Floor(var1/C));
}
if MarketPosition == 1 and stime == 143100 Then{ //새벽 2시31분이면 023100
var1 = 기준자산*(1/3);
buy("b2",OnClose,def,Floor(var1/C));
}
if MarketPosition == 1 and stime == 143200 Then{ //새벽 2시32분이면 023200
var1 = 기준자산*(1/3);
buy("b3",OnClose,def,Floor(var1/C));
}
if MarketPosition == 1 and sdate > EntryDate then{
if stime == 90500 Then
ExitLong("bx1",OnClose,def,"",floor(MaxContracts*(1/3)),1);
if stime == 90600 Then
ExitLong("bx2",OnClose,def,"",floor(MaxContracts*(1/3)),1);
if stime == 90700 Then
ExitLong("bx3");
}
1. 수능일처럼 개장시간이 늦추어진 날의 다음날 오류가 발생합니다.
(수능일 당연히 매도주문은 나가지 않고, 수능일+1일에 첫번째 매수-b1- 실행되지 않고, 수능일+2일 9시대에 앞선 2일간의 누적량 한꺼번에 매도)
3열의 "MarketPosition == 0 and" 부분을 삭제하면 수능일+1일 b1이 실행되는데, 삭제해도 문제 없을까요?
2. 개장시간이 늦추어져서 9시대의 매도 주문이 실행되지 않은 것이 근본적인 원인인 것 같은데, "9시대의 매도주문이 나가지 않은 경우(개장이 9시 이후로 늦추어진 경우) 개장 시 전량매도"같은 규칙을 넣을 수 있을까요?
3. 거래량이 없어 경우 봉차트가 생성되지 않은 경우 주문이 나가지 않는 것 같습니다.
(3열을 예로 들면) if MarketPosition == 0 and stime == 143000 or (stime > 143000 and stime[1] < 143000) Then
이런 식으로 고쳐주면 될까요?
2017-11-29
166
글번호 114579
답변완료
종목검색식
안녕하세요.
종목 검색식입니다.
일봉에서. 60 일선이나 120선이나, 240일선의 지지를 받고,(3개중 하나) 주봉에서 25 일선이나, 50일선이나, 80일선의 지지를 받는 종목
(지지 : 주가가 이평선을 하향 이탈하지 않고 가까이 붙어있는 상태)
매수 삭입니다. (오일)
매수 : 1. 양봉이 연속 3회발생하고 첫번째 양봉의 시가와 세번째 양봉의 종가의 범위가 30틱 이상이면 매수진입
2. 3개의 봉이 양봉, 음봉, 양봉 순서로 발생시 첫번째 양봉 시가와 세번째 음봉 종가의 범위가 30틱 이상이면 매수진입
3. 4개의 양봉 이 연속 발생하고 첫번째 양봉의 시가와 네번째 양봉의 종가의 범위가 30틱 이상일때 매수진입
매도 : 1. 매수와 반대로 음봉 3회연속 발생시 첫번째 음봉의 시가와 세번째 음봉의 종가의 범위가 30틱 이상일때 매도진입
2. 매수와 반대로 음봉으로 작성 부탁드립니다.
3. 매수와 반대로 음봉으로 작성 부탁드립니다.
2017-11-30
206
글번호 114578