커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4727
글번호 230811
sjpapa 님에 의해서 삭제되었습니다.
2015-11-14
28
글번호 92410
답변완료
수식 부탁합니다
Input : shortPeriod(5), longPeriod(20);
var : mao(0);
mao = ma(C,shortPeriod)-ma(C,longPeriod);
if crossup(MAO,0) Then
plot1(L);
if CrossDown(MAO,0) Then
plot2(L);
mao cross 지표식에 다음 사항 반영하여 수정 부탁합니다.
1. mao가 0과 데드크로스 발생하고 나서
mao가 0 아래 (mao <= 0) 인 상태에서 일정 기간 (캔들로 15봉 이상) 지나고 난 후
첫번째 발생하는 골든크로스 지표식
2. mao가 0과 골든크로스 발생하고 나서
mao가 0 위에 (mao > 0) 인 상태에서 일정 기간 (캔들로 15봉 이상) 지나고 난 후
첫번째 발생하는 데드크로스 지표식
2015-11-14
127
글번호 92409
답변완료
피라미딩
피라미딩 설정에서
허용안함
다른진입신호만 허용
모든진입신호허용 은 각기 어떠한 차이가 있나요?
2015-11-14
121
글번호 92408
답변완료
수식구현요청
* 밤 12시 늦은밤에 죄송합니다^^
▣ 1번요청: 차트에서 한봉이 "5%이상 상승시 바로 매도" 로직 구현 요청 드림니다.(2분봉 차트사용)
*설명: 매수후 1개 봉 또는 두개봉(연속) 상승율 합이 5%이상 이면 다음봉 시장가 매도
(매수가격과 관계업고 3개봉 합이 5%이상은 관계없이 진행 )
if MarketPosition == 1 then { if 1개봉 5% 이상 Then ExitLong("5%상승매도"); }
◎2번요청: 매수후 매수가격 봉 기준으로 매수한 봉 저가 보다 2% 하락 하면 매도
*설명 : 9시6분 봉에 매수 되었으면 9시4분봉기준 2% 하락시 매도
if MarketPosition == 1 then { if C < 매수봉 저가*0.98 Then ExitLong("매수봉매도"); }
* 좋은 주말 되십시요^^
2015-11-15
135
글번호 92407
답변완료
수식요청드립니다.
안녕하세요.
1. 2. 수식 수정요청 드립니다.
감사합니다.
1. 아래 당일청산 당일손실제한, 당일진입횟수제한 기존시스템에 추가하여 사용하는
피라미딩 진입수식을, 당일 2번째 진입시 부터 적용되는 수식으로 수정요청드립니다.
1.
if MarketPosition == 1 and Bxcond == false Then
Buy("PBB",AtStop,LatestEntryPrice(0)+i증감,진입수량);
if MarketPosition == -1 and SxCond == false Then
sell("PSS",AtStop,LatestEntryPrice(0)-i증감,진입수량);
-----------------------------------------------------------------------------
2. 아래 기존수식에 추가하여 사용하는 형식의 당일손실제한 수식을, 오버형 기존수식에
추가하여 사용하는 형식의 당월손실제한 수식으로 수정 요청 드립니다.
<<< 예) 기존수식 당일손실 추가 형식 => and dayPL > -당일손실 >>>
매월 1일부터 포지션 수익+손실 누적합산 월 손실실제한시 시스템 포지션 청산 하고,
익월 1일부터 시스템 재시작 하는 수식 요청 드립니다.
2.
input : N(2),당일손실(2); // and dayPL > -당일손실
var : cnt(0),BCount(0),SCount(0);
var : NP(0),PreNP(0),DayPL(0),loss(0),v1(0);
NP = NetProfit;
if date != date[1] Then{
preNP = NP[1];
Condition1 = false;
v1 = 0;
}
dayPL = NP-PreNP;
BCount = 0 ;
SCount = 0 ;
for cnt = 0 to 10 {
if EntryDate(cnt) == sdate and MarketPosition(cnt) == 1 then
BCount = BCount + 1;
if EntryDate(cnt) == sdate and MarketPosition(cnt) == -1 then
SCount = SCount + 1;
}
if Condition1 == false and TotalTrades > TotalTrades[1] Then{
Condition1 = true;
if PositionProfit(1) > 0 Then
v1 = PositionProfit(1);
}
//--------------------------------------------------------------------------------------------------
#당일손실제한
if MarketPosition == 1 Then{
ExitLong("당일손실제한bx3",AtStop,avgEntryPrice-(당일손실+(dayPL-v1))/CurrentContracts);
}
if MarketPosition == -1 Then{
ExitShort("당일손실제한sx3",AtStop,avgEntryPrice+(당일손실+(dayPL-v1))/CurrentContracts);
//--------------------------------------------------------------------------------------------------
2015-11-15
123
글번호 92406
답변완료
ADL지표 수식 부탁드립니다
키움 ADL지표 처럼 만들어 주실수 있으신가요
2015-11-13
178
글번호 92405
답변완료
문의드립니다.
수고합니다.
틱봉 갯수 관련으로 종목검색 문의 및 답변을 받았는데 틱봉 관련 추가 종목검색식 요청드립니다.
1. 금일만 누적 틱봉(예:30틱) 갯수가 전일(09:00~15:00)전체의 틱봉(예:30틱)보다 큰 종목 검색(검색 실행 시간은 임의의 현재 시간입니다.)
2. 금일 장시작 이후 임의의 시간까지(예 09:10) 틱봉(예:30틱) 갯수가 전일(09:00~15:00)전체의 틱봉(예:30틱)보다 큰 종목 검색(검색 실행 시간은 임의의 현재 시간입니다.)
2015-11-13
141
글번호 92397
답변완료
시스템식 일부 검토 부탁드립니다.
안녕하세요.
아래 전체시스템식 중 다음 일부분이 오류가 납니다.
-----------------------------------------------------------------------
# data2의 1일전 대비 등락율
D2rate = data2((C-CloseD(1))/CloseD(1)*100);
# data2 등락률이 전일대비하락률 이하이면 투매시 매수금액으로 매수
# 투매매수금액은 전략매수금액의 1/2만 매수
if D2rate <= 전일대비하락 Then {
전략매수금액 = 투매매수금액;
투매매수금액 = 전략매수금액*0.5;
}
-----------------------------------------------------------------------------
즉, 지수가 -3% 이상 하락시 전략매수금액을 모두 매수하는 것이 아니라, 보수적으로 매매를 하기 위해 전략매수금액의 1/2만 매수하기 위한 식입니다.
그런데,
"값을 대입할 수 있는 변수나 배열의 요소, 입력변수, 입력변수 배열의 요소가 와야 합니다." 라는 오류 메세지가 나오는데 검토 부탁드립니다.
또는 다음과 같이 수정을 해도 오류가 나네요.
if D2rate <= 전일대비하락 Then {
전략매수금액 = 전략매수금액*0.5;
}
전체 시스템식은 아래와 같습니다.
----------------------------------------------------------------------------
## 지수데이타를 참조하여, 매수비중을 달리함.
## 하향추세 판단을 15일선과 120일선의 위치를 비교하여 판단함.
## 시간제한 있음.
## 외부변수 설정 ##
input : 전략시작일자(20150105), 전략시작시간(090000), 전략매수금액(1500);
input : 전략종료일자(20161230);
input : 악재시갭하락(5), 악재보정계수(5), 이평보정계수(1), 전일대비하락(-3), 지수보정계수(2);
input : 매수위치보정(1), 매수기준엔벨(5);
input : 매수위치1차(5), 매수위치2차(5), 매수위치3차(10);
input : 매도위치1차(5), 매도위치2차(10);
input : 전략진입횟수(100);
input : 타점보유일수(5);
input : 매수비중1차(30), 매수비중2차(35), 매수비중3차(35);
input : 매도비중1차(50), 매도비중2차(50);
## 내부변수 설정 ##
var : sum(0,data1),mav(0,data1),cnt(0,data1),eup(0,data1),edn(0,data1);
var : Didx(0,data1),LatestEntryDidx(0,data1),Ecnt(0,data1);
var : TimeCond(false,data1),Xcond1(false,data1),Xcond2(false,data1),Loss(0,data1),LatestEntrylow(0,data1);
var : Period(0,data1),매수1차(0,data1);
var : cum1(0,data1),cum2(0,data1),ma1(0,data1),ma2(0,data1),ma3(0,data1);
var : D2rate(0,data2), 투매매수금액(0,data1);
# 일자수 계산
if date != date[1] Then
Didx = Didx+1;
# 일봉 120이평 계산
cum1 = 0;
for cnt = 1 to 119 {
cum1 = cum1+DayClose(cnt);
}
ma1 = cum1/120;
# 일봉 15이평 계산
cum2 = 0;
for cnt = 0 to 14 {
cum2 = cum2+DayClose(cnt);
}
ma2 = cum2/15;
# 기본값은 기간은 P, %는 매수위치1차
Period = 매수기준엔벨;
매수1차 = 매수위치1차;
# 악재가 발생하여 갭하락하면
# 기간은 기존 Period값 + 악재보정계수
# %는 기존 매수1차값에 + 악재보정계수
if dayopen < DayClose(1)*(1-악재시갭하락/100) Then {
Period = Period + 악재보정계수;
매수1차 = 매수1차 + 악재보정계수;
}
# 15일 이평이 120이평 아래에 있으면 (또한 지정한 기간의 일봉데이타가 있으면)
# 기간은 기존 Period값+이평보정계수
# %는 기존 매수1차값에 + 이평보정계수
if ma2 < ma1 and DayClose(120+1) > 0 Then {
Period = Period + 이평보정계수;
매수1차 = 매수1차 + 이평보정계수;
}
# data2의 1일전 대비 등락율
D2rate = data2((C-CloseD(1))/CloseD(1)*100);
# data2 등락률이 전일대비하락률 이하이면 투매시 매수금액으로 매수
# 투매매수금액은 전략매수금액의 1/2만 매수
if D2rate <= 전일대비하락 Then {
전략매수금액 = 투매매수금액;
투매매수금액 = 전략매수금액*0.5;
}
# 당일포함 일봉 Period개의 종가를 누적
sum = 0;
for cnt = 0 to Period-1 {
sum = sum+DayClose(cnt);
}
# 누적값을 Period로 나누어 평균값 산출
mav = sum/Period;
# 엔벨로프 상단 계산
Eup = mav+mav*(매수1차/100);
# 엔벨로프 하단 계산
Edn = mav-mav*(매수1차/100);
# 지정일 지정시간이 되면 TimeCond는 True(그전에는 false)
if sdate == 전략시작일자 and (stime == 전략시작시간 or (stime > 전략시작시간 and stime[1] < 전략시작시간 )) then
TimeCond = true;
if sdate > 전략종료일자 Then
TimeCond = false;
###########################################################################################################################
### TimeCond가 True가 된 후 ###
if TimeCond == true then {
if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "1차매수" Then
Ecnt = Ecnt+1;
# 무포지션 상태에서 매수위치1차에 도달하면 매수
if MarketPosition == 0 and Ecnt < 전략진입횟수 and stime < 144200 Then
buy("1차매수",atlimit,Edn*(1+매수위치보정/100),Floor((전략매수금액*10000/c)*(매수비중1차/100)));
## 첫매수이후 ##
if MarketPosition == 1 Then {
# 추가진입이 발생하면 1차매도가 다시 발생할수 있도록 false로 초기화
if CurrentContracts > CurrentContracts[1] Then
Xcond1 = false;
# 최근 진입시점의 일자수 저장
if CurrentContracts > CurrentContracts[1] Then {
LatestEntryDidx = Didx;
LatestEntrylow = L;
}
# 1차매수 발생 후 매수위치2차에 도달하면 매수
if MaxEntries == 1 and stime < 144200 Then
buy("2차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치2차/100),Floor((전략매수금액*10000/c)*(매수비중2차/100)));
# 1차매수 발생 후 매수위치3차에 도달하면 매수
if MaxEntries == 2 and stime < 144200 Then
buy("3차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치3차/100),Floor((전략매수금액*10000/c)*(매수비중3차/100)));
# 1차매도가 한번 발생하면 더이상 발생못하도록 Xcond1은 true
if CurrentContracts < CurrentContracts[1] and (LatestExitName(0) == "1차매도") then
Xcond1 = true;
# 2차매도가 한번 발생하면 더이상 발생못하도록 Xcond2는 true
if CurrentContracts < CurrentContracts[1] and (LatestExitName(0) == "2차매도") then
Xcond2 = true;
# Xcond1이 false일때
# 진입이후 최저가에서 매도위치1차 만큼 상승하면 일부 청산
if Xcond1 == false and stime < 144200 Then
exitlong("1차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치1차/100),"",Floor(MaxContracts*(매도비중1차/100)),1);
# Xcond2가 false일때
# 진입이후 최저가에서 매도위치2차 만큼 상승하면 전량청산
if Xcond2 == false and stime < 144200 Then
exitlong("2차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치2차/100));
# 최근 진입후 보유일수 이상 경과(현재 일자수가 최근진입시점의 일자수보다 보유일수 이상 증가)
if Didx >= LatestEntryDidx+타점보유일수 and Xcond1 == false and CurrentContracts == CurrentContracts[1] Then {
# 최근 진입이후 보유일수가 되었을때의 최근진입일 포함 보유일수동안 최저가 계산
if date != date[1] and Didx == LatestEntryDidx[BarsSinceEntry]+3 Then {
Loss = daylow(1);
for cnt = 1 to (타점보유일수-1) {
if daylow(cnt) < Loss Then
Loss = daylow(cnt);
}
}
# Loss값 이하로 가격하락하면 전량 청산
exitlong("손절",AtStop,Loss);
}
# 최종 매수일 포함 5일경과되면 다음날 시가에 매도
if Didx == LatestEntryDidx+(타점보유일수-1) and stime == 150000 Then {
exitlong("익절1",AtMarket);
}
# 1차매도가 발생한 상황
# 가장 최근 진입일의 당일최저가보다 낮은 시세 발생하면 전량청산
# if L < LatestEntrylow and Xcond1 == false Then
# LatestEntrylow = L;
# if Xcond1 == true and CurrentContracts == CurrentContracts[1] Then {
# exitlong("익절2",AtStop,LatestEntrylow); # "익절2"는 상황에 따라 적용유무를 달리함.
# }
} # 105번행 # 첫매수이후 if MarketPosition == 1 Then { 의 괄호를 닫아 줌.
## 매수포지션이 아니면 false로 초기화 ##
else {
Xcond1 = false;
Xcond2 = false;
}
} # 96번행 # TimeCond가 True가 된 후 if TimeCond == true then { 의 괄호를 닫아 줌.
2015-11-13
153
글번호 92395
답변완료
글번호 45008 재질문
아래의 함수 요청드립니다.
# 당일에만 전일의 고가와 저가를 표시하고자 합니다
여기서 당일, 전일이 날짜변경에 의한 하루 개념이 아니라
해외선물의 거래시간입니다.
써머타임 : 7:00~6:00
써머타임 종료 : 8:00~7:00
2015-11-13
125
글번호 92394