커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4381
글번호 230811
답변완료
문의 사항
아래 개념에서 마지막 최소수익포인트는 어떤 개념인지요?
손절포인트 : 손절매
수익포인트 : 목표수익
수익감소포인트 : 최대수익대비하락(trailing stop)
최소수익포인트 : ???
***********************************************
1.포인트
input : 진입시간(100000),진입제한시간(120000),트레이드종료시간(150000);
input : 손절포인트(1),수익포인트(3),수익감소포인트(1),최소수익포인트(2);
Inputs: DMILen(14), Consec(3), MinDiff(0);
Var : DMIDiff(0);
var : Tcond(false);
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) Then
Tcond = true;
if (sdate != sdate[1] and stime >= 진입제한시간) or
(sdate == sdate[1] and stime >= 진입제한시간 and stime[1] < 진입제한시간) Then
Tcond = false;
if (sdate != sdate[1] and stime >= 트레이드종료시간) or
(sdate == sdate[1] and stime >= 트레이드종료시간 and stime[1] < 트레이드종료시간) Then
exitlong();
DMIDiff = DIPlus(DMILen) - DIMinus(DMILen);
If DMIDiff[Consec] > 0 and Tcond == true Then Begin
If DMIDiff >= MinDiff AND CountIF(DMIDiff > DMIDiff[1], Consec) == Consec Then
Buy ("DMI");
End;
SetStopProfittarget(수익포인트,PointStop);
SetStopLoss(손절포인트,PointStop);
SetStopTrailing(수익감소포인트,최소수익포인트,PointStop);
2018-05-15
187
글번호 118917
답변완료
질문드립니다.
57798 답변해주신 내용인데요.
안녕하세요
예스스탁입니다.
제 질문이 난해했네요.
data2인 일봉에서
20일의 기간동안 close(20) < close를 만족한 조건이 12달(20일간 만족 조건을 12번으로 쪼갬) 동안 몇번인지 확인하는 것이었습니다.
그뒤 아래 수식에 이 부분처럼
    rate = (count/P)*100;
