커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4725
글번호 230811
답변완료
문의드립니다
input : aa(0),P2(00),P3(00),Period1(0);
var : cnt(0),count(0),count1(0);
var : cnt2(0),count2(0),count3(0);
var : cnt4(0),count4(0),count5(0);
var : cnt6(0),count6(0),count7(0);
var : HH(0),HV(0);
var : HH1(0),HV1(0);
var : HH2(0),HV2(0);
var : HH3(0),HV3(0);
var11 = ma(h,Period1);
var22 = ma(l,Period1);
var33 = (var11+var22)/2;
count4= 0;
For cnt4 =0 to 0 Begin
if h == h[cnt4] Then
count4 = count4 + 1;
count5 = count4 + h;
if h == l[cnt4]Then
count4 = count4 + 1;
count5 = count4 + h;
end
var3 = (count5);
HH2 = var3;
HV2 = H;
for cnt4 = 0 to P2-1{
if var3[cnt4] > HH2 Then{
HH2 = var3[cnt4];
HV2 = H[cnt4];
}
}
value2 = HV2
count6= 0;
For cnt6 =0 to 0 Begin
if l == l[cnt6]Then
count6 = count6 + 1;
count7 = count6 + l;
if l == h[cnt6]Then
count6 = count6 + 1;
count7 = count6 + l;
end
var4 = (count7);
HH3 = var4;
HV3 = l;
for cnt6 = 0 to P3-1{
if var4[cnt6] > HH3 Then{
HH3 = var4[cnt6];
HV3 = l[cnt6];
}
}
value3 = HV3
# 매수/매도청산
If CrossUP var33 > value2 and var33 > value3 Then
{
Buy();
}
# 매도/매수청산
If CrossDown var33 > value2 and var33 > value3 Then
{
Sell();
}
검증이 안되고있어 문의드립니다
var33 > value2 var33 > value2 매수식입니다
var33 이 value2 와value3를 2개다 크로스업확정되면 시장가매수하고 십습니다
매수청산 1차청산은
매수진입하고 매수가보다 큰 상태에서 봉이5개가 진난후에 최고가대비80% 빠지면청산하고십습니다
매수손절은 진입가에-15틱으로 부탁드립니다 손절되면 다음 신호까지대기하기
매수진입한상태에서 매도신호가 나오면 매수는청산하고 매도진입 하고십습니다
매도는 반대로요 부탁드립니다
P2값 P3값 Period1값들을 돌려가며 수익률을 검증해보고십습니다
주석을 부탁드립니다 감사합니다
2015-11-24
161
글번호 92677
답변완료
문의 드립니다.
45130번 추가 부탁입니다.
수식에 문외한이라
작성하신수식의 의미를 알고싶습니다.
수식과 더불어 해설을 부탁드립니다.
2015-11-23
144
글번호 92676
답변완료
부탁드립니다.
현물 분봉 매매
<진입 조건>
-매수시간 : 14:00~14:30
-당일 거래량은 전일 동일시간 거래량 대비 50%이하이고,
-당일 주가는 5일 이격도(일봉의 이격도) 103이하로 내려간 적이 없어야 하고,
-당일의 거래량 중 시가 +5% 이상에서 채결된 거래량은 전체거래량의 절반 이하이고,
-매매를 1일 1회로 제한
<진입>
-5일 이격도(일봉의 이격도) 103~105 사이이면 진입
<당일 청산>
-5일 이격도(일봉의 이격도) 100.5이하로 하락시 전량 청산
-매수가 대비 +5%이상 상승시 매수수량의 50% 청산
<+1일 청산>
-5일 이격도(일봉의 이격도) 100.5이하로 하락시 전량 청산
-매수가 대비 5%상승시 매수수량(잔고)의 50%청산
-매수가 대비 20%상승시 전량 청산
-매수가 대비 10%상승 후 상승(100%가정)가격 대비 70% 하락시 전량 청산
(10%상승 후 3%로 하락시 청산)
<+2일 청산>
-5일 이격도(일봉의 이격도) 100.5이하로 하락시 전량 청산(+1일과 같음)
-매수가 대비 5%상승시 매수수량(잔고)의 50%청산(+1일과 같음)
-매수가 대비 20%상승시 전량 청산(+1일과 같음)
-매수가 대비 10%상승 후 상승(100%가정)가격 대비 80% 하락시 전량 청산(+1일과 같음)
-14:46시 이후 첫 봉에 모두 청산
감사합니다.
2015-11-23
175
글번호 92675
답변완료
한 가지만 봐주세요...
아래 식 중 맨 아래에....
-"당일 10:00 조건 없이 청산"을 -> 당일 10:00 이후 첫봉에 조건없이 청산.
감사합니다.
============================================
var : cnt(0),count(0);
count = 0;
for cnt = 0 to 20{
if sdate == EntryDate(cnt) Then
count= count+1;
}
if stime < 92000 and
dayopen >= DayClose(1)*0.97 and dayopen <= DayClose(1)*1.05 and
count == 0 Then{
buy("b1",atlimit,DayClose(1)*0.92);
buy("b2",atlimit,Dayopen*0.90);
}
if MarketPosition == 1 and
stime >= 94000 and
C > EntryPrice Then
exitlong();
SetStopProfittarget(7,PercentStop);
SetStopLoss(7,PercentStop);
SetStopEndofday(100000);
즐거운 하루되세요
> 쌀사비팔 님이 쓴 글입니다.
> 제목 : 부탁드립니다.
> 현물. 틱, 혹은 분봉 매매
<진입 조건>
-진입시간 : 09:00~09:20
-당일 시가는 전일 종가대비 -3%~ +5%이고
-매매는 1일 1회로 제한
<진입>
-전일 종가대비 -8%이하로 하락시 진입
-당일 시가대비 -10%이하로 하락시 진입
** 두 개의 진입 중 한 가지만 만족하여도 집입되어야 합니다.
<청산>
-진입 가격대비 +7%상승시 청산
-진입 가격대비 -7%하락시 청산
-당일 09:40 이후부터는 진입가격 이상이면 청산
-당일 10:00 조건 없이 청산
2015-11-23
152
글번호 92669
종풍화성 님에 의해서 삭제되었습니다.
2015-11-23
0
글번호 92667
답변완료
45140번글 관련 검토 부탁드립니다.
그림1)과 같이 "최종익절"신호가 1차매도후에 "최종익절위치" 만큼 하락하면 나와야 하는데 아래 최종익절에 관한 부분이 이상합니다.
그림2)와 같이 한참후에 오히려 상승한 구간에서 "최종익절" 신호가 나왔습니다.
다시 검토 부탁드립니다. 그리고 수정된 부분만 주석 달아 주시면 감사하겠습니다.
그리고 45140번글 마지막 추가질문도 답변 부탁드려요..
if Condition1 == true and CurrentContracts < MaxContracts then {
if stime <= 145500 Then
exitlong("최종익절1",atlimit,LatestExitPrice(0)+diff*최종익절위치);
if stime == 150000 and H >= LatestExitPrice(0)+diff*최종익절위치 Then
exitlong("최종익절2",AtMarket);
}
------------------- 전체 시스템식 입니다. ---------------------------------
## 일봉상 일목균형표의 120일 기준선을 참조하여 3분봉에서 매매함.
## 외부변수 설정 ##
input : 전략시작일자(20151019), 전략시작시간(090000), 전략매수금액(2000);
input : 매수위치1차(1), 매수위치2차(2);
input : 매도위치1차(1.5), 매도위치2차(2);
input : 매수비중1차(50), 매수비중2차(50);
input : 매도비중1차(50), 매도비중2차(50);
input : 전략진입횟수(1);
input : 최종손절위치(10),최종익절위치(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 Then { # EntryCond1은 false일때(첫진입이 발생하면 true로 변경되어 한번만 진입하게 됨)
# (1차매수),(1차매수.)은 가격이 하락해서 1차매수가격을 터치한 것인지
# 시가가 갭으로 1차매수가격 이하에서 바로 시작해서 신호가 발생한것인지
# 구분하기 위해서 1차매수를 2개의 함수로 작성한 것입니다.
# 시가가 지정한 가격보다 위에서 시작하면 하락해서 지정한 가격 터치시 매수(1차매수)
# 시가가 지정한 가격보다 이하에서 바로 시작하면 시가에 바로 매수(1차매수.)
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차매수가격을 터치하면 신호발생(즉 가격이 하락해서 첫 터치가 발생하면 매수)
if stime <= 145500 Then
buy("2차매수1",atlimit,var1-value*(매수위치2차+1),Floor((전략매수금액*10000*(매수비중2차/100))/C));
if stime == 150000 and L <= var1[1]-value[1]*(매수위치2차+1) Then
buy("2차매수2",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",atlimit,LatestExitPrice(0)+diff*최종익절위치);
if stime == 150000 and H >= 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차매수.진입신호가 발생하면 true
if MarketPosition == 1 and (LatestEntryName(0) == "1차매수1" or LatestEntryName(0) == "1차매수2" or LatestEntryName(0) == "1차매수3") Then
entrycond1 = true;
# 매수진입 후 2차매수가 발생하면 true
if MarketPosition == 1 and (LatestEntryName(0) == "2차매수1" or LatestEntryName(0) == "2차매수2") Then
entrycond2 = true;
# 무포지션이면 flase로 초기화
if MarketPosition == 0 Then {
entrycond1 = false;
entrycond2 = false;
}
2015-11-23
199
글번호 92666
답변완료
문의드립니다..
물타기식 부탁드립니다
1- 시초가 대비 +- 0.5에 첫진입
2- 시초가 대비 +- 0.75에 둘째 진입
3- 시초가 대비 +- 1.00에 추가 진입
4- 시초가 대비 +- 1.50에 또 추가진입
5- 시초가 대비 +- 2.00에 또 추가진입
이런 로직 부탁합니다.
감사합니다.
2015-11-23
162
글번호 92665
답변완료
신호발생시점
atstop
역지정가, 주문함수의 신호타입을 결정하는 주문예약어
→ 매수 포지션 주문(Buy, ExitShort)인 경우에는 지정한 가격 이상에서 주문 발생
→ 매도 포지션 주문(Sell, ExitLong)인 경우에는 지정한 가격 이하에서 주문 발생
atstop 에 대한 YesLange의 설명 내용은 위와 같이 되어 있습니다.
신호발생 시점에 대한 설명이 없어 질문드립니다.
1. 봉의 완성 전 조건만족 즉시 신호발생
2. 조건이 만족하는 봉의 완성 후 즉시
3. 조건이 만족하는 봉의 다음봉 시가
4. 그 밖에 다른조건
위 4가지 시점 중 어느시점인지요? 4 의 경우라면 설명 부탁 드립니다.
atstop 의 신호발생 시점에 대하여 상세히 알고 싶습니다.
2015-11-23
183
글번호 92663
답변완료
부탁드립니다
1.
if date > date[1]+30 Then{
var1 = 0;
var2 = 0;
var3 = 0;
}
var1 = var1+c;
var2 = var2+1;
var3 = var1/var2;
plot1(var3);
위 내용은 1일부터 그려지내요.
[질문]
1. 이것을 특정일을 지정 해서 시작 할수 있나요?
가령 ) 2015년 10월 9일 시작
2. 특정일 2015,10,9일 시작부터 봉갯수 20개만
2015-11-23
165
글번호 92662