커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4426
글번호 230811
답변완료
문의드립니다.
관리자님 안녕하세요??
총 4가지 문의드립니다.
1.n분봉상 전일시가대비 고가의 평균값 선을 차트에 표현
고가의 평균값=[{(전일첫째봉고가-전일시가)+(전일두번째봉고가-전일시가))+(전일셋째봉고가-전일시가).....+(전일마지막봉고가-전일시가)}/ 전일n분봉의갯수] + 전일시가
2.n분봉상 전일시가대비 종가의 평균값 선을 차트에 표현
종가의 평균값=[{(전일첫째봉종가-전일시가)+(전일두번째봉종가-전일시가))+(전일셋째봉종가-전일시가).....+(전일마지막봉종가-전일시가)}/ 전일n분봉의갯수] + 전일시가
3.n분봉상 전일시가대비 저가의 평균값 선을 차트에 표현
저가의 평균값=[{(전일첫째봉저가-전일시가)+(전일두번째봉저가-전일시가))+(전일셋째봉저가-전일시가)......+(전일마지막봉저가-전일시가)}/ 전일n분봉의갯수] + 전일시가
4.위의 전일시가대비 고가,종가,저가의 평균값을 가지고 이격도를 만들어주시고 이격도의 조건은 기준선을 0으로 만들어 주시고 항상 당일 이격도의 시작점이 기준선인 0에서부터 시작하도록 만들어 주십시요. 감사합니다.
2017-03-11
139
글번호 107694
답변완료
수식부탁합니다
아래수식에서
#,양봉거래량합이 음봉거래량합을 돌파시 소리발생~
*반대로
#,음봉거래량합이 양봉거래량합을 돌파시 소리발생~
수식 부탁드립니다.
- 감사합니다 -
input : n(1);
var : cnt(0),sum1(0),sum2(0);
Array : V1[10](0),V2[10](0);
if bdate != Bdate[1] Then{
V1[0] = 0;
V2[0] = 0;
for cnt = 1 to 9{
V1[cnt] = V1[cnt-1][1];
V2[cnt] = V2[cnt-1][1];
}
}
if C > O then
V1[0] = V1[0] + v;
if C < O Then
V2[0] = V2[0] + v;
if V1[n] > 0 and V2[n] > 0 then{
sum1 = 0;
sum2 = 0;
for cnt = 0 to N-1{
sum1 = sum1 + V1[cnt];
sum2 = sum2 + V2[cnt];
}
plot1(sum1,"n일간 양봉거래량");
plot2(sum2,"n일간 음봉거래량");
}
2017-03-11
149
글번호 107693
답변완료
수식 부탁 드립니다
input : P1(100),P2(10),sto1(30),sto2(5),sto3(2);
var : T1(0),entry(0),Tcond(false),HH(0),LL(0),L1(0);
var : stok(0),stod(0);
HH = highest(H,P1);
LL = lowest(L,P1);
L1 = lowest(L,P2);
stok = StochasticsK(sto1,sto2);
stod = StochasticsD(sto1,sto2,sto3);
if MarketPosition == 0 and
L1 < HH-(HH-LL)*0.5 and L1>LL and
crossup(stok, stod) Then
buy("매수",OnClose,def,2);
L1>LL 를 추가했는데 맞는 수식인지 검증좀 해 주세요^^
10봉 저점이 100봉 전저점 윗구간에서 신호가 나오게 하고싶습니다 10봉 저점이 100봉 저점을 깨면
신호가 안나오게 하고 싶은데,,부탁합니다
// 청산신호
50틱 수익후 30 틱은 수익 지킬수 있게 청산
70틱 이상 수익이면 매수 포지션이면 23.6 라인하방돌파면 청산
70틱 이상 수익이면 매도 포지션이면 76.4 라인상방돌파면 청산
// 손절신호
매수신호후 100봉 저점 무너지면 손절
매수가 대비 30틱 손실이면 손절
수식 부탁 드립니다 ^^
2017-03-11
122
글번호 107692
답변완료
분할청산_ 시스템 재문의 드립니다
위 그림과 같이 분할 청산 하고 싶습니다
항상 수고 많으십니다
수식이 잘되지 않아 재 문의 드립니다
신호에서 처음 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
143
글번호 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
167
글번호 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
133
글번호 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
147
글번호 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
251
글번호 107687
답변완료
종목 검색식
수고가 많으십니다~~~
1.예스 랭귀지 데이터 함수에서 거래량과 체결건수는 알겠는데,상승형(하락형)체결 거래량과 상승형(하락형)체결건수는 무엇을 의미하는지요?
2.랭귀지에서 작성한 검색식을 파워종목검색, 사용자 검색조건 폴더에 넣는 방법이 궁금합니다
매뉴얼을 아무리 봐도 모르겠네요!
3.액면가의 300%(N%) 이상 종목 검색식이 가능한지요? 가능하다면 작성 부탁드리겠습니다.
2017-03-10
150
글번호 107686