커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3746
글번호 230811
답변완료
문의
1. 최근 N봉 기준이 궁금합니다.
현재봉부터 과거봉까지 N개 인가요?
2. 요청내용
데이트레이딩(당일 청산)에 사용할 수식입니다.
1.최근 N봉 기준 : 금일 및 금일 이전 과거봉 포함(답변주신 수식을 사용하면 되는지요?)
2.최근 N봉 기준 : 금일만 해당(답변수식을 수정하여 주십시요)
*********************************************************************************
안녕하세요
예스스탁입니다.
갯수를 세기위해서는 구간이 필요합니다.
최근 N봉 기준으로 작성해 드립니다.
input : N(20),비율(70);
var : ma1(0), ma2(0);
ma1 = ma(C,5);
ma2 = ma(C,20);
var1 = countif(C>O,N);
var2 = countif(C<O,N);
if CrossDown(ma1, ma2) and var2/var1*100 >= 비율 then
sell();
2019-06-30
165
글번호 129873
목마와숙녀 님에 의해서 삭제되었습니다.
2019-06-29
0
글번호 129872
답변완료
검색식 부탁드려 봅니다.
예를 들어,
1.그림의 주가에
ADX, DI+,DI-
위 세 가지 선 중에서
[ DI+ ] 선을 기준으로
[ ADX ] 선은 위에, [ DI- ] 선은 아래에,
[ ADX ], [ DI- ] 선이 [ DI+ ] 선을 기준으로
고저차가 같거나 다르게 임의로 설정가능하게 해서
해당되는 종목을 찾게 할 수는 없는지요.
2. [ ADX ]가 N일만큼 상승했을 때 또는 하락했을 때의 조건을
위 1번과 조합할 수 있는지요.
2019-06-29
189
글번호 129871
답변완료
수식부탁드립니다
#,안녕하세요
아래수식과 그림파일참조하여 수식추가 부탁드립니다.
input : 굵기(0);
var : 매수1(0),매도1(0),매수2(0),매도2(0);
var1 = ema(C,5);
var2 = ema(C,20);
if crossup(var1,var2) Then
매도1 = var2;
if 매도1 > 0 and var2 > 매도1 Then
매도1 = var2;
if CrossDown(var1,var2) Then
매수1 = var2;
if 매수1 > 0 and var2 < 매수1 Then
매수1 = var2;
매도2=매도1-0.02;
매수2=매수1+0.02;
plot1(매도1,"매도1",CYAN,def,굵기);
plot2(매수1,"매수1",YELLOW,def,굵기);
plot3(var2,"이평",iff(var2>var2[1],YELLOW,CYAN),def,굵기);
##,그림파일 1~4번라인표기를 참조하여 질문드립니다
1,1번과 2번의 중심선을 파일그림처럼 2번라인 시작점부터 끝점까지의 길이만큼
수평그리기한다.
2, 3번과 4번의 중심선을 파일그림처럼 4번라인 시작점부터 끝점까지의 길이만큼
수평그리기한다.
3, 1번이 3번보다클때(1>3) ,2번이 4번보다클때(2>4)에만 즉 현재가가 하방진행시
(매도라인)에만 중심선을 그린다.
###,위 3가지 조건에 부합되게 중심선을 그리기하고 중심값을 표시하고 싶습니다,
도움 부탁드립니다,
$,언제나 늘 고맙습니다
2019-07-01
205
글번호 129870
답변완료
캔들이평돌파
캔들이 20일이평선 상향돌파하자마자 시장가로 매수 된후 30틱 손절 60틱 익절 로 1계약
식과
갵들이 20일이평선 하향돌파하자마사 시장가로 매수 된후 30틱 손절 60틱 익절로 1계약
식 알려주시면 감사하겠습니다.
2019-06-29
215
글번호 129869
답변완료
수식부탁드립니다
캔들차트중에 하이켄아쉬라는 차트가 있던데 그걸 구현하는 수식 부탁드립니다
2019-06-29
206
글번호 129868
답변완료
시스템 오류수정 부탁합니다.
아래 시스템식 오류수정 부탁합니다.
Input:주가파동기간(7),지표파동기간(10),유효기간(40);
Var:j(0),k(0),value(0),n1(0),n2(0),추세선(0),다이버전스(0),다이버전스Bar(0),
상승(100),하락(-100);
Array:고[10](0),저[10](0),고Bar[10](0),저Bar[10](0),
지표고[10](0),지표저[10](0),지표고Bar[10](0),지표저Bar[10](0);
#=========================================================#
# 초기처리 (Initialize Routine)
#=========================================================#
n1 = 주가파동기간;
n2 = 지표파동기간;
value = ema(MACD(12, 26),9);
//value = stochasticsD(12,5,5);
for j = 1 to 9 {
고Bar[j] = 고Bar[j] + 1;
저Bar[j] = 저Bar[j] + 1;
지표고Bar[j] = 지표고Bar[j] + 1;
지표저Bar[j] = 지표저Bar[j] + 1;
}
다이버전스Bar = 다이버전스Bar + 1;
#=========================================================#
# 주가 Swing 계산
#=========================================================#
#---------------------------------------------------------#
# 전고점(Peak) 계산
#---------------------------------------------------------#
if Highest(H,n1)[n1+1] <= H[n1] and H[n1] > Highest(H,n1) then {
for j = 8 downto 1 {
고[j+1]= 고[j];
고Bar[j+1] = 고Bar[j];
}
고[1]= H[n1];
고Bar[1] = n1;
if 저Bar[1] > 고Bar[2] then {
for j = 8 downto 1 {
저[j+1]= 저[j];
저Bar[j+1] = 저Bar[j];
}
k = n1 + 1;
for j = n1 + 2 to 고Bar[2]-1 {
if L[k] > L[j] then k = j;
}
저[1]= L[k];
저Bar[1] = k;
}
}
#---------------------------------------------------------#
# 전저점(Trough) 계산
#---------------------------------------------------------#
if Lowest(L,n1)[n1+1] >= L[n1] and L[n1] < Lowest(L,n1) then {
for j = 8 downto 1 {
저[j+1]= 저[j];
저Bar[j+1] = 저Bar[j];
}
저[1]= L[n1];
저Bar[1] = n1;
if 고Bar[1] > 저Bar[2] then {
for j = 8 downto 1 {
고[j+1]= 고[j];
고Bar[j+1] = 고Bar[j];
}
k = n1 + 1;
for j = n1 + 2 to 저Bar[2]-1 {
if H[k] < H[j] then k = j;
}
고[1]= H[k];
고Bar[1] = k;
}
}
#=========================================================#
# 지표식 Swing 계산
#=========================================================#
#---------------------------------------------------------#
# 전고점(Peak) 계산
#---------------------------------------------------------#
if Highest(value,n2)[n2+1] <= value[n2] and
value[n2] > Highest(value,n2) then {
for j = 8 downto 1 {//배열값을 순차적으로 바꿔준다
지표고[j+1]= 지표고[j];
지표고Bar[j+1] = 지표고Bar[j];
}
k = n2 + 1;
for j = n2 + 2 to 지표고Bar[2]-1 {
if value[k] > value[j] then k = j;
}
지표저[1]= value[k];
지표저Bar[1] = k;
}
}
#---------------------------------------------------------#
# 전저점(Trough) 계산
#---------------------------------------------------------#
if Lowest(value,n2)[n2+1] >= value[n2] and
value[n2] < Lowest(value,n2) then {
for j = 8 downto 1 {
지표저[j+1]= 지표저[j];
지표저Bar[j+1] = 지표저Bar[j];
}
지표저[1]= value[n2];
지표저Bar[1] = n2;
if 지표고Bar[1] > 지표저Bar[2] then {
for j = 8 downto 1 {
지표고[j+1]= 지표고[j];
지표고Bar[j+1] = 지표고Bar[j];
}
k = n2 + 1;
for j = n2 + 2 to 지표저Bar[2]-1 {
if value[k] < value[j] then k = j;
}
지표고[1]= value[k];
지표고Bar[1] = k;
}
}
#=========================================================#
# 다이버전스 계산
#=========================================================#
if 고Bar[1] == n1 or 지표고Bar[1] == n2 or
저Bar[1] == n1 or 지표저Bar[1] == n2 then {
if 고[2] < 고[1] and 지표고[2] > 지표고[1] then {
다이버전스= 하락;
다이버전스Bar = 0;
}
else if 저[2] > 저[1] and 지표저[2] < 지표저[1] then {
다이버전스= 상승;
다이버전스Bar = 0;
}
}
if 다이버전스Bar > 유효기간 then 다이버전스 = 0;
#=========================================================#
# 추세선 계산
#=========================================================#
if 다이버전스 == 상승 then {
추세선 = (고[1]-고[2])/(고Bar[2]-고Bar[1]) * 고Bar[2] + 고[2];
}
if 다이버전스 == 하락 then {
추세선 = (저[1]-저[2])/(저Bar[2]-저Bar[1]) * 저Bar[2] + 저[2];
}
if 다이버전스 == 0 then {
추세선 = 0;
}
#=========================================================#
# 시스템 식
#=========================================================#
if 다이버전스 == 상승 and C > ma(C,20) and CrossUp(C,추세선) then
Buy();
if 다이버전스 == 하락 and C < ma(C,20) and CrossDown(C,추세선) then
Sell();
2019-06-29
182
글번호 129867
답변완료
오류수정 부탁
아래 시스템식에서 선업되지 않은 이름 i가 사용되었습니다. 라는 오류가 떠서 오류수정부탁 드립니다.
Input:n(5),미완성사용(True);
Var:j(0),k(0),고점표시(0),저점표시(0);
Array:고[20](0),저[20](0),고Bar[20](0),저Bar[20](0),
고idx[20](0),저idx[20](0);
#---------------------------------------------------------#
# Index()와 마찬가지로 1봉이 바뀔 때마다 1씩 증가
#---------------------------------------------------------#
for j = 1 to 19 {
저Bar[j] = 저Bar[j] + 1;
고Bar[j] = 고Bar[j] + 1;
고iDx[j] = I - 고Bar[j];
저idx[j] = I - 저Bar[j];
}
고점표시=(O[n]+C[n])/2;
저점표시=(O[n]+C[n])/2;
#=========================================================#
# 주처리 (Main Routine) 파동선 계산
#=========================================================#
# 전고점(Peak) 계산
#---------------------------------------------------------#
//Highest(H,2)[3] <= H[2] and H[2] > Highest(H,2)
if Highest(H,n)[n+1] <= H[n] and H[n] > Highest(H,n) then {
if 미완성사용 == True then {
for j = 18 downto 1 { //배열값을 순차적으로 바꿔준다
고[j+1] = 고[j];
고Bar[j+1] = 고Bar[j];
고idx[j+1] = 고idx[j];
}
고[1]= H[n];
고Bar[1] = n;
고idx[1] = I - 고Bar[1];
고점표시 = 고[1]*1.005;
if 저Bar[1] > 고Bar[2] then {
for j = 18 downto 1 {
저[j+1]= 저[j];
저Bar[j+1] = 저Bar[j];
저idx[j+1] = 저idx[j];
}
k = n + 1;
for j = n+ 2 to 고Bar[2]-1 {
if L[k] > L[j] then k = j;
}
저[1]= L[K];
저Bar[1] = k;
저idx[1] = i - 저Bar[1];
}
}
if 미완성사용 == False then {
if 고Bar[1] > 저Bar[1] then {
for j = 18 downto 1 {
고[j+1] = 고[j];
고Bar[j+1] = 고Bar[j];
고Idx[j+1] = 고Idx[j];
}
}
if 고Bar[1] > 저Bar[1] or 고[1] <= H[n] then {
고[1]= H[n];
고Bar[1] = n;
고Idx[1] = i -고Bar[1];
고점표시 = 고[1]*1.005;
}
}
}
if Lowest(L,n)[n+1] >= L[n] and L[n] < Lowest(L,n) then {
if 미완성사용 == True then {
for j = 18 downto 1 {
저[j+1] = 저[j];
저Bar[j+1] = 저Bar[j];
저Idx[j+1] = 저Idx[j];
}
저[1]= L[n];
저Bar[1] = n;
저Idx[1] = i - 저Bar[1];
저점표시 = 저[1]*0.995;
if 고Bar[1] > 저Bar[2] then {
for j = 18 downto 1 {
고[j+1]= 고[j];
고Bar[j+1] = 고Bar[j];
고Idx[j+1] = 고Idx[j];
}
k = n + 1;
for j = n + 2 to 저Bar[2]-1 {
if H[k] < H[j] then k = j;
}
고[1]= H[k];
고Bar[1] = k;
고Idx[1] = i - 고Bar[1];
}
}
if 미완성사용 == False then {
if 저Bar[1] > 고Bar[1] then {
for j = 18 downto 1 {
저[j+1]= 저[j];
저Bar[j+1] = 저Bar[j];
저Idx[j+1] = 저Idx[j];
}
}
if 저Bar[1] > 고Bar[1] or 저[1] >= L[n] then {
저[1]= L[n];
저Bar[1] = n;
저Idx[1] = i - 저Bar[1];
저점표시 = 저[1]*0.995;
}
}
}
if 고점표시 > H[n] then Plot1(고점표시,"전고점",RED);
if 저점표시 < L[n] then Plot2(저점표시,"전저점",BLUE);
if 고Bar[1]==n and 고[1] > 0 then Plot3(고[1]);
if 저Bar[1]==n and 저[1] > 0 then Plot3(저[1]);
if 저Bar[1]==n and 저[1] > 0 then Plot4(저[1]);
if 고Bar[1]==n and 고[1] > 0 then Plot4(고[1]);
2019-06-29
169
글번호 129866
답변완료
확인좀 부탁 드립니다.
* 아래글 < 63046 > 다시 확인좁 부탁 드립니다.
* 아래식으로 적용 하니까 이상 하게 청산됨니다.
즉 10틱 이상 최대 수익이면 60% 선에서 청산이 안됨니다.
* 확인 좀 부탁 드립니다.
##################################
var : EH(0),EL(0);
if MarketPosition == 1 then
{ EH = highest(H,BarsSinceEntry);
if EH < EntryPrice+PriceScale*10 Then ExitLong("bx1",AtStop,EH*0.50);
if EH >= EntryPrice+PriceScale*10 and EH < EntryPrice+PriceScale*30 Then ExitLong("bx2",AtStop,EH*0.60);
if EH >= EntryPrice+PriceScale*30 and EH < EntryPrice+PriceScale*40 Then ExitLong("bx3",AtStop,EH*0.70);
if EH >= EntryPrice+PriceScale*40 and EH < EntryPrice+PriceScale*50 Then ExitLong("bx4",AtStop,EH*0.80);
if EH >= EntryPrice+PriceScale*50 Then
ExitLong("bx5",AtStop,EH*0.90);
}
if MarketPosition == -1 then
{ EL = highest(H,BarsSinceEntry);
if EL > EntryPrice-PriceScale*10 Then ExitShort("sx1",AtStop,EL*1.50);
if EL <= EntryPrice-PriceScale*10 and EL > EntryPrice-PriceScale*30 Then ExitShort("sx2",AtStop,EL*1.40);
if EL <= EntryPrice-PriceScale*30 and EL > EntryPrice-PriceScale*40 Then ExitShort("sx3",AtStop,EL*1.30);
if EL <= EntryPrice-PriceScale*40 and EL > EntryPrice-PriceScale*50 Then ExitShort("sx4",AtStop,EL*1.20);
if EL <= EntryPrice-PriceScale*50 Then ExitShort("sx5",AtStop,EL*1.10);
}
################
고맙 습니다.
2019-07-01
209
글번호 129865