커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6487
글번호 230811
답변완료
부탁 드립니다.
언제나 도움 주셔서 깊이 감사 드립니다.
그림과 같이
지정한 시간의 RSI지표가
어딘가 수식의 오류로 정상이 아닙니다.
정정 부탁 드릴까 합니다.
미리 감사 드립니다.
노고에 경배 올립니다.
var : cond1(false),cond2(false),cond3(false);
if sdate == 20151120 and (stime == 153000 or (stime > 153000 and stime[1] < 153000)) then{
Cond2 = true;
var21 = 0;
}
if sdate == 20151120 and (time == 213000 or (time > 213000 and time[1] < 213000)) then
Cond2 = false;
if sdate > 20151120 then
Cond2 = false;
if cond2 == true then{
var21 = var21+RSI(14);
plot11(var21,"지표");
}
PlotBaseLine1(0,"0");
2015-11-23
233
글번호 92638
답변완료
수식작성 부탁드립니다.
1일선이 20일선을 돌파한날의 종가를 기준선으로 만들고싶습니다.
2015-11-22
167
글번호 92637
답변완료
부탁드림니다.
아래 키움식을 예스전환부탁드림니다.
1식:Lrs(20,5)
2식:Lrs(20)
2015-11-22
185
글번호 92636
답변완료
수식문의드립니다
전일 동 시간(대비)비교하여 거래량이 110% 이상인 종목검색
2015-11-21
179
글번호 92635
답변완료
문의드립니다
input : aa(3),P(5);
var : cnt(0),count(0),count1(0);
var : cnt2(0),count2(0),count3(0);
var : HH(0),HV(0);
var : HH2(0),HV2(0);
count= 0;
For cnt =0 to 5 Begin
if h == h[cnt] Then
count = count + 1;
count1 = count + h;
end
var1 = (count1);
HH = var1;
HV = H;
for cnt = 0 to P-1{
if var1[cnt] > HH Then{
HH = var1[cnt];
HV = H[cnt];
}
}
count2= 0;
For cnt2 =0 to 5 Begin
if h == l[cnt2] Then
count2 = count2 + 1;
count3 = count2 + h;
end
var2 = (count3);
HH2 = var2;
HV2 = H;
for cnt2 = 0 to P-1{
if var2[cnt2] > HH2 Then{
HH2 = var2[cnt2];
HV2 = H[cnt2];
}
}
plot1(Hv);
plot2(Hv2);
위 수식은 만들어주신걸 살작 가공하였습니다
그런데
여기서 더 가공하고 십은것은 hh 와 hh2 의값을+합하여
이전 5봉중 가장큰값의고가를 표시하고십습니다
var1 = (Hh+Hh2);
plot2(var1); 이런식으로 해보니 안되어서요
부탁드립니다
감사합니다
2015-11-21
188
글번호 92634
답변완료
부탁드립니다.
if MarketPosition <= 0 and 첫매수진입조건 Then
buy("b");
if MarketPosition == 1 Then{
exitlong("bl",AtStop,EntryPrice-PriceScale*15);
exitlong("bp",AtLimit,EntryPrice+PriceScale*30);
if MaxEntries == 1 Then
buy("bb",atlimit,EntryPrice-PriceScale*10);
}
if MarketPosition >= 0 and 첫매도진입조건 Then
sell("s");
if MarketPosition == -1 Then{
exitlong("sl",AtStop,EntryPrice+PriceScale*15);
exitlong("sp",AtLimit,EntryPrice-PriceScale*30);
if MaxEntries == 1 Then
sell("ss",atlimit,EntryPrice+PriceScale*10);
}
&&&&&&&&&&&&&&
( 상기수식에서 매도청산의 exitlong을 exitshort로 변경했읍니다.)
&&&&&&&&&&&&&&&
그림 2를보면 추가계약 체결은 잘되는것 같은데...
청산이 따로 되네요.
첫 계약의 청산조건에서 두번째 계약도 같이 일괄 청산되게 부탁드립니다.
( 두계약의 평단이 아닌 첫계약 청산조건에서 일괄청산되게 부탁드립니다.)
*** 궁금한점하나
--- 추가진입은 봉완성시인가요? 아님 10틱지정가인가요?
혹, 지정가라면 봉완성시추가계약이 체결되는 수식도 부탁드립니다.
*** 궁금한점 둘
--- 그림2에서 두번째신호의 청산이 이상하네요.
추가계약되면서 익절이되어야 정상인것같은데...
&&&&&&&&&&&
*** 다른 부탁 하나 더 드립니다.
C < O+PriceScale*20
상기수식을 data2에서 적용할수있게 변경 부탁드립니다.
2015-11-21
187
글번호 92633
답변완료
호가잔량 호가건수 시스템식
안녕하세요!!
매수호가+ 와 매수건수+ 면 매수
매수호가- 와 매수건수- 면 매도
수익 0.5P(변수값가능) 청산후 매매종료
여기서 각각 호가와 건수 차이가 300 이상일때만 (변수로 조정가능)
수식신호가 나오는 시스템식 부탁드립니다
늘 수고하시는 노고에 감사드립니다.
2015-11-21
285
글번호 92632
답변완료
문의 드립니다.
아래수식을 부탁드립니다.
1 1분봉에서 일봉5일이평을 표현합니다.
2 ma(c,5)>일봉5일이평 차이가 1 이상일때 당일상전환 정의하고
3 ma(c,5)<일봉5일이평 차이가 이이상일때 당일하전환이라 정의 함
4 당일까지 상전환,하전환의 일수를 표현한다,
상전환예를들면 발생일이 상전환1,다음일이 상전환2...
하루에 몇번이 발생해도 일수로는 하나로 간주함.
당일상전환이 없는날도 상전환일수에는+함,
즉 당일하전환이발생하지 않으면계속+하고,
당일하전환이발생시 상전환일수는 0 로함
5.상전환경우에 상전환진행중인데 ..
그사이 멸일간은 당일하전환도없고 당일상전환도 없이진행돼다가
그이후 당일상전환이 발생한경우,
이전당일상전환과 현당일상전환 사이의 일수를 표현함
6. 하전환경우도 5와동일하게 표현함.
위식을 부탁드립니다.
2015-11-22
178
글번호 92631
답변완료
문의드립니다
안녕하세요
아래지표식(RENKO_MACD)에서 MACD 대신에
1.RENKO_스토케스틱(단순이평적용)
2.RENKO_CCI
지표식을 각각 부탁드립니다.
input:renkoSize(0.5),p1(12),p2(26),p3(9);
input : 마지막봉시간(065900);
var:j(0),k(0),renkoCnt(0),gubun(0),filename("renko2.txt"),printOK(False),
sum(0),ema1_OK(false),ema2_OK(false),sig_OK(False),idx(0);
array:OO[50](0),HH[50](0),LL[50](0),CC[50](0),ma1[50](0),ma2[50](0),
ema1[50](0),ema2[50](0),macdVal[50](0),macdSig[50](0);
if Bdate != Bdate[1] Then
idx = 0;
idx = idx+1;
If idx == 0 Then { //break on session에 해당, 즉 일자가 바뀌면 새로 계산
gubun = 0; //방향을 초기화한다. 이후 형성되는 가격에 의해 방향이 계산
For j = 49 DownTo 1 { //금일 시가봉을 신규 추가
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
ema1[j] = ema1[j-1];
ema2[j] = ema2[j-1];
macdVal[j] = macdVal[j-1];
macdSig[j] = macdSig[j-1];
}
OO[0] = C; //분봉의 종가를 기반으로 계산하기 때문에 당일 시초가 아니다
HH[0] = C;
LL[0] = C;
CC[0] = C;
}
Else {
If gubun == 0 and CC[0] > 0 Then { //일 첫봉이 완성되지 않은 시점
If OO[0] - renkoSize >= C Then {
gubun = -1;
CC[0] = OO[0] - renkoSize;
HH[0] = OO[0];
LL[0] = CC[0];
//지수이평을 계산할 수 있을 만큼 렌코가 만들어진 이후 계산 시작
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
j = 0;
if printOK then print(filename,
"1=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
Else If OO[0] + renkoSize <= C Then {
gubun = 1;
CC[0] = OO[0] + renkoSize;
HH[0] = CC[0];
LL[0] = OO[0];
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
j = 0;
if printOK then print(filename,
"2=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
If LL[0] - renkoSize >= C Then {
gubun = -1;
renkoCnt = Int(Round((LL[0]-C)/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
if ema1_OK then ema1[j] = ema1[j-renkoCnt];
if ema2_OK then ema2[j] = ema2[j-renkoCnt];
if ema2_OK then macdVal[j] = macdVal[j-renkoCnt];
if sig_OK then macdSig[j] = macdSig[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = LL[j+1];
CC[j] = LL[j+1] - renkoSize;
HH[j] = OO[j];
LL[j] = CC[j];
if ema1_OK then ema1[j] = (CC[j]-ema1[j+1])*(2/(p1+1))+ema1[j+1];
if ema2_OK then ema2[j] = (CC[j]-ema2[j+1])*(2/(p2+1))+ema2[j+1];
if ema2_OK then macdVal[j] = ema1[j] - ema2[j];
if sig_OK then macdSig[j] = (macdVal[j] - macdSig[j+1])*(2/(P3+1))+macdSig[j+1];
if printOK then print(filename,
"3=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If HH[0] + renkoSize <= C Then {
gubun = 1;
renkoCnt = Int(Round((C-HH[0])/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
ema1[j] = ema1[j-renkoCnt];
ema2[j] = ema2[j-renkoCnt];
macdVal[j] = macdVal[j-renkoCnt];
macdSig[j] = macdSig[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = HH[j+1];
CC[j] = HH[j+1] + renkoSize;
HH[j] = CC[j];
LL[j] = OO[j];
if ema1_OK then ema1[j] = (CC[j]-ema1[j+1])*(2/(p1+1))+ema1[j+1];
if ema2_OK then ema2[j] = (CC[j]-ema2[j+1])*(2/(p2+1))+ema2[j+1];
if ema2_OK then macdVal[j] = ema1[j] - ema2[j];
if sig_OK then macdSig[j] = (macdVal[j] - macdSig[j+1])*(2/(P3+1))+macdSig[j+1];
if printOK then print(filename,
"4=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If stime >= 마지막봉시간 and stime[1] < 마지막봉시간 Then { //당일 종가봉에서
For j = 49 DownTo 1 {
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
ema1[j] = ema1[j-1];
ema2[j] = ema2[j-1];
macdVal[j] = macdVal[j-1];
macdSig[j] = macdSig[j-1];
}
If LL[1] > C Then { //종가가 이전 봉보다 아래 형성
OO[0] = LL[1];
CC[0] = C;
HH[0] = OO[0];
LL[0] = CC[0];
} Else If HH[1] < C Then { //종가가 이전 봉보다 위에 형성
OO[0] = HH[1];
CC[0] = C;
HH[0] = CC[0];
LL[0] = OO[0];
} Else { //종가가 이전 봉의 중간에 형성
OO[0] = C;
CC[0] = C;
HH[0] = C;
LL[0] = C;
}
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
j = 0; //마지막 1봉만 출력
if printOK then print(filename,
"5=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
if ema1_OK == False and CC[p1] > 0 then { //지수이평 계산 가능할 때까지 대기
sum = 0;
for j = 0 to p1 - 1 {
sum = sum + CC[j];
}
ema1[0] = sum/p1; //처음 값은 단순이평값으로
ema1_OK = True; //다음 봉부터 지수이평 계산되도록 설정
}
if ema2_OK == False and CC[p2] > 0 then {
sum = 0;
for j = 0 to p2 - 1 {
sum = sum + CC[j];
}
ema2[0] = sum/p2;
ema2_OK = True;
}
if sig_OK == False and CC[P2+p3] > 0 then {
sum = 0;
for j = 0 to p3 - 1 {
sum = sum + macdVal[j];
}
macdSig[0] = sum/p3;
sig_OK = True;
}
Plot1(macdVal[0],"macd");
Plot2(macdSig[0],"macd signal");
PlotBaseLine1(0);
2015-11-23
317
글번호 92630