커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7366
글번호 230811
답변완료
웰스멘토 관련 문의
안녕하세요 웰스멘토 관련해서 식을 하나 짜려하는데 도움을 좀 주셨음 합니다
1.종목시장검색을 통해 1001(PBR)저평가순으로 상위 10종목 추출
2.우선주제외, KP200포함종목, 시장경보, ISSUE 등을 감안하여 매수종목군 작성
3.하루 최대 10종목까지 매수한다
4.예스랭귀지식인
Input : Period1(20), Period2(60), LPercent(103), SPercent(97) ,ZPercent(100);
Var : value(0);
Value1 = Disparity(Period1) ;
Value2 = Disparity(Period2) ;
# 상승장일때 매수/매수청산
If value2 >= LPercent Then
{
If CrossUp(Value1,ZPercent) Then Buy("상승장매수");
If Value2 < LPercent and CrossDown(Value1,ZPercent) Then ExitLong("상승장매수청산");
}
# 하락장일때 매도/매도청산
If Value2 <= SPercent then
{
If CrossDown(Value1,ZPercent) Then Sell("하락장매도");
If Value2 > SPercent and CrossUp(Value1,ZPercent) Then ExitShort("하락장매도청산");
}
# 횡보장 매수/매도
If Value2 < LPercent and Value2 > SPercent Then
{
If CrossUp(Value1,ZPercent) Then Sell("횡보매도");
If CrossDown(Value1,ZPercent) Then Buy("횡보매수");
}
를 이용하여 매수,매도를 한다
위 내용을 웰스멘토 식으로 짜주시면 감사합니다
2016-12-13
150
글번호 104924
답변완료
재문의 드립니다
안녕하세요. 바쁜 하루 즐겁게 시작하세요~
전에 수식중에 아래의 경우 이해가 안가서 문의드립니다. 제 생각이 맞는지도 알고 싶구요.
1. 본절설정
if HH >= EntryPrice+PriceScale*10 and HH < EntryPrice+PriceScale*15 Then
ExitLong("매수본절",AtStop,EntryPrice);}
위 구문에서 ExitLong 으로 매수청산주문 을 들어간거 같은데요, 제가 구현하려는건 청산을 해버리는게 아니라 수익이 10틱이 되는 순간 -15틱으로 설정돼 있던 손절을 끌어올려서 매수진입가와 같게 해버린다는 것이고 매수포지션은 계속 살아있어서 만일 수익이 25틱에 다다르면 익절청산 되고 수익이 떨어져서 밑으로 계속 내려가면 이젠 손절가=매수진입가 가 되어있으므로 매수진입가에서 청산돼 버리는 겁니다.
2. 수식질문
var : MACDV(0),mav1(0),mav2(0),mav3(0),mav4(0),mav5(0),HH(0),LL(0),RR(0);
위 구문에서 RR(0) 는 수식 중에 안보이는데 어떤 기능인지 궁금합니다.
3. 기타 질문
MACD 관련 수식 표현에서
기준선 위에 있으면 MACD > 0 이라는 표현이 맞나요?
MACDV = MACD(short,long);
MACDS = ema(MACDv,sig);
에서 골든크로스 한다면 CrossUp(MACDV,MACDS) 라는 표현을 사용하는것 같은데요,
만일 이미 골든크로스 교차점을 지나서 1개봉 정도 갔다면 아래와 같은 표현을 사용해야 하나요?
MACDV > MACDS
골든크로스 수식을 써주면 정확히 크로스 하는 시점만을 찾는것 같아서 그렇습니다.
if MarketPosition == 1 Then
이런 표현은 "현재 매수포지션이 있다면" 이라는 의미 맞나요?
if MarketPosition <= 0 and , if MarketPosition >= 0 and
그런데 이런 표현의 의미는 무엇인가요?
모르는게 많습니다. 가르침 부탁드립니다.
수고하세요 ^^
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 문의드립니다
> 안녕하세요
예스스탁입니다.
청산 25틱으로 작성해 드립니다.
input : Short(12),Long(25),P1(5),P2(20),P3(30),P4(60),P5(120);
var : MACDV(0),mav1(0),mav2(0),mav3(0),mav4(0),mav5(0),HH(0),LL(0),RR(0);
MACDV = MACD(short,long);
mav1 = ma(C,P1);
mav2 = ma(C,P2);
mav3 = ma(C,P3);
mav4 = ma(C,P4);
mav5 = ma(C,P5);
if MarketPosition <= 0 and
MACDV > 0 and
mav1 > mav2 and mav2 > mav3 and mav3 > mav4 and mav4 > mav5 and
countif(mav2 > mav2[1],5) == 5 and
C < mav1 and c < mav2 Then{
buy();
PlaySound("a.wav~~~~~~~~");
}
if MarketPosition >= 0 and
MACDV < 0 and
mav1 < mav2 and mav2 < mav3 and mav3 < mav4 and mav4 < mav5 and
countif(mav2 < mav2[1],5) == 5 and
C > mav1 and c > mav2 Then{
sell();
PlaySound("b.wav~~~~~~~~");
}
if MarketPosition == 1 Then{
exitlong("매수익절",atlimit,EntryPrice+PriceScale*25);
HH = highest(H,BarsSinceEntry);
if HH < EntryPrice+PriceScale*10 Then
ExitLong("매수손절",AtStop,EntryPrice-PriceScale*15);
if HH >= EntryPrice+PriceScale*10 and HH < EntryPrice+PriceScale*15 Then
ExitLong("매수본절",AtStop,EntryPrice);}
if MarketPosition == -1 Then{
ExitShort("매도익절",atlimit,EntryPrice-PriceScale*25);
LL = Lowest(L,BarsSinceEntry);
if LL > EntryPrice-PriceScale*10 Then
ExitShort("매도손절",AtStop,EntryPrice+PriceScale*15);
if LL <= EntryPrice-PriceScale*10 and LL > EntryPrice-PriceScale*15 Then
ExitShort("매도본절",AtStop,EntryPrice);
}
즐거운 하루되세요
> 웹피 님이 쓴 글입니다.
> 제목 : 문의드립니다
> 오늘도 수고 많으십니다.
환경 : 이평선(5,20,30,60,120일선)
1.매수
(MACD가 기준선 아래서 골든크로스 또는 기준선 위에 있으며) and (이평선 정배열) and (20일선 우상향이 5개봉 이상 유지되고 있고) and (현재봉 시가가 5일선 and 20일선 밑에 있다) 일때 매수진입 및 a.wav 실행
2.매도
(MACD가 기준선 위에서 데드크로스 또는 기준선 아래에 있으며) and (이평선 역배열) and (20일선 우하향이 5개봉 이상 유지되고 있고) and (현재봉 시가가 5일선 and 20일선 위에 있다) 일때 매도진입 및 b.wav 실행
3.기타
.청산 100틱(트레일링스탑을 구현할수 없으면 청산 25틱)
.손절 15틱
.본절: 10틱이상 수익중이면 손절가를 진입가와 동일하게 변경
.트레일링스탑: 15틱이상 수익중이면 손절을 5틱에 걸고 10틱 단위로 트레일링스탑으로 손절값을 변경해준다. 손절값 변경시 마다 c.wav 실행
예>매수진입시 +15틱 수익시 +5틱 손절, +25틱 수익시 +15틱 손절, +35틱 수익시 +25틱 손절.....
.수익 틱수를 마지막 완료된 봉위에 출력이 가능하시면 부탁드립니다.
주말 즐겁게 보내세요 ^^
2016-12-13
156
글번호 104923
답변완료
수식 문의
일일이 수고해주심에 감사드립니다.
아래식은 당일 조건을 만족하는 종목을 검색하는 식인데
이식을 과거 몇일전 지정하는 날(P 일전)에만 만족하는 종목을 선택할 수 있도록
수정 부탁드립니다.
과거 몇일 전은 외부변수로 부탁드립니다.
input : 백이십선보정(50),Per(20), N(1), 이격1(70),이격2(130);
Var : Body(0),Highbody(0),Lowbody(0),value(0);
Body = Abs(C-O);
Highbody = MaxList(Open,Close);
Lowbody = MinList(Open,Close);
var1 = Disparity(60);
var2 = ma(c,5);
var4 = ma(c,20);
var6 = ma(c,60);
var7 = ma(c,120);
var8 = ma(v,60);
value2 = max(var2,var4,var6);
value3 = min(var2,var4,var6);
value1 = 0;
if crossup(c,var2) Then
value1 = value1+1;
if crossup(c,var4) Then
value1 = value1+1;
if crossup(c,var6) Then
value1 = value1+1;
if crossup(c,var7) Then
value1 = value1+1;
if var1[1] >= 이격1 and var1[1] <= 이격2 and
C > var2 and
value1 >= 1 and
body >= C[1]*0.05 and Body <= C[1]*0.20 and
H-Highbody >= body*0.0 and H-highbody <= Body*5 and
Lowbody-L >= body*0.00 and lowbody-L <= Body*5 and
C > O and
var7[1]*(1+백이십선보정/1000) > var7[2] and
CountIF(value2<= value3*(1+per/100),N) == N Then
find(1);
2016-12-12
126
글번호 104919
리턴 님에 의해서 삭제되었습니다.
2016-12-12
0
글번호 104918
마코 님에 의해서 삭제되었습니다.
2016-12-12
0
글번호 104916
답변완료
지표에 관한 질문입니다.
안녕하세요.
항상 수고가 많으십니다.
-------- 질문입니다 ----------------------------------------------
분봉에서
전일 20이평 종가값을 오늘 화면에 가로선으로 주욱 그리고 싶습니다.
다음과 같이 했더니 안됩니다.
if bdate != bdate[1] then
{
var1 = 0; // 변수-1 을 0으로 초기화
}
if bdate == bdate[1] then
{
var2 = ma(c, 20);
var3 = var2(1); <--- 전일 20 이평 종가를 var3 에 저장
}
plot1(var3, "전일 20 이평 종가값", blue);
--------------------------------------------------------------------
수정 부탁드립니다.
항상 하시는 일에 좋은 결실 거두시기를 바랍니다.
감사합니다.
2016-12-12
136
글번호 104911
답변완료
거래량 관련 매수 매도 수식 문의
안녕하세요. 다음 수식 문의드립니다.
- 이전 5개 봉 거래량 평균보다 최근 봉 거래량 200% 증가하고 양봉일때 매수
- 5이평선이 20이평선 밑으로 떨어질 때 매도
감사합니다.
2016-12-12
166
글번호 104905
답변완료
시간에 대한 var 입력
안녕하세요,
condition1 에 대해서 18:00 이후에 계약을 시작하라는 함수를 작성하였습니다.
if condition1 == true and (stime>=180000 or stime <= 050000) then buy();
여기서 180000와 050000에 대하여 아래와 같이 변형하였습니다.
var : starttime(180000)
if condition1 == true and (stime>=starttime or stime <= (starttime-130000)) then buy();
이렇게 하고 시스템을 돌려보니 위의 수식과 아래 수식의 결과 값이 다르게 나타납니다.
(starttime-130000) 에서 오류가 난것이 아닌가 추정하고 있는데 어떻게 수정하면 될까요?
감사합니다.
2016-12-12
121
글번호 104903
답변완료
시스템 매매 수식을 잘 못 쓴것 같은데 봐주십시요
안녕하세요.
아래와 같이 수식을 작성했는데 제 의도와 다르게 작동해서 질문드립니다.
vup1_high26 이라는 선이 있습니다.
가격이 상승하다가 이 선에 닿거나 돌파할 때 매도를 하는 식을 만들려고 합니다.
원하는 규칙
1. 한번 선을 돌파해 올라갔다 내려와 재상승한 경우는 매도를 하지 않습니다.
2. 돌파해 올라가는 것만 잡습니다.
3. 매일 정해진 시간에만 매매합니다.
제가 작성한 아래 식으로 돌려보면, 캡쳐2번과 같이 선을 한번 돌파한 뒤 하락했다가 재상승 해야지만이 매도주문이 들어갑니다.
캡쳐1번이 제가 원하는 그림인데 그럴 때는 전혀 매도주문이 안들어갑니다.
수식이 어느부분이 잘못되었을까요? 도움 부탁드립니다.
//변수 설정
var : vup1_high26(0), vup1_uflag1(0), vup1_tflag1(0);
input : profit(30), lose(40), entry_time(15);
//매일 변수 초기화 시키기
If Bdate!=Bdate[1] Then{
vup1_uflag1=0;}
//매매시간 지정
if sTime>101700 and sTime<=110000 Then{
vup1_tflag1=0;}
Else{
vup1_tflag1=1;}
//매매식
If H<vup1_high26 and vup1_uflag1==0 and vup1_tflag1==0 Then {
//선보다 작고, 전번 매매가 없고, 시간대 조건이 맞을 때
Sell("vup1_매도주문", AtLimit, vup1_high26-2); //2틱 선진입
SetStopLoss(lose, PointStop); //손절설정
SetStopProfittarget(profit, PointStop); //익절설정
vup1_uflag1=1; //다음번 매매 금지
}
If MarketPosition==-1 Then{ //진입 포지션이 있을 경우
If BarsSinceEntry>=entry_time Then{ //봉 15개 지났으면
If Abs(EntryPrice-C)<=10 and Abs(EntryPrice-C)>=0 Then{ //손익절 10틱 이하일때
ExitShort("vup1_본청", OnClose);} //그자리에서 청산
Else{
If Highest(H, entry_time)<EntryPrice Then{ //봉15개 고가가 진입가보다 작다면
SetStopLoss(Highest(H, entry_time)-EntryPrice, PointStop);}} //손절을 전고가-진입가로 변경
}
}
If Stime>=105500 and MarketPosition==-1 Then{ //만약 현재시간이 10시 55분이고 매도 포지션 들고있다면
ExitShort("vup1_시간손절", OnClose);} //그자리에서 청산
2016-12-12
161
글번호 104902