커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8160
글번호 230811
답변완료
분할청산_ 시스템 재문의 드립니다
위 그림과 같이 분할 청산 하고 싶습니다
항상 수고 많으십니다
수식이 잘되지 않아 재 문의 드립니다
신호에서 처음 3계약 진입후 분할청산이 되지않습니다
예) 10틱 20틱 30틱 이런식 인데
1차청산만 되고 그후 신호 발생 하여 다시 3계약 진입 합니다
손절같은경우
그리고 1차청산 하고 진입가에 +1틱에 오면 손절도 안되는거 같아요
그림 첨부 하였습니다 확인 부탁합니다
-----------------------------
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 본 수식에서 분활청산 문의 드립니다
> 안녕하세요
예스스탁입니다.
Inputs: FastLen(4), MedLen(9), SlowLen(18);
Variables: FastAvg(0), MedAvg(0), SlowAvg(0);
FastAvg = MA(Close, FastLen);
MedAvg = MA(Close, MedLen);
SlowAvg = MA(Close, SlowLen);
If (FastAvg[1] < MedAvg[1] OR MedAvg[1] < SlowAvg[1]) AND (FastAvg > MedAvg AND MedAvg > SlowAvg) Then
Buy ("매수",OnClose,def,3);
if MarketPosition == 1 then{
exitlong("bp1",atlimit,EntryPrice+PriceScale*10,"",1,1);
exitlong("bp2",atlimit,EntryPrice+PriceScale*20,"",1,1);
exitlong("bp3",atlimit,EntryPrice+PriceScale*30,"",1,1);
if CurrentContracts < MaxContracts Then
ExitLong("bl",AtStop,EntryPrice+PriceScale*1);
}
2017-03-11
208
글번호 107691
답변완료
오류메세지 수정 부탁드립니다.
수고 많으십니다.
아래 수식의 오류메세지 수정을 못하겠는데 부탁 좀 드리겠습니다.
감사합니다.
//==========================================
// Indicator Name : Min Change Rate ZigZag Wave
// Version : 1.1
// Written by : yahoosir
// Blog : http://yahoosir.blog.me
//==========================================
Input:Rate(5),ClsPxUseBit(0),waveLineSize(3),displPRC(1);
Var:j(0),jj(0),HH(0),LL(0),hiBar(0),loBar(0),TL1(0),Text1(0),lastVertex(""),procBit("");
Array:PK[10,4](0),VL[10,4](0); // 1:Price,2:BarNumber,3:Date,4:Time
//==========================================
HH = IFF(ClsPxUseBit = 1,C,H);
LL = IFF(ClsPxUseBit = 1,C,L);
If CurrentBar = 1 Then Begin
PK[1,1] = HH;
PK[1,2] = 0;
PK[1,3] = Date;
PK[1,4] = Time;
VL[1,1] = LL;
VL[1,2] = 0;
VL[1,3] = Date;
VL[1,4] = Time;
End;
If CurrentBar > 0 Then Begin
hiBar = hiBar + 1;
loBar = loBar + 1;
End;
If HH[hiBar] < HH Then hiBar = 0;
If LL[loBar] > LL Then loBar = 0;
Condition1 = VL[1,1] * (1 + (Rate/100)) <= HH and hiBar = 0;
Condition2 = PK[1,1] * (1 - (Rate/100)) >= LL and loBar = 0;
procBit = "";
If Condition1 and Condition2 Then Begin
If lastVertex = "Valley" Then Begin
If PK[1,1] < HH and VL[1,1] > LL Then procBit = "Peak"
Else If VL[1,1] > LL Then procBit = "Valley"
Else procBit = "Peak";
End
Else Begin
If PK[1,1] < HH and VL[1,1] > LL Then procBit = "Valley"
Else If PK[1,1] < HH Then procBit = "Peak"
Else procBit = "Valley";
End;
End
Else If Condition1 Then procBit = "Peak"
Else If Condition2 Then procBit = "Valley";
//==========================================
If procBit = "Peak" Then Begin
If lastVertex = "Valley" Then Begin
For j = 10 DownTo 2 Begin
For jj = 1 To 4 Begin
PK[j,jj] = PK[j-1,jj];
End ;
End;
PK[1,1] = HH[hiBar];
PK[1,2] = BarNumber - hiBar;
PK[1,3] = Date[hiBar];
PK[1,4] = Time[hiBar];
hiBar = -1;
loBar = -1;
TL1 = TL_New(VL[1,3],VL[1,4],VL[1,1],PK[1,3],PK[1,4],PK[1,1]);
If displPRC = 1 Then Begin
Text1 = Text_New(PK[1,3],PK[1,4],PK[1,1],NumToStr(PK[1,1],2));
Text_SetStyle(Text1, 2, 1);
Text_SetColor(Text1,black);
End ;
TL_SetSize(TL1,waveLineSize);
TL_SetColor(TL1,Red);
End
Else If PK[1,1] < HH[hiBar] Then Begin
PK[1,1] = HH[hiBar];
PK[1,2] = BarNumber - hiBar;
PK[1,3] = Date[hiBar];
PK[1,4] = Time[hiBar];
hiBar = -1;
loBar = -1;
TL_SetEnd(TL1,PK[1,3],PK[1,4],PK[1,1]);
If displPRC = 1 Then Begin
Text_SetLocation(Text1,PK[1,3],PK[1,4],PK[1,1]);
Text_SetString(Text1,NumToStr(PK[1,1],2));
End;
End ;
lastVertex = "Peak";
End ;
//==========================================
If procBit = "Valley" Then Begin
If lastVertex = "Peak" then Begin
For j = 10 DownTo 2 Begin
For jj = 1 To 4 Begin
VL[j,jj] = VL[j-1,jj];
End;
End;
VL[1,1] = LL[loBar];
VL[1,2] = BarNumber - loBar;
VL[1,3] = Date[loBar];
VL[1,4] = Time[loBar];
hiBar = -1;
loBar = -1;
TL1 = TL_New(PK[1,3],PK[1,4],PK[1,1],VL[1,3],VL[1,4],VL[1,1]);
If displPRC = 1 Then Begin
Text1 = Text_New(VL[1,3],VL[1,4],VL[1,1],NumToStr(VL[1,1],2));
Text_SetStyle(Text1, 2, 0);
Text_SetColor(Text1,black);
End ;
TL_SetSize(TL1,waveLineSize);
TL_SetColor(TL1,Blue);
End
Else If VL[1,1] > LL[loBar] then Begin
VL[1,1] = LL[loBar];
VL[1,2] = BarNumber - loBar;
VL[1,3] = Date[loBar];
VL[1,4] = Time[loBar];
hiBar = -1;
loBar = -1;
TL_SetEnd(TL1,VL[1,3],VL[1,4],VL[1,1]);
If displPRC = 1 Then Begin
Text_SetLocation(Text1,VL[1,3],VL[1,4],VL[1,1]);
Text_SetString(Text1,NumToStr(VL[1,1],2));
End ;
End ;
lastVertex = "Valley";
End ;
2017-03-11
292
글번호 107690
답변완료
출력 함수에서 문의 드립니다.
첨부파일 두번째에 수식 파일을 첨부했습니다. 지표 수식 파일.이 첨부가 안되서.
그림으로 첨부했습니다.
csv 확장자 파일도 첨부 안되네요..
이렇게 지표로 만들어서
전략 실행차트에서 골드 1분 데이터를 검증해서 파일로 저장해 보면 ( 해외 선물 입니다. ) 현대선물
2017-03-06 23:57
2017-03-06 23:58
2017-03-06 23:59
2017-03-07 : : 0
2017-03-07 : 1:00
2017-03-07 : 2:00
2017-03-07 : 3:00
2017-03-07 : 4:00
2017-03-07 : 5:00
2017-03-07 : 6:00
2017-03-07 : 7:00
이렇게 0 시 되는 부분에 무조건 시간 데이터가 깨집니다.
그리고.
2017-03-10 13:12 1201.7
2017-03-10 13:12 1201.8
2017-03-10 13:12 1201.9
2017-03-10 13:12 1201.8
2017-03-10 13:12 1201.9
2017-03-10 13:12 1201.8
2017-03-10 13:12 1201.9
2017-03-10 13:12 1201.8
2017-03-10 13:12 1201.9
2017-03-10 13:12 1201.8
2017-03-10 13:12 1201.9
2017-03-10 13:12 1201.8
2017-03-10 13:12 1201.9
이렇게 같은 시간대로 찍히는 것도 있네요.
파일을 올려 드릴텐데.
직접해보셔도 아마 그렇게 동일하게 나올것 같습니다.
수정 요청을 드려도 되는지요?
감사합니다.
2017-03-11
319
글번호 107689
답변완료
피봇보인트 R1을 위로 돌파했다가 다시 하락 돌파할 때 식 부탁드립니다.
(1)이동평균 5일선이 피봇보인트 라인 R1을 상승돌파하여 매수했는데 당일 5개의 봉안에서
R1을 다시 하락 돌파하였을 때 매도
(2) 이동평균 5일선이 피봇보인트 라인 R2을 상승돌파하여 매수했는데 당일 5개의 봉안에서 R2을 다시 하락 돌파하였을 때 매도
(3) 이동평균 5일선이 피봇보인트 라인 S1을 하락돌파하여 매도했는데 당일 5개의 봉안에서 S1을 다시 상승 돌파하였을 때 매수
(4) 이동평균 5일선이 피봇보인트 라인 S2을 하락돌파하여 매도했는데 당일 5개의 봉안에서 S2을 다시 상승 돌파하였을 때 매수
식좀 부탁드립니다.
항상 도움을 주셔서 감사합니다. ^^
2017-03-11
211
글번호 107688
답변완료
문의드립니다~
input : 분주기(30),P(5),분주기1(15);
var : S1(0),D1(0),TM(0),TF(0);
var : cnt(0),sum(0),mav(0),tf1(0);
Array : CC[100](0),OO[100](0),HH[100](0),LL[100](0),C1[100](0);
if (sdate != sdate[1] and stime >= 100000) or
(sdate == sdate[1] and (Stime == 100000 or (stime > 100000 and stime[1] < 100000))) Then{
S1 = TimeToMinutes(100000);
D1 = sdate;
}
if D1 > 0 then{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%분주기;
if (sdate != sdate[1] and stime >= 100000) or
(sdate == sdate[1] and (Stime == 100000 or (stime > 100000 and stime[1] < 100000))) or
(Sdate == sdate[1] and TF < TF[1]) Then{
OO[0] = o;
for cnt = 1 to 99{
OO[cnt] = OO[cnt-1][1];
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;
TF1 = TM%분주기1;
if (sdate != sdate[1] and stime >= 100000) or
(sdate == sdate[1] and (Stime == 100000 or (stime > 100000 and stime[1] < 100000))) or
(Sdate == sdate[1] and TF1 < TF1[1]) Then{
for cnt = 1 to 99{
C1[cnt] = C1[cnt-1][1];
}
}
C1[0] = C;
plot1(CC[1]);
}
1. 위식을 항생에서 사용중인데요~
S1 = TimeToMinutes(stime);
여기부분에서 stime를 100000로 바꿔서 적용하니깐
전일밤12시부분이 표시가 안됩니다.
2. 그리고 stime그대로 두니깐 cc[1]로 적용했을때에
10시15분시작가격을 인지를 못하네요
예를들어서 10시15분가격 아래에서 5일선과20일선데드크로스시에 매도한다는 수식을 넣었을때에
10시15분가격을 cc[1]로 적용해서 조건을 넣으면 적용이 안됩니다.
10시45분부터 cc[1]로 적용이 됩니다.
3. C1[1]!=cc[1] 이식을 적용할때에
30분시간의가격과 15분시간의가격이 똑같이 일치할때가 있더라구요.
서로가 같지않다를 표현하고 싶은데
위 식을 어떻게 표현해야 될까요
C1[1]의 시간을 저장하고 cc[1]의 시간을 저장해서 두개가 같지않다를
나타낼 수 있었으면 합니다.
input : Left(3),Right(3),P1(5),P2(20);
var : T(0),Shcnt(0),SLcnt(0);
var : mav0a(0),mav1a(0),mav2a(0),H1(0),H2(0),H3(0),H4(0), L1(0),L2(0),L3(0),L4(0);
var : tic20(0), tic120(0);
mav0a = ma(c,3);
mav1a = ma(c,5);
mav2a = ma(c,20);
tic20 = ma(c,20);
tic120 = ma(c,120);
if stime >= 160000 or stime < 050000 Then{
if SwingHigh(1,mav1a,Left,Right,Left+Right+1) != -1 Then{
H1 = mav1a[right];
H2 = H1[1];
H3 = mav2a[right];
H4 = H3[1];
if MarketPosition == 1 and (H1 <= H2 or (H1-PriceScale*3) <= H2) and H2 > 0 Then
ExitLong("bx");
if H1<H3 and H2>H4 and tic20<tic120 and c<tic20 Then{
sell("s");
}
}
if SwingLow(1,mav1a,Left,Right,Left+Right+1) != -1 Then{
L1 = mav1a[right];
L2 = L1[1];
L3 = mav2a[right];
L4 = L3[1];
if MarketPosition == -1 and L1 >= L2 and L2 > 0 Then
ExitShort("sx");
if L1>L3 and L2<L4 and tic20>tic120 and c>tic20 Then{
Buy("b");
}
}
}
4.위에 쌍봉쌍바닥식을 만들어봤는데요 어려워서 문의드립니다;
쌍바닥은 최근바닥이 최근바닥형성시점의 20일선과 60일선위에있어야하고
최근바닥이전바닥은 최근바닥이전형성시점의 20일선과60일선아래에 있어야 합니다.
매도는 그 반대이구요.~
최근바닥형성시점의 20일선과 60일선가격을 어떻게 표현해야될지
그리고 최근바닥이전에 형성되었던 바닥시점의 20일선과 60일선가격을 어떻게 표현해야될지 어렵네요~
2017-03-11
325
글번호 107687
답변완료
종목 검색식
수고가 많으십니다~~~
1.예스 랭귀지 데이터 함수에서 거래량과 체결건수는 알겠는데,상승형(하락형)체결 거래량과 상승형(하락형)체결건수는 무엇을 의미하는지요?
2.랭귀지에서 작성한 검색식을 파워종목검색, 사용자 검색조건 폴더에 넣는 방법이 궁금합니다
매뉴얼을 아무리 봐도 모르겠네요!
3.액면가의 300%(N%) 이상 종목 검색식이 가능한지요? 가능하다면 작성 부탁드리겠습니다.
2017-03-10
251
글번호 107686
답변완료
수식부탁드림니다=================
현재로부터 10분전을 수식으로 어떻게표시하나요?
2017-03-10
199
글번호 107685
답변완료
시스템식 부탁드려요
CCI 과매수 과매도 시스템에서
신호가 5분봉과 10분봉 동시신호에만 매매 가능하도록 만들수 있을까요?
그리고 손절 20틱 익절 30틱으로 청산하도록 만들고싶어요
손절이나 익절하면 다음신호에 매매하도록....
2017-03-10
207
글번호 107683
답변완료
시스템식 문의 드립니다~
안녕하세요~ 수식 문의좀 드립니다~
이전에 51893 문의 드렸던 내용입니다.
밑에는 만들어 주신 수식인데,,, 확인해 보면 2번식으로 진입이 안되고(2번식은 봉이 완성 되었을때 진입이 아니라 그자리에 왔을때 바로 진입입니다), 2번식만 보면 하루에 수십번 이상 진입이 되는데, 이 식으로는 진입이 한두번 밖에 안나오네요,,,
이전에 내용에서 매수, 매도를 따로 만들어 주시면 좀더 활용하기 좋을것 같습니다~
1번식은 방향 설정만 하고 2번식으로 진입니다.
↓만들어 주신 수식입니다. 1번식으로 진입이 아닌 2번식으로 진입이 되도록 부탁드립니다.
-----------------------------------------------------------------------
input : P1(5),P2(60),RSIP(15),Ptick(6),Ltick(2);
INPUT : LENGTH(10);
VAR : TCHAN(0), BCHAN(0),T1(0),T2(0);
TCHAN = HIGHEST(HIGH, LENGTH)[1];
BCHAN = LOWEST(LOW, LENGTH)[1];
var1 = wma(c,P1);
var2 = wma(c,P2);
var3 = RSI(RSIP);
Condition1 = var1 > var2 and var3 >=70;
Condition2 = var1 < var2 and var3 <=30;
if TCHAN > TCHAN[1] and BCHAN > BCHAN[1] Then
T1 = 1;
if TCHAN < TCHAN[1] and BCHAN < BCHAN[1] Then
T1 = -1;
if T1 == 1 and Condition1 == true Then
buy("b",atlimit,BCHAN);
if T1 == -1 and Condition2 == true Then
sell("s",atlimit,TCHAN);
if MarketPosition == 1 Then{
if highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*Ptick Then
ExitLong("bx",AtStop,highest(H,BarsSinceEntry)-PriceScale*Ltick);
}
if MarketPosition == -1 Then{
if Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*Ptick Then
ExitShort("sx",AtStop,Lowest(L,BarsSinceEntry)+PriceScale*Ltick);
}
--------------------------------------------------------------------------------
아래 식으로 다시한번 부탁드립니다.
매수, 매도 조건 따로 부탁드립니다
조건은 1)번 수식에 맞는 방향으로 2)번 수식으로 진입입니다.
1)
input : P1(5),P2(60),RSIP(15);
var1 = wma(c,P1);
var2 = wma(c,P2);
var3 = RSI(RSIP);
Condition1 = var1 > var2 and var3 >=70;
Condition2 = var1 < var2 and var3 <=30;
if Condition1 == true and Condition1[1] == false Then
buy();
if MarketPosition == 1 and CrossDown(var1,var2) and var3 <= 30 Then
ExitLong();
if Condition2 == true and Condition2[1] == false Then
sell();
if MarketPosition == -1 and Crossup(var1,var2) and var3 >= 70 Then
ExitShort();
위 1)수식에서 매수 상황이면,,,
매수진입은
INPUT : LENGTH(10);
VAR : TCHAN(0), BCHAN(0),T1(0),T2(0);
TCHAN = HIGHEST(HIGH, LENGTH)[1];
BCHAN = LOWEST(LOW, LENGTH)[1];
if TCHAN > TCHAN[1] and BCHAN > BCHAN[1] Then
T1 = 1;
if TCHAN < TCHAN[1] and BCHAN < BCHAN[1] Then
T1 = -1;
if T1 == 1 Then
buy("b",atlimit,BCHAN);
if T1 == -1 Then
exitlong("bx",atlimit,TCHAN);
1) 식에서 매도 상황이면,,,
2)
매도진입은
INPUT : LENGTH(10);
VAR : TCHAN(0), BCHAN(0),T1(0),T2(0);
TCHAN = HIGHEST(HIGH, LENGTH)[1];
BCHAN = LOWEST(LOW, LENGTH)[1];
if TCHAN > TCHAN[1] and BCHAN > BCHAN[1] Then
T1 = 1;
if TCHAN < TCHAN[1] and BCHAN < BCHAN[1] Then
T1 = -1;
if T1 == 1 Then
exitshort("b",atlimit,BCHAN);
if t1 == -1 Then
SELL("S",atlimit,TCHAN);
if T1 == 1 Then
buy("c",atlimit,BCHAN);
if T1 == -1 Then
exitlong("bx",atlimit,TCHAN);
그리고 변수 조절할 수 있도록 부탁드립니다.
진입후 그 방향으로 10틱 이상 상승시 mit 2틱 익절로 걸리게 할수 있을까요? 이것도 변수 조절 필요합니다.
2017-03-10
208
글번호 107681