커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7746
글번호 230811
답변완료
변수()의 의미에 대해서 질문입니다.
지표식 처음에 (렌코함수 예제)
var : 방향(0), 상승(1),하락(-1)
이런식으로 초기값을 지정해 준후
if 방향 == 상승 { 조건을 만족하면 방향=하락 }
else if 방향 == 하락 { 조건을 만족하면 방향=상승 }
그리고 지표 그리기
if 방향[1]== 하락 and 방향 == 상승 이면 지표 그리기 라고 했을때
1. '방향' 이라는 변수는 0,상승,하락 중의 하나만 값을 갖는거 아닌가여?
2. 또한 '방향' 수치형 변수 이고 1개의 값을 갖는 1차 배열인데 방향[1]이런식으로 조건을 줄수가 있는지요?? 줄 수가 있다면 방향[1]이라는 거는 어떤 의미를 갖고 값을 갖게 되는지요?
2010-12-03
628
글번호 34067
답변완료
분할 진입
시스템은 신호가 발생하면 설정한 수량을 한번에 주문이 나간다고 알고 있습니다.
다만 분할로 진입하기 위해서는 어떤 조건식을 넣어줘야 되는지요~
가령 진입신호가 나오고 10계약을 주문해야되는데 한번에 넣지않고
2계약씩 5회에 걸쳐 주문을 넣고 싶습니다.
감사합니다.
2010-12-03
665
글번호 34066
답변완료
야간선물 수식.
야간선물에서
"첫번째 또는 n번째 봉에서 현재가가 시초가보다 크면 매수, 작으면 매도"는
어떻게 수식을 작성하는지요?
2010-12-03
757
글번호 34065
답변완료
crossup 에러 수정 부탁드립니다.
input:열시(1.5),전부(2); # 거래량 증가 비율
var:폭락(0),지지논리(false),지지논리2(false),지지값(0), 지위치(0),지지1(0);
var:g(0),gg(0),g1(0),j(0),j1(0),j2(0); #카운터
var:휩소(False),거래량(0);
var:위치(0),보유(False),날짜(0), 분봉(0),돌파1(False), 카운터(0);
Var: d2상승(0), 하락종가(0),상위치(0),상날짜(0),상승종가(0),날짜1(0);
array:지지[10](0),음봉값[3](0),음봉값d2[3](0),돌파[2](0),상승[3](false),상승시가[3](0);
# data2 (상승) , 하락 판단.
if date != date[1] then{
상승[0] = false;
날짜1= date;
상승시가[0]=o;
}
# 상승 에 대한 False
if DayIndex>1 then{
if data2(v)>highest(data2(v),20)[1] Then{
if data2(c)>data2(c[1]) and data2(c)>highest(data2(c),20)[1] then{ #d2의 c,v 상승
상승시가[0]=data1(o);
상승종가= data1(c);
상위치=DayIndex;
상승[0]=true;
for gg=1 to 2{
상승[gg]=상승[gg-1];
상승시가[gg]=상승시가[gg-1];
}
상날짜=date;
}
}
}
#23456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345#
if dayindex == 0 Then
지지논리 = false;
# 7봉 보다 크고 열시 전, d2 음봉- 거래량 2배- 7봉중 거래량 top
if dayindex>0 and time<=100000 then
Begin # begin
if data2(c) < data2(o) and data1(v)>ma(data1(v),5)[1]*열시
and data2(v) > Highest(data2(v),7)[1] then{
지지논리=true;
음봉값[0]=data1(c);
음봉값d2[0]=data2(c);
거래량=data2(v);
지지값=data1((h+c)/2);
지위치=DayIndex;
날짜=date; #같은날인지 구분키 위한 변수
for j=1 to 2{
음봉값[j]=음봉값[j-1][1];
음봉값d2[j]=음봉값d2[j-1][1];
}}
End # end
# 10-15시 사이, d2 음봉- 거래량 2배- 5봉중 거래량 top
Else if stime>=100000 and time<=150000 then
{ # being
if data2(c) < data2(o) and data2(v)>ma(data2(v),5)[1]*전부
and data2(v) > Highest(data2(v),5)[1] then{
지지논리=true;
음봉값[0]=data1(c);
음봉값d2[0]=data2(c);
거래량=data2(v);
지지값=data1((h+c)/2);
지위치=DayIndex;
날짜 =date;
for j1=1 to 2{
음봉값[j1]=음봉값[j1-1][1];
음봉값d2[j1]=음봉값d2[j1-1][1];
}
}
}
if 상날짜==date and DayIndex-상위치 >0 and 상승[0]==True then { # 음봉값이
if crossup(음봉값[0],상승시가[0]) then{ # 상승시가 돌파
PlotPaintBar(o,c,"지지1", yellow ); <---------------------- 강조식에 적용
}
}
var1=음봉값[0]; <------------------------------------------ 지표식에 적용
var2=상승시가[0];
plot1(var1);
plot2(var2);
위 식으로 강조식 및 지표식을 구현했습니다.
음봉값 이 상승시가를 크로스 할 경우를 강조식으로 나타 내어 보았는데 제대로 나타 나지 앟습니다. 수정 및 설명 부탁드립니다.
2010-12-03
757
글번호 34059
답변완료
이평선...
갭보정 이평을 단순 차트에 넣을수 있는지 궁금합니다
예를 들어 갭보정된 5분봉 20이평을 단순차트에 넣을 수있는지요
2010-12-03
711
글번호 34051
답변완료
시스템 개시 시간
안녕하세요..
몇가지 궁금한 점이 있습니다.
1) 현재 HTS를 24시간 접속하고 있다고 해서 시스템이 정상적으로 실행되지는
않는 것으로 알고 있는데, 당일 시스템 실행에 문제가 되지 않는 한도내에서
가장 빠른 접속개시 시간이 어떻게 되는지요?
(혹시 출장이나 여행 등으로 장기간 자리를 비울 경우, HTS를 접속해 놓은
상태로 시스템이 계속 운용되게 하는 방법이 있는지요?)
2) 시초가에 진입만 있는 시스템이 있다고 가정할 때,
진입은 시스템이 하고 종가로 청산하기 위하여 수작업으로 '조건부만족'을
사용한 청산주문을 넣어도 상관없는건가요?
즉, 시가진입 종가청산을 원하여 진입은 시스템이 청산은 수작업으로
'조건부만족'을 이용한 청산을 해도 되는지요.
3) 매수진입이 있었는데 장중 손매매로 청산을 하여 무포지션이 되었다고 가정하고,
이후 setstopendofday(); 를 적용 받게 되면...
손매매로 인하여 무포지션이기 때문에 그냥 이상태로 마감이 되나요,
아니면 손매매와는 상관없이 신호에 의한 것이기 때문에 매도진입이 발생하게
되나요?
4) HTS를 종료하더라도
1. 시스템 신호중 미체결분(우선호가 등으로)
2. 수작업으로 주문낸 미체결분
등은 계속 주문이 유효한 상태로 있는 것이 맞겠지요?
즉 HTS와 접속을 하여야만 신호가 발생하여 주문이 들어간다는 것이지,
HTS를 종료하여도 이미 발생한 주문은 계속 유효한 것이 맞겠지요?
5) 실전에서 HTS를 정상적으로 작동시켜 매매신호에 의하여 거래를 하였는데,
장종료후 시뮬레이션을 다시 해보았을 때와 매매신호가 다를 수 있나요?
즉 실전에서는 신호가 나왔는데 종료후 시뮬시 신호가 없거나 또는 반대의
경우가 발생할 수 있는지요?
(맞는 표현인지 모르겠지만 시스템의 끊김이 없이 장중 실전매매시의 봉의 형태와
장종료후 시뮬시의 봉의 형태가 다른 경우가 발생하는지와 같은 질문일 수도
있을 것 같습니다)
감사합니다. 오늘도 즐거운 하루 되시기를 바랍니다~
2010-12-03
624
글번호 34050
답변완료
주문설정
1. 장시작시(AM 9시) 즉시 시장가주문 주문실행하는 식은 어떻게 되는지 하고
2.시스템 매매 설정에서 만약 10계약의 수량을 매매한다고 가정하고
진입 신호 발생시 진입은 2계약씩 5회를 주문실행(분할매매)하고
청산은 10계약을 한꺼번에 하려면 어떤식으로 해야되는지요?
시스템 매매 설정 창에서도 설정 가능한지 아니면 시스템식에 추가적으로 함수를
적용시켜줘야 되는지 궁금합니다. 감사합니다.
2010-12-03
625
글번호 34049
답변완료
안녕하세요.
안녕하세요?
수식이 너무 엉터리 같아서 창피하지만
수정 좀 부탁 드릴께요.
지난번 작성해주신 피라미딩 진입식에 조금더 보완하고 싶습니다.
부탁1. //진입조건1 or 2 or...중
1차 진입 이후에 다시 추가로 진입할 때 직전 진입가격을 기억해 두었다가
그 진입가격 이상에서만 진입이 가능하게 해 주세요. 예컨대 2차진입시는 1차진입가격 보다 클때만 ...3차진입시에는 2차진입가격 이상에서...4차는 > 3차 ...(물타기 금지)
2. 청산은 언제나 직전 진입가격 보다 -10 % 낮으면 전량 청산 예컨대 3차례 진입이 있었다면 3차 진입가격 보다 -10%이면 현재 보유량을 전부 청산...하고, 다시 진입신호 나오면 반복...
또는 직전매수가격 이후 C가 < lowest(L,5)하는 방법도 괜잖을 것 같네요. 두가지를 모두 구현해 보고 싶습니다 .
## 함수중에 EntryPrice(N)가 있지만 피라미딩에서는 적용이 안된다고 하여 변수를 대입해 보았지만 실패 했습니다.
Input : P1(5), p2(12), p3(24), p4(50), p5(80), openpositionprofit(0.1);
Input : 투자원금(5000000) ;
Var : value1(0), value2(0), value3(0);
var : 피봇(0), 저항1(0), 저항2(0),저항3(0),지지1(0),지지2(0),지지3(0);
피봇 = (dayhigh(1)+dayLow(1)+dayclose(1)) /3;
저항1 = 2* 피봇 - dayLow (1);
저항2 = 피봇 + dayhigh(1)-dayLow(1);
지지1 = 2* 피봇 -dayhigh(1);
지지2 = 피봇 - dayhigh(1)+dayLow(1);
var1 = ma(c, p1);
var2 = ma(c, p2);
var3 = ma(c, p3);
var4 = ma(c, p4);
var5 = ma(c, p5);
var6 = ma(H, p1);
var7 = ma(H, p2);
var8 = ma(H, p3);
var9 = ma(H, p4);
var10 = ma(H, p5);
value1 = Disparity(P1) ;
value2 = Disparity(P2) ;
value3 = Disparity(P3) ;
value4 = Disparity(P4) ;
value5 = Disparity(P5) ;
## 매수조건 1
IF
crossup(value2, 98) or crossup(value2, 97) OR crossup(value2, 96) or
crossup(value2, 95) OR crossup(value2, 94) or crossup(value2, 93) OR crossup(value2, 92) Or
crossup(value2, 91) OR crossup(value2, 90) or crossup(value2, 89) OR crossup(value2, 88) Or
crossup(value2, 87) OR crossup(value2, 86) or crossup(value2, 85) OR crossup(value2, 84) or
crossup(value2, 83) OR crossup(value2, 82) or crossup(value2, 81) OR crossup(value2, 80) or
##피봇 1.5
( ( crossup(c, 저항1) or crossup(c,피봇)) and crossup(value2, 95 ))
THEN {
// 피라미딩
if CurrentEntries >= 0 then {
if crossup(var6,var2) then
buy("처음", atlimit ,L, int(투자원금*0.1/C/100000)); }
if CurrentEntries >= 0 and openpositionprofit >= 0 then{
if crossup(value2, 92) Or crossup(value2, 91) OR crossup(value2, 90) or
crossup(value2, 89) OR value2 <= 80 then
buy("둘째", atlimit, L, int(투자원금*0.15/C/100000));}
if CurrentEntries >= 0 and openpositionprofit > 0 and var6 > var2 and var7>var3 and
(var2[1]<=var2[1] or var7[1] <= var3[1]) then {
buy("세째",atlimit , L, int(투자원금*0.15/C/100000)); }
if CurrentEntries >= 0 and openpositionprofit >= 0 and crossup(value3 , 88) and c > var1 //and var3 > var3[1]
then{
buy("계속",atlimit , c, int(투자원금*0.15/C/100000)); }}
// 청산조건
IF MARKETPOSITION ==1 then{
crossdown(value2 , 103) OR crossdown(value2 , 104) OR crossdown(value2 , 105) OR
crossdown(value2 , 106) OR crossdown(value2 , 107) OR crossdown(value2 , 108) OR
crossdown(value2 , 109) OR crossdown(value2 , 110) OR crossdown(value2 , 111) OR
crossdown(value2 , 112) OR crossdown(value2 , 113) OR crossdown(value2 , 114) OR
crossdown(value2 , 115) OR crossdown(value2 , 116) OR crossdown(value2 , 117) OR
crossdown(value2 , 118) OR crossdown(value2 , 119) OR crossdown(value2 , 120) OR
crossdown(value2 , 121) OR crossdown(value2 , 122) OR crossdown(value2 , 123) OR
crossdown(value2 , 124) OR crossdown(value2 , 125) OR crossdown(value2 , 126) ;
}
//분할청산
// THEN {
if MarketPosition == 1 Then{
if CurrentContracts > CurrentContracts[1] Then{ #진입에 의해 수량이 상승할때마다 청산비율 재계산
value11 = CurrentContracts;
value12 = int(value11*0.4);
value13 = int(value11*0.5);
value14 = value11-value12-value13;}
if CurrentContracts == value11 and var6 > var2 and
openpositionprofit > 0.5 and
crossdown(value2 , 106) OR crossdown(value2 , 107) OR crossdown(value2 , 108)
Then { #최초진입이나 추가진입이후 첫청산
ExitLong("bx1",onclose,def,"",value12,1);}
if CurrentContracts == value11-value12 and barssinceexit +2 and var6 < var2 and var7 < var3 and
(var2[1]>=var2[1] or var7[1] >= var3[1]) and
openpositionprofit > 0.9 and
crossdown(value2 , 106) OR crossdown(value2 , 107) OR crossdown(value2 , 108)
Then{ #최초진입이나 추가진입이후 두번째 청산
ExitLong("bx2",onclose,def,"",value13,1); }
if CurrentContracts == value14 and barssinceexit +2 and openpositionprofit > 0.9 and
crossdown(value2 , 110) OR crossdown(value2 , 111) OR
crossdown(value2 , 112) OR crossdown(value2 , 113) OR crossdown(value2 , 114) OR
crossdown(value2 , 115) OR crossdown(value2 , 116) OR crossdown(value2 , 117) OR
crossdown(value2 , 118) OR crossdown(value2 , 119) OR crossdown(value2 , 120) OR
crossdown(value2 , 121) OR crossdown(value2 , 122) OR crossdown(value2 , 123) OR
crossdown(value2 , 124) OR crossdown(value2 , 125) OR crossdown(value2 , 126)
Then{ ##최초진입이나 추가진입이후 세번째 청산
ExitLong("bx3");}}
if marketposition == 1 and barssinceentry + 2 And
crossdown( var1 , var8) Then
exitlong("손절", onclose,def,"세째");
setstopendofday(150000);
2010-12-03
753
글번호 34048
답변완료
종목자료값에 문제가 있는거같습니다.
종목 : sts반도체
파워종목검색에서 종목검색이 되는데, 같은조건으로 차트에서 지표식으로 검색표시를
해보니까 검색이 한번도 안된걸로 나오네요.
그래서 키움차트랑 같이 펼쳐놓고 보니까 120이평만 비교해봐도 키움차트이평이랑
이평위치가 많이 차이나는걸 확인했습니다. 예스트레이더 파워종목검색에서도 검색이
되는데 차트에서 지표식으로 검색표시했을때만 검색이안되었어야 맞는것처럼 나오는걸
보면 키움에서의 자료값문제라기보다는 예스차트에서의 값에 뭔가 오류가 있는거같아
보입니다. 확인부탁드립니다.
2010-12-03
740
글번호 34047