커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6577
글번호 230811
답변완료
종목검색 수식 부탁드립니다.
5ma, 20ma, 60ma, 120ma 정배열된 상태에서
음봉의 아랫꼬리(저가)가 5ma 위에 있는 종목
2015-05-05
183
글번호 85705
답변완료
종목검색 수식 부탁드립니다.
직전 고점 돌파한 당일 거래량 60이평의 2배 이상 거래량
2015-05-05
168
글번호 85704
답변완료
부탁드립니다.
안녕하세요.
도움을 받고자 하는 내용은....
H[2] < H[1] and H[1] > H 이면 H[1]을 저장하고 TOP으로 이름을 정하였다면 TOP과 TOP[1]과 TOP[2],TOP[3] 중 MAX 와 MIN을 구하고, 구한값의 저가를 차트에 표시하고 싶습니다.
반대로
L[2] > L[1] and L[1] < L 이면 L[1]을 저장하고 BOT으로 이름을 정하였다면 BOT과 BOP[1]과 BOP[2],BOP[3] 중 MAX 와 MIN을 구하고, 구한값의 고가를 차트에 표시하고 싶습니다.
부탁드립니다.
2015-05-05
177
글번호 85703
답변완료
수식부탁해요
종목은크루드미니
매수:641틱봉에서macd 시그널이 골든크로스가 나고 30틱에서 macd 가 골든크로스가 날때
매수진입하고
청산은 30틱에서 데드가날때 청산 종가로 진입과 청산은 현재가에서 트치하면 청산한다
매도:641틱봉에서macd 시그널이 데드가 나고 30틱에서 macd 가 데드가 날때
매도진입하고
청산은 30틱에서 돌든크로스가 날때 청산 종가로 진입과 청산은 현재가에서
트치면 청산한다.
수식을 부탁드립니다
그리고 크루드오일 미니크루드오일로도 가능한지요
현대선물을 사용합니다.
감사합니다.
매매시간은 16:00~02:00까지
2015-05-05
193
글번호 85702
답변완료
타주기_3분_100틱 시스템
항상 감사드립니다
아래식은 분봉챠트에서 적용하는 매매시스템식입니다
주차트는 1분봉
타주기챠트는 100틱으로 설정하고
주챠트와 타주기챠트에서 동일신호가 나왓을때 진입청산코자 합니다
시스템식 부탁드립니다.
##########################
### DEMA 이평선 ########
##########################
INPUTS: LENGTH1(72),LENGTH2(120),LENGTH3(240);
VARS : DEMA1(0),DEMA2(0),DEMA3(0),idx(0),idx1(0),idx2(0);
var1= EMA(C,LENGTH1);
value1= EMA(EMa(C,LENGTH1),LENGTH1);
var2= EMA(C,LENGTH2);
value2= EMA(EMa(C,LENGTH2),LENGTH2);
var3= EMA(C,LENGTH3);
value3= EMA(EMa(C,LENGTH3),LENGTH3);
DEMA1 = var1 * 2 - value1;
DEMA2 = var2 * 2 - value2;
DEMA3 = var3 * 2 - value3;
##########################
### 피봇지지저항_3단계 ###
##########################
var21 = (((dayOpen(1)+dayHigh(1)+dayLow(1)+dayClose(1))/4)*2)-dayLow(1);
var22 = (((dayOpen(1)+dayHigh(1)+dayLow(1)+dayClose(1))/4)*2)-dayHigh(1);
var23 = (dayOpen(1)+dayHigh(1)+dayLow(1)+3*dayClose(1))/6-0.0003;
##########################
### 선행스팬2(48) 기준 ###
##########################
var48 = (Highest(High, 48) + Lowest(Low, 48)) / 2; #선행스팬2_48#
##########################
### 선행스팬2(48)_추세 ###
##########################
var : T(0);
var48 = (Highest(High,48 ) + Lowest(Low, 48)) / 2; #선행스팬2_48#
if var48 > var48[1] Then
T = 1;
if var48 < var48[1] Then
T = -1;
if T == 1 and T[1] != 1 Then
var58=1;
if T == -1 and T[1] != -1 Then
var58=-1;
####################
###신거래선 기준 ###
####################
if V == highest(V,20) Then
var20 = (C+H+L)/3; #20거래선#
if V == highest(V,60) Then
var60 = (C+H+L)/3; #60거래선#
######################
##### ADX 시스템 #####
######################
input : Period3(14);
var : ADXv1(0),DP2(0),DM2(0);
ADXv1 = ADX(Period3);
DP2 = DiPlus(Period3);
DM2 = DiMinus(Period3);
###############################
##### 션샤인 보조_1호(DI) #####
###############################
Input: DIP(14);
var : DP1(0),DM1(0),ZZ(0);
DP1 = ema(iff(H-H[1]>0 && H-H[1]>L[1]-L,H-H[1],0),DIP)/
ema(max(max(H-L,abs(C[1]-H)),abs(C[1]-L)),DIP)*100;
DM1 = ema(iff(L[1]-L>0 && H-H[1]<L[1]-L,L[1]-L,0),DIP)/
ema(max(max(H-L,abs(C[1]-H)),abs(C[1]-L)),DIP)*100;
ZZ=ema(accum(ema(ema(DP1-DM1, 2), 2)),20);
if ZZ > ZZ[1] Then
var6 = 1;
Else
var6 = 0;
/*if var6 == 1 and var6[1] != 1 Then*/
if var6 == 1 and var6[2] == 1 Then
var11 = 1 ; # buy();
/* if var6 == 0 and var6[1] != 0 Then */
if var6 == 0 and var6[2] == 0 Then
var11 = -1; #sell();
#####################################
##### 션샤인 보조_2호(macd_sar) #####
#####################################
input : short1(12),long1(26),signal1(9),af(0.02),maxaf(0.2);
var : XX(0),YY(0);
var7 = MACD(short1,long1);#MACD
var8 = ema(var7,Signal1);#MACD sig
var9 = sar(af,maxaf); #파라볼릭
#MACD가 MACDsig보다 크고 종가가 파라볼릭보다 크면 6
#MACD가 MACDsig보다 크고 종가가 파라볼릭보다 작거나 같으면 2
#MACD가 MACDsig보다 작거나 같고 종가가 파라볼릭보다 작으면 -6
#MACD가 MACDsig보다 작거나 같고 종가가 파라볼릭보다 크거나 같으면 -2
if var7 > var8 Then{
if C > var9 Then
XX = 6;
Else
XX = 2;
}
Else{
if var9 > C Then
XX = -6;
Else
XX = -2;
}
if var7 > 0 Then
YY = 10;
Else
YY = -10;
/*if crossup(XX+YY,0) Then */
if (XX+YY)>0 /* and (XX[2]+YY[2])>0 */ Then
var12 = 1; # buy();
/*if CrossDown(XX+YY, 0) Then */
if (XX+YY)<0 /*and (XX[2]+YY[2])<0 */ Then
var12 = -1; # sell();
#########################
##### dema3 조정식 #####
#########################
var33=var21+0.0010;
var34=var21-0.0010;
var35=var22+0.0010;
var36=var22-0.0010;
var37=var23+0.0010;
var38=var23-0.0010;
###########################
##### RSI 범위조정식 #####
###########################
var43=var72+0.0070;
var44=var72-0.0070;
var45=var73+0.0070;
var46=var73-0.0070;
##################################
##### RSI 시스템_Period(20) #####
##################################
input : Period(23);
var71 =(AccumN(iff(C-C[1]>0,C-C[1],0),Period)/AccumN(iff(C-C[1]>0,C-C[1],C[1]-C),Period)*100);
if var71 <= 30 Then # rsi_30 #
var72 = O;
if var71 >= 70 Then # rsi_70 #
var73 = H;
if var72[1] < var72 Then
var30=1;
if var72[1] > var72 Then
var30=-1;
if var73[1] > var73 Then
var70= -1;
if var73[1] < var73 Then
var70= 1;
################################
if MarketPosition > 0 and
/* var70 == -1 and #하락#*/
H <= var71 And
(var73[1]-var73) >0.0003 Then
exitlong("eB_Rsi70");
if MarketPosition <=0 and
/* var70 == -1 and #하락#*/
H <= var71 And
(var73[1]-var73) >0.0003 Then
ExitShort("eS_Rsi70");
if MarketPosition <= 0 and
/* var30 == 1 and #상승#*/
L <= var71 And
(var72-var72[1]) >0.0003 Then
ExitShort("eS_Rsi30");
if MarketPosition > 0 and
/* var30 == 1 and #상승#*/
L <= var71 And
(var72-var72[1]) >0.0003 Then
exitlong("eB_Rsi30");
##############################
##### 1_ Rsi 매매식 #####
##############################
if c<var43 and c>var44 and
countif(var72==var72[1],5) == 5 And
c>DayOpen and var11==1 and var12==1 and var58==1 and c>var72 and c<var73 and
var48 Then
buy("B_R30");
if c<var43 and c>var44 and
countif(var72==var72[1],5) == 5 And
c<DayOpen and var11==-1 and var12==-1 and var58==-1 and c<var72 and c<var48 Then
sell("S_R30");
##############################
##### 2_ LINE 매매식 #####
##############################
##### 1차 저항선_var21 #####
if crossup(C,var21) Then{
var51 = 1;
idx = index;
}
if CrossDown(C,var21) Then{
var51 = -1;
idx = index;
}
if var51 == 1 and
index > idx and index <= idx+30 and
var21 >= L and c > var21 and c>DayOpen and var11==1 and (xx+yy)>=12 and var71>=30 and c>dema2 and var58==1 then
buy("b_21");
if var51 == -1 and
index > idx and index <= idx+30 and
var21 <= H and c < var21 and c<DayOpen and var11==-1 and (xx+yy)<=-12 and c<dema2 and var58==-1 Then
sell("s_21");
2015-05-05
259
글번호 85701
답변완료
전일 손실발생시 당일매매 함수 요청
아래의 로직에 '전영업일 손실 발생시에만 당일 매매'를 하는 로직을 추가하고자 합니다.
var : entry(0);
if bdate != bdate[1] Then
entry = 0;
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
entry = entry+1;
var : ho(0),OL(0),HL(0);
var : maho(0),maOL(0),maHL(0);
var : cnt(0),sumho(0),sumOL(0),sumHL(0);
var : EntryCnt(0);
ho = Dayhigh-Dayopen;
OL = DayOpen-DayLow;
HL = DayHigh-DayLow;
sumho = 0;
sumOL = 0;
sumHL = 0;
for cnt = 1 to 10{
sumho = sumho + (dayhigh(cnt)-dayopen(cnt));
sumOL = sumOL + (DayOpen(cnt)-DayLow(cnt));
sumHL = sumHL + (DayHigh(cnt)-DayLow(cnt));
}
maho = sumho/10;
maOL = sumOL/10;
maHL = sumHL/10;
var1 = ~ ;
var2 = ~ ;
var3 = ~ ;
var4 = ~ ;
var5 = ~ ;
var6 = ~ ;
var7 = ~ ;
var8 = ~ ;
var9 = ~ ;
var10 = ~ ;
if MarketPosition == 0 and entry == 0 Then{
if var7 > var8 Then
sell("s1",AtStop,var7);
if var7 < var8 Then
sell("s2",Atlimit,Var8);
}
if MarketPosition == -1 and IsEntryName("s1") == true Then{
ExitShort("sp1",atlimit,var9);
ExitShort("sl1",AtStop,var6);
}
if MarketPosition == -1 and IsEntryName("s2") == true Then{
ExitShort("sp2",atlimit,var9);
ExitShort("sl2",AtStop,var6);
}
2015-05-04
189
글번호 85700
답변완료
15초당 60회 조회 제한 관련해서 문의
예스스팟 매뉴얼에 보면...예스스팟은 서버에 과도한 부하를 줄이기 위해 시세조회와 계좌 조회를 15초당 60회로 제한하고 있습니다....라는 내용이 있는데요.
만약, 예스스팟 스튜디오의 스크립트 객체화면에서 코스피200 선물 6월물(객체명은 future로 설정)을 한 종목 추가시키고, 다음과 같이 코딩했다고 했을 때,
function Main_OnStart()
{ var i;
for (i=0; i<30; i++)
{
Main.MessageList(future.current);
Main.MessageList(future.high);
Main.MessageList(future.Bid(2));
}
}
for문 내에서 future.current와 future.high, future.Bid(2)를 각각 조회하니까 조회건수는 3건...
그리고 for문을 30번 수행시키니까 곱하기 30을 해주면...
결국 3 × 30 = 90 이 되어 총 90건의 조회를 한다는 의미인가요?
그러면 15초에 60회까지만 조회를 허락하니까 60건 조회하고 나머지 30건은 조회에 실패한다는 의미인가요?
근데, 실제로 테스트해보면 for문이 중간에 실패하는 일 없이 정상적으로 수행되더군요.
만약 90건의 조회가 실패없이 한번에 조회가 된다는 의미는 서버에서 새로운 데이터를 받아와서 MessageList로 데이터를 표시해 주는게 아니라 이전에 받아왔던 데이터를 계속해서 보여주고 있다는 의미인가요?
선물의 현재가나 고가, 매수2호가 는 실시간으로 계속 변하기 때문에 for문에서 루프를 돌면서 이 데이터를 조회할때마다 계속 새로운 데이터를 서버에 요청해야 될텐데요?
이런 경우는 어떻게 이해해야 되나요?
또한, Main 객체내의 OnUpd ateMarket 이벤트에 대해서도 이해가 잘 안됩니다.
예를들어, 옵션 5월물 종목들 전체를 추가했다고 가정할 때 5월물 종목수만 해도 76개입니다.
ReqMarketData()을 이용하여 종목 추가를 해보니 딱 60개 추가하고 나머지 16개는 추가에 실패하는 건 직접 확인했습니다.
그래서, 일단은 15초 후에 나머지 16개 종목을 추가하면 추가가 되긴 하더군요.
결국, 76개 종목을 30초에 걸쳐 일단 추가는 된 상황에서 문제는...한번 추가했다고 끝나는게 아니라 실시간으로 계속 76개 종목의 데이터를 받아와야 하지 않습니까?
OnUp dateMarket 이벤트를 통해서 시세나 호가 변동시마다 계속 이벤트가 발생하던데...이때는 15초에 60개 이상의 이벤트가 제한없이 발생하더군요.
제 생각엔 OnUpd ateMarket 이벤트도 결국 서버로부터 업데이트된 시세와 호가를 조회해서 받아오는 거니까 한번의 이벤트는 결국 한번의 조회로 계산되어야 할 거 같은데요.
그래서, 이벤트가 60회 발생하면 그 다음 이벤트는 15초가 지난후에나 발생해야 될 거 같은데.....실제로 테스트해보면 그렇게 되진 않더군요.
어떤 조회는 1번의 조회로 간주되고 어떤 조회는 1번의 조회가 아닌 걸로 간주되는지...무지 헷갈립니다.
15초당 60회 제한 규정에서 1번의 조회가 구체적으로 어떻게 조회할 때 1번 조회한 걸로 계산되는지 알고 싶습니다.
매뉴얼 상에는 종목객체 요청시는 15초당 60회, 주문은 15초당 90회, 계좌조회는 15초당 60회...일간데이터와 수급데이터를 같이 조회하면 조회 건수는 3으로 계산된다...뭐 이렇게 두루뭉술하게 설명되어 있는데, 매뉴얼 읽어봐도 조회의 개념이 잘 이해가 되질 않습니다.
좀더 구체적으로 설명 좀 부탁드립니다.
그리고, 아래 41675 번글에 대한 답변 내용이 잘 이해가 안되서 재문의드렸는데, 확인 좀 부탁드립니다.
2015-05-05
277
글번호 85699
답변완료
문의합니다!
챠트 보조툴바중 자동추세선및 추세선돌파시 화살표가 있는데 자동추세선 돌파시 화살표발생시 음성 접목 할수 있는지요?
2015-05-04
186
글번호 85698
조민철 님에 의해서 삭제되었습니다.
2015-05-04
0
글번호 85697