커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8142
글번호 230811
답변완료
수식문의
###아래식에서 median 선언되지않는것이사용되어다고나오는데요 사용하게해주시고 수식 설명좀부탁합니다
Inputs:
LineR(255),
LineG(255),
LineB(0),
FuzzR(255),
FuzzG(0),
FuzzB(0),
ShowDC(1);
Vars:
price(0),
delta(0.1),
gamma(0),
alpha(0),
beta(0),
N(0),
Period(0),
MaxAmpl(0),
Num(0),
Denom(0),
DC(0),
DomCyc(0),
Color1(0),
Color2(0),
Color3(0),
alpha1(0),
HP(0),
SmoothHP(0);
Arrays:
II[60](0),
OldI[60](0),
OlderI[60](0),
Q[60](0),
OldQ[60](0),
OlderQ[60](0),
Real[60](0),
OldReal[60](0),
OlderReal[60](0),
Imag[60](0),
OldImag[60](0),
OlderImag[60](0),
Ampl[60](0),
OldAmpl[60](0),
DB[65](0),
OldDB[60](0);
if Currentbar > 1 then {
Price = (H+L)/2;
alpha1 = (1 - Sine (360 / 30)) / Cosine(360 / 30);
HP = 0.5*(1 + alpha1)*(Price - Price[1]) + alpha1*HP[1];
SmoothHP = (HP + 2*HP[1] + 3*HP[2] + 3*HP[3] + 2*HP[4] + HP[5]) / 12;
}
IF CurrentBar < 7 Then SmoothHP = Price - Price[1];
IF CurrentBar == 1 THEN SmoothHP = 0;
delta = -0.015*CurrentBar + 0.5;
If delta < 0.1 then delta = 0.1;
If CurrentBar > 12 Then {
For N = 12 to 60 {
beta = Cosine(720 / N);
gamma = 1 / Cosine(1440*delta / N);
alpha = gamma - SquareRoot(gamma*gamma - 1);
Q[N] = (0.5*N / 6.28318)*(SmoothHP - SmoothHP[1]);
II[N] = SmoothHP;
Real[N] = 0.5*(1 - alpha)*(II[N] - OlderI[N]) + beta*(1 + alpha)*OldReal[N] - alpha*OlderReal[N];
Imag[N] = 0.5*(1 - alpha)*(Q[N] - OlderQ[N]) + beta*(1 + alpha)*OldImag[N] - alpha*OlderImag[N];
Ampl[N] = (Real[N]*Real[N] + Imag[N]*Imag[N]);
}
}
For N = 12 to 60 {
OlderI[N] = OldI[N];
OldI[N] = II[N];
OlderQ[N] = OldQ[N];
OldQ[N] = Q[N];
OlderReal[N] = OldReal[N];
OldReal[N] = Real[N];
OlderImag[N] = OldImag[N];
OldImag[N] = Imag[N];
OldAmpl[N] = Ampl[N];
OldDB[N] = DB[N];
}
MaxAmpl = Ampl[12];
For N = 12 to 60 {
If Ampl[N] > MaxAmpl then MaxAmpl = Ampl[N];
}
For N = 12 to 60 {
//IF MaxAmpl <> 0 AND (Ampl[N] / MaxAmpl) > 0 THEN DB[N] = -60*Log(Ampl[N] / MaxAmpl) / Log(10);
IF MaxAmpl <> 0 AND (Ampl[N] / MaxAmpl) > 0 THEN DB[N] = -10*Log(0.01 / (1 - 0.99*Ampl[N] / MaxAmpl)) / Log(10);
DB[N] = 0.33*DB[N] + 0.67*OldDB[N];
If DB[N] > 20 then DB[N] = 20;
}
Num = 0;
Denom = 0;
For N = 12 to 60 {
If DB[N] <= 6 Then {
Num = Num + N*(20 - DB[N]);
Denom = Denom + (20 - DB[N]);
}
If Denom <> 0 Then DC = 0.5*Num / Denom;
}
DomCyc = median(DC, 5);
If ShowDC == True Then {
Plot1(DomCyc, "DC", RGB(LineR, LineG, LineB),0,2);
Plot61(DomCyc, "DC", RGB(LineR, LineG, LineB),0,2);
}
For N = 12 to 60 {
IF DB[N] <= 10 THEN {
Color1 = LineR + DB[N]*(FuzzR - LineR) / 10;
Color2 = LineG + DB[N]*(FuzzG - LineG) / 10;
Color3 = LineB + DB[N]*(FuzzB - LineB) / 10;
}
IF DB[N] > 10 THEN {
Color1 = FuzzR*(2 - DB[N] / 10);
Color2 = FuzzG*(2 - DB[N] / 10);
Color3 = FuzzB*(2 - DB[N] / 10);
}
If N == 12 Then Plot60(N/2, "S12", RGB(Color1, Color2, Color3),0,5);
If N == 13 Then Plot59(N/2, "S13", RGB(Color1, Color2, Color3),0,5);
If N == 14 Then Plot58(N/2, "S14", RGB(Color1, Color2, Color3),0,5);
2015-01-12
248
글번호 82191
답변완료
수직선표시
input : 기간1(5),기간2(20);
var1 = ma(c,기간1);
var2 = ma(c,기간2);
if crossup(var1,var2) Then
value1 = var2;
"수직선표시"
if var2 > value1 Then
value1 = var2;
"수직선표시"
if CrossDown(var1,var2) Then
value2 = var2;
"수직선표시"
if var2 < value2 Then
value2 = var2;
"수직선표시"
2015-01-12
212
글번호 82184
회원 님에 의해서 삭제되었습니다.
2015-01-12
3
글번호 82181
회원 님에 의해서 삭제되었습니다.
2015-01-12
3
글번호 82170
답변완료
지표식 부탁 드립니다
궁금한 지표식은
5분차트에
120분봉
5 10 20 60 실시간 이평을 구현하고 싶습니다
새해 복 많이 받으시고
만사 형통 하세요
언제나 감사 드립니다
2015-01-12
230
글번호 82164
답변완료
문의드립니다.
안녕하세요.
추운 날씨에 고생이 많으십니다.
문의 드릴 사항은요...
해외선물 크루드 오일의 경우 아침 07시20분에 장이 마감되고 08시에 다시시작됩니다.
여기서 당일을 아침 08:00부터 익일 07:20까지라고 볼때,,
1. 당일 최고가격과 최저가격의 중심값
2. 당일 첫 3분봉의 (고가+저가)/2
3-1. (당일 최고가격+당일최저가격)/2 가격을 양봉으로 터치하면 그 시점부터 중심값을 파란색으로 표시, 음봉으로 터치하면 그시점부터 중심값을 빨간색으로 표시
*현재까지의 당일 중심값이 48.5라고 할때 이 라인은 중심값이 변하더라도 주가가 변한 중심값을 터치하기 전까지는 48.5 가격에 계속 그려져야 함
* 변동된 중심값을 주가가 터치하면 그 순간 48.5라인은 더이상 그려지지 않고 변동된 중심값이 그려져야 함.
3-2. 최초 중심가격 터치되어 중심라인이 그려진 이후 고가 갱신이나 저가 갱신으로 중심가격의 변동이 오고 그 변동된 중심가격을 양봉이나 음봉으로 터치시 3-1에서 생긴 중심선 라인은 표시를 멈추고 변동된 중심선 가격에 라인이 표시되도록 수식 부탁 드립니다.
이전 중심값을 터치할 경우에는 기존 중심값이 계속 나타나면 되고,
새롭게 변동된 중심값을 주가가 터치 할 때마다 새로운 중심값이 표시되도록 부탁드립니다.
2015-01-12
213
글번호 82163
답변완료
문의드립니다
복합차트 분봉차트에, 정규장 일봉 이평선(5.10.20.60)값을 나타내는 수식을 부탁드립니다
2015-01-12
205
글번호 82161
답변완료
간단한 수식 질문입니다.
항상 감사드립니다.
제가 원하는 수식이 전일 종가와 당일 시가의 차이가 1포인트 이상 차이가 나면
당일 시가를 기준으로 위아래로 선을 긋는 거구요
만약 전일 종가와 시가가 1포인트 차이가 나지 않으며 전일 종가를 기준으로 위아래로 선을 긋는 건데요..
프로그래밍 초보라서요 막해봤는데 오류는 나지 않는데
문제는 시가가 사선으로 연결된다는 점입니다..
그리고 if문이 잘 안됐는지 둘중 하나를 골라서 적용되는게 아니라 두가지 케이스가 차트에 다 표시가 됩니다..
도움부탁드립니다. 아래는 제가 작성한 수식입니다.
if abs(dayopen(0)-dayclose(1))>1 Then
Plot1(dayOpen(0)+0, "시가",BLACK);
Plot2(dayOpen(0)+1, "+1",RED);
Plot3(dayOpen(0)+2, "+2",RED);
Plot4(dayOpen(0)+3, "+3",RED);
Plot5(dayOpen(0)+4, "+4",RED);
Plot6(dayOpen(0)+5, "+5",RED);
Plot7(dayOpen(0)+6, "+6",RED);
Plot8(dayOpen(0)+7, "+7",RED);
Plot9(dayOpen(0)+8, "+8",RED);
Plot10(dayOpen(0)+9, "+9",RED);
Plot11(dayOpen(0)+10, "+10",RED);
Plot12(dayOpen(0)-1, "-1",BLUE);
Plot13(dayOpen(0)-2, "-2",BLUE);
Plot14(dayOpen(0)-3, "-3",BLUE);
Plot15(dayOpen(0)-4, "-4",BLUE);
Plot16(dayOpen(0)-5, "-5",BLUE);
Plot17(dayOpen(0)-6, "-6",BLUE);
Plot18(dayOpen(0)-7, "-7",BLUE);
Plot19(dayOpen(0)-8, "-8",BLUE);
Plot20(dayOpen(0)-9, "-9",BLUE);
Plot21(dayOpen(0)-10, "-10",BLUe);
if abs(dayopen(0)-dayclose(1))<=1 Then
Plot22(dayclose(1), "시가",BLACK);
Plot23(dayclose(1)+1, "+1",RED);
Plot24(dayclose(1)+2, "+1",RED);
Plot25(dayclose(1)+3, "+1",RED);
Plot26(dayclose(1)+4, "+1",RED);
Plot27(dayclose(1)+5, "+1",RED);
Plot28(dayclose(1)+6, "+1",RED);
Plot29(dayclose(1)+7, "+1",RED);
Plot30(dayclose(1)+8, "+1",RED);
Plot31(dayclose(1)+9, "+1",RED);
Plot32(dayclose(1)-1, "-1",blue);
Plot33(dayclose(1)-2, "-2",blue);
Plot34(dayclose(1)-3, "-3",blue);
Plot35(dayclose(1)-4, "-4",blue);
Plot36(dayclose(1)-5, "-5",blue);
Plot37(dayclose(1)-6, "-6",blue);
Plot38(dayclose(1)-7, "-7",blue);
Plot39(dayclose(1)-8, "-8",blue);
Plot40(dayclose(1)-9, "-9",blue);
Plot41(dayclose(1)-10, "-10",blue);
간단한 선긋기 인데요..
2015-01-12
206
글번호 82159
답변완료
검색식부탁드립니다.
1.금일 장시작부터 현재까지 각15분봉 20볼린저밴드 상단을 양봉(몸통이 2%이상)으로 금일 최초로 돌파한 종목검색식 부탁드립니다.
2.20봉 볼린저밴드 상한선이 n봉전부터 전날까지 지속 하락하다가 금일 상승전환한 종목검색식 부탁드립니다.
3.최근 n거래일(변수)중 상승일수가 하락일수보다 많은 비율이 70%를 넘고
현재 총매도량이 총매수량보다 1.5배이상 많은 좀목 검색식 부탁드립니다.
4.N봉전 60이평선이 20볼린저밴드 하한선 아래로 크로스하고 그상태를 유지하다가
현재 60이평선이 3거래일이상 하락중인 20볼밴 하한선 위로 크로스하는 종목 검색식 부탁드립니다.
5.아래는 당일 청산라인 생성된 종목검색식이라 인덱스를 14(30분봉기준)를 사용하였는데
이것을 전일 마지막봉부터 현재까지로 변경 부탁드립니다.
// Trailing Stop Line
input: ATR_Factor(3);
var : Loss(0),HiLo(0),HRef(0),LRef(0),HiLoHRefMax(0),HiLoHRefMaxLRefMax(0),
ATRMod(0),WaitingForEntry(true),Trail(0),LineNum(0), ReturnVal(0) ;
var : ATR_Period(5), Position(0), TL5(0), SearchResult(0);
HiLo = iff(High - Low < 1.5 * Average(High - Low, ATR_Period), High - Low, 1.5 * Average(High - Low, ATR_Period)) ;
HRef = iff(Low <= High[1], High - Close[1],(High - Close[1] ) - 0.5 * (Low - High[1])) ;
LRef = iff(High >= Low[1], Close[1] - Low, (Close[1] - Low) - 0.5 * (Low[1] - High)) ;
HiLoHRefMax = Maxlist(HiLo, HRef) ;
HiLoHRefMaxLRefMax = Maxlist(HiLoHRefMax, LRef) ;
ATRMod = ema(HiLoHRefMaxLRefMax, 2 * ATR_Period - 1) ;
Loss = ATR_Factor * ATRMod;
var2 = MA(Money,3);
if index <= 5 then
{
Position = 1;
Trail = Close - Loss ;
}
else
{
/*If DataCompress == 4 and sdate > 19980811 and sdate < 20010115 then
{
MessageLog("$RS++ Position1=%.1f, %.1f, %.1f", Position, Position[1], Trail);
}*/
if Close > Trail[1] and Close[1] > Trail[2] then
Trail = MaxList(Trail[1], Close - Loss);
else if Close < Trail[1] and Close[1] < Trail[2] then
Trail = MinList(Trail[1], Close + Loss);
else if Close > Trail[1] then
Trail = Close - Loss;
else
Trail = Close + Loss;
if Position == -1 and Close > Trail and Trail > 0 then
{
Position = 1;
If index >= 14 Then
SearchResult = 1;
}
else if Position == 1 and Close < Trail then
{
Position = -1;
If index >= 14 Then
SearchResult = 0;
}
else if Trail > 0 then
{
}
}
Find(SearchResult);
감사합니다~
2015-01-12
285
글번호 82156