커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1691
글번호 230811
답변완료
지표 부탁 드립니다.
input : sto1(12),sto2(26),sto3(9);
var : Stochasticsfast(0),Stochasticsslow(0),StochasticssOsc(0);
StochasticsFast = (C-lowest(L,sto1))/(highest(H,sto1)-lowest(L,sto1))*100;
Stochasticsslow = AccumN(C-lowest(L,sto1),sto2)/AccumN((highest(H,sto1)-lowest(L,sto1)),sto2)* 100;
StochasticssOsc = ema(Stochasticsfast,sto2)-ema(Stochasticsslow,sto3);
if StochasticssOsc > 0 Then
plot1(StochasticssOsc,"osc",RED);
Else
plot1(StochasticssOsc,"osc",BLUE);
PlotBaseLine1(0);
PlotBaseLine2(20);
PlotBaseLine3(-20);
PlotBaseLine4(15);
PlotBaseLine5(-15);
PlotBaseLine6(5);
PlotBaseLine7(-5);
직전봉보다 적을시 파랑 크면 빨강 부탁 드립니다. 수고하세요
2021-10-25
964
글번호 153152
답변완료
문의드립니다
수고많으십니다.
아래 내용을 수식으로 만들어 주셨는데요..
실제에는 다르게 나타나서요.
1. 신호나올시 즉시 매수 매도하는 것도 가격이 차이가 많이 납니다.
2. 그리고 종가에 매수 매도하는 것하고 즉시 매수 매도하는 것이
거래 횟수가 5-6배 이상 차이가 나는 것도 이상한 거 같습니다.
두 경우에 신호가 나타난 차트 사진 올려 드립니다.
6분과 30분에 같은 방향 신호가 동시에 나올때 즉시 매수 매도 하는 것과
6분의 종가에 매수매도 하는 2가지 수식을 주셨습니다.
수동으로 복귀해보는 것과 차이가 많이 납니다.
확인 한번 부탁드립니다.
요청했던 부분 다시 남깁니다.
감사합니다.
6분봉과 30분봉, 매수 매도 신호가 나오도록 해주세요.
1. 현재 캔들이 10번째 이전 캔들의 고가를 돌파할때 매수 신호, 저가를 깰때 매도 신호가 나오도록 해주세요. 종가가 아닌 돌파나 깰때 바로 나오도록 해주세요.
2. 현재 캔들이 10번째 이전 캔들의 고가를 돌파하거나 저가를 깨는 일이 같이 일어날 때는 일어나는 그 시각에 해당되는 매수, 매도 신호가 나오도록 해주세요.
3. 10번째 이전 캔들의 고가 위에서 현재 캔들이 앞 캔들의 고가를 높이는 경우, 매수 신호가 나오도록 해주세요.
4. 10번째 이전 캔들의 저가 아래에서 현재 캔들이 앞 캔들의 저가를 깨는 경우 매도 신호가 나오도록 해주세요.
* 위 사항에 대해 6분봉과 30분봉이 같은 방향으로 신호가 있을 때만 그 방향으로 매수, 매도 진입하도록 해주세요.
1 즉시진입
input : ntime1(6),ntime2(30),n(10);
input : StartTime(222500),EndTime(010000);
input : 익절틱수(50),손절틱수(50);
var : S1(0),D1(0),TM(0),TF1(0),TF2(0),cnt(0);
Array : H1[50](0),L1[50](0),H2[50](0),L2[50](0);
var : Tcond(false);
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
Tcond = true;
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF1 = TM%ntime1;
TF2 = TM%ntime2;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime1 > 1 and TF1 < TF1[1]) or
(Bdate == Bdate[1] and ntime1 > 1 and TM >= TM[1]+ntime1) or
(Bdate == Bdate[1] and ntime1 == 1 and TM > TM[1]) Then
{
H1[0] = H;
L1[0] = L;
For cnt = 1 to 49
{
H1[cnt] = H1[cnt-1][1];
L1[cnt] = L1[cnt-1][1];
}
}
if H1[0] > 0 and H > H1[0] Then
H1[0] = H;
if L1[0] > 0 and L < L1[0] Then
L1[0] = L;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime2 > 1 and TF2 < TF2[1]) or
(Bdate == Bdate[1] and ntime2 > 1 and TM >= TM[1]+ntime2) or
(Bdate == Bdate[1] and ntime2 == 1 and TM > TM[1]) Then
{
H2[0] = H;
L2[0] = L;
For cnt = 1 to 49
{
H2[cnt] = H2[cnt-1][1];
L2[cnt] = L2[cnt-1][1];
}
}
if H2[0] > 0 and H > H2[0] Then
H2[0] = H;
if L2[0] > 0 and L < L2[0] Then
L2[0] = L;
if Tcond == true Then
{
if MarketPosition <= 0 and H1[n] > 0 and H2[n] > 0 and H < min(H1[n],H2[n])+PriceScale*1 Then
Buy("b",AtStop,max(H1[n],H2[n]+PriceScale*1));
if MarketPosition >= 0 and L1[n] > 0 and L2[n] > 0 and L > max(L1[n],L2[n])-PriceScale*1 Then
Sell("s",AtStop,min(L1[n],L2[n])-PriceScale*1);
}
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStopLoss(PriceScale*손절틱수,PointStop);
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
}
2. 종가진입
input : ntime1(6),ntime2(30),n(10);
input : StartTime(222500),EndTime(010000);
input : 익절틱수(50),손절틱수(50);
var : S1(0),D1(0),TM(0),TF1(0),TF2(0),cnt(0);
Array : H1[50](0),L1[50](0),H2[50](0),L2[50](0);
var : Tcond(false);
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
Tcond = true;
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF1 = TM%ntime1;
TF2 = TM%ntime2;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime1 > 1 and TF1 < TF1[1]) or
(Bdate == Bdate[1] and ntime1 > 1 and TM >= TM[1]+ntime1) or
(Bdate == Bdate[1] and ntime1 == 1 and TM > TM[1]) Then
{
H1[0] = H;
L1[0] = L;
For cnt = 1 to 49
{
H1[cnt] = H1[cnt-1][1];
L1[cnt] = L1[cnt-1][1];
}
}
if H1[0] > 0 and H > H1[0] Then
H1[0] = H;
if L1[0] > 0 and L < L1[0] Then
L1[0] = L;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime2 > 1 and TF2 < TF2[1]) or
(Bdate == Bdate[1] and ntime2 > 1 and TM >= TM[1]+ntime2) or
(Bdate == Bdate[1] and ntime2 == 1 and TM > TM[1]) Then
{
H2[0] = H;
L2[0] = L;
For cnt = 1 to 49
{
H2[cnt] = H2[cnt-1][1];
L2[cnt] = L2[cnt-1][1];
}
}
if H2[0] > 0 and H > H2[0] Then
H2[0] = H;
if L2[0] > 0 and L < L2[0] Then
L2[0] = L;
if Tcond == true Then
{
if H1[n] > 0 and H2[n] > 0 and C > H1[n] and C > H2[n] and C > O Then
Buy();
if L1[n] > 0 and L2[n] > 0 and C < L1[n] and C < L2[n] and C < O Then
Sell();
}
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStopLoss(PriceScale*손절틱수,PointStop);
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
}
2021-10-25
815
글번호 153151
답변완료
도움 부탁 드립니다.
항상 답변 감사드립니다. 아래와 같은 내용으로 시스템을 만들려고하는데 잘 되지 않습니다. 부탁드립니다.
-------
여러 상황이 있고 각각의 상황이 연결되어있습니다.
각 조건(알파벳)은 '만족하고 있는 상태'가 아니라 '특정 상황을 만족했을 시'입니다.
1. 0 = 아무것도 아닌 상태 (동시에 무포지션)
2. A, A', B, C = 특정 조건 만족
2021-10-25
646
글번호 153149
답변완료
도움 부탁드립니다.
안녕하세요 항상 답변 감사드립니다. 아래와 같은 내용으로 시스템을 만들려고하는데 도움 부탁드립니다.
특정 상황 x가 만족된뒤 완성되는 봉의 고가와 저가의 값에서 바로 전 봉의 atr값을 뺀 뒤, 해당 값을 저장한뒤(편의상 z)현재 봉이 해당 값을 뚫고 아래에서 음봉 마감되면 매수.
이때 중요한 건, 종가가 z 값보다 아래에서 완성되는 첫번쨰 봉에서만 매수하고 싶습니다. (시가가 z보다 큰지 아닌지는 상관 x)
z값 아래에서 음봉마감이 계속 되면 계속 들어가더라구요. 그렇게 안됐으면 좋겠습니다.
도와주세요
2021-10-25
639
글번호 153146
답변완료
시스템식 문의 드립니다.
시스템식 문의를 드리려고 요청 드립니다.
청산관련해서.
특정한 금액에서 매수를 했다면,
예를들어 목표 수익률 5% 잡고, 10,000원에 매수했을경우...
만약에 -1% 하락시 (주가가 9,900원) 이 되었을때 목표수익률 4%로 변경,
-2% 하락시 (주가가 9,800원) 이 되었을때 목표수익률 3%로 변경,
-3% 하락시 (주가가 9,700원) 이 되었을때 목표수익률 2%로 변경,
-4% 하락시 (주가가 9,600원) 이 되었을때 목표수익률 1%로 변경,
-5% 하락시 (주가가 9,500원) 이 되었을때 목표수익률 0%로 변경,
-6% 하락시 (주가가 9,400원) 이 되었을때 목표수익률 -1%로 변경,
-7% 하락시 (주가가 9,300원) 이 되었을때 청산
이런식을 작성하고 싶은데.. 가능할지 궁금합니다.
그럼 부탁드리겠습니다. 감사합니다.
2021-10-25
717
글번호 153144
베어샘 님에 의해서 삭제되었습니다.
2021-10-25
60
글번호 153142
답변완료
윗꼬리 관련 검색수식 질문드립니다
안녕하세요
키움증권을 쓰다가 예스랭귀지를 공부해보려고 하는데요
키움에서 작성한 수식을 변환을 부탁드립니다
윗꼬리 관련 수식이고요
변수는 배수 상승률 상승조건이렇게 설정해놨고
배수는 윗꼬리 길이와 바디와의 크기 비율입니다
상승조건 기본 설정은 고가/시가(1) 입니다
당일 장중에 이런 조건이 발생한 경우를 발생시간에 상관없이 모두 찾아보고 싶습니다
valuewhen 은 상단 하단 라인을 만들어서 색상 채우기로 표현한 부분입니다
예스에서도 표현이 가능한지요
수식1
A=고가-저가;
B=max(종가,시가)-저가;
조건=A/B>배수 and 상승조건>(1+상승률/100);
valuewhen(1,조건,고가);
수식2
A=고가-저가;
B=max(종가,시가)-저가;
조건=A/B>배수 and 상승조건>(1+상승률/100);
valuewhen(1,조건,max(종가,시가));
부탁드립니다
2021-10-25
1013
글번호 153134
답변완료
문의 드립니다.
항상 감사드립니다~~
아래 수식으로 데모해 보았는데요..
종가에 매수 매도 진입하는 것인데, 종가 가격하고 다르게 들어가는 경우가 몇번 있습니다.
그리고 익절, 손절 가격에 청산되지 않고 약 손절 가격으로 청산되는 내용이 몇개 있습니다. bx, sx라고 표시되어 나옵니다.
이 부분은 어떤 문제인지 확인, 수정 부탁드립니다.
그 내역 부분 첨부해서 올립니다.
감사합니다~~^^
input : ntime1(6),ntime2(30),n(10);
input : StartTime(222500),EndTime(010000);
input : 익절틱수(50),손절틱수(50);
var : S1(0),D1(0),TM(0),TF1(0),TF2(0),cnt(0);
Array : H1[50](0),L1[50](0),H2[50](0),L2[50](0);
var : Tcond(false);
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
Tcond = true;
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF1 = TM%ntime1;
TF2 = TM%ntime2;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime1 > 1 and TF1 < TF1[1]) or
(Bdate == Bdate[1] and ntime1 > 1 and TM >= TM[1]+ntime1) or
(Bdate == Bdate[1] and ntime1 == 1 and TM > TM[1]) Then
{
H1[0] = H;
L1[0] = L;
For cnt = 1 to 49
{
H1[cnt] = H1[cnt-1][1];
L1[cnt] = L1[cnt-1][1];
}
}
if H1[0] > 0 and H > H1[0] Then
H1[0] = H;
if L1[0] > 0 and L < L1[0] Then
L1[0] = L;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime2 > 1 and TF2 < TF2[1]) or
(Bdate == Bdate[1] and ntime2 > 1 and TM >= TM[1]+ntime2) or
(Bdate == Bdate[1] and ntime2 == 1 and TM > TM[1]) Then
{
H2[0] = H;
L2[0] = L;
For cnt = 1 to 49
{
H2[cnt] = H2[cnt-1][1];
L2[cnt] = L2[cnt-1][1];
}
}
if H2[0] > 0 and H > H2[0] Then
H2[0] = H;
if L2[0] > 0 and L < L2[0] Then
L2[0] = L;
if Tcond == true Then
{
if MarketPosition <= 0 and H1[n] > 0 and H2[n] > 0 and H < min(H1[n],H2[n])+PriceScale*1 Then
Buy("b",AtStop,max(H1[n],H2[n]+PriceScale*1));
if MarketPosition >= 0 and L1[n] > 0 and L2[n] > 0 and L > max(L1[n],L2[n])-PriceScale*1 Then
Sell("s",AtStop,min(L1[n],L2[n])-PriceScale*1);
if MarketPosition == 1 Then
ExitLong("bx",AtStop,L-PriceScale*1);
if MarketPosition == -1 Then
ExitShort("sx",AtStop,H+PriceScale*1);
}
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStopLoss(PriceScale*손절틱수,PointStop);
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
}
2021-10-25
818
글번호 153129
답변완료
함수요청
안녕하세요?
아래 글번호 74340번 재질문입니다.
첨부 확인 부탁드립니다.
감사합니다.
-----------------------------------------------------------------------------
아래의 요건으로 지표작성을 요청드립니다.
국내선물 1분봉으로 거래합니다.
이에 매일매일 데일리로 의미있는 고점과 저점을 잡고자 하는데
- MACD오실레이터가 9시 1분 완성봉의 첫 히스토그램이 양의 값이면
그 값 포함부터 MACD오실레이터 값이 음으로 반전하고 다시 양의 값으로 재전환할 때까지를 포함하여 (MACD오실레이터 양의 값 포함->음->양으로 변환할 때포함) 주가의 고점(HH)과 저점(LL)을 잡습니다.
- MACD오실레이터가 9시 1분 완성봉의 첫 히스토그램이 음의 값이면
그 값 포함부터 MACD오실레이터 값이 양으로 반전하고 다시 음으로 값으로 재전환할 때까지를 포함하여 (MACD오실레이터 음의 포함->양-> 음으로 변환할 때포함) 주가의 고점(HH)과 저점(LL)을 잡습니다.
2021-10-25
994
글번호 153128