커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7443
글번호 230811
답변완료
다시 문의드립니다.
아래답변을 받았는데요, 5분봉에 적용해보니 매도신호가 하나도안뜹니다.
수정부탁드립니다.
var : TF(0),cnt(0);
Array : HH[10](0),LL[10](0);
TF = TimeToMinutes(stime);
if Bdate != bdate[1] or (Bdate == Bdate[1] and stime < 150000 and TF < TF[1]) Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 9{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
if HH[2] > 0 and LL[2] > 0 Then{
if HH[0] > max(HH[1],HH[2]) Then
buy();
if ll[0] < mIN(LL[1],LL[2]) Then
sell();
}
2015-11-03
219
글번호 92015
답변완료
부탁드립니다
수고하십니다
선물 매수.매도수급지표선을 겹치는 수식 부탁드립니다
2015-11-03
235
글번호 92005
파파리리 님에 의해서 삭제되었습니다.
2015-11-03
2
글번호 91994
답변완료
문의드립니다
안녕하세요
아래 식 에서 시작시간및 종료시간을 종목및 썸머타임에 관계없이 적용하고자합니다
현재 예스글로벌사용중인데 crude oil 같은종목은 시작시간이 썸머타임과 관련하여
변경되는것이 맞는것인가요?...
부탁드립니다.
===============================================================================
input : af1(0.01),max1(0.1);
input : S1(20),P1(53);
var : para1(0),T1(0);
var : Bcond1(false);
var : Scond1(false);
var : pre(0),daycnt(0);
para1 = sar(af1,max1);
if stime == 170000 or (stime > 170000 and stime[1] < 170000) Then
pre = TotalTrades;
if MarketPosition == 0 Then
daycnt = TotalTrades-Pre;
Else
daycnt = (TotalTrades-Pre)+1;
if stime >= 170000 or stime < 154000 Then{
if crossup(C,para1) Then{
Bcond1 = false;
var1 = H;
var2 = L;
T1 = 1;
}
if CrossDown(C,para1) Then{
Scond1 = false;
var1 = H;
var2 = L;
T1 = -1;
}
if T1 == 1 and T1[1] == 1 and Bcond1 == false and H >= var1[1]+PriceScale*1 Then
Bcond1 = true;
if T1 == -1 and T1[1] == -1 and Scond1 == false and L <= var2[1]-PriceScale*1 Then
Scond1 = true;
if T1 == 1 and Bcond1 == false Then
buy("B1",AtStop,var1+PriceScale*1);
if T1 == -1 and Scond1 == false Then
sell("S1",AtStop,var2-PriceScale*1);
if daycnt == 0 and crossup(c,var1) and c > para1 Then
buy("B2");
if daycnt == 0 and CrossDown(c,var2) and c < para1 Then
sell("S2");
}
=============================================================================
중략
============================================================================
if stime == 154000 or (stime > 154000 and stime[1] < 154000) Then{
exitlong("bexit");
ExitShort("sexit");
}
2015-11-03
238
글번호 91993
답변완료
피보나치 수열에 대해서 문의 드립니다.
피보나치 수열을 0%(고점) 23.6%, 38.2%, 50%, 61.8%, 76.4% 100%(저점)
이 7가지를 각각 따로 변수를 지정 할 수 있도록 해주십시오. 제가 원하는 가격을 따로 각각
적을 수 있도록 해주시면 감사하겠습니다. 예를 들면 고점 과 저점을 설정하면 각 퍼센트를 자
동으로 설정 하는 것이 아니라 각각 따로 설정 하여 지표에 선이 그어 질 수 있도록 해주시면
감사하겠습니다.
많은 도움 주셔서 감사합니다.
2015-11-03
332
글번호 91989
답변완료
문의 드립니다.
10^(LOG(고점)-(LOG(고점)-LOG(저점))*0.236)
10^(LOG(고점)-(LOG(고점)-LOG(저점))*0.382)
10^(LOG(고점)-(LOG(고점)-LOG(저점))*0.500)
10^(LOG(고점)-(LOG(고점)-LOG(저점))*0.618)
10^(LOG(고점)-(LOG(고점)-LOG(저점))*0.764)
우리나라 시간 기준으로 장이 시작되면 당일 고점이 선으로 이어지는 것이 아닌 고점을 새로 갱신하면 갱신한 고점 기준으로 선이 이어지게 해주시고 새로 갱신한 고점 밑에 고점은 연결이 진행되지 않게 적용해주십시오. 저점도 마찬 가지로 해주시면 감사하겠습니다. 또한
고점과 저점에 위의 엑셀 식을 적용한 피보나치 수열이 적용 될 수 있도록 해주십시오. 고점과 저점이 새로 갱신을 하면 자동으로 위의 식이 적용된 피보나치 수열이 자동으로 변하면서 진행 될 수 있도록 해주시면 감사하겠습니다.
다음날 우리나라 기준 장이 열렸을 때에도 그날 기준으로 위에 처럼 적용 될 수있게 해주시면 감사하겠습니다.
설명이 어려운것 같아 그림으로도 남깁니다 감사합니다.
2015-11-03
366
글번호 91988
답변완료
시스템식 추가 및 수정 부탁드립니다.
안녕하세요.. 답변에 항상 감사드리며 시스템식 부탁드립니다.
아래와 같은 시스템식에 이동평균선에 대한 외부변수를 다음과 같이 설정하고,
input : 매수이평기간(15);
1. 매수조건
1) 주가가 "일봉이평기간(120)" 즉, 120일선 위에 있고, 120일 최고가를 갱신하고,
"매수이평기간(15)" 즉, 15일선이 우상향하며,
엔벨로프 {"P(10)" : "매수위치1차(10)"} 즉, 엔벨로프 10:10의 상단선을 종가가
돌파하면 다음과 같이 "매수이평기간(15)" 15일선 부근에서 매수함.
단, 4가지 조건 모두를 만족할때만 1차매수를 함.
2) 1)의 조건을 모두 만족할때 "매수이평기간(15)" 15일선 부근 즉, "매수위치보정(1)"인
+1% 위에서 1차매수를 하고 차트에 "1차매수"를 표시함.
정리하면 15일선 +1%에서 1차매수를 "매수비중1차(30)"인 30%를 함.
3) 1차매수 후 1차매도없이 하락하면 "매수위치2차(7)" 즉, 7% 하락하면 2차매수를
"매수비중2차(35)인 35%를 하고 차트에 "2차매수"를 표시함.
2. 매도조건
1) 기타 매도조건은 기존의 시스템식과 같음.
2) "타점보유일수(5)"일때 "익절"에 대한 내용도 기존의 시스템식과 같음.
3. 기타 사항은 첨부한 차트를 참고해 주세요..
기존 시스템식은 아래와 같습니다.
--------------------------------------------------------------------------------------
input : 전략식시작일자(20151028), 전략식시작시간(090000), 전략총매수금액(5000);
input : 전략식종료일자(20151231);
input : 갭하락(5), 시장보정계수(5),일봉이평기간(120),이평보정계수(5);
input : P(10), 매수위치1차(10), 매수위치2차(7), 매수위치3차(14);
input : 매수위치보정(1);
input : 매도위치1차(7), 매도위치2차(14);
input : 매수비중1차(30), 매수비중2차(35), 매수비중3차(35);
input : 매도비중1차(50), 매도비중2차(50);
input : 전략식진입횟수(100);
input : 타점보유일수(5);
var : sum(0),mav(0),cnt(0),eup(0),edn(0),Didx(0),LatestEntryDidx(0),Ecnt(0);
var : TimeCond(false),Xcond1(false),Xcond2(false),Loss(0),LatestEntrylow(0);
var : Period(0),매수1차(0);
var : cum1(0),cum2(0),ma1(0),ma2(0);
# 일자수 계산
if date != date[1] Then
Didx = Didx+1;
# 일봉 120이평 계산(전일기준,전전일기준)
cum1 = 0;
cum2 = 0;
for cnt = 1 to 일봉이평기간{
cum1 = cum1+DayClose(cnt);
cum2 = cum2+DayClose(cnt+1);
}
# 전일기준 일봉 120일이평
ma1 = cum1/일봉이평기간;
# 전전일기준 일봉 120일이평
ma2 = cum2/일봉이평기간;
#기본값은 기간은 P, %는 매수위치1차
Period = P;
매수1차 = 매수위치1차;
#갭하락이면
#기간은 기존Period값+시장보정계수
#%는 기존 매수1차값에 + 시장보정계수
if dayopen < DayClose(1)*(1-갭하락/100) Then{
Period = Period + 시장보정계수;
매수1차 = 매수1차 + 시장보정계수;
}
#이평하락이면
#기간은 기존Period값+이평보정계수
#%는 기존 매수1차값에 + 이평보정계수
if ma1 < ma2 and DayClose(일봉이평기간+1) > 0 Then{
Period = Period + 이평보정계수;
매수1차 = 매수1차 + 이평보정계수;
}
#당일포함 일봉 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 < 전략식진입횟수 Then
buy("1차매수",atlimit,Edn*(1+매수위치보정/100),Floor((전략총매수금액*10000/c)*(매수비중1차/100)));
#첫매수이후
if MarketPosition == 1 Then{
#최근 진입시점의 일자수 저장
if CurrentContracts > CurrentContracts[1] Then{
LatestEntryDidx = Didx;
LatestEntrylow = L;
}
#1차매수 발생 후 매수위치2차에 도달하면 매수
if MaxEntries == 1 Then
buy("2차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치2차/100),Floor((전략총매수금액*10000/c)*(매수비중2차/100)));
#1차매수 발생 후 매수위치3차에 도달하면 매수
if MaxEntries == 2 Then
buy("3차매수",atlimit,Edn[BarsSinceEntry]*(1-매수위치3차/100),Floor((전략총매수금액*10000/c)*(매수비중3차/100)));
#1차매도가 한번 발생하면 더이상 발생못하도록 Xcond1은 true
if LatestExitName(0) == "1차매도" then
Xcond1 = true;
#2차매도가 한번 발생하면 더이상 발생못하도록 Xcond2는 true
if LatestExitName(0) == "2차매도" then
Xcond2 = true;
#Xcond1이 false일때
#진입이후 최저가에서 매도위치1차 만큼 상승하면 일부 청산
if Xcond1 == false Then
exitlong("1차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치1차/100),"",Floor(MaxContracts*(매도비중1차/100)),1);
#Xcond2가 false일
#진입이후 최저가에서 매도위치2차 만큼 상승하면 전량청산
if Xcond2 == false Then
exitlong("2차매도",Atlimit,lowest(L,BarsSinceEntry)*(1+매도위치2차/100));
#최근 진입후 3일이상 경과(현재 일자수가 최근진입시점의 일자수보다 3이상증가)
if Didx >= LatestEntryDidx+타점보유일수 and Xcond1 == false and CurrentContracts == CurrentContracts[1] Then{
#최근 진입이후 3일되었을때의 최근진입일 포함3일 최저가 계산
if date != date[1] and Didx == LatestEntryDidx[BarsSinceEntry]+3 Then{
Loss = daylow(1);
for cnt = 1 to 타점보유일수 {
if daylow(cnt) < Loss Then
Loss = daylow(cnt);
}
}
#Loss값 이하로 가격하락하면 전량 청산
exitlong("손절",AtStop,Loss);
}
#최종 매수일 포함 3일경과되면 다음날 시가에 매도
if Didx == LatestEntryDidx+(타점보유일수-1) and stime == 150000 Then{
exitlong("익절2",AtMarket);
}
# 1차매도가 발생한 상황
# 가장 최근 진입일의 당일최저가보다 낮은 시세 발생하면 전량청산
# if L < LatestEntrylow and Xcond1 == false Then
# LatestEntrylow = L;
# if Xcond1 == true and CurrentContracts == CurrentContracts[1] Then{
# exitlong("익절1",AtStop,LatestEntrylow);
# }
}
else{ #매수포지션이 아니면 false로 초기화
Xcond1 = false;
Xcond2 = false;
}
}
2015-11-03
273
글번호 91986
답변완료
질문
아래 코드를 분봉에서 적용하고자 합니다
요점은 N일동안의 누적 VAR3을 구하고자 합니다
예를들어 분봉에서 일봉의 10일동안의 VAR3을 구하고자하면
INPUT:N(10);
으로 해서 10일동안의 누적 VAR3을 표현하고자합니다
그리고
그 누적 지표 VAR3의
1.당일 VAR3 시초값
2.당일 VAR3 마지막값
3.당일 VAR3 최고값
4.당일 VAR3 최저값
5.전일 VAR3 시초값
6.전일 VAR3 마지막값
7.전일 VAR3 최고값
8.전일 VAR3 최저값
9.전전일 VAR3 시초값
10.전전일 VAR3 마지막값
11.전전일 VAR3 최고값
12.전전일 VAR3 최저값
....구하고자 합니다
#################################
if then
var1 = var1+Upvol;
var2 = var2+DownVol;
VAR3 = VAR1 - VAR2;
##################################
2015-11-03
216
글번호 91985
답변완료
삼선전환도
삼선전환도를 이용하려고하는데 수식을 어떻게 작성하나요?
함수명이 없는데 만들어서 써야하나요?
2015-11-03
286
글번호 91984