커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6526
글번호 230811
답변완료
함수수정요청(11-1호)_특정시간대 변수 산출
아래는 최근 10일동안 해외선물의 일중 움직임(시가와 고가, 고가와 저가, 시가와 저가)을 관찰하여 매매의 전략을 세우고자 했었습니다.
그런데 최근 10일동안에 영업일의 하루 종일이 아닌 하루동안의 특정시간대의 움직임을 관찰하여 매매에 활용하고자 합니다.
즉 최근 10일동안 우리시간으로 오후 17시부터 익일 3시까지의 움직임으로 아래와 같은 함수를 짜보고 싶습니다.
수정부탁드립니다.
var : entry1(0);
var : ho1(0),OL1(0),HL1(0);
var : maho1(0),maOL1(0),maHL1(0);
var : cnt1(0),sumho1(0),sumOL1(0),sumHL1(0);
var : EntryCnt1(0);
var : V1(0),V2(0),V3(0),V4(0),V5(0);
var : V6(0),V7(0),V8(0),V9(0),V10(0);
if bdate != bdate[1] Then
entry1 = 0;
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
entry1 = entry1+1;
ho1 = Dayhigh-Dayopen;
OL1 = DayOpen-DayLow;
HL1 = DayHigh-DayLow;
sumho1 = 0;
sumOL1 = 0;
sumHL1 = 0;
for cnt1 = 1 to 10{
sumho1 = sumho1 + (dayhigh(cnt1)-dayopen(cnt1));
sumOL1 = sumOL1 + (DayOpen(cnt1)-DayLow(cnt1));
sumHL1 = sumHL1 + (DayHigh(cnt1)-DayLow(cnt1));
}
maho1 = sumho1/10;
maOL1 = sumOL1/10;
maHL1 = sumHL1/10;
V1 =
V2 =
V3 =
V4 =
V5 =
V6 =
V7 =
V8 =
V9 =
V10 =
if MarketPosition == 0 and entry1 == 0 Then{
if V7 > V8 Then
sell("s1",AtStop,V7-0.02);
if V7 < V8 Then
sell("s2",Atlimit,V8-0.02);
}
if MarketPosition == -1 and IsEntryName("s1") == true Then{
ExitShort("sp1",atlimit,V9-0.03);
ExitShort("sl1",AtStop,V6);
}
if MarketPosition == -1 and IsEntryName("s2") == true Then{
ExitShort("sp2",atlimit,V9-0.03);
ExitShort("sl2",AtStop,V6);
}
var : TF(0);
var : Xtime(0), Etime(false),cnt(0),mav1(0),mav2(0);
var : HV(0),LV(0),HV1(0),LV1(0),HV2(0),LV2(0);
Array : HH[50](0),LL[50](0),CC[50](0);
mav1 = ma(c,5);
mav2 = ma(C,20);
TF = TimeToMinutes(stime)%30;
if Bdate != Bdate[1] Then{
Etime = true;
if stime >= 090000 Then
Xtime = 050000;
Else
Xtime = 060000;
}
if Bdate != Bdate[1] or (TF < TF[1] and stime > stime[1]) or date != date[1] Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
CC[cnt] = CC[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
CC[0] = C;
if HH[25+2] > 0 Then{
HV = HH[0];
LV = LL[0];
HV1 = HH[1];
LV1 = LL[1];
HV2 = HH[2];
LV2 = LL[2];
for cnt = 0 to 25{
if HH[cnt] > HV Then
HV = HH[cnt];
if LL[cnt] < LV Then
LV = LL[cnt];
if HH[cnt+1] > HV Then
HV = HH[cnt+1];
if LL[cnt+1] < LV Then
LV = LL[cnt+1];
if HH[cnt+2] > HV Then
HV = HH[cnt+2];
if LL[cnt+2] < LV Then
LV = LL[cnt+2];
}
var1 = (HV+LV)/2;
var2 = (HV1+LV1)/2;
var3 = (HV2+LV2)/2;
if Etime == true then{
if MarketPosition == 0 and CC[0] > var1 and CC[1] < var2 and CC[2] < var3 and C >= daylow+0.5 Then
buy("b",AtMarket);
if MarketPosition == 1 and c <= highest(H,BarsSinceEntry)-0.5 and CrossDown(mav1,mav2) Then
ExitLong("bx",AtMarket);
}
}
if stime == Xtime or (stime > Xtime and stime[1] < Xtime) Then{
Etime = false;
ExitLong();
}
2015-10-28
186
글번호 91834
답변완료
다시 문의드립니다.
이전 문의드린 내용에서 아래와 같이 그대로 적용했더니 전환선 윗쪽은 분홍색으로 나타나는데 아랫쪽은 색깔이 나타나지 않습니다.
다시 한번 살펴보시고 답을 부탁드립니다. 감사합니다.
==============================
그림 1
그림1
그림 2
그림2
그림 3
그림3
안녕하세요
예스스탁입니다.
특정값을 기준으로
위와 아래의 색을 달리하고자 하시면
기본차트속성과 지표속성에서 사용자분이
몇가지 직접 설정하셔야 합니다.
1. 지표속성 설정
우선 아래식을 지표식으로 작성하신 후에
input : P(60);
Var : 전환선(0);
전환선 = (Highest(High,P) + Lowest(Low, P)) / 2;
plot1(전환선,"전환선");
plot2(999999999,"상단");
plot3(0,"하단");
f4키를 눌러 문법검증을 하고
f5키를 누르면 지표속성창이 나타납니다.
지표속성창의 차트표시탭에서
첨부된 그림과 같이 채우기 설정을 하시고
지표속성창이 Y축표시탭에서 Y축표시를 가격으로 설정합니다.
2. 기본차트속성설정
기본차트속성은 차트에서
봉을 마우스로 더블클릭하면 나타납니다.
Y축에서 화면(기본차트)로 설정합니다.
3
위 설정을 모두 마친후에 지표적용하시면 됩니다.
2015-10-28
211
글번호 91829
답변완료
시스템식 부탁드려용.
안녕하세요. 수고가 많으십니다.
시스템식부탁드립니다.
1. 매수조건
-20이평의 기울기가 양
-볼린저밴드의 상하폭이 40틱이상
-윌리엄R(14) -80우상향 과 스토캐스틱(5,3,3)이 20 우상향할때인데
둘간의 시간차가 3분이내로 둘다 돌파되었을경우
-RSI 50이하
-ADX는 우상향하고 있어야합니다.
-RSI우상향
2. 매도조건
위와 반대로이며 볼밴의 폭은 똑같습니다.
-ADX는 우상향하고 있어야합니다.
-RSI는 우하향
늘수고가 많으십니다.
고생해주세요. 감사합니다.
2015-10-28
209
글번호 91826
관리자에 의해 프로그램 사용법 QnA로 이동되었습니다
2015-10-28
2
글번호 91821
답변완료
추가 질문입니다. 감사합니다.
매번 감사합니다.
input : N(1),nday(2),pt(0.5);
var : Entry(0);
if bdate != Bdate[1] Then
Entry = 0;
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
Entry = Entry+1;
if entry < N and H < dayhigh(2)+1 Then
buy("b",AtStop,dayhigh(2)+1);
if entry < N and H > dayhigh(2)+1 Then
buy("bb",AtLimit,dayhigh(2)+1);
if entry < N and L > daylow(2)-1 Then
sell("s",AtStop,daylow(2)-1);
if entry < N and L < daylow(2)-1 Then
Sell("ss",AtLimit,daylow(2)-1);
SetStopProfittarget(0.5,PointStop);
SetStopLoss(0.5,PointStop);
SetStopEndofday(145900);
함수는 보내 주신 것에서 반대 진입도 허용할 수 있도록 제가 조금 수정한 것입니다.
설명해 드리면, 이틀전 최고가+1/최저가-1에서 정방향반대방향 매수/매도 진입 입니다.
하루 한번만 진입합니다.
1. 제가 조금 수정한 위 함수가 제대로 작동할 수 있는 것이 맞나요?
2. 위에 input괄호 안에 있는 수는 변경하여도 수식에 변화가 없나요?
3. 신호를 쭉 살펴보니 매수/매도가 이루어 지지 않아야 할 시점에서 진입이 되는 것들이 있더라구요. 장시작 봉 근처에서 오류가 좀 발생하던데, 정정할 수 있는 방법이 없을까요?
4. 위 함수에 진입 시작시간과 제한 시간을 둘 수 있나요?(가령 진입은 9시 2분부터 11시까지, 강제청산은 15시)
감사합니다!
2015-10-28
183
글번호 91820
답변완료
시스템식에서 일부 추가 부탁드립니다.
항상 감사드립니다.
시스템식에서 일부 추가 부탁드립니다.
input:매수기준이평(120); 으로 설정하고
"매수기준이평" 즉, 120일선이 차트상 우상향이면 이전과 동일하게 매수하고, "매수기준이평"이 차트상 우하향이면 "매수위치1차"를 "시장보정계수" 만큼 낮게 매수하는 시스템식으로 다음과 같이 수정해 주시면 감사하겠습니다.
#매수기준이평(120)이 우상향인지 우하향인지 판단을 하고,
#엔벨로프 기간은 우상향이면 P, 우하향이면 (P+시장보정계수)
#엔벨로프 Percent수치는 우상향이면 매수위치1차, 우하향이면 (매수위치1차+시장보정계수)
시스템식은 아래와 같습니다.
---------------------------------------------------------------------------------------
input : 전략식시작일자(20151028), 전략식시작시간(090000), 전략총매수금액(5000); # 금액은 만원단위
input : 전략식종료일자(20151231);
input : 갭하락(5),시장보정계수(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);
#일자수 계산
if date != date[1] Then
Didx = Didx+1;
#일정%이상 갭하락이면
#엔벨로프 기간은 P+시장보정계수
#엔벨로프 Percent수치는 매수위치1차+시장보정계수
if dayopen < DayClose(1)*(1-갭하락) Then{
Period = P+시장보정계수;
매수1차 = 매수위치1차+시장보정계수;
}
else{ ##일정%이상 갭하락이 아니면 기존 설정된 p와 매수위치1차로 계산
Period = P;
매수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-10-28
215
글번호 91817
답변완료
수정부탁드림니다
안녕하세요...글번호44730
1.장시작 1분봉 첫봉에서 장시작시가라인구현과 첫봉의중심가격라인구현.
2.장시작 3분봉 첫봉에서 장시작시가라인구현과 첫봉의중심가격라인구현.
수정부탁드림니다.
수고하세요.꾸벅
2015-10-28
199
글번호 91816
답변완료
함수 수정 요청(11-1호)
안녕하세요?
아래는 최근 10일동안 해외선물의 일중 움직임(시가와 고가, 고가와 저가, 시가와 저가)을 관찰하여 매매의 전략을 세우고자 했었습니다.
단순평균을 사용하다보니 특이치를 제거하고 싶습니다.
즉 최근 10일동안 (고가-저가) 의 값이 가장 큰 값과 가장 작은 값을 제거하고
8개 값을 평균하고 싶습니다.
수정요청 부탁드립니다.
var : entry1(0);
var : ho1(0),OL1(0),HL1(0);
var : maho1(0),maOL1(0),maHL1(0);
var : cnt1(0),sumho1(0),sumOL1(0),sumHL1(0);
var : EntryCnt1(0);
var : V1(0),V2(0),V3(0),V4(0),V5(0);
var : V6(0),V7(0),V8(0),V9(0),V10(0);
if bdate != bdate[1] Then
entry1 = 0;
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
entry1 = entry1+1;
ho1 = Dayhigh-Dayopen;
OL1 = DayOpen-DayLow;
HL1 = DayHigh-DayLow;
sumho1 = 0;
sumOL1 = 0;
sumHL1 = 0;
for cnt1 = 1 to 10{
sumho1 = sumho1 + (dayhigh(cnt1)-dayopen(cnt1));
sumOL1 = sumOL1 + (DayOpen(cnt1)-DayLow(cnt1));
sumHL1 = sumHL1 + (DayHigh(cnt1)-DayLow(cnt1));
}
maho1 = sumho1/10;
maOL1 = sumOL1/10;
maHL1 = sumHL1/10;
V1 =
V2 =
V3 =
V4 =
V5 =
V6 =
V7 =
V8 =
V9 =
V10 =
if MarketPosition == 0 and entry1 == 0 Then{
if V7 > V8 Then
sell("s1",AtStop,V7-0.02);
if V7 < V8 Then
sell("s2",Atlimit,V8-0.02);
}
if MarketPosition == -1 and IsEntryName("s1") == true Then{
ExitShort("sp1",atlimit,V9-0.03);
ExitShort("sl1",AtStop,V6);
}
if MarketPosition == -1 and IsEntryName("s2") == true Then{
ExitShort("sp2",atlimit,V9-0.03);
ExitShort("sl2",AtStop,V6);
}
2015-10-28
207
글번호 91809
답변완료
질문...
시장검색에서
거래대금 상위 검색란이 있는데요
상위 100개 혹은 200개 이런식으로 갯수를 정할수는 없나요?
그리고 신호검색에서 코딩으로 종목검색시에 거래대금 상위 100개 혹은 200개식으로
검색할수은 없나요? 그리고 검색시 오름차순이나 내림차순으로 정열도 가능한가요?
2015-10-28
182
글번호 91808