커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7828
글번호 230811
답변완료
다시 문의드립니다.
아래 수식을 적용해 보니 청산조건에 맞는 청산이 이루어지지 않고
진입과 동시에 청산이 됩니다.
어디가 잘못되었는지 알려주시면 감사하겠습니다.
- 청산조건 -
현재가 대비 누적포지션 총이익이 투자액 대비 30% 일 경우 목표이익 청산
즉, 개별포지션 목표이익이 30% 가 아니라 누적포지션 진입 평균가 대비 현재가가
30% 이상 상승시 목표이익
- 수 식 -
input : account(10000000);
if date > date[1]+30 then
var1 = 1;
if dayofweek(sdate) < dayofweek(sdate)[1] then{
var1 = var1+1;
}
if var1 == 2 or var1 == 4 then{
if sdate >= 20000101 and dayofweek(sdate) == 4 then{
buy("매수", onclose, def, int(ACCOUNT/C)/10*10);
}
}
if C >= AvgEntryPrice()*1.3 then
exitlong();
2006-12-28
842
글번호 11594
회원 님에 의해서 삭제되었습니다.
2006-12-28
87
글번호 11593
답변완료
문의드립니다
안녕하세요,
예를 들어서 다음과 같은 수식이 있을 때,
if Crossup(C,ma(C,20)) then
buy("매수");
if C<entryprice() then
exitlong("손절매");
if Crossdown(C,ma(C,20)) then
exitlong("청산");
당일청산에서 손절매가 발생하면 진입을 금지하는 수식을 알고 싶습니다.
답변 부탁드립니다.
그럼, 수고하세요.
2006-12-28
794
글번호 11589
답변완료
문의드립니다
안녕하세요,
당일 매매횟수를 1회로 제한하는 수식을 다음과 같이 만들었습니다.
input : Number(1);
var : cnt(0);
If date[1] != date Then
cnt=0;
if Crossup(C,ma(C,5)) then
buy("매수");
cnt=cnt+1;
if Crossdown(C,ma(C,5)) then
exitlong("청산");
위와 같이 만들어서 적용해보았더니 전혀 횟수가 제한되지 않네요.
어떻게 변경해야 할까요?
답변 부탁드립니다.
그럼, 수고하세요.
2006-12-28
658
글번호 11588
회원 님에 의해서 삭제되었습니다.
2006-12-28
99
글번호 11587
답변완료
매수와매도청산, 매도와 매수청산을 같이하려고 합니다.
####1번 시스템
if crossup(value2, value1) && pos != 1 then{
buy ("매수", atmarket);
buyval = C ;
pos = 1 ; }
if crossdown(value2, value1) then {
exitlong ("매수청산", atmarket) ;
pos = 0 ; }
###2번 시스템
if crossdown(value2, value1) && pos != 1 then{
sell ("매도", atmarket) ;
buyval = C ;
pos = 1 ; }
if crossup(value2, value1) then {
exitshort ("매도청산", atmarket) ;
pos = 0 ; }
setstoploss (k) ;
이 두 시스템을
###3번 시스템
if crossup(value2, value1) && pos != 1 then{
buy ("매수", atmarket);
exitshort ("매도청산", atmarket) ;
buyval = C ;
pos = 1 ;
}
if crossdown(value2, value1) && pos != 1 then{
sell ("매도", atmarket) ;
exitlong ("매수청산", atmarket) ;
buyval = C ;
pos = 0 ;
}
setstoploss (k) ;
질문 1 >>
이렇게 하나의 조건에 의해 매수인 동시에 매도청산이 일어나고
하나의 조건으로 매도와 매수청산이 같이 되게 하나로 만들었는데
위와 같은 식이 맞는 식인가요?
질문 2>>
만약 틀리다면 crossup일때 매수와 매도청산이 같이 일어나고
crossdown 일때 매도와 매수청산이 같이 일어나는 식좀 알려주세요.
그리고 또하나 ###시스템 4번이라고 이름을 붙이겠습니다.
if crossup(value2, value1) && pos != 1 then{
buy ("매수", atmarket);
buyval = C ;
pos = 1 ; }
if crossdown(value2, value1) then {
exitlong ("매수청산", atmarket) ;
pos = 0 ; }
if crossdown(value2, value1) && pos != 1 then{
sell ("매도", atmarket) ;
buyval = C ;
pos = 1 ; }
if crossup(value2, value1) then {
exitshort ("매도청산", atmarket) ;
pos = 0 ; }
setstoploss (k) ;
질문 3 >>
이 식이 위에 있는 식과 같은건가요?
다르면 어느면에서 다른지 설명좀 해주세요.
질문 4 >>
그리고 맨 위에 있는 1번 2번 시스템을 시스템 합성 관리자로 돌린 값이###시스템 4번이랑 값이 다르거든요? 변수의 값이랑 다 똑같이 했는데두요.
왜 그렇게 되는지. 설명좀 해주세요. 왜 그렇게 다른지..
알려주세요~
2006-12-28
871
글번호 11586
답변완료
수식문의 드립니다.
안녕하세요?
아래의 수식구현이 가능한가 해서 문의드립니다.
1. 진입
삼성전자 60분봉 2000년 1월 부터 2006년 12월 현재까지
매월 둘째주, 넷째주 목요일 14:00에 1천만원씩 매수
(10주미만 단주거래가 가능한 것으로 가정)
예를들어 2000년 1월 2째주 목요일 14:00 삼성전자 가격이 22만원 이였다고
가정하면 45주 매수(10,000,000원/220,000 = 45.45) 등
2. 청산
현재가 대비 누적포지션 총이익이 투자액 대비 30% 일 경우 목표이익 청산
즉, 개별포지션 목표이익이 30% 가 아니라 누적포지션 진입 평균가 대비 현재가가
30% 이상 상승시 목표이익
3. 재진입 및 청산
청산시 계속하여 매월 둘째, 넷째주 목요일 14:00에 1천만원씩 매수 및
평균가 대비 목표이익 청산 반복
2006-12-27
999
글번호 11584
답변완료
문의드립니다.
아래 5531에 대한 답변 감사드립니다만,
제가 원하는 신호가 안 나와 다시 문의드리게 되었습니다.
본 홈페이지에 게시된 아래의 분할매매 예제수식에
다음의 매매수량 증가 조건을 추가하여 주시면 감사하겠습니다.
아울러 피라미딩 설정하여 분할매매 진입/청산시 진입 순서대로
청산이 되는데 진입의 역순으로 즉, 가장 나중(최근)에 진입한 포지션부터
최초진입 순으로 청산되는게 가능한지 궁금하구요, 가능하다면
아래의 분할매매 예제수식에 삽입하여 주시면 감사하겠습니다.
- 다 음 -
최초1, 최초2 를 제외한 매수진입시 연결선물계약 2계약, 3계약 등 1계약씩
더하여 진입하되 최대 진입계약수는 10계약으로 제한, 즉 진입횟수는 10회, 11회,
12회..... 등 제한없이 진입가능하나 진입계약수만 11회도 10계약, 12회도 10계약
등으로 제한
- 아 래 -
input : 기준수량(10); //분할매매 기준수량
input : 반전매수폭(20), 반전매도폭(20); //포지션반전폭
input : 매수폭(5); //직전매수가보다 n%하락시 매수
input : 매도폭(5); //직전매수가보다 n%상승시 매도
input : 거래개시일(20010101); //(20010101);
var : 첫거래(1);
var : 직전매수가(0), 직전매도가(0);
var : N_직전매수가(0), N_직전매도가(0);
var : dbg_flag(0), chk_price(0);
직전매수가 = N_직전매수가;
직전매도가 = N_직전매도가;
if 거래개시일 < sdate then { ###############################
if 첫거래 then {
if CrossDown(ma(C,20), ma(C,60)) then {
buy("최초", OnClose, DEF, 기준수량);
N_직전매수가 = C;//최초거래가;
첫거래 = 0;
}
}
else if CurrentEntries() <= 20 then {
if 직전매수가 == 0 then {
// 직전 매도거래 일 경우, 매수반전가격 이하로 하락할 경우
chk_price = 직전매도가*(1-반전매수폭/100);
if c < chk_price and c[1] >= chk_price then {
buy("매수1", OnClose, DEF, 기준수량);
N_직전매수가 = C; //직전매도가*(1-반전매수폭/100);
N_직전매도가 = 0;
}
}
else {
chk_price = 직전매수가*(1-매수폭/100);
if c < chk_price and c[1] >= chk_price then {
buy("매수2", OnClose, DEF, 기준수량);
N_직전매수가 = C; //직전매수가*(1-매수폭/100);
N_직전매도가 = 0;
}
}
}
// 청산처리 ....................................................................
if MarketPosition() == 1 then {
if 직전매도가 == 0 then {
// 직전 매수거래 일 경우, 매도반전가격 이상으로 상승할 경우
chk_price = 직전매수가*(1+반전매도폭/100);
if c > chk_price and c[1] <= chk_price then {
exitlong("청산1", OnClose, DEF, "", 기준수량, 1);
N_직전매도가 = C; //직전매수가*(1+반전매도폭/100);
N_직전매수가 = 0;
}
}
else {
chk_price = 직전매도가*(1+매도폭/100);
if c > chk_price and c[1] <= chk_price then {
exitlong("청산2", OnClose, DEF, "", 기준수량, 1);
N_직전매도가 = C; //직전매도가*(1+매도폭/100);
N_직전매수가 = 0;
}
}
}
} ###############################
if marketposition(0) == 0 and 첫거래 == 0 and CrossDown(ma(C,20), ma(C,60)) then {
buy("최초2", OnClose, DEF, 기준수량);
N_직전매수가 = C;//최초거래가;
N_직전매도가 = 0;
}
2006-12-27
853
글번호 11580
회원 님에 의해서 삭제되었습니다.
2006-12-27
103
글번호 11579