커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7741
글번호 230811
답변완료
[17260] 재질문
[17260]을 시스템에 적용했더니 신호가 잘 나오지 않습니다.
참고로 포지션 시스템이 아니라, 당일청산관계로 전략이 여러가지 입니다.
---------------------------------------------------------
if scnt < 1 and crossdown(c, ma(c,20) then sell("A");
if isentryname("A")and crossup(c, ma(c,5)) Then buy("B");
"A"의 목표 청산가 1포인트
다시 위사례을 가지고 부탁드립니다.
[순서]
1. "A" 매도진입체결
2. "A"의 매도에대한 목표가 이익청산.
3. "A"매도에 대한 리버설 매수진입 "B"체결.
[반대로]
1. "A" 매수진입체결
2. "A"의 매수에대한 목표가 이익청산.
3. "A"매수에 대한 리버설 매도진입 "B"체결.
2011-02-21
780
글번호 35913
답변완료
지표식 문의드립니다
당일 선물고저 2포인트 폭의 선을 부탁드립니다
다른분거 응용할려했는데 선이안나오네요
2011-02-20
852
글번호 35912
답변완료
문의
17015번에 질문한 내용을 똑같이 질문합니다
1. 먼저 답변주신 내용의 코딩이 맞는지 한번 더 확인부탁드립니다
좀 이상한 곳이 있어서...
2. 두가지(A,B)의 예를 제가 들었는데
코딩내용에서 보면 A가 B보다 크다는 전제하에 코딩내용을 보내주셨는데
실제는 A,B선의 값이
1) A ,B 모두 양수
2) A :양수, B:음수일 경우
3) A,B모두 음수일 경우
보내주신 코딩내용은 1)인경우 문제없지만 2),3)인경우 이상해집니다
그러므로 제가 원하는 내용은 A,B의 폭을 얘기합니다
제 생각으로는 절대치를 이용한다던지 해야할것같구요
A,B의 최대폭을 기준으로 현재값의 위치가 최대폭대비 얼마나 하락한것인지
알고싶습니다
2011-02-20
794
글번호 35911
답변완료
수식부탁드립니다.
안녕하세요?
선물이용 옵션 매수 시스템 입니다.
진입은 주로 이평이 이전값보다 상승할 때를 이용하고 있습니다.
[시스템식]
Input : Period1(5),Period2(20);
Var : 이평1(0),이평2(0);
이평1 = ma(C, Period1);
이평2 = ma(C, Period2);
조건1) if 진입조건1 then buy("b1");
if 청산조건1 then exitlong("bx1",atstop,c,);
if 청산조건2 then exitlong("bx2",atstop,c,);
if 청산조건3 then exitlong("bx3");
위와같은 시스템에서 청산조건3은 var1 = highest(H,BarsSinceEntry);
를 이용한 트레일링 청산입니다.
문제점1) 트레일링청산을 하고 싶은데 highest(H,BarsSinceEntry); 함수를 사용하여
트레일링을 하면 청산즉시 같은 봉에서 다시 진입신호가 나오는 문제가 있습니다.
질문1) 청산조건3에서 진입이후 20% 이상 상승했고, ma(c,5) < ma(c,5)[1] 일때
진입조건1로 진입한 보유 잔고의 50%만 분할청산 하는 식을 어떻게 구현하는지
부탁 드립니다.
20%이상 상승했더라도 이평이 하락하지 않고 ma(c,5) > ma(c,5)[1] 이면 당연히
이평값이 하락할 때까지 기다리고요...
질문2) 청산조건3에서 보유잔고의 50% 청산 후 가격이 상승하여 다시 진입조건1에 만족하면 분할청산했던 50%만큼 재진입할 수 있게 부탁드립니다.
질문3) 기타 위의 문제점1을 분할청산 하지않고 해결하는 다른방법이 있으면 수식작성을 부탁드립니다.
항상 감사합니다
2011-02-21
807
글번호 35910
답변완료
수식 검증 부탁드립니다.
수고하십니다.
밑의 수식을 시물레이션 하니 오류 메세지 가 나오는데 검정 및 수정 부탁드립니다.
Input:n(5),r(1.025),지표사용(False);
Var:j(0),k(0),q(0),기간최저(0),고점상태(0),저점상태(0),고점기울기(0),고점절편(0),
저점기울기(0),저점절편(0),고점Bar(0),저점Bar(0),패턴번호(0),기울기(0),
저항선(0),지지선(0),상승(100),하락(-100),평행(1),
평균기울기(0), 평균대비하락각(0),평균대비상승각(0);
Var:macdVal(0),macdSig(0),stoK(0),stoD(0);
Array:고[20](0),저[20](0),고Bar[20](0),저Bar[20](0),고Idx[20](0),저Idx[20](0),
고LRS[20](0),저LRS[20](0),sumXY[20](0),sumX[20](0),sumY[20](0),sumX²[20](0),
sumY²[20](0),고점상관계수[20](0),저점상관계수[20](0);
#---------------------------------------------------------#
# index()와 마찬가지로 1봉이 바뀔 때마다 1씩 증가
#---------------------------------------------------------#
for j = 1 to 19 {
고Bar[j] = 고Bar[j] + 1;
저Bar[j] = 저Bar[j] + 1;
고Idx[j] = Index - 고Bar[j];
저Idx[j] = Index - 저Bar[j];
}
고점Bar = 고점Bar + 1;
저점Bar = 저점Bar + 1;
#=========================================================#
# 파동선 계산
#=========================================================#
# 전고점(Peak) 계산
#---------------------------------------------------------#
if Highest(H,n)[n+1] <= H[n] and H[n] > Highest(H,n) 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];
고LRS[j+1] = 고LRS[j];
}
}
if 고Bar[1] > 저Bar[1] or 고[1] <= H[n] then {
고[1] = H[n];
고Bar[1] = n;
고Idx[1] = Index - 고Bar[1];
sumXY[1] = 고Idx[3]*고[3] + 고Idx[2]*고[2] + 고Idx[1]*고[1];
sumX[1] = 고Idx[3] + 고Idx[2] + 고Idx[1];
sumY[1] = 고[3] + 고[2] + 고[1];
sumX²[1] = 고Idx[3]^2 + 고Idx[2]^2 + 고Idx[1]^2;
고LRS[1] = (3*sumXY[1] - sumX[1]*sumY[1])/(3*sumX²[1] - sumX[1]^2);
}
}
#---------------------------------------------------------#
# 전저점(Trough) 계산
#---------------------------------------------------------#
if Lowest(L,n)[n+1] >= L[n] and L[n] < Lowest(L,n) 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];
저LRS[j+1] = 저LRS[j];
}
}
if 저Bar[1] > 고Bar[1] or 저[1] >= L[n] then {
저[1] = L[n];
저Bar[1] = n;
저Idx[1] = Index - 저Bar[1];
sumXY[1] = 저Idx[3]*저[3] + 저Idx[2]*저[2] + 저Idx[1]*저[1];
sumX[1] = 저Idx[3] + 저Idx[2] + 저Idx[1];
sumY[1] = 저[3] + 저[2] + 저[1];
sumX²[1] = 저Idx[3]^2 + 저Idx[2]^2 + 저Idx[1]^2;
저LRS[1] = (3*sumXY[1] - sumX[1]*sumY[1])/(3*sumX²[1] - sumX[1]^2);
}
}
#----------------------------------------------------------------------------#
# 선형회귀방정식 #
#----------------------------------------------------------------------------#
# nΣxy - (Σx)(Σy) #
# 기울기 a = --------------------- #
# nΣx²- (Σx)² #
# #
# = (n*sum(xy) - sum(x) * sum(y)) / (n*sum(x^2)-sum(x)^2) #
# #
# (Σy)(Σx²)-(Σx)(Σxy) #
# 절편 b = --------------------------- #
# nΣx²- (Σx)² #
# #
# = (sum(y)*sum(x^2) - sum(x)*sum(xy)) / (n*sum(x^2) - sum(x)^2) #
#----------------------------------------------------------------------------#
# 상관도 공식 #
#----------------------------------------------------------------------------#
# n(Σxy) - (Σx)(Σy)
# r = ------------------------------------- #
# √[nΣx²- (Σx)²][nΣy²- (Σy)²] #
# #
# =(n*sum(xy)-sum(x)*sum(y))/sqrt((n*sum(x^2)-sum(x)^2)(n*sum(y^2)-sum(y)^2))#
#----------------------------------------------------------------------------#
#=========================================================#
# 파동분석
#=========================================================#
기간최저 = Lowest(L,n*20);
if 저[1][1] != 저[1] or 저Bar[1][1] + 1 != 저Bar[1] then { //저점 변동이 있을 경우
#---------------------------------------------------------#
# 고점 추세선 분석
#---------------------------------------------------------#
k = 0;
for j = 1 to 19 {
sumXY[j] = sumXY[j-1] + 고Idx[j]*고[j];
sumX[j] = sumX[j-1] + 고Idx[j];
sumY[j] = sumY[j-1] + 고[j];
sumX²[j] = sumX²[j-1] + 고Idx[j]^2;
sumY²[j] = sumY²[j-1] + 고[j]^2;
#---------------------------------------------------------#
# 상관도가 가장 높은 선형회귀선 검색
#---------------------------------------------------------#
고점상관계수[j] = ((j*sumXY[j] - sumX[j]*sumY[j])/
Sqrt((j*sumX²[j] - sumX[j]^2)*(j*sumY²[j] - sumY[j]^2)));
if j >= 3 and
Abs(고점상관계수[k]) < Abs(고점상관계수[j]) then
k = j;
}
고점기울기 = (k*sumXY[k] - sumX[k]*sumY[k])/(k*sumX²[k] - sumX[k]^2);
#---------------------------------------------------------#
# 가장 외곽을 지나는 추세선 검색
#---------------------------------------------------------#
q = 1;
for j = 2 to k {
if 고점기울기*고Bar[q]+고[q] < 고점기울기*고Bar[j]+고[j] then
q = j;
}
고점절편 = 고[q];
고점Bar = 고Bar[q];
#---------------------------------------------------------#
# 기울기 분석
#---------------------------------------------------------#
기울기 = 고점기울기/ma(C,n*4)*10000;
if 기울기 > 2 then 고점상태 = 상승;
else if 기울기 < -2 then 고점상태 = 하락;
else 고점상태 = 평행;
#---------------------------------------------------------#
# 저점 추세선 분석
#---------------------------------------------------------#
k = 0;
for j = 1 to 19 {
sumXY[j] = sumXY[j-1] + 저Idx[j]*저[j];
sumX[j] = sumX[j-1] + 저Idx[j];
sumY[j] = sumY[j-1] + 저[j];
sumX²[j] = sumX²[j-1] + 저Idx[j]^2;
sumY²[j] = sumY²[j-1] + 저[j]^2;
#---------------------------------------------------------#
# 상관도가 가장 높은 선형회귀선 검색
#---------------------------------------------------------#
저점상관계수[j] = ((j*sumXY[j] - sumX[j]*sumY[j])/
Sqrt((j*sumX²[j] - sumX[j]^2)*(j*sumY²[j] - sumY[j]^2)));
if j >= 3 and
Abs(저점상관계수[k]) < Abs(저점상관계수[j]) then
k = j;
}
저점기울기 = (k*sumXY[k] - sumX[k]*sumY[k])/(k*sumX²[k] - sumX[k]^2);
#---------------------------------------------------------#
# 가장 외곽을 지나는 추세선 검색
#---------------------------------------------------------#
q = 1;
for j = 2 to k {
if 저점기울기*저Bar[q]+저[q] > 저점기울기*저Bar[j]+저[j] then
q = j;
}
저점절편 = 저[q];
저점Bar = 저Bar[q];
#---------------------------------------------------------#
# 기울기 분석
#---------------------------------------------------------#
기울기 = 저점기울기/ma(C,n*4)*10000;
if 기울기 > 2 then 저점상태 = 상승;
else if 기울기 < -2 then 저점상태 = 하락;
else 저점상태 = 평행;
#---------------------------------------------------------#
# 고점과 저점 추세를 비교하여 패턴판별
#---------------------------------------------------------#
패턴번호 = 0;
if 고점상태 == 평행 and 저점상태 == 평행 then 패턴번호 = 1;
if 고점상태 == 평행 and 저점상태 == 상승 then 패턴번호 = 2;
if 고점상태 == 하락 and 저점상태 == 평행 then 패턴번호 = 3;
if 고점상태 == 하락 and 저점상태 == 상승 then 패턴번호 = 4;
if 고점상태 == 하락 and 저점상태 == 하락 and
고점기울기 < 저점기울기 then 패턴번호 = 5;
#---------------------------------------------------------#
#원형바닥,삼봉바닥
#---------------------------------------------------------#
if 패턴번호 == 0 and
고LRS[4] < 고LRS[3] and 고LRS[3] < 고LRS[2] and 고LRS[2] < 고LRS[1] and
고LRS[4] < 0 and 고LRS[1] > 0 and
저LRS[4] < 저LRS[3] and 저LRS[3] < 저LRS[2] and 저LRS[2] < 저LRS[1] and
저LRS[4] < 0 and 저LRS[1] > 0 and
기간최저== min(저[6],저[5],저[4],저[3]) and
max(고[9],고[8],고[7],고[6],고[5]) > 고[2] then
패턴번호 = 6;
#---------------------------------------------------------#
# 바닥 V자 모형
#---------------------------------------------------------#
if 패턴번호 == 0 then {
for j = 1 to 3 {
기울기 = (고[j]-저[j])/abs(고Bar[j]-저Bar[j])+
(고[j]-저[j+1])/abs(고Bar[j]-저Bar[j+1]);
}
기울기 = 기울기/6;
평균기울기 = ema(기울기,n*10);
평균대비하락각 = Atan((고[1]-저[1])/abs(고Bar[1]-저Bar[1])/평균기울기)*180/pie();
평균대비상승각 = Atan((H-저[1])/저Bar[1]/평균기울기)*180/pie();
if 고bar[1]-저bar[1]>= n*3 and //장기하락, V자형 나오기 쉬움
평균대비하락각 >= 60 and 평균대비상승각 >= 60 then //각도가 60도이상
패턴번호 = 7;
}
if 패턴번호 > 5 then {
고점기울기 = 0;
고점절편 = 고[1];
고점Bar = 고Bar[1];
}
}
#---------------------------------------------------------#
# 저항선, 지지선 계산
#---------------------------------------------------------#
저항선 = 고점기울기 * 고점Bar + 고점절편;
지지선 = 저점기울기 * 저점Bar + 저점절편;
#=========================================================#
# 시스템식
#=========================================================#
macdVal = MACD(12,26);
macdSig = ema(macdVal,9);
stoK = StochasticsK(5,3);
stoD = StochasticsD(5,3,3);
if 패턴번호 > 0 and (저Bar[1]==n or C[1] <= 저항선[1]) and C > 저항선 and
iff(지표사용,(macdVal > macdSig and macdVal > 0) or (stoK > stoD and stoK > 50),1)
then {
if 패턴번호 == 1 then Buy("직사각");
if 패턴번호 == 2 then Buy("상향직각삼각");
if 패턴번호 == 3 then Buy("하향직각삼각");
if 패턴번호 == 4 then Buy("대칭삼각");
if 패턴번호 == 5 then Buy("하락쐐기");
if 패턴번호 == 6 then Buy("원형바닥");
if 패턴번호 == 7 then Buy("바닥V자");
}
if 지표사용 and 패턴번호 > 0 and 저항선 > 0 and C > 저항선 then {
if CrossUp(macdVal,macdSig) and macdVal > 0 then
Buy("MACD골드크로스");
if CrossUp(stoK,stoD) and stoK > 50 and (C > ma(c,5) or C > ma(C,20)) then
Buy("스토K골드크로스");
}
if 지표사용 then {
if CrossDown(macdVal,macdSig) and macdVal < 0 then
ExitLong("macd데드크로스");
if CrossDown(stoK,stoD) and stoK < 50 and (C < ma(c,5) or C < ma(C,20)) then
ExitLong("스토K데드크로스");
}
if CrossDown(C,저[1]) then ExitLong("추세종료");
2011-02-20
1026
글번호 35909
답변완료
수식작성 부탁드립니다.
수고많으십니다.
수식작성을 부탁드립니다.
특정조건1 = (20일 최고가 돌파, cci(20)>=100, macd(12,26)>=0)
특정조건2 = crossup((ma(c,6), ma(c,33))
특정조건1 발생이후 전일까지 최고가를 금일 돌파하고 금일 특정조건1 발생하면 var1=5,
특정조건1 발생이후 전일까지 최고가를 전일 돌파하고 금일 특정조건1 발생하면 var1=2,
(특정조건1 발생이후 전일까지 최고가와 돌파봉 사이에는 최소 3개봉이상경과해야함)
특정조건2 발생전 전저점을 이탈하지 않고, 특정조건2 재차 발생시
var2=1,
특정조건2 발생전 전저점을 이탈하지 않고, 특정조건2 3차 발생시
var2=3,
특정조건2 발생전 전저점을 이탈하지 않고, 특정조건2 4차 이상발생시
var2=5,
금일 상승폭 상한가발생시
var3=10,
금일 상승폭 12%이상발생시
var3=8,
금일 상승폭 10%이상발생시
var3=6,
금일 상승폭 8%이상발생시
var3=4,
var1+var2+var3 >= 15 이상시 매수
33일이평 이탈시 매도
10%하락시 손절
2011-02-20
804
글번호 35907
답변완료
수식문의
지난 금요일 답변 감사드립니다^^
문의 번호 17264와 17265 에대해서 변경되게하여 문의 올립니다^^
첫번 질문입니다.
17264의 매수식에서
1번 수식이 한번 나온후에는 같은 정배열상태에서는 다시 반복해서 신호가 나오지않게하여주 시고
단,한번 정배열로 진입과청산한후에 5이평이 10이평을 데드크로스했다가 다시 5이평이 10이평을 골든트로스후 주가가 5이평을 돌파할때느 진입할 수 있게 해주시면 감사하겠습니다.
두번째 질문입니다.
틱차트에서 2시 40분에는 모든 포지션을 청산하고
2시 40분이후에는 매매를 할수없게 해주시면 고맙겠습니다.
이 수식은 매수수식과 청산수식 그다음에 연결해서 써놓아야하는지요?
세번째 질문입니다.
진입가격에서 10%이상(또는 20틱이상) 상승한후에 상승최고가격에서 10%하락할때 청산하는 트레일링스탑식을 부탁드립니다.
그리고 진입가격대비 3%이상 10%미만까지만 가격이 오르다가 10이평하향돌파할때 청산하는 식도 부탁드립니다.
네번째 질문입니다..
단순이평대신에 DEMA를 이용한 정배열 수식을 부탁드립니다.
예를들면 DEMA5>= DEMA10>= DEMA20 이런식으로요^^
다섯번째 질문은
리딩스타플러스차트에서 전일 차트는 나오지않고 당일 9시부터 첫봉이 나오는 순수한 당일차트(전일과 연결된것이 아닌..)를 어떻게 보고 실행할 수 있는지요?
그리고 그런 차트로도 시스템자동매매가 가능한지요?
마지막으로
진입가격대비 -5%(또는 -12틱)에서 강제손절하는 손절식도 부탁드립니다.
진입이후 손실중일때 10이평하향돌파시 청산식도 부탁드립니다..
진입갯수도 한번 수식으로 입력해놓으면 씨스템가동시 항시 작동할 수 있게 할 수 있는지요?
하루 최대손실한도액(예를들어 60만원)을 설정하고 이 금액을 넘어서면 그날 매매는
더 이상 할 수 없게 할 수는 없는지요
질문이 너무 많아서 죄송합니다.^^
늘 건강하시고 행복하시기를 바랍니다
2011-02-21
996
글번호 35906
답변완료
콜옵션에 풋옵션 고점 저점
특정 콜옵션 차트에 풋옵션의 전날 고점 저점을 그리고 싶은데 어떻게 그려야 하는지요? 콜 260에 풋의 전날 고점 저점을 그리고 싶습니다.
2011-02-19
932
글번호 35904
답변완료
질문드립니다^^
피봇시스템입니다
지표식
Var : value(0),value1(0);
value = (DayHigh(1)+DayLow(1))/2;
value1=dayhigh(1);
Plot1((dayHigh(1)+daylow(1))/2, "중간값");
Plot2(dayHigh(1), "고가");
Plot3(dayLow(1), "저가");
plot4(dayhigh(1)-(value1-value)/2,"중간의중간");
plot5(daylow(1)+(value1-value)/2,"중간의중간2");
시스템식
Vars : value(0),value1(0),value2(0),value3(0),value4(0);
value = (DayHigh(1)+DayLow(1))/2;
value1=dayhigh(1);
value2=(dayHigh(1)+daylow(1))/2;##중간값
value3=(dayhigh(1)-(value1-value)/2);#중고
value4=(daylow(1)+(value1-value)/2);#중저
setstopendofday(1500);
var : cnt(0),count(0);
count = 0;
for cnt = 0 to 10{
if sdate == EntryDate(cnt) Then
count = count+1;
}
if MarketPosition() == 0 and count == 0 Then{
if stime >=093000 and stime <= 150000 then{if c>value2 then
Buy("첫매수",atstop,value3);}
if stime >=093000 and stime <= 150000 then{if c<value2 then
sell("첫매도",atstop,Value4);}
}
if MarketPosition() != 0 Then{
if stime >=093000 and stime <= 150000 then
ExitLong ("콜손절",atstop,value2);
if stime >=093000 and stime <= 150000 then
exitshort("풋손절",atstop,value2);}
if MarketPosition() == 0 and count >= 1 Then{
if stime >=093000 and stime <= 150000 Then{if c>value2 then
Buy("두번째매수",atstop,value3);}
if stime >=093000 and stime <= 150000 Then{if c<value2 then
sell("두번째매도",atstop,value4);}
}
이런식인데 요약하자면 중간값위에서 피봇선에서 매수 중간값아래서 피봇선에서 매도인데
보통 첫그림처럼 atstop주문이라 그값에서 주문이 나갑니다 근데 갭이떠버리면 10:30분 이후주문이 atstop을 무시하고 그냥 나가게 됩니다 어찌해야할까요?^^;
2011-02-19
849
글번호 35902