백분율해서 12달동안 close(20) < close가 몇번 만족하였는지 퍼센티지로 표현하고 싶었습니다.
아래 조건과 같이 한뒤,
rate = (count/P)*100;
}
if CrossUp(lower,upper) Then{
Text_SetStyle(txt, 1,1);
txt = Text_New(sDate,sTime,C,spc + numtostr(rate,0) + "%");
Text_SetColor(txt,BLACK);
Text_SetStyle(txt,1,1);
}
text함수에 rate를 넣어서 해보면 모두 수치가 0%로 나옵니다. 12달중 9번이 close > close(20)이면 75%로 나와야하는데말이죠.
올려주신 plot1(rate)로하면 이상한 선만 나옵니다.
첫번째는 제가 수정한 수식이고, 두번째가 관리자분께서 올리신 수식입니다.
input : P(12);
var : cnt(0),count(0),rate(0),txt(0),spc(" ");
Array : MC[20](0);
if date > date[1]+30 Then
{
for cnt = 1 to 19
{
MC[cnt] = MC[cnt-1][1];
}
}
MC[0] = C;
if MC[P] > 0 then
{
count = 0;
for cnt = 0 to P-1
{
if MC[cnt] > MC[cnt+1] Then
count = count+1;
}
rate = (count/p)*100;
}
if CrossUp(close,DayOpen) Then{
Text_SetStyle(txt, 1,1);
txt = Text_New(sDate,sTime,C,spc + numtostr(rate,0) + "%");
Text_SetColor(txt,BLACK);
Text_SetStyle(txt,1,1);
}
////////////////////////////////////////////////////////
input : P(12);
var : cnt(0),count(0),rate(0);
Array : MC[20](0);
if date > date[1]+30 Then
{
      for cnt = 1 to 19
      {
          MC[cnt] = MC[cnt-1][1];
      }
}
MC[0] = C;
if MC[P] > 0 then
{
    count = 0;
    for cnt = 0 to P-1
    {
          if MC[cnt] > MC[cnt+1] Then
                count = count+1;    
    }
    
    rate = count/P*100;
    plot1(rate);
}
2번째 질문////
m1= if((c-c(1)) > 0,1,0) ;
m2= if((c-c(2)) > 0,1,0) ;
m3= if((c-c(3)) > 0,1,0) ;
m4= if((c-c(4)) > 0,1,0) ;
m5= if((c-c(5)) > 0,1,0) ;
m6= if((c-c(6)) > 0,1,0) ;
m7= if((c-c(7)) > 0,1,0) ;
m8= if((c-c(8)) > 0,1,0) ;
m9= if((c-c(9)) > 0,1,0) ;
m10= if((c-c(10)) > 0,1,0) ;
m11= if((c-c(11)) > 0,1,0) ;
m12= if((c-c(12)) > 0,1,0) ;
moment_score= (m1+m2+m3+m4+m5+m6+m7+m8+m9+m10+m11+m12)/12 ;
키움증권 수식입니다. data2(월봉차트)에 적용하여
모멘텀 스코어를 숫자로 표시하고 싶습니다.
2018-05-15
257
글번호 118911
답변완료
부탁 드립니다
@@@ 1번으로 검색되는 종목중에서 2번 당일 매수신호 발생 종목 또는
2번 3번 식을 동시에 만족 하는
종목 검색식으로 부탁드립니다
1번 종목검색
var1 = ma(C,5);
var2 = ma(C,10);
var3 = ma(c,20);
if m >= 1000000 and
C >= O*1.05 and C < O*1.30 and
var1 > var2 and var2 > var3 Then
find(1);
2번 시스탬
input : 기간(0.4),수치(10);
var : aa(0);
aa=100*( (ma( (C+H+L)/3,20)+2* std((C+H+L)/3,20))
-(ma((C+H+L)/3,20)-2*Std((C+H+L)/3,20))) / ma((C+H+L)/3,20);
if CrossUp(c,highest(H[1],수치)) and aa > 기간 Then
buy("b");
if MarketPosition == 1 and Crossdown(c,lowest(L[1], 수치)) Then
exitlong("bx");
if Crossdown(c,lowest(L[1], 수치)) Then
sell("s");
if MarketPosition == -1 and CrossUp(c,highest(H[1],수치)) Then
ExitShort("sx");
3번 검색
input : abc(1.05);
if C > dayopen*abc and ma(V,1) > 1000000 Then
plot1(L,"검색");
@@ 1번 검색으로 검색되는 종목중에서 2번 시스템 매수신발생종목
또는 2번 3번 동시에 만족하는 종목 검색식 으로 부탁드립니다 @@
2018-05-15
233
글번호 118905
답변완료
검토부탁드려요
만들어주신 수식을가지고
종목검색을 해보고 싶은데 어떻게 실행해야하는지
잘모르겠습니다.
나름대로 해봤는데 검색되는 종목이 안나오네요 ㅠㅠ
INPUT : LENGTH(20);
VAR : TCHAN(0), BCHAN(0);
TCHAN = HIGHEST(HIGH, LENGTH)[1];
BCHAN = LOWEST(LOW, LENGTH)[1];
if C > TCHAN Then
find(1);
2018-05-15
181
글번호 118902
답변완료
수식 부탁드립니다.
수식 추가 부탁드립니다.
매수 진입 후
종가가 200선대비 n(50)틱이상 크게되는 ●(빨간색)이 나타나기 전에
200선 상향돌파 되는 ■(빨간색)이 3번(A번)이상 나타나면 매수포지션 청산
매도(반대)
종가가 200선대비 n(50)틱이상 작게되는 ●(파란색)이 나타나기 전에
200선 하향돌파 되는 ■(파란색)이 3번(A번)이상 나타나면 매도포지션 청산
input : n(50);
var : t(0),t1(0),tx(0),tl(0);
var1 = ma(c,20);
var2 = ma(C,200);
#200선 상향돌파
if Crossup(C,var2) Then
{
#t는 1
t = 1;
#이전구간(하향이탈구간) t값은 t1에 저장
t1 = t[1];
#■출력
tx = Text_New(sdate,stime,H+PriceScale,"■");
Text_SetStyle(tx,2,2);
Text_SetColor(tx,RED);
#매수주문을 구간에 한번하기 위한 변수
Condition1 = false;
}
#200선 하향이탈
if CrossDown(C,var2) Then
{
#t는 -1
t = -1;
#이전구간(상향돌파구간) t값은 t1에 저장
t1 = t[1];
#■출력
tx = Text_New(sdate,stime,L-PriceScale,"■");
Text_SetStyle(tx,2,2);
Text_SetColor(tx,BLUE);
#매도주문을 구간에 한번하기 위한 변수
Condition2 = false;
}
#t가 1일때 종가가 200선대비 n틱이상 크게되면
if t == 1 and c > var2+PriceScale*n Then
{
#t는 2로 변경
t = 2;
#●출력
tx = Text_New(sdate,stime,H+PriceScale,"●"+NumToStr(C,2));
Text_SetStyle(tx,2,2);
Text_SetColor(tx,RED);
}
#t가 -1일때 종가가 200선대비 n틱이상 작게되면
if t == -1 and c < var2-PriceScale*n Then{
#t는 -2로 변경
t = -2;
#●출력
tx = Text_New(sdate,stime,L-PriceScale,"●"+NumToStr(C,2));
Text_SetStyle(tx,2,2);
Text_SetColor(tx,BLUE);
}
# 200선 상향돌파하고 직전구간(하향이탈구간) t가 -2까지 기록했으면
if crossup(t,0) and t1 <= -2 Then
{
#★출력
tx = Text_New(sdate,stime,H+PriceScale*3,"★");
Text_SetStyle(tx,2,2);
Text_SetColor(tx,RED);
}
# 200선 하향이탈하고 직전구간(상향돌파구간) t가 2까지 기록했으면
if CrossDown(t,0) and t1 >= 2 Then
{
#★출력
tx = Text_New(sdate,stime,L-PriceScale*3,"★");
Text_SetStyle(tx,2,2);
Text_SetColor(tx,BLUE);
}
#200선 상향돌파한 구간이고
#직전 햐향이탈한 구간은 t는 -2까지 기록했고
#현재10선이 200선보다 크면 매수
if Condition1 == false and t > 0 and t1 <= -2 and var1 > var2 Then{
Condition1 = true;
buy();
}
#200선 하향이탈한 구간이고
#직전구간(상향돌파구간)애서 t는 2까지 기록했고
#현재10선이 200선보다 작으면 매도
if Condition2 == false and t < 0 and t1 >= 2 and var1 < var2 Then{
Condition2 = true;
sell();
}
2018-05-15
184
글번호 118901
답변완료
수식 추가
아래는 선물에 사용하는 buy 수식입니다.
손절,익절,trailing stop이 시스템설정창에 있지만
시뮬레이션을 위해 수식을 input에 추가하고 싶습니다.
"손절,익절,최대수익대비하락은 설정기준이 %인지 pt인지 틱인지에 따라 수식이 다릅니다"
위와 같은 이유가 있으므로,
아래 수식에 대해 설정기준을 pt와 틱 2가지로 구분하여
손절,익절,trailing stop 수식을 input에 추가하여 주시기 바랍니다.
********************************************************************************
input : 진입시간(100000),진입제한시간(120000),트레이드종료시간(150000);
Inputs: DMILen(14), Consec(3), MinDiff(0);
Var : DMIDiff(0);
var : Tcond(false);
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) Then
Tcond = true;
if (sdate != sdate[1] and stime >= 진입제한시간) or
(sdate == sdate[1] and stime >= 진입제한시간 and stime[1] < 진입제한시간) Then
Tcond = false;
if (sdate != sdate[1] and stime >= 트레이드종료시간) or
(sdate == sdate[1] and stime >= 트레이드종료시간 and stime[1] < 트레이드종료시간) Then
exitlong();
DMIDiff = DIPlus(DMILen) - DIMinus(DMILen);
If DMIDiff[Consec] > 0 and Tcond == true Then Begin
If DMIDiff >= MinDiff AND CountIF(DMIDiff > DMIDiff[1], Consec) == Consec Then
Buy ("DMI");
End;
2018-05-15
192
글번호 118900
답변완료
안녕하세요.
안녕하세요...
수고 많으십니다........
아래 수식에서 ......
그림과 같이 10단위로 틱수를 넣어 주셨으면 합니다.
시스템식으로 안되면 지표식으로도 부탁드립니다.
감사합니다.... 수고 하세요....
Var : 기준선(0), 전환선(0), 선행스팬1(0), 선행스팬2(0);
var : mav(0);
전환선 = (Highest(c, 1) + Lowest(c, 1)) / 2;
기준선 = (Highest(c, 26) + Lowest(c, 26)) / 2;
선행스팬1 = (전환선[25] + 기준선[25]) / 2 ;
선행스팬2 = (Highest(c, 52)[25] + Lowest(c, 52)[25]) / 2;
mav = ma(C,5);
if crossup(mav,선행스팬1) Then
buy();
if CrossDown(mav,선행스팬1) Then
sell();
2018-05-15
219
글번호 118899
답변완료
부탁드립니다.
- 1분챠트에서 종가가 60일 이동평균선을 넘고, 동시에 5분챠트에서 종가가 40일 이동평균선을 넘을 때 매수하고, 그 반대이면 매도하라는 시스템식을 부탁드립니다. 고맙습니다.
2018-05-14
177
글번호 118898
답변완료
이격도부탁합니다
안녕하세요 관리자님
예전에 만들어주신 아래의 선에 대한 이격도를 만들고 싶습니다
-아래-
if Bdate != Bdate[1] Then{
var1 = 0;
var2 = 0;
var3 = 0;
var4 = 0;
var11 = var1[1];
var21 = var2[1];
var31 = var3[1];
var41 = var4[1];
}
var1 = var1+(H-dayopen);
var2 = var2+(C-dayopen);
var3 = var3+(L-dayopen);
var4 = var4+1;
if var41 > 0 then{
plot1((var11/var41)+dayopen,"고가");
plot2((var21/var41)+dayopen,"종가");
plot3((var31/var41)+dayopen,"저가");
}
2018-05-14
193
글번호 118897