커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4719
글번호 230811
답변완료
진입번호를 변수로 설정
진입번호 를 변수로 설정하는 방법을 가르쳐 주시기 바랍니다.
2015-12-02
99
글번호 92981
회원 님에 의해서 삭제되었습니다.
2015-12-02
13
글번호 92980
답변완료
시스템에 따라 캔들
시스템의 시그널에 따라 현재의 캔들색을 바꾸고 싶은데요.
예를들어 현재 "매수조건"충족할때의 캔들색을 전부 빨간색으로
"매도조건"을 충족할때는 캔들색을 전부 파란색으로
이런식으로 바꾸는 방법을 알고싶습니다.
2015-12-02
164
글번호 92979
답변완료
이익실현 후 추가 매입 금지 구현 방법
안녕하세요,
시스템으로 매수, 매도 후 이익 실현이 되었다면 더 이상의 매수를 금지하려면 어떻게 해야하나요?
감사합니다.
2015-12-02
117
글번호 92978
답변완료
문의드립니다
첫번째 질문~국내선물시장 아침9시부터 오후3시까지 매시간 연속해서 5분봉상 매시 20분00초에서 24분59초봉 그러니까 5분봉상 매시20분봉이되겠지요 표현방법
두번째 질문~마찬가지로 아침9시부터 오후3시까지 매시간 연속해서 5분봉상 매시 45분00초 부터 44분59초 그러니까 5분봉상 매시45분봉이 되겠지요 표현방법
세번째 질문~참조종목 data2에 전봉고가가 당일최고가와같다 전봉최저가가 당일최저가가 같다 표현방법
네번째질문~참조종목data2 전전봉 저가와 전봉 저가가 같으면서 당일최저가와같다
다섯번째질문~참조종목data2 전전봉 고가와 전봉 고가가 같으면서 당일최고가와 같다
표현방법좀 부탁드립니다
여섯번째~참조종목 data3 에 5봉이내 당일최고가 있다
비가 아침부터 많이 내립니다~비가 그치고 많이 추워진다고 하니 건강관리 잘하십시요 감사합니다 꾸벅
2015-12-02
102
글번호 92976
답변완료
시스템식 검토 부탁드립니다.
안녕하세요..
전체 시스템식에서 15일이평선이 120일이평선 아래에 있을때, 즉 역배열인 경우에
아래와 같은 식을 추가하여 당초 매도위치에서 목표수익률을 낮춰 매도하기 위해
0.5를 곱하여 적용해 보았는데, 잘되지를 않습니다.
### 역배열시 매도를 위한 보정 시작 ###
매도1차 = 매도위치1차;
매도2차 = 매도위치2차;
# 15일이평선이 120일이평선 아래 있으면 즉, 역배열이면
# 원래 매도위치에서 절반(0.5) 보정하여 매도함.
if ma2 < ma1 and DayClose(120+1) > 0 Then {
매도1차 = 매도1차 * 0.5;
매도2차 = 매도2차 * 0.5;
}
### 역배열시 매도를 위한 보정 끝 ###
확인해 주시고 검토 부탁드립니다.
------- 전체 시스템식입니다. -------------------------------------------------------
## 지수데이타를 참조하여, 매수위치를 달리함.
## 하향추세 판단을 15일선과 120일선의 위치를 비교하여 판단함.
## 시간제한 있음.
## 외부변수 설정 ##
input : 전략시작일자(20151116), 전략시작시간(090000), 전략매수금액(1500);
input : 전략종료일자(20161230);
input : 악재시갭하락(5), 악재보정계수(5), 이평보정계수(1), 전일대비하락(-3), 지수보정계수(1);
input : 매수위치보정(1), 매수기준엔벨(7);
input : 매수위치1차(7), 매수위치2차(7), 매수위치3차(14);
input : 매도위치1차(7), 매도위치2차(14);
input : 전략진입횟수(100);
input : 타점보유일수(5);
input : 매수비중1차(35), 매수비중2차(30), 매수비중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),매도1차(0,data1),매도2차(0,data1);
var : cum1(0,data1),cum2(0,data1),ma1(0,data1),ma2(0,data1),ma3(0,data1);
var : D2rate(0,data2);
# 일자수 계산
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);
# 지수가 전일대비 크게 하락하면
# 기간은 기존 Period값 + 지수보정계수
# %는 기존 매수1차값에 + 지수보정계수
if D2rate <= 전일대비하락 Then {
Period = Period + 지수보정계수;
매수1차 = 매수1차 + 지수보정계수;
}
### 매수를 위한 각 보정계수 설정 끝 ###
### 역배열시 매도를 위한 보정 시작 ###
매도1차 = 매도위치1차;
매도2차 = 매도위치2차;
# 15일이평선이 120일이평선 아래 있으면 즉, 역배열이면
# 원래 매도위치에서 절반(0.5) 보정하여 매도함.
if ma2 < ma1 and DayClose(120+1) > 0 Then {
매도1차 = 매도1차 * 0.5;
매도2차 = 매도2차 * 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-12-02
141
글번호 92970
답변완료
지표식
Input: period1(5);
Var : CATM(0,data1),PATM(0,data1);
Var : SUMATM(0,data1),AVGATM(0,data1),preDaySUMATM(0,data1);
if date != date[1] Then
preDaySUMATM = SUMATM;
CATM = Data1(C);
PATM = Data2(C);
SUMATM = CATM+PATM;
if SUMATM > preDaySUMATM Then
plot7(SUMATM,"SUMATM",RED);
Else
plot7(SUMATM,"SUMATM",blue);
Plot8(ma(SUMATM,Period1), "이평");
위와같이 Data3에 표현되는 지표식을 쓰고 있습니다
Data3의 SUMATM에 대해 MACD오실레이터를 만들어 쓰고 싶습니다
수식 부탁 드립니다
항상 감사합니다
2015-12-02
124
글번호 92969
답변완료
전봉 참조에 관한 질문입니다.
전봉 참조하는 것들에 관한 질문입니다.
1. 1봉전 종가, 2봉전 종가 같은걸 할때 C[1], C[2]를 붙여주잖아요. 여기서 C[0]이렇게 0을 넣어도 되나요?
2. 저기에 변수를 넣을 수 있나요? C[a] 이런식으로 말입니다.
3. 배열변수에서의 질문입니다. Array : value[3](0);이라고 선언 했다고 칩시다. value[2][5] 이런게 되나요? 3번째 변수의 5봉전 값이란 뜻이 되나요?
4. 저기서 2와 5가 있는 자리에 변수를 넣을 수 있나요? value[a][b] 이런게 가능한가요?
5. 4번이 된다면 연산이 들어갈 수도 있나요? value[a*0.5][b*0.1] 이런식으로 말입니다.
2015-12-02
105
글번호 92967
희망 님에 의해서 삭제되었습니다.
2015-12-02
1
글번호 92966