커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6180
글번호 230811
답변완료
문의드립니다.
매번 고맙습니다.
1. 시스템
분봉
외부변수
금액,n개봉,RSI기간,타주기봉기간
진입
1-타주기 이평 40이상에서 타주기 RSI가 2봉 연속 25이하면 금액의 10% 매수
2-1에서 n개봉 지났는데 1보다 가격이 낮으면 20% 매수
3-2에서 n개봉 지났는데 2보다 가격이 낮으면 30% 매수
청산
-1,2,3, 진행하는 동안 RSI가 70에 도달하면 추가 매수는 안하고 모두 청산.
-3까지 진행된 뒤 RSI가 70까지 도달하지 못하고 전체포지션 손실률이 n2%에 도달하면 청산
2018-02-08
182
글번호 116435
답변완료
문의드립니다.
도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1. 기타
예스코드로 변환 부탁드립니다.
inputs:
Price( Close ),
RetracePct( 5 ) ;
variables:
LowPrice( 0 ),
HighPrice( 0 ),
RetraceFctrUp( 0 ),
RetraceFctrDn( 0 ) ;
if CurrentBar = 1 then
begin
LowPrice = Price ;
HighPrice = Price ;
RetraceFctrUp = 1 + 0.01 * RetracePct ;
RetraceFctrDn = 1 - 0.01 * RetracePct ;
end
else
begin
if Price < LowPrice then
LowPrice = Price ;
if Price > HighPrice then
HighPrice = Price ;
if MarketPosition < 1 and Price >= LowPrice *
RetraceFctrUp then
begin
Buy this bar on Close ;
HighPrice = Price ;
end
else if MarketPosition > -1 and Price <= HighPrice *
RetraceFctrDn then
begin
Sell Short this bar on Close ;
LowPrice = Price ;
end ;
end ;
2018-02-08
170
글번호 116429
답변완료
도움을 부탁드립니다.
아직 뼈대를 잡지 못했습니다. 도움을 부탁드립니다.
키움에서 시험적용해서 사용하던 것인데 예스 트레이더 시스템으로 변환을 하고 싶습니다.
변수값
p=20
m=2
매수진입
c>=avg(c,p)+m*stdev(c,p) or c>=lowest(c,p)+3*atr(p)
매수청산
c<=avg(c,p)-m*stdev(c,p) or c<=highest(c,p)-3*atr(p)
매도진입
c<=avg(c,p)-m*stdev(c,p) or c<=highest(c,p)-3*atr(p)
매도청산
c>=avg(c,p)+m*stdev(c,p) or c>=lowest(c,p)+3*atr(p)
매일매일 고생 하심에 감사드립니다.
2018-02-08
183
글번호 116428
답변완료
동일계좌 진입 청산 질문 입니다.
안녕하세요. ^^
"A" 라는 시스템이 있는데,
한개의 동일계좌로
30분, 60분, 90분 각각의 차트에 동일한 "A" 라는 시스템을 연결했을 때,
진입 신호는 B 또는 S ,
청산 신호는 BB 또는 SS 라고 명했습니다.
매수청산은 BB , 매도청산은 SS 입니다.
한개의 동일계좌로 동일시스템을 진행 할 때,
일,분,틱에 복수로 적용했을 때, 문제 될 건 없는지요?
예를 들어, 30분 매수로 B가 진입하면, 90분 매수청산 신호로 BB 가 뜬다면,
동일계좌에서 먼저 매수로 진입한 30분 B 매수 포지션이,
90분 매수청산 신호인 BB로 청산 되면서 문제가 되지 않을까 하는 질문입니다.
(증권사들은 먼저 진입한 포지션을 첫 청산으로 처리하는것 같아서 문의합니다.)
답변 부탁드립니다. 감사합니다~ ^^
2018-02-08
160
글번호 116427
답변완료
검색식 부탁드립니다..
차트상에서 적용(A)에서 검색으로 들어가면
N일 신고가 처럼 N일 거래대금 신고가 검색 부탁드립니다
따로 검색이 되는게 아니라 차트상에서 표시되게 해주시면
감사하겟습니다
2018-02-08
159
글번호 116426
답변완료
질문있습니다.
현물시스템 3분봉 3000봉에 참조데이타로 지수연결선물 3분봉 3000봉으로 지수 이평선을 보고 매수매도를 결정하려고하는 시스템을 구현하려고합니다.
var : mt_sum3(0),mt_sum5(0),mt_sum10(0),mt_sum15(0),mt_sum20(0);
var : mt_ma3(0),mt_ma5(0),mt_ma10(0),mt_ma15(0),mt_ma20(0);
var : mt_ma3Flag(0),mt_ma5Flag(0),mt_ma10Flag(0),mt_ma15Flag(0),mt_ma20Flag(0);
var : mt_10(0),mt_20(0),mt_30(0),mt_40(0),mt_120(0),mt_600(0);
var : mt_buyFlag(1),mt_sellFlag(0),mt_changeFlag(0),mt_change_t1(0),mt_change_t2(0);
var : mt_buyfactor(0);
var : i(0);
if index==0 Then{
ClearDebug;
mt_10=30/BarInterval;
mt_20=60/BarInterval;
mt_30=90/BarInterval;
mt_40=120/BarInterval;
mt_120=360/BarInterval;
mt_600=600/BarInterval;
}
if DayIndex==0 Then{
mt_sum3 = 0;
mt_sum5 = 0;
mt_sum10 = 0;
mt_sum15 = 0;
mt_sum20 = 0;
for i=1 to 19 {
if i<3 Then
mt_sum3 = mt_sum3 + DayClose(i);
if i<5 Then
mt_sum5 = mt_sum5 + DayClose(i);
if i<10 Then
mt_sum10 = mt_sum10 + DayClose(i);
if i<15 Then
mt_sum15 = mt_sum15 + DayClose(i);
mt_sum20 = mt_sum20 + DayClose(i);
}
}
mt_ma3 = (mt_sum3 + DayClose(0))/3;
mt_ma5 = (mt_sum5 + DayClose(0))/5;
mt_ma10 = (mt_sum10 + DayClose(0))/10;
mt_ma15 = (mt_sum15 + DayClose(0))/15;
mt_ma20 = (mt_sum20 + DayClose(0))/20;
MessageLog("%.f %.f %.f",mt_ma3,mt_ma5,mt_ma10);
MessageLog("%.f %.f %.f",DayClose(0),DayClose(1),DayClose(2));
if(mt_ma3<c)Then{
mt_ma3Flag=1;
}Else
mt_ma3Flag=0;
if(mt_ma5<c)Then{
mt_ma5Flag=1;
}Else
mt_ma5Flag=0;
if(mt_ma10<c)Then{
mt_ma10Flag=1;
}Else
mt_ma10Flag=0;
if(mt_ma15<c)Then{
mt_ma15Flag=1;
}Else
mt_ma15Flag=0;
if(mt_ma20*0.99<c)Then{
mt_ma20Flag=1;
}Else
mt_ma20Flag=0;
//지수로 확인하는 것
if(DayIndex==0)Then{
mt_changeFlag = 0;
mt_change_t1 = 0;
mt_change_t2 = 0;
mt_buyFlag = 1;
mt_sellFlag = 0;
}
if(mt_ma3Flag+mt_ma5Flag+mt_ma10Flag+mt_ma20Flag==0)Then{
mt_sellFlag = 1;
mt_buyFlag = 0;
MessageLog("모두팔기!1");
}
if(mt_ma20Flag==0&&(mt_ma3Flag+mt_ma5Flag+mt_ma10Flag>=2))Then{
mt_buyFlag = 1;
mt_sellFlag = 0;
}
if(mt_changeFlag==0)Then{
if(DayHigh*0.985>c||DayClose(1)*0.985>c)Then{
mt_buyFlag = 0;
}
if(DayHigh*0.98>c||DayClose(1)*0.98>c)Then{
mt_buyFlag = 0;
mt_sellFlag = 1;
MessageLog("모두팔기!2");
}
}
if(mt_buyFlag==0)Then{
if(ma(c,mt_20)>ma(c,mt_120))Then{
mt_change_t1 = 1;
}Else
mt_change_t1 = 0;
if((Lowest(h,mt_600)[15]*1.005<c||Lowest(h,mt_600)[30]*1.005<c)&&(ma(c,mt_10)*1.01<c||Highest(h,mt_10)[2]*1.005<c))Then{
mt_change_t2 = 1;
}Else
mt_change_t2 = 0;
if(mt_change_t1==1||mt_change_t2==1)Then{
mt_changeFlag = 1;
mt_buyFlag = 1;
mt_sellFlag = 0;
}
}
if(mt_changeFlag==1)Then{
if(ma(c,mt_20)>ma(c,mt_120))Then{
mt_change_t1 = 1;
}Else
mt_change_t1 = 0;
if((Lowest(h,mt_600)[15]*1.005<c||Lowest(h,mt_600)[30]*1.005<c)&&(ma(c,mt_10)*1.01<c||Highest(h,mt_10)[2]*1.005<c))Then{
mt_change_t2 = 1;
}Else
mt_change_t2 = 0;
if(mt_change_t1+mt_change_t2==0)Then{
mt_changeFlag = 0;
mt_buyFlag = 0;
}
}
//20선 위
if(mt_buyFlag==1&&mt_ma20Flag==1)Then{
mt_buyfactor = ((mt_ma3Flag+mt_ma5Flag+mt_ma10Flag+mt_ma10Flag)*10+60)/100;
Plot1(mt_buyfactor);
}
//20선 아래
if(mt_buyFlag==1&&mt_ma20Flag==0)Then{
var1 = 0;
if(ma(c,mt_20)>ma(c,mt_120))Then
var1 = var1+1;
if(Lowest(h,mt_600)[15]*1.005<c)Then
var1 = var1+1;
if(Lowest(h,mt_600)[30]*1.005<c)Then
var1 = var1+1;
if(ma(c,mt_10)*1.01<c)Then
var1 = var1+1;
if(Highest(h,mt_10)[2]*1.005<c)Then
var1 = var1+1;
mt_buyfactor = (var1*10)/100;
Plot2(mt_buyfactor);
}
위의 식은 일반적으로 연결선물지수 차트에 지표로 사용하는 것입니다.
위에 것을 현물 차트(3분봉 3000봉)에 참조데이터 연결선물지수(3분봉 3000봉)인 곳에서 사용할수 있도록 변환을 아래와 같이하였지만 정상작동하지않습니다.
var : mt_sum3(0,data2),mt_sum5(0,data2),mt_sum10(0,data2),mt_sum15(0,data2),mt_sum20(0,data2);
var : mt_ma3(0,data2),mt_ma5(0,data2),mt_ma10(0,data2),mt_ma15(0,data2),mt_ma20(0,data2);
var : mt_ma3Flag(0,data2),mt_ma5Flag(0,data2),mt_ma10Flag(0,data2),mt_ma15Flag(0,data2),mt_ma20Flag(0,data2);
var : mt_10(0,data2),mt_20(0,data2),mt_30(0,data2),mt_40(0,data2),mt_120(0,data2),mt_600(0,data2);
var : mt_buyFlag(1,data2),mt_sellFlag(0,data2),mt_changeFlag(0,data2),mt_change_t1(0,data2),mt_change_t2(0,data2);
var : mt_buyfactor(0,data2);
var : i(0,data2);
if index==0 Then{
ClearDebug;
mt_10=30/data2(BarInterval);
mt_20=60/data2(BarInterval);
mt_30=90/data2(BarInterval);
mt_40=120/data2(BarInterval);
mt_120=360/data2(BarInterval);
mt_600=600/data2(BarInterval);
}
if DayIndex==0 Then{
mt_sum3 = 0;
mt_sum5 = 0;
mt_sum10 = 0;
mt_sum15 = 0;
mt_sum20 = 0;
for i=1 to 19 {
if i<3 Then
mt_sum3 = data2(mt_sum3 + CloseD(i));
if i<5 Then
mt_sum5 = data2(mt_sum5 + CloseD(i));
if i<10 Then
mt_sum10 = data2(mt_sum10 + CloseD(i));
if i<15 Then
mt_sum15 = data2(mt_sum15 + CloseD(i));
mt_sum20 = data2(mt_sum20 + CloseD(i));
}
}
mt_ma3 = data2((mt_sum3 + CloseD(0))/3);
mt_ma5 = data2((mt_sum5 + CloseD(0))/5);
mt_ma10 = data2((mt_sum10 + CloseD(0))/10);
mt_ma15 = data2((mt_sum15 + CloseD(0))/15);
mt_ma20 = data2((mt_sum20 + CloseD(0))/20);
MessageLog("%.f %.f %.f",data2(mt_ma3),data2(mt_ma5),data2(mt_ma10));
MessageLog("%.f %.f %.f",data2(CloseD(0)),data2(CloseD(1)),data2(CloseD(2)));
if(mt_ma3<c)Then{
mt_ma3Flag=1;
}Else
mt_ma3Flag=0;
if(mt_ma5<c)Then{
mt_ma5Flag=1;
}Else
mt_ma5Flag=0;
if(mt_ma10<c)Then{
mt_ma10Flag=1;
}Else
mt_ma10Flag=0;
if(mt_ma15<c)Then{
mt_ma15Flag=1;
}Else
mt_ma15Flag=0;
if(mt_ma20*0.99<c)Then{
mt_ma20Flag=1;
}Else
mt_ma20Flag=0;
//지수로 확인하는 것
if(DayIndex==0)Then{
mt_changeFlag = 0;
mt_change_t1 = 0;
mt_change_t2 = 0;
mt_buyFlag = 1;
mt_sellFlag = 0;
}
if(mt_ma3Flag+mt_ma5Flag+mt_ma10Flag+mt_ma20Flag==0)Then{
mt_sellFlag = 1;
mt_buyFlag = 0;
//MessageLog("모두팔기!1");
}
if(mt_ma20Flag==0&&(mt_ma3Flag+mt_ma5Flag+mt_ma10Flag>=2))Then{
mt_buyFlag = 1;
mt_sellFlag = 0;
}
if(mt_changeFlag==0)Then{
if(data2(HighD(0)*0.985>c||CloseD(1)*0.985>c))Then{
mt_buyFlag = 0;
}
if(data2(HighD(0)*0.98>c||CloseD(1)*0.98>c))Then{
mt_buyFlag = 0;
mt_sellFlag = 1;
//MessageLog("모두팔기!2");
}
}
if(mt_buyFlag==0)Then{
if(data2(ma(c,mt_20)>ma(c,mt_120)))Then{
mt_change_t1 = 1;
}Else
mt_change_t1 = 0;
if(data2((Lowest(h,mt_600)[15]*1.005<c||Lowest(h,mt_600)[30]*1.005<c)&&(ma(c,mt_10)*1.01<c||Highest(h,mt_10)[2]*1.005<c)))Then{
mt_change_t2 = 1;
}Else
mt_change_t2 = 0;
if(mt_change_t1==1||mt_change_t2==1)Then{
mt_changeFlag = 1;
mt_buyFlag = 1;
mt_sellFlag = 0;
}
}
if(mt_changeFlag==1)Then{
if(data2(ma(c,mt_20)>ma(c,mt_120)))Then{
mt_change_t1 = 1;
}Else
mt_change_t1 = 0;
if(data2((Lowest(h,mt_600)[15]*1.005<c||Lowest(h,mt_600)[30]*1.005<c)&&(ma(c,mt_10)*1.01<c||Highest(h,mt_10)[2]*1.005<c)))Then{
mt_change_t2 = 1;
}Else
mt_change_t2 = 0;
if(mt_change_t1+mt_change_t2==0)Then{
mt_changeFlag = 0;
mt_buyFlag = 0;
}
}
//20선 위
if(mt_buyFlag==1&&mt_ma20Flag==1)Then{
mt_buyfactor = ((mt_ma3Flag+mt_ma5Flag+mt_ma10Flag+mt_ma10Flag)*10+60)/100;
Plot1(mt_buyfactor);
}
//20선 아래
if(mt_buyFlag==1&&mt_ma20Flag==0)Then{
var1 = 0;
if(data2(ma(c,mt_20)>ma(c,mt_120)))Then
var1 = var1+1;
if(data2(Lowest(h,mt_600)[15]*1.005<c))Then
var1 = var1+1;
if(data2(Lowest(h,mt_600)[30]*1.005<c))Then
var1 = var1+1;
if(data2(ma(c,mt_10)*1.01<c))Then
var1 = var1+1;
if(data2(Highest(h,mt_10)[2]*1.005<c))Then
var1 = var1+1;
mt_buyfactor = (var1*10)/100;
Plot2(mt_buyfactor);
}
어디가어떻게 잘못되었는지 알려주시면 감사하겠습니다
감사합니다
2018-02-08
181
글번호 116425
답변완료
질문있씁니다
var : R2(0,data2),m2(0,data2);
var : D2전환선(0,data2),D2기준선(0,data2),D2선행스팬1(0,data2),D2선행스팬2(0,data2);
var : D2구름상단(0,data2),D2구름하단(0,data2);
R2 = data2((C-CloseD(1))/CloseD(1)*100);
M2 = data2(ma(C,20));
D2전환선 = data2((highest(H,9)+lowest(L,9))/2);
D2기준선 = data2((highest(H,26)+lowest(L,26))/2);
D2선행스팬1 = data2((D2전환선[25]+D2기준선[25])/2);
D2선행스팬2 = data2((highest(H,52)[25]+lowest(L,52)[25])/2);
D2구름상단 = max(D2선행스팬2,D2선행스팬2);
D2구름하단 = min(D2선행스팬2,D2선행스팬2);
d어제 답변을 위와 같이주셨는데요
문법적으로 궁금한것이있는데요
data2 참조를 해서 그값을 이용해서 출력하고 혹은 또다른 계산을 할때 거쳐가는 변수에는
모두다 D2기준선(0,data2) 이것처럼 ,data2가 붙어야만하나요?
작성하신 것을 보면 모두다 ,data2 를 변수 선언시 붙여주셨는데요
제가 그걸 빼고 돌려도 잘작동하는데
왜 굳이 ,data2를 써야하는 이유가 무엇인지궁금합니다.
data2((highest(H,9)+lowest(L,9))/2); 에서는 그 data2 를 가져오기위해서 사용하는것은 당연해보이지만 이값을 저장하는 변수형태도 ,data2를 붙여서 선언해야하는게 꼭필요한것인지
아님 알아보기 쉽게하기위해서 그렇게작성하는것인지궁금합니다
2018-02-08
171
글번호 116424
매치다는 님에 의해서 삭제되었습니다.
2018-02-08
10
글번호 116423
답변완료
시스템식 문의드립니다
안녕하세요
알려주신 조건식 응용해서 잘 쓰고 있습니다
뼈대를 만들 능력이 없어서 다시 도움요청드립니다
항상 감사합니다!!!!
내용이 다른게 올라가서 수정합니다.
차트
3분봉
지표
3분봉 볼린저밴드 20 .2
매수전 조건
일봉상 5일선 위 ,당일 거래대금 75억 이상
매수
1차 매수 ㄱ or ㄴ
ㄱ. 현재봉 포함 6봉이내 고가가 볼린저 밴드 상단터치 있고
이이전봉 시가 종가 -3%이상 음봉 & 이전봉 시가 종가 -3%이상음봉 &
현재가 볼린저 밴드 중간선 이하시 매수
ㄴ. 이전봉 시가 종가 -1.5%이상 음봉 &
현재가 볼린저 밴드 하단선 이하시 매수
추가매수
2차 매수 1차 매수가 대비 -2%
3차 매수 2차 매수가 대비 -3%
4차 매수 3차 매수가 대비 -4%
매도
ㄱ. 매수시
볼린저 밴드 상단 -1%터치시 매도 or
1 2 차 매수시 매수가대비 3%상승 시 매도 or
3차 이상 매수시 본절 매도 or
ㄴ. 매수시
중단터치시 매도 or
1 2 차 매수시 매수가대비 3%상승 시 매도 or
3차 이상 매수시 본절 매도
매수 매도 모두 조건 만족하면 시장가 주문입니다
모자라는 부분있으면 알려주세요 보충하겠습니다
2018-02-08
142
글번호 116422