커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1513
글번호 230811
답변완료
수식문의
수고하십니다.
(문의1) 아래수식을 예스수식으로 변환하여 종목검색을 하고 싶습니다.
(문의2) Tm1(60)<Tm1 && Tm2(10)<Tm2 && Tm3(30)<Tm3 && #Tm1, Tm2, Tm3가
우상향 조건으로 수정요청
(문의3) 검색된 종목이 재검색시에도 계속유지될 수 있도록 부탁드립니다
Stos1 = StochasticsSlow(P1,P2); #P1=5, P2=3
Stos2 = Eavg(StochasticsSlow(P1,P2),P3); #P1=5, P2=3, P3=3
Tm1 = Eavg(Eavg(Eavg(C,P5),P5),P5);
Tm2 = Eavg(Eavg(Eavg(C,P10),P10),P10);
Tm3 = Eavg(Eavg(Eavg(C,P30),P30),P30);
Disp = Ma(C,P5)/Ma(C,P10)*100;
CrossUp(Stos1,Stos2) &&
(C(1)<Tm1(1) or C(1)<Tm2(1)) &&
O>Tm1 && O>Tm2 && C>O &&
Tm1(60)<Tm1 && Tm2(10)<Tm2 && Tm3(30)<Tm3 && #Tm1, Tm2, Tm3가 우상향 조건으로 수정요청
(Tm1>=Tm2 or Tm1<=Tm2) &&
Tm1>Tm3 && Tm2>Tm3 &&
DpUp>=Disp && Disp>=DpDown #Disp가 110 ~ 95사이에 위치함
2023-08-26
1241
글번호 171863
답변완료
문의드립니다.
수고 많으십니다.
청산식에 대한 문의입니다.
매수진입후 50틱 이상 ★수익이 난 상태에서★ 파라볼릭이 음전환했을 때만 청산하고 싶습니다.
이때 매수진입후 50틱이상 수익을 1번이라도 나게되면 그뒤로 수익이 줄어 20틱 수익밖에 나지않았다해도 50틱 이상을 한번이상 찍었다면 계속 50틱 이상을 유지하거나 50틱 이하로 빠진 것은 상환없이 이후 파라볼릭이 음전환되면 즉시 청산되길 원합니다.
아래처럼 나름 만들어봤으나 잘 안됩니다.
수정 부탁드리며 공부할 수 있도록 간단한 주석도 부탁드립니다~
(var7은 파라볼릭입니다)
var : T1(0);
if C > EntryPrice+PriceScale*50 Then
T1 == 1;
if C < EntryPrice-PriceScale*50 Then
T1 == -1;
if T1 == -1 or (T1 == 1 and C < Var7) Then
ExitLong("매수청산");
if T1 == 1 or (T1 == -1 and C > Var7) Then
ExitShort("매도청산");
미리 감사드립니다~
2023-08-28
1361
글번호 171862
답변완료
여러개 중에 먼저 조건이 달성하는 것만 진입하는 수식을 작성하고 싶습니다.
항상 도움에 감사드립니다.
아래의 코드를 실행하면
첫번째 이미지와 같은 지표가 그려지는데요.
------------------------------------------
input : ntime(140800), xtime(150600);
input : line_num(5), tick_size(12);
var : Tcond(False), oo(0), k(0), j(0);
array : flag[3](0);
array : up[2](0), middle[2](0), down[2](0);
array : up_TL[2](0), middle_TL[2](0), down_TL[2](0);
array : up_cnt[2](0), middle_cnt[2](0), down_cnt[2](0);
array : up_text[2](0), middle_text[2](0), down_text[2](0);
if (sdate != sdate[1] and stime >= xtime) or
(sdate == sdate[1] and stime >= xtime and stime[1] < xtime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= ntime) or
(sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then
{
// 변수들 초기화 해주기
Tcond = true;
oo = o;
For k=1 to 3
{
flag[k] = 0;
}
For j=1 to 2
{
up[k] = 0;
middle[k] = 0;
down[k] = 0;
up_cnt[k] = 0;
middle_cnt[k] = 0;
down_cnt[k] = 0;
}
up[2] = oo + PriceScale*30;
up[1] = oo + PriceScale*20;
middle[2] = oo + PriceScale*10;
middle[1] = oo + PriceScale;
down[2] = oo - PriceScale*10;
down[1] = oo - PriceScale*20;
// 선그리기
up_TL[2] = TL_New(sDate,sTime,up[2],NextBarSdate,NextBarStime,up[2]); // 선긋기
up_TL[1] = TL_New(sDate,sTime,up[1],NextBarSdate,NextBarStime,up[1]); // 선긋기
middle_TL[2] = TL_New(sDate,sTime,middle[2],NextBarSdate,NextBarStime,middle[2]); // 선긋기
middle_TL[1] = TL_New(sDate,sTime,middle[1],NextBarSdate,NextBarStime,middle[1]); // 선긋기
down_TL[2] = TL_New(sDate,sTime,down[2],NextBarSdate,NextBarStime,down[2]); // 선긋기
down_TL[1] = TL_New(sDate,sTime,down[1],NextBarSdate,NextBarStime,down[1]); // 선긋기
// 조건문으로 터치 카운트 하기
// up
if H >= up[2] Then
{
flag[3] = 1;
up_cnt[2] = up_cnt[2] + 1;
}
if L <= up[1] Then
{
flag[3] = -1;
up_cnt[1] = up_cnt[1] + 1;
}
// middle
if H >= middle[2] Then
{
flag[2] = 1;
middle_cnt[2] = middle_cnt[2] + 1;
}
if L <= middle[1] Then
{
flag[2] = -1;
middle_cnt[1] = middle_cnt[1] + 1;
}
// down
if H >= down[2] Then
{
flag[1] = 1;
down_cnt[2] = down_cnt[2] + 1;
}
if L <= down[1] Then
{
flag[1] = -1;
down_cnt[1] = down_cnt[1] + 1;
}
// 터치 횟수 출력
up_text[2] = Text_New(NextBarSdate,NextBarStime,up[2],NumToStr(up_cnt[2],0));
up_text[1] = Text_New(NextBarSdate,NextBarStime,up[1],NumToStr(up_cnt[1],0));
middle_text[2] = Text_New(NextBarSdate,NextBarStime,middle[2],NumToStr(middle_cnt[2],0));
middle_text[1] = Text_New(NextBarSdate,NextBarStime,middle[1],NumToStr(middle_cnt[1],0));
down_text[2] = Text_New(NextBarSdate,NextBarStime,down[2],NumToStr(down_cnt[2],0));
down_text[1] = Text_New(NextBarSdate,NextBarStime,down[1],NumToStr(down_cnt[1],0));
}
Else
{
if Tcond == true Then
{
// up쪽 카운트 갱신하기
if flag[3] <= 0 and H >= up[2] and H[1] < up[2] Then
{
flag[3] = 1;
up_cnt[2] = up_cnt[2] + 1;
Text_SetString(up_text[2],NumToStr(up_cnt[2],0));
}
if flag[3] >= 0 and H >= up[1] and H[1] < up[1] Then
{
flag[3] = -1;
up_cnt[1] = up_cnt[1] + 1;
Text_SetString(up_text[1],NumToStr(up_cnt[1],0));
}
// middle쪽 카운트 갱신하기
if flag[2] <= 0 and H >= middle[2] and H[1] < middle[2] Then
{
flag[2] = 1;
middle_cnt[2] = middle_cnt[2] + 1;
Text_SetString(middle_text[2],NumToStr(middle_cnt[2],0));
}
if flag[2] >= 0 and H >= middle[1] and H[1] < middle[1] Then
{
flag[2] = -1;
middle_cnt[1] = middle_cnt[1] + 1;
Text_SetString(middle_text[1],NumToStr(middle_cnt[1],0));
}
// down쪽 카운트 갱신하기
if flag[1] <= 0 and H >= down[2] and H[1] < down[2] Then
{
flag[1] = 1;
down_cnt[2] = down_cnt[2] + 1;
Text_SetString(down_text[2],NumToStr(down_cnt[2],0));
}
if flag[1] >= 0 and H >= down[1] and H[1] < down[1] Then
{
flag[1] = -1;
down_cnt[1] = down_cnt[1] + 1;
Text_SetString(down_text[1],NumToStr(down_cnt[1],0));
}
// 선긋기 연장해줌
TL_SetEnd(up_TL[2],NextBarSdate,NextBarStime,up[2]); // 선 긋기 연장해줌
TL_SetEnd(up_TL[1],NextBarSdate,NextBarStime,up[1]); // 선 긋기 연장해줌
TL_SetColor(up_TL[2], Red);
TL_SetColor(up_TL[1], Red);
TL_SetEnd(middle_TL[2],NextBarSdate,NextBarStime,middle[2]); // 선 긋기 연장해줌
TL_SetEnd(middle_TL[1],NextBarSdate,NextBarStime,middle[1]); // 선 긋기 연장해줌
TL_SetColor(middle_TL[2], Black);
TL_SetColor(middle_TL[1], Black);
TL_SetEnd(down_TL[2],NextBarSdate,NextBarStime,down[2]); // 선 긋기 연장해줌
TL_SetEnd(down_TL[1],NextBarSdate,NextBarStime,down[1]); // 선 긋기 연장해줌
TL_SetColor(down_TL[2], Blue);
TL_SetColor(down_TL[1], Blue);
// 텍스트 출력 끝으로 몰아줌
Text_SetLocation(up_text[2],NextBarSdate,NextBarStime,up[2]);
Text_SetLocation(up_text[1],NextBarSdate,NextBarStime,up[1]);
Text_SetLocation(middle_text[2],NextBarSdate,NextBarStime,middle[2]);
Text_SetLocation(middle_text[1],NextBarSdate,NextBarStime,middle[1]);
Text_SetLocation(down_text[2],NextBarSdate,NextBarStime,down[2]);
Text_SetLocation(down_text[1],NextBarSdate,NextBarStime,down[1]);
}
}
--------------------------------------------------------------------------------
빨간색 박스권 그룹
검은색 박스권 그룹
파란색 박스권 그룹
이렇게 세개의 박스권 그룹이 있어서
가격이 각각의 박스권 사이를 몇 번 터치하는지
출력이 되게 만들었습니다.
이미지를 보면
검은색 박스권 사이에서의 터치가 6번 먼저 도달했는데요.
이럴경우
검은색선의 상단을 돌파시 매수 진입하고,
검은색선의 하단을 이탈하면 매도 진입하는 매매식을 만들고 싶습니다.
검은색선 하단쪽에서 먼저 매도를 진입한다면 손절은 상단 가격이고
검은색선 상단쪽에서 먼저 매수를 진입한다면 손절은 하단 가격으로 만들고,
익절은 상단과 하단 폭 x 3배 입니다.
그리고 빨간색 박스권 그룹, 파란색 박스권 그룹에서는 진입 기능이 정지가 되어야 합니다.
(이후에 빨간색 박스권 터치가 6번이 되어도 진입 안됨)
마찬가지로, 빨간색선 박스권 그룹에서 먼저 6번 터치가 발생한다면
빨간색선의 상단을 돌파시 매수 진입하고,
빨간색선의 하단을 이탈하면 매도 진입합니다.
빨간색선 하단쪽에서 먼저 매도를 진입한다면 손절은 상단 가격이고
빨간색선 상단쪽에서 먼저 매수를 진입한다면 손절은 하단 가격으로 만들고,
익절은 상단과 하단 폭 x 3배 입니다.
그리고 검은색 박스권 그룹, 파란색 박스권 그룹에서는 진입 기능이 정지가 되어야 합니다.
(이후에 검은색 박스권 터치가 6번이 되어도 진입 안됨)
마찬가지로, 파란색선 박스권 그룹에서 먼저 6번 터치가 발생한다면
위와 같은 조건으로 매매가 되도록 하고 싶습니다.
수식 부탁드립니다.
2023-08-25
1208
글번호 171861
고성 님에 의해서 삭제되었습니다.
2023-08-27
42
글번호 171859
이만스닥 님에 의해서 삭제되었습니다.
2023-08-25
0
글번호 171856
2wnwn 님에 의해서 삭제되었습니다.
2023-08-25
1
글번호 171854
답변완료
수식문의 드립니다
1. 20선과 60선 골든크로스 이후에 5선과 20선 데드크로스 이후
주가와 5선 골든크로스 발생시 매수신호
2. 20선과 60선 데드크로스 이후에 5선과 20선 골든크로스 이후
주가와 5선 데드크로스 발생시 매도신호
부탁드립니다
2023-08-25
1066
글번호 171849
답변완료
안녕하세요 간단한 지표식 부탁드립니다
1분봉에서 일봉 기준
지수이평선 5,10,20,60,120일선
을 만들어주시면 감사하겠습니다
제가 대략 타임프레임을 늘려 적용해
봤는데 어떨땐 맞는거같기도한데
어떨때는 틀리더라구요
그래서 부탁드려봅니다 감사합니다!
2023-08-25
1495
글번호 171846
답변완료
swing
안녕하세요?
SwingHigh(1,H,3,3,20)를 사용해 보려는데 어렵네요
SL1, SH1 : 진입으로부터 0~5개사이에 발생
SL2, SH2 : 진입으로부터 6~20개사이에 발생 하는 조건 추가 부탁드립니다.
안녕하세요
예스스탁입니다.
input : left(3),right(3);
var : sl1(0),sl2(0),sh1(0),sh2(0);
if SwingLow(1,L,Left,right,Left+right+1) != -1 Then
{
sl1 = l[right];
sl2 = sl1[1];
#최근저점이 전저점보다 크면 매수
if SL1 > SL2 and SL2 > 0 Then
buy();
}
if SwingHigh(1,H,Left,right,Left+right+1) != -1 Then
{
sh1 = h[right];
sh2 = sh1[1];
#최근고점이 전고점보다 작으면 매도
if SH1 < SH2 and SH2 > 0 Then
sell();
}
if MarketPosition == 1 Then
ExitLong("bx",AtStop,SL2[BarsSinceEntry]);
if MarketPosition == -1 Then
ExitShort("sx",AtStop,SH2[BarsSinceEntry]);
2023-08-25
1154
글번호 171845