커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4719
글번호 230811
답변완료
함수변경요청(11-1호)
진입이후 수익이든 손실이든 청산되어 거래가 당일 거래가 종료되어도
진입조건이 발생되면 횟수 제한없이 거래를 계속하고 싶습니다.
변경 요청드리는 수식은 아래와 같습니다.
var : entry1(0);
var : ho1(0),OL1(0),HL1(0);
var : maho1(0),maOL1(0),maHL1(0);
var : cnt1(0),sumho1(0),sumOL1(0),sumHL1(0);
var : EntryCnt1(0);
var : V1(0),V2(0),V3(0),V4(0),V5(0);
var : V6(0),V7(0),V8(0),V9(0),V10(0);
if bdate != bdate[1] Then
entry1 = 0;
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
entry1 = entry1+1;
ho1 = Dayhigh-Dayopen;
OL1 = DayOpen-DayLow;
HL1 = DayHigh-DayLow;
sumho1 = 0;
sumOL1 = 0;
sumHL1 = 0;
for cnt1 = 1 to 10{
sumho1 = sumho1 + (dayhigh(cnt1)-dayopen(cnt1));
sumOL1 = sumOL1 + (DayOpen(cnt1)-DayLow(cnt1));
sumHL1 = sumHL1 + (DayHigh(cnt1)-DayLow(cnt1));
}
maho1 = sumho1/10;
maOL1 = sumOL1/10;
maHL1 = sumHL1/10;
V1 = dayopen(0)+maho1;
V2 = DayOpen(0)-maOL1;
V3 = DayOpen(0)+maHL1;
V4 = DayOpen(0)-maHL1;
V5 = NthMaxList(1,V1,V2,V3,V4);
V6 = NthMaxList(2,V1,V2,V3,V4);
V9 = NthMaxList(3,V1,V2,V3,V4);
V10 = NthMaxList(4,V1,V2,V3,V4);
V7 = (V5+V10)/2;
V8 = (V6+V9)/2;
if MarketPosition == 0 and entry1 == 0 Then{
if V7 > V8 Then
sell("s1",AtStop,v7);
if V7 < V8 Then
sell("s2",Atlimit,v8);
}
if MarketPosition == -1 and IsEntryName("s1") == true Then{
ExitShort("sp1",atlimit,V9);
ExitShort("sl1",AtStop,V6);
}
if MarketPosition == -1 and IsEntryName("s2") == true Then{
ExitShort("sp2",atlimit,V9);
ExitShort("sl2",AtStop,V6);
}
var : TF(0);
var : Xtime(0), Etime(false),cnt(0),mav1(0),mav2(0);
var : HV(0),LV(0),HV1(0),LV1(0),HV2(0),LV2(0);
Array : HH[50](0),LL[50](0),CC[50](0);
mav1 = ma(c,5);
mav2 = ma(C,20);
TF = TimeToMinutes(stime)%30;
if Bdate != Bdate[1] Then{
Etime = true;
if stime >= 090000 Then
Xtime = 050000;
Else
Xtime = 060000;
}
if Bdate != Bdate[1] or (TF < TF[1] and stime > stime[1]) or date != date[1] Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
CC[cnt] = CC[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
CC[0] = C;
if HH[25+2] > 0 Then{
HV = HH[0];
LV = LL[0];
HV1 = HH[1];
LV1 = LL[1];
HV2 = HH[2];
LV2 = LL[2];
for cnt = 0 to 25{
if HH[cnt] > HV Then
HV = HH[cnt];
if LL[cnt] < LV Then
LV = LL[cnt];
if HH[cnt+1] > HV Then
HV = HH[cnt+1];
if LL[cnt+1] < LV Then
LV = LL[cnt+1];
if HH[cnt+2] > HV Then
HV = HH[cnt+2];
if LL[cnt+2] < LV Then
LV = LL[cnt+2];
}
var1 = (HV+LV)/2;
var2 = (HV1+LV1)/2;
var3 = (HV2+LV2)/2;
if Etime == true then{
if MarketPosition == 0 and CC[0] > var1 and CC[1] < var2 and CC[2] < var3 and C >= daylow+0.5 Then
buy("b",AtMarket);
if MarketPosition == 1 and c <= highest(H,BarsSinceEntry)-0.5 and CrossDown(mav1,mav2) Then
ExitLong("bx",AtMarket);
}
}
if stime == Xtime or (stime > Xtime and stime[1] < Xtime) Then{
Etime = false;
ExitLong();
}
SetStopLoss(1.5,PercentStop);
SetStopProfittarget(3,PercentStop);
SetStopInactivity(3,10,PercentStop);
2015-12-03
99
글번호 93001
답변완료
안녕하세요..
연속된 33개의 캔들의 고점과 저점을 표현하는 실선 사각형을 수식으로 표현하고 싶습니다. 그리고 33개 캔들중 고점과 저점 가격을 차트에 표시하게 해 주셨으면 감사하겠습니다.
2015-12-03
116
글번호 93000
답변완료
안녕하세요
input : P(20);
var1 = ma(C,P);
if var1 > var1[1] Then{
var2 = 1;
PlaySound("C:₩예스트레이더₩data₩Sound₩20기울기회복.wav");
Alert("20이평상승중40기준선확인");
}
if var1 < var1[1] Then{
var2 = -1;
PlaySound("C:₩예스트레이더₩data₩Sound₩20기울기이탈.wav");
Alert("20이평하락중40선위치혹인");
}
if var2 == 1 Then
plot1(var1,"이평",RED);
Else
plot1(var1,"이평",BLUE);
지난번 if문에서 실행문이 두개 있을대는 대괄호로 묵어야 한다고 가르쳐 주신거 수정하여
잘 사용하고 있습니다
위 내용 입니다 지금 설명은 이평선이 기울기가 변할때 안내하고 있습니다
부탁 드립니다 이렇게 안내 음성이 나간후에 캔들이 해당이평선 2틱 근처에 왔을때
해당 이평선의 기울기가 하락중이면 하락중 상승중이면 상승중 이렇게 안내 하고자 합니다
수식 부탁합니다
추가적인 이평선은 input문이니까 제가 수정하여 쓰면 되겠지요
2015-12-02
108
글번호 92999
답변완료
복합 질문드립니다.
항상 친절한 답변에 감사드리고 있습니다. 메뉴얼 공부 중 질문드립니다.
번호를 통합하여 단답형으로 답변 주셔도 좋습니다.
<전략차트 자동매매 관련 질문입니다>
1. 전략차트 자동매매로 포지션 진입이 된 상태에서 수동으로 추가 진입 또는 청산을 해주면 자동매매는 저절로 종료 되나요?
2. 전략차트의 자동매매 실행 중 신규 시그널이 나가기전 수동으로 포지션을 진입하면 그 후 어떻게 되나요?
자동매매가 종료되고 수동으로 전환되나요 아니면 계속 되나요?
(예를 들어 1000봉 조회로 설정하고 전략 차트를 최초 띄웠을때 900, 500, 100 봉전에 기존 신호가 발생해 있지만 띄운 이후의 신규 신호는 발생하기 전의 시기를 말하는 것입니다.)
3. 위 예의 상태라면 시스템은 이론상 매수 1계약을 가진 상태일 것인데, 실제로는 최초로 띄웠기 때문에 무포지션일 것입니다. 이때 랭귀지의 Marketposition 함수는 0입니까 1입니까?
4. 자동매매가 종료되지 않고 지속된다고 한다면, " 1)수동으로 매도 진입된 상태에서 시그널 역시 매도가 날 경우. 2)수동으로 매수 진입된 상태에서 매도가 날 경우." 각각 어떻게 되나요?
<Marketposition 함수에 대한 질문입니다>
5. Marketposition(N)에서 N은 거래위치라고 설명돼 있는데 이게 현위치와는 다른 건가요? 20봉전에 가장 최근 거래가 있었다 치고 그 거래가 매수상태에서 '청산-매도'로 리버셜 되는 거래였다고 한다면 Marketposition(1)은 20봉전의 거래를 의미하는 것이고 리턴값은 매도(-1) 인가요? 이때 Marketposition(2)의 리턴값은 안봐도 매수이겠죠?
6. Marketposition 함수가 실제 계좌의 포지션을 조회하는 것인가요? 아니라면 랭귀지에서 실계좌 포지션을 조회하는 함수가 따로 있나요?
7. Marketposition 함수 값과 실계좌 포지션이 다른 상태에서 Marketposition 값을 참고해 진입한 상태인데, 그 후 실계좌 동기화가 진행되어 Marketposition이 바로 잡혔다면 진입된 계약은 시스템과 반대방향이 될 수도 있을 텐데요. 이때 시그널이 나게 되면 지난 일은 어쩔 수 없으나 '청산-진입' 또는 '(같은 방향 시그널 나면)포지션 유지'가 에러 없이 작동 하나요?
<잔고함수에 대한 질문입니다>
랭귀지 메뉴얼 공부 중 질문 드립니다.
8. 잔고관련 함수는 '가원장'을 이용한 것이기에 적절히 잔고조회를 해줘 실제 계좌와 동기화 해줘야 한다고 설명돼 있는데, 동기화 하는 방법이 뭔가요? 수식에서는 어떤 명령어를 써야 하나요?
9. 혹시 랭귀지의 동기화에도 '예스스팟의 15초 내 몇회 조회 제한' 같은게 있나요?
10. 잔고함수란에 나온 "Get~~~" 이런 함수들이 현물 주식, 선물옵션 둘다를 대상으로 하는 것들인가요?
2015-12-02
118
글번호 92998
답변완료
부탁 드립니다.
항상 도움 주셔서 감사 드립니다.
45282번 수정 질문 부탁 드립니다.
미리 감사 드립니다
2015-12-02
104
글번호 92997
답변완료
지표수식
답변을 아래와 같이 주셨는데 수식을 적용해보니 "수식에 참조할 첫번째 종목 데이터가 없습니다" 라는 메세지가 나오는네요
아마 Data1의 C 값과 Data2의 C값을 합산한 합계에 대해서
MACD 오실레이터를 수식으로 만들어야 하나 봅니다
번거롭게 해서 죄송하지만 다시한번 부탁 드립니다.
안녕하세요
예스스탁입니다.
SUMATM가 현재 2개의 데이터를 합한 값입니다.
2개의 데이터를 사용하지 않고
data3의 종가 하나만을 사용해서
MACD오실레이터를 계산한다면 식은 아래와 같습니다.
Input: short(12),long(26),sig(9);
var : MACDV(0,data3),MACDS(0,data3),MACDO(0,data3);
MACDV = data3(ema(c,short)-ema(c,long));
MACDS = data3(ema(MACDV,sig));
MACDO = MACDV-MACDS;
plot1(MACDO,"data3 MACDosc");
PlotBaseLine1(0);
즐거운 하루되세요
> 하나일 님이 쓴 글입니다.
> 제목 : 지표식
> Input: period1(5);
Var : CATM(0,data1),PATM(0,data1);
Var : SUMATM(0,data1),AVGATM(0,data1),preDaySUMATM(0,data1);
if date != date[1] Then
preDaySUMATM = SUMATM;
CATM = Data1(C);
PATM = Data2(C);
SUMATM = CATM+PATM;
if SUMATM > preDaySUMATM Then
plot7(SUMATM,"SUMATM",RED);
Else
plot7(SUMATM,"SUMATM",blue);
Plot8(ma(SUMATM,Period1), "이평");
위와같이 Data3에 표현되는 지표식을 쓰고 있습니다
Data3의 SUMATM에 대해 MACD오실레이터를 만들어 쓰고 싶습니다
수식 부탁 드립니다
항상 감사합니다
2015-12-02
139
글번호 92995
답변완료
종목검색할때 질문입니다
종목검색식을 돌릴때 "검색에 필요한 최소한의 기간"
이라는 항목에 최대 500이라고 설정할수있잔아요
그렇다면 최대 500봉안에서만 조건에 만족하는 종목이
검색되는건가요?? 조건에 만족되도 500봉 범위밖을 넘어
가면 검색이 안되는지 궁금합니다
2015-12-02
129
글번호 92993
답변완료
질문합니다 ~!
안녕하세요 ~!
전일최고가를 상향돌파하면 매수로
전일최저가를 하향이탈하면 매도로 진입하여
하루 이익실현하거나 손절 포인트는 0.50포인트로 끝나는
시스템 언어 부탁드려요 ~ !
청산은 3시입니다 ~!
2015-12-02
102
글번호 92984
답변완료
진입번호를 변수로 설정 ( 2신 )
YESSTOCK을 사랑합니다.
진입번호를 변수로 설정하고자 합니다.
예를 들면
FOR J = 1,10 BY 1 BEGIN
조건 ;
진입번호 = J ;
IF 조건 THEN { BUY " 진입번호 " , ,,, }
END ;
위와 같이 하고자 합니다. 구체적인 PROGRAM 을 가르쳐 주시기 바랍니다.
불비 , 한프로 , 2015년 12월 2일
2015-12-02
109
글번호 92982