커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7773
글번호 230811
답변완료
문의드립니다.
노이즈가 심한 RSI를 시간보정한 RSIx라는 지표가 있던데 어떻게 구현을 하는건가요?
관련차트 파일첨부합니다.
2009-04-21
1053
글번호 21833
답변완료
재질문 드립니다~
if
sdate > 날짜
and c > dayclose(1)*1.10 Then {
exitlong("1/2씩 청산",onclose,def,"",Int(CurrentContracts*1/2*0.1)*10,1);
}
진입이 있다고 치고
청산식이 위에 식일때 (날짜는 인풋으로 설정했음)
현재가 > 어제종가*1.10
일때 수량의 1/2 청산하고
그 다음부터는 매수청산 식이 안나온다는 말씀이죠?
저는 만약에 4월 1일날 위 수식대로 1/2가 청산이 되고
2일날 또 현재가 > 어제종가*1.10 이 되면 또 1/2이 청산이 되고
...
계속 이런식으로 반씩 즉 조건이 맞으면 하루에 한번씩 청산되도록
하고싶은데 방법이 없을까요?
2009-04-21
952
글번호 21832
답변완료
수식문의 드립니다.
아래와 같은 시스템식을 돌려보면 5분봉이하에서는 신호가 발생하나
10분봉 이상에서는 신호가 발생하지 않습니다.
원인을 알고 싶습니다.
그리고
5분차트로 돌렸을경우 그림처럼
4월17일의 경우 9:00분에 매수 174.20 에 진입하여
9:00분 174.20에 매수 청산이 되는데 청산시간도 그렇고
if C > EntryPrice+0.5 Then 이렇게 했으면
174.70에 청산이 되어야 하는게 아닌가요?
또
4월16일 9:10분 매수 청산은 174.95에 진입했으므로
175.45에 청산이 되어야 하는게 아닌가요?
어째튼 매수나 매도에서 0.5포인트든 1포인트든 정확히
익절할수 있는 방법을 알려 주시면 감사하겠습니다.
부탁드리겠습니다.
var1= ma(c,5);
var2= ma(c,20);
if stime == 151500 and
var1>var3 then
buy("매수",AtMarket);
if stime == 151500 and
var1<var2 then
sell("매도",AtMarket);
if C > EntryPrice+0.5 Then
exitlong();
if C < EntryPrice-0.5 Then
exitshort();
SetStopLoss(1,PointStop);
SetStopEndofday(1500);
2009-04-21
1055
글번호 21825
답변완료
지표식 문의
분봉에서 고가-저가를 계산한뒤 이것의 5개봉의 평균을 plot하려면 어떻게 하나요?
이때 전일의 것은 무시하고 그날것만 표시하는겁니다...
그럼 봉이 다섯개 생긴후 그려지게 되겠네요....
그리고 각각의 고가-저가를 엑셀로 저장하고 싶어요..
2009-04-21
1038
글번호 21820
답변완료
고점 저점 표시...
예전에 수식지왕님께서 올려 주신 지표인데, 3.1에 적용하니까 'i'가 선언되어 있지 않다고 오류가 생기네요.
수정 좀 부탁드립니다.^^
/* Swing 파동선.yin */
input:n(5),미완성사용(true);
var:j(0),k(0),고점표시(0),저점표시(0);
array:고[20](0),저[20](0),고bar[20](0),저bar[20](0),
고idx[20](0),저idx[20](0);
#=========================================================#
# 초기처리 (initialize routine)
#=========================================================#
# index()와 마찬가지로 1봉이 바뀔 때마다 1씩 증가
#---------------------------------------------------------#
for j = 1 to 19 {
저bar[j] = 저bar[j] + 1;
고bar[j] = 고bar[j] + 1;
고idx[j] = i - 고bar[j];
저idx[j] = i - 저bar[j];
}
고점표시=(o[n]+c[n])/2;
저점표시=(o[n]+c[n])/2;
#=========================================================#
# 주처리 (Main Routine) 파동선 계산
#=========================================================#
# 전고점(peak) 계산
#---------------------------------------------------------#
//Highest(H,2)[3] <= H[2] && H[2] > Highest(H,2)
if Highest(H,n)[n+1] <= H[n] and H[n] > Highest(H,n) then {
if 미완성사용 == true then {
for j = 18 downto 1 { //배열값을 순차적으로 바꿔준다
고[j+1] = 고[j];
고bar[j+1] = 고bar[j];
고idx[j+1] = 고idx[j];
}
고[1] = h[n];
고bar[1] = n;
고idx[1] = i - 고bar[1];
고점표시 = 고[1]*1.005;
if 저bar[1] > 고bar[2] then {
for j = 18 downto 1 {
저[j+1] = 저[j];
저bar[j+1] = 저bar[j];
저idx[j+1] = 저idx[j];
}
k = n + 1;
for j = n + 2 to 고bar[2]-1 {
if l[k] > l[j] then k = j;
}
저[1] = l[k];
저bar[1] = k;
저idx[1] = i - 저bar[1];
}
}
if 미완성사용 == false then {
if 고bar[1] > 저bar[1] then { //고-저-고 순서로 나올 때
for j = 18 downto 1 { //배열값을 순차적으로 바꿔준다
고[j+1] = 고[j];
고bar[j+1] = 고bar[j];
고idx[j+1] = 고idx[j];
}
고[1] = h[n];
고bar[1] = n;
고idx[1] = i - 고bar[1];
고점표시 = 고[1]*1.005;
} //저-고-고 순서로 발생했을때
else if 고[1] <= h[n] then { //이전고점보다 높으면
고[1] = h[n]; //고점[1]만 바꿔준다. 저-고 순서 유지
고bar[1] = n;
고idx[1] = i -고bar[1];
고점표시 = 고[1]*1.005;
}
}
}
#---------------------------------------------------------#
# 전저점(trough) 계산
#---------------------------------------------------------#
//Lowest(L,2)[3] >= L[2] && L[2] < Lowest(L,2)
if Lowest(L,n)[n+1] >= L[n] and L[n] < Lowest(L,n) then {
if 미완성사용 == true then {
for j = 18 downto 1 {
저[j+1] = 저[j];
저bar[j+1] = 저bar[j];
저idx[j+1] = 저idx[j];
}
저[1] = l[n];
저bar[1] = n;
저idx[1] = i - 저bar[1];
저점표시 = 저[1]*0.995;
if 고bar[1] > 저bar[2] then {
for j = 18 downto 1 {
고[j+1] = 고[j];
고bar[j+1] = 고bar[j];
고idx[j+1] = 고idx[j];
}
k = n + 1;
for j = n + 2 to 저bar[2]-1 {
if h[k] < h[j] then k = j;
}
고[1] = h[k];
고bar[1] = k;
고idx[1] = i - 고bar[1];
}
}
if 미완성사용 == false then {
if 저bar[1] > 고bar[1] then {
for j = 18 downto 1 {
저[j+1] = 저[j];
저bar[j+1] = 저bar[j];
저idx[j+1] = 저idx[j];
}
저[1] = l[n];
저bar[1] = n;
저idx[1] = i - 저bar[1];
저점표시 = 저[1]*0.995;
}
else if 저[1] >= l[n] then {
저[1] = l[n];
저bar[1] = n;
저idx[1] = i - 저bar[1];
저점표시 = 저[1]*0.995;
}
}
}
#---------------------------------------------------------#
# 변곡점의 점 표시
#---------------------------------------------------------#
if 고점표시 > h[n] then plot1(고점표시,"전고점",RED); //점그래프
if 저점표시 < l[n] then plot2(저점표시,"전저점",BLUE); //점그래프
#---------------------------------------------------------#
# 파동선 표시
#---------------------------------------------------------#
if 고bar[1]==n and 고[1] > 0 then plot3(고[1]); //선그래프
if 저bar[1]==n and 저[1] > 0 then plot3(저[1]); //선그래프
if 저bar[1]==n and 저[1] > 0 then plot4(저[1]); //선그래프
if 고bar[1]==n and 고[1] > 0 then plot4(고[1]); //선그래프
2009-04-21
1248
글번호 21819
답변완료
수식 좀 봐주세요~
현재 밑에식처럼 매수청산 사용하고 있는데요
이 청산이 매일 매일 적용되면 좋겠습니다
지금은 이 청산식이 한번 나오면 다음날 부터는 안나오더라구요
이 청산식이 한번 나와도 다음날 부터는 다시 적용되었으면 합니다.
if sdate > 날짜
and c > dayclose(1)*설정퍼센 Then {
exitlong("1/2씩 청산",onclose,def,"",Int(CurrentContracts*1/2*0.1)*10,1);
}
2009-04-21
1071
글번호 21818
답변완료
여집합
기존에
매수1
매수2
로 진입하는 조건이 있습니다
이번에, 매수3 조건을 추가하려고 합니다.
그런데 매수3은, 매수1, 매수2조건과 겹칠 수도 있는데요...
기존의 매수1, 매수2에 해당하지 않는 경우에 한해서 진입하고 싶습니다.
아래와 같이 하면 되는지요?
condition1=매수1 조건
condition2=매수2 조건
if condition1==true
then buy("매수1")
if condition2==true
then buy("매수2")
condition3=매수3 조건
if condition1<>true and
condition2<>true and
condition3==true
then buy("매수3")
이렇게 하면, 시뮬레이션 그래프에서, 매수1, 2에 안걸리는 곳 중에서,
매수3이 걸리게 되나요?
2009-04-21
1205
글번호 21817
답변완료
지표식과 시스템식 함께 부탁드립니다.
input: percent1(10), percent2(20), percent3(30),P1(50),P2(30),P3(20);
Value1 = Highest(H, index+1);
value2 = value1*(1-Percent1/100);
value3 = value2*(1-Percent2/100);
value4 = value3*(1-Percent3/100);
Value5 = Lowest(L, index+1);
value6 = value5*(1+P1/100);
value7 = value6*(1+P2/100);
value8 = value7*(1+P3/100);
if MarketPosition == 0 and CurrentEntries == 0 and C > value2 Then
buy("b1",AtLimit,value2);
if MarketPosition == 1 and CurrentEntries == 1 and C > value3 Then
buy("b2",AtLimit,value3);
if MarketPosition == 1 and CurrentEntries == 2 and C > value4 Then
buy("b3",AtLimit,value4);
먼저 빠른 답변 감사드립니다.
1. 선생님께서 만들어주신 수식인데여 저가가 저 라인을 돌파할 때 매수라고 말씀드렸는
데 저기는 종가로 나와있네여. 그리고 부등호도 반대고. 그래서 C를 L로 바꾸어고 부등
호도 반대로 해봤는데 저가가 밑으로 하락돌파할 때 신호가 나오지 않고 그 다음 봉에
서 매수신호가 나왔습니다. 저가가 저 선을 하락돌파할 때 바로 매수신호가 뜰 수 있는
수식 좀 부탁드립니다.
2. 두번째 질문은 로그차트에서 일정기간(예 20일)의 고저폭의 30% 50% 75% 등의 선을
긋는 지표식을 부탁드리며
3. 2번의 선들을 저점이 하향돌파할 때 매수신호가 발생하는 시스템식을 부탁드립니다.
일반 차트가 아니라 로그 차트입니다. 너무 부탁이 많네여. 감사합니다.
2009-04-21
1115
글번호 21816
답변완료
다시 한번 봐주세요^^
안녕하세요?
어제 매매가 일어나지 않아 글을 올렸던 사람입니다.
제가 data2 참조차트가 '일봉'이라는 말을 쓰지 않았었네요.
어제 말씀드린대로 참조차트 일봉으로 아래와 같은 로직을 돌리면 매매가 일어나는데
DOEB = data2(atr(9))*진입A2_atrP;
if C > dayopen+dayopen*DOEB/100 then
buy();
그런데「어제 timelow」와 관련된 조건을 넣으면 매매가 일어나지 않습니다.
if date != date[1] Then
var2 = var1[1]; ## 전일 9시~12시 전까지의 최저가
var1 = TimeLow(90000,115959); ## 당일 9시~12시 전까지의 최저가
var : DOEB(0);
Input : 진입A2_atrP(0.16);
DOEB = data2(atr(9))*진입A2_atrP;
if C > dayopen+dayopen*DOEB/100
and daylow(1) == var2 then
buy();
과거 봉 데이터는 충분히 불러왔습니다.
daylow(1) == var2라는 조건이 맞는 구간임에도 매매가 일어나지 않습니다.
참고로 참조차트를 분봉으로 돌리면 매매가 일어나더군요.
다시 한번 봐주세요.
그럼 수고하시고 좋은 하루 보내세요.
[추가질문]
시간과 상관 없이 "daylow가 dayhigh 이전에 발생할경우"를 어떻게 코딩하는지도 알려주시면 감사하겠습니다.
2009-04-21
1046
글번호 21815