커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4651
글번호 230811
답변완료
함수수정요청(251, 이격)
안녕하세요?
함수수정요청드립니다.
아래는 당일 골든크로발생시 매수, 데드크로스발생시 매도한다 컨셉의 스크립트입니다.
스크립트에 이격도로 진입을 제어하고자 합니다.
그런데 목표수익 강제청산조건을 넣었을 경우
목표수익에 익절이 되고 익봉에서 진입조건이 유지되면 다시 신호가 발생됩니다.
익절이후 진입조건이 유지되어 신호가 생성되는 거 말고
최초에 골든크로스나 데드크로스가 발생되고 진입신호가 처음 발생될 경우에만 이격도(20이평선 98이하면 매도 신호 생성금지, 102이상이면 매수 신호 생성 금지)를 적용하고 싶습니다.
즉 이평선 교차 시점 이후에 처음에만 발생된 신호 지점에 이격을 적용하고 싶습니다.
------------------------------------------------------------------------------------
input : starttime(70000), xtime(60000);
var : tcond(false),cond1(false),cond2(false);
if stime == starttime or (stime > starttime and stime[1] < starttime) Then{
Tcond = true;
Condition1 = false;
Condition2 = false;
}
if stime == xtime or (stime > xtime and stime[1] < Xtime) Then{
Tcond = false;
}
var1 = ma(c,5);
var2 = ma(c,20);
cond1 = C > var1 and var1 > var2;
cond2 = C < var1 and var1 < var2;
if cond1 == true and cond1[1] == false then
Condition1 = true;
if cond2 == true and cond2[1] == false then
Condition2 = true;
if Tcond == true And
Condition1 == true and cond1 == true and
var1 > var1[1] and var2 > var2[1] Then
buy();
if Tcond == true And
Condition2 == true and Cond2 == true and
var1 < var1[1] and var2 < var2[1] Then
sell();
2016-04-08
211
글번호 96962
답변완료
함수수정요청(251호, sp bp)
안녕하세요?
아래 함수 수정요청드립니다.
아래는 당일 골든크로발생시 매수, 데드크로스발생시 매도한다 컨셉의 스크립트입니다.
buy 이후에 cond3 상태가 완성되면 익봉시가에 EixtLong(매수청산)를
sell 이후에 cond4 상태가 완성되면 익봉시가에 EixtShort(매도청산)를 하고 싶습니다.
cond3 = C < var2 and var1 > var2;
cond4 = C > var2 and var1 < var2;
------------------------------------------------------------------------------------
input : starttime(70000), xtime(60000);
var : tcond(false),cond1(false),cond2(false);
if stime == starttime or (stime > starttime and stime[1] < starttime) Then{
Tcond = true;
Condition1 = false;
Condition2 = false;
}
if stime == xtime or (stime > xtime and stime[1] < Xtime) Then{
Tcond = false;
}
var1 = ma(c,5);
var2 = ma(c,20);
cond1 = C > var1 and var1 > var2;
cond2 = C < var1 and var1 < var2;
if cond1 == true and cond1[1] == false then
Condition1 = true;
if cond2 == true and cond2[1] == false then
Condition2 = true;
if Tcond == true And
Condition1 == true and cond1 == true and
var1 > var1[1] and var2 > var2[1] Then
buy();
if Tcond == true And
Condition2 == true and Cond2 == true and
var1 < var1[1] and var2 < var2[1] Then
sell();
2016-04-08
178
글번호 96961
답변완료
시스템식 수정 부탁드립니다.
안녕하세요...
항상 수고가 많으시죠, 다음과 같이 시스템식 수정 부탁드립니다.
현재 시스템식은 그림1)과 같이 아래의 외부변수를 참고해 보면
- 각각의 매수비중 만큼 2분할매수 (매수위치1차, 매수위치2차)
- 각각의 매도비중 만큼 2분할매도 (매도위치1차, 매도위치2차)
- 그리고 한번에 손절(최종손절위치에서)하는 시스템식입니다.
## 현재의 외부변수 설정 ##
input : 전략시작일자(20160105), 전략시작시간(090000), 전략매수금액(1000);
input : 매수위치1차(1), 매수위치2차(2);
input : 매도위치1차(1.5), 매도위치2차(2);
input : 매수비중1차(50), 매수비중2차(50);
input : 매도비중1차(50), 매도비중2차(50);
input : 전략진입횟수(1);
input : 최종손절위치(3),최종익절위치(1);
input : Period(120);
현재의 시스템식에서는 한번에 손절하는 경우 리스크가 너무 커서
손절을 매수, 매도와 같이 2분할로 처리하고 싶습니다.
즉, 그림2)를 참고하여 아래와 같이 외부변수를 수정해 보면
## 수정될 외부변수 설정 ##
input : 전략시작일자(20160105), 전략시작시간(090000), 전략매수금액(1000);
input : 매수위치1차(1), 매수위치2차(2);
input : 매도위치1차(1.5), 매도위치2차(2);
input : 손절위치1차(3), 손절위치2차(4);
input : 매수비중1차(50), 매수비중2차(50);
input : 매도비중1차(50), 매도비중2차(50);
input : 손절비중1차(50), 손절비중2차(50);
input : 전략진입횟수(1);
input : 최종익절위치(1);
input : Period(120);
요약해 보면 손절위치1,2차와 손절비중1,2차가 추가되었고 최종손절위치가 삭제되었습니다.
위와 같이 외부변수를 참고하시어 시스템식 수정 부탁드립니다.
추가적으로 수정된 시스템식에서 그림3)과 같이
손절위치1차에서 1차손절(매수된 수량의 50%)이 되더라도 매도의 조건만 만족하면
1차손절되고 남은 수량에서 1차매도비중(50%)만큼 1차매도 신호가 발생되는지와
1차매도후 추가상승하지 못하고 하락하여 손절위치2차에서 나머지 남은 수량 전체가
2차손절되는지 검토 부탁드립니다.
아래 시스템식은 현재 사용하고 있는 전체 시스템식입니다.
------------------------------------------------------------------------------
## 일봉상 일목균형표의 120일 기준선을 참조하여 3분봉에서 매매함.
## 2분할매수, 2분할매도 시스템식
## 외부변수 설정 ##
input : 전략시작일자(20160105), 전략시작시간(090000), 전략매수금액(1000);
input : 매수위치1차(1), 매수위치2차(2);
input : 매도위치1차(1.5), 매도위치2차(2);
input : 매수비중1차(50), 매수비중2차(50);
input : 매도비중1차(50), 매도비중2차(50);
input : 전략진입횟수(1);
input : 최종손절위치(3),최종익절위치(1);
input : Period(120);
## 내부변수 설정 ##
var : CL(0),V0.5(0),V1(0),V2(0),V3(0);
var : mid(0),V4(0),V5(0),V6(0),V7(0),V8(0),V9(0);
var : diff(0),TF(0),cnt(0),value(0);
var : entrycond1(false),entrycond2(false),entrycond3(false);
# Period 전기간 최고가의 값이 있으면
if dayhigh(Period) > 0 Then {
var1 = dayhigh(0); # 당일최고가(Period 기간동안 최고가를 계산하기 위한 초기값)
var2 = daylow(0); # 당일최저가(Period 기간동안 최고가를 계산하기 위한 초기값)
var11 = dayhigh(1); # 전일최고가(전일기준 Period 기간동안 최고가를 계산하기 위한 초기값)
var12 = daylow(1); # 전일최저가(전일기준 Period 기간동안 최고가를 계산하기 위한 초기값)
# 0일부터 Period전일까지 최고가와 최저가를 불러와
# Period 기간동안 최고가/최저가를 계산
# 전일기준은 0을 제외하고 Period 기간이므로 +1
for cnt = 0 to Period-1 {
if DayHigh(cnt) > var1 Then
var1 = DayHigh(cnt);
if dayhigh(cnt+1) > var11 Then
var11 = dayhigh(cnt+1);
if daylow(cnt) < var2 Then
var2 = daylow(cnt);
if daylow(cnt+1) < var21 Then
var21 = daylow(cnt+1);
}
# Period기간동안 최고가가 전일보다 상승하면
# CL에 당일 중간값 저장
if var11 < var1 Then
CL = (var1+var2)/2;
V0.5 = var1-((var1-CL)/5)*1;
V1 = var1-((var1-CL)/5)*2; ## "빨"타점-1타점
V2 = var1-((var1-CL)/5)*3; ## "주"타점-2타점
V3 = var1-((var1-CL)/5)*4; ## "노"타점-3타점
mid = (var1+var2)/2; ## 중간선
V4 = var1-((var1-CL)/5)*5; ## "초"타점-4타점
V5 = var1-((var1-CL)/5)*6; ## "파"타점-5타점
V6 = var1-((var1-CL)/5)*7; ## "남"타점-6타점
V7 = var1-((var1-CL)/5)*8; ## "보"타점-7타점
V8 = var1-((var1-CL)/5)*9; ## "점"타점-8타점
V9 = var1-((var1-CL)/5)*9; ## "검"타점-9타점
value = abs(var1-V0.5);
#######################################################
if sdate >= 전략시작일자 and # 지정일 이후
TotalTrades < 전략진입횟수 and # 최대 진입횟수 이전
MarketPosition == 0 and # 현재 무포지션
stime >= 전략시작시간 and #지정시간 이후
EntryCond1 == false and # EntryCond1은 false일때(첫진입이 발생하면 true로 변경되어 한번만 진입하게 됨)
DayHigh(0) < Var1 Then { # 당일고가가 period신고가를 돌파하지 않을 경우만 매수하기 위한 조건
# (1차매수1),(1차매수2)은 가격이 하락해서 1차매수가격을 터치한 것인지
# 시가가 갭으로 1차매수가격 이하에서 바로 시작해서 신호가 발생한것인지
# 구분하기 위해서 1차매수를 2개의 함수로 작성한 것입니다.
# 시가가 지정한 가격보다 위에서 시작하면 하락해서 지정한 가격 터치시 매수(1차매수1)
# 시가가 지정한 가격보다 이하에서 바로 시작하면 시가에 바로 매수(1차매수2)
if stime <= 145500 Then {
if NextBarOpen > var1-value*(매수위치1차+1) Then
buy("1차매수1",atlimit,var1-value*(매수위치1차+1),Floor((전략매수금액*10000*(매수비중1차/100))/C));
Else
buy("1차매수2",AtMarket,def,Floor((전략매수금액*10000*(매수비중1차/100))/C));
}
if stime == 150000 Then {
if L <= var1[1]-value[1]*(매수위치1차+1) Then
buy("1차매수3",AtMarket,def,Floor((전략매수금액*10000*(매수비중1차/100))/C));
}
}
# 매수진입이후
if MarketPosition == 1 then {
# 추가진입이 발생하면 1차매도가 다시 발생할수 있도록 false로 초기화
if CurrentContracts > CurrentContracts[1] Then
Condition1 = false;
# 매수시점의 var1와 V0.5의 차이값을 diff에 저장
diff = abs(var1[BarsSinceEntry]-V0.5[BarsSinceEntry]);
if MaxEntries == 1 and # 최대진입횟수가1이고(첫진입 한번만 발생한 상황)
L >= var1-value*(매수위치2차+1) and # 저가가 2차매수가격 이상이고
EntryCond2 == false Then { # EntryCond2은 false일때(2차매수가 발생하면 true로 변경되어 한번만 진입하게 됨)
# 다음봉에서 2차매수가격을 터치하면 신호발생(즉 가격이 하락해서 첫 터치가 발생하면 매수)
# 시가가 지정한 가격보다 위에서 시작하면 하락해서 지정한 가격 터치시 매수(2차매수1)
# 시가가 지정한 가격보다 이하에서 바로 시작하면 시가에 바로 매수(2차매수2)
if stime <= 145500 or stime == 150000 Then {
if NextBarOpen > var1-value*(매수위치2차+1) Then
buy("2차매수1",atlimit,var1-value*(매수위치2차+1),Floor((전략매수금액*10000*(매수비중2차/100))/C));
Else
buy("2차매수2",AtMarket,def,Floor((전략매수금액*10000*(매수비중2차/100))/C));
}
if stime == 150000 and L <= var1[1]-value[1]*(매수위치2차+1) Then
buy("2차매수3",AtMarket,def,Floor((전략매수금액*10000*(매수비중2차/100))/C));
}
# Condition1과 Condition2는 각 매도의 횟수를 1번으로 제한하게 위한 변수
# 포지션 진행 중 1차매도란 이름의 청산이 발생하면 Condition1은 true
if CurrentContracts < CurrentContracts[1] and (LatestExitName(0) == "1차매도1" or LatestExitName(0) == "1차매도2") Then
Condition1 = true;
# 포지션 진행 중 2차매도란 이름의 청산이 발생하면 Condition2는 true
if CurrentContracts < CurrentContracts[1] and (LatestExitName(0) == "2차매도1" or LatestExitName(0) == "2차매도2") Then
Condition2 = true;
# Condition1이 false일때(첫진입후 아직 1차매도는 발생하지 않은 상태)
# 당일 최저가에서 diff*매도위치1차만큼 상승하면 매도1차비중만큼 청산
if Condition1 == false then {
if stime <= 145500 Then
exitlong("1차매도1",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치1차,"",Floor(MaxContracts*(매도비중1차/100)),1);
if stime == 150000 and H >= lowest(L,BarsSinceEntry)[1]+diff[1]*매도위치1차 Then
exitlong("1차매도2",AtMarket,def,"",Floor(MaxContracts*(매도비중1차/100)),1);
}
if Condition1 == true and CurrentContracts < MaxContracts then {
if stime <= 145500 Then
exitlong("최종익절1",AtStop,LatestExitPrice(0)-diff*최종익절위치);
if stime == 150000 and L <= LatestExitPrice(0)-diff*최종익절위치 Then
exitlong("최종익절2",AtMarket);
}
# Condition2는 false일때(첫진입후 아직 2차매도는 발생하지 않은 상태)
# 당일 최저가에서 diff*매도위치2차만큼 상승하면 매도2차비중만큼 청산
if Condition2 == false then {
if stime <= 145500 Then
exitlong("2차매도1",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치2차);
if stime == 150000 and H >= lowest(L,BarsSinceEntry)[1]+diff[1]*매도위치2차 Then
exitlong("2차매도2",AtMarket);
}
# 당일최고가에서 value*(최종손절위치+1)만큰 하락하면 전량청산
# 3분봉에서 정규장마지막봉 전봉까지만 만족했을때 신호발생
if stime < 145700 Then
exitlong("최종손절1",AtStop,var1-value*(최종손절위치+1));
# 정규장 마지막봉에서 조건만족하면 다음봉(다음날)시가에 청산
if stime == 150000 and L <= var1[1]-value[1]*(최종손절위치+1) Then
exitlong("최종손절2",AtMarket);
}
Else { # 매수포지션이 아니면 모두 false로 초기화
Condition1 = false;
Condition2 = false;
}
}
# 매수진입 후 1차매수1이나 1차매수2, 1차매수3 진입신호가 발생하면 true
if MarketPosition == 1 and (LatestEntryName(0) == "1차매수1" or LatestEntryName(0) == "1차매수2" or LatestEntryName(0) == "1차매수3") Then
entrycond1 = true;
# 매수진입 후 2차매수1이나 2차매수2, 2차매수3 진입신호가 발생하면 true
if MarketPosition == 1 and (LatestEntryName(0) == "2차매수1" or LatestEntryName(0) == "2차매수2" or LatestEntryName(0) == "2차매수3") Then
entrycond2 = true;
# 무포지션이면 flase로 초기화
if MarketPosition == 0 Then {
entrycond1 = false;
entrycond2 = false;
}
2016-04-07
282
글번호 96960
답변완료
수식문의드립니다.
1초봉에서 1초마다 미리 입력된 값과 비교해서
비율을 계산하려고 합니다.
예를들면 비교 대상이 거래량이라고 가정하고
9:00:01 거래량 100 (미리지정) >>>>>>>>>> 실제거래량 200 >>>> plot1출력시 200%
9:00:02 거래량 239 (미리지정)
9:00:03 거래량 122 (미리지정)
9:00:04 거래량 230 (미리지정)
....
이런식으로 미리 9:00:01초 부터 15:00:00 초까지
1초마다 값을 미리 부여하고
현재 들어오는 1초마다의 거래량대비 비율을 계산하려고 합니다.
어떤식으로 해야하는지 조언 부탁드립니다.
2016-04-07
191
글번호 96959
답변완료
질문입니다.
제가 이렇게 질문을 드렸습니다.
->제목 : 질문입니다.
->선물일봉에서 거래를 하려고 하는데 이게 가능한지 여쭤보려 합니다.
->선물일봉에서 오늘의 시초가가 10ma보다 위에 있다면 매도포지션으로 진입,
->선물일봉에서 오늘의 시초가가 10ma보다 아래에 있다면 매수포지션으로 진입하는
->시스템을 작성하고 싶습니다.
->문제는 10ma가 일봉상 오늘까지의 데이터까지도 반영하게 만들고 싶습니다.
->시초가도 오늘의 시초가를 사용하고 싶습니다.
->즉, 당일장이 오픈을 하면 당일까지 소급한 10ma와 당일의 시초가를 사용하여
->시스템을 작성하고 싶습니다.
그랬더니 답변이 이렇게 왔습니다.
->var1 = (AccumN(C,9)+NextBarOpen)/10;
->if NextBarOpen > var1 Then
-> buy("b",AtMarket);
->if NextBarOpen < var1 Then
-> sell("s",AtMarket);
답변을 해주신 시스템을 테스트 해본 결과...
답변을 주신 시스템은 if문때문인지, 아니면 nextbaropen때문인지
제가 원하는 곳이 아닌 그 다음봉에 신호가 나갑니다.
다시한번 부탁드립니다.
논리는 간단합니다.
선물 `일봉`에서
거래당일까지 데이터에 포함된 10ma를 중심으로
당일 시초가가 10ma보다 높으면 그 시초가에 매도 포지션으로 진입,
당일 시초가가 10ma보다 낮으면 그 시초가에 매수 포지션으로 진입하는 시스템입니다.
위에서 설명드렸듣이 if문 때문인지, nextbaropen 때문인지 모르겠지만,
제가 원하는 당일 시초가에 신호가 나오지 않고,
다음날(일봉에 대입하는 형태이므로) 시초가에 신호가 나오는 듯 합니다.
번거로우시겠지만 다시한번 부탁드립니다.
감사합니다.
혹여나 일봉자체에서 구현이 되면 가장 좋겠지만,
일봉만으로 구현이 어렵다면 참조데이터 등을 이용해서 구현할 수 있는 방법도 가능한지 여쭈어보고 싶습니다.
간곡히 부탁드립니다.
2016-04-07
169
글번호 96958
답변완료
수식문의
아래의 식에서 손절신호가 나오고 나서 바로 매수매도 스위칭이가능한 수식으로 만들어주세요 감사합니다
Input : shortPeriod(5), longPeriod(20), Period(4),중심(10);
Var : value(0) , macdosc(0) ;
value = MACD(shortPeriod, longPeriod);
macdosc = value-ema(value,Period);
Var1=(ema(value,Period));
# 매수/매도청산
If CrossDown(Var1, Value) Then
{
Buy();
# Buy (atlimit,c-PriceScale*5);
}
# 매도/매수청산
If CrossUp(Var1, Value) Then
{
Sell();
# Sell (atlimit,c-PriceScale*5);
}
if MarketPosition == 1 Then{
exitlong("익",atlimit,EntryPrice+PriceScale*42,"",1,1);
if CurrentContracts == MaxContracts Then
exitlong("손",AtStop,EntryPrice-PriceScale*15);
}
if MarketPosition == -1 Then{
ExitShort("익청",atlimit,EntryPrice-PriceScale*42,"",1,1);
if CurrentContracts == MaxContracts Then
ExitShort("손청",AtStop,EntryPrice+PriceScale*15);
}
2016-04-07
195
글번호 96955
답변완료
문의 합니다..
일목균형에서 기준선 위로 통과시 매수, 아래로 통과시 매도 수식입니다..
Var : 기준선(0);
기준선 = (Highest(c, 26) + Lowest(c, 26)) / 2;
if crossup(c,기준선) Then
buy();
if CrossDown(c,기준선) Then
sell();
기준선 위에서 매수로 집입후, stochastics K-D에 신호로 매수진입과 청산만 진행하고
기준선 아래로 매도 진입후 그 다음 신호부터는 stochastics K-D에 신호로 매도진입과 청산만
진행하는
위의 조건으로 수식 부탁합니다.(고맙습니다. 수고하세요)
2016-04-07
177
글번호 96950
답변완료
수식문의 드립니다
항상 좋은 답변 감사드립니다
1.매수
1)분봉상 가격이 20이평선 위 그리고 20이평이선 상승시 매수신호와 매수청산만 발생
2)macd업크로스 + 스톡 업크로스 + 10이평선위에 있을때 매수
1)+2) 일때만 매수 신호만 발생
3)macd 다운크로스 + 스톡 다운크로스 + 10이평선 아래에 있을때 청산
2. 매도
매수와 반대신호
수식도 해석 부탁드립니다.
2016-04-07
179
글번호 96945
답변완료
47140 댓글 한번봐주세요?
댓글 확인 부탁합니다.
2016-04-07
170
글번호 96944