커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8125
글번호 230811
답변완료
수식변환의뢰
수고하십니다.
아래조건으로 종목을 검색할 수 있도록 수식변환의뢰 드립니다.
A 캔들연속발생:[일]0봉전 2봉 연속 양봉발생
B 신고가:[일]0봉전 고가가 5봉중 신고가
C 주가등락률:[일]1봉전(중) 종가대비 0봉전 시가등락률 5.0%이하
D 거래량비율:[일]5봉 평균(0봉전)거래대금대비 동일주기 5봉전 300.0%이하
E 거래량비율(n봉):[일]1봉전 거래량 대비 0봉전 거래량 비율 200.0%이상
F 기간내 주가변동폭:[일]0봉전까지 10봉간 최고최저폭 150.0%이하
G [일]0봉전 5봉중 신고거래량
H 주가비교:[일]0봉전 시가 < 0봉전 종가
I 최고종가:[일]0봉전 종가가 5봉중 최고종가
J [일]1봉 연속증가
K 기간내 거래대금:[일]0봉전 1봉이내 거래대금(일/주:백만, 분:천원) 10000이상 1회 이상
L 가격-이동평균 비교:[일]0봉전 (종가 20)이평 < 종가
M 이평이격도:[일]0봉전(종가 5, 종가 20) 5%이내 근접 1회이상
N 주가이평배열(3):[일]0봉전 60이평 > 120이평 > 240이평
O 주가이평추세:[일]0봉전 (종가 120)이평 상승추세유지 2회 이상
A and B and C and D and E and F and G and H and I and J and K and L and M and N and O
2023-01-29
1454
글번호 165794
배움이 님에 의해서 삭제되었습니다.
2023-01-29
26
글번호 165793
고성 님에 의해서 삭제되었습니다.
2023-01-29
100
글번호 165792
답변완료
수식 문의 드립니다.
안녕하세요
지표식 하나 문의 드립니다.
1. 20 이평이 상승반전시에 20 이평선이 빨간색, 하락반전시에 파란색으로
나오게 하는 식 부탁 드립니다.
2. 20 이평이 60 이평을 crossup 일때에 부터 20 이평선이 60 이평을 Crossdown
할때까지 20 이평선이 빨간색 으로 나오게 하고 그 반대일때는 파란색으로 나오게
하는 식을 부탁드립니다.
항상 감사드립니다.
2023-01-28
744
글번호 165791
답변완료
수식 수정보완 부탁드립니다.
수고하십니다.
아래의 식을 수정보완 부탁드립니다.
월봉 시가를 종가상 바로 하방이탈하여
다시 월봉의 시가를 종가상 돌파하는 검색을 아래와 같이 만들어봤는데
수정보완을 부탁드립니다.
if sDate > sDate[1]+30 Then
{
var1 = O;
}
var : 종가_월봉시가데드(0), 봉번호(0) ;
if CrossDown(c, var1) Then
{
종가_월봉시가데드 = -1;
봉번호 = Index;
}
if CrossUp(c,var1) Then
{
종가_월봉시가데드 = 1;
if 종가_월봉시가데드[1] == -1 and
봉번호 > 0 and
Index < 봉번호+10
//Index >= 봉번호+3
Then
Plot1(L, "월봉 시가 돌파");
}
수정보완 요청사항
1. 월봉의 시가를 월 첫날 바로 하방이탈하여
다시 돌파한 기간이 3일보다 커야되고 10일보다 작아야된다.
(위의 식이 요청사항의 조건을 만족하지 못하는것 같아서 도움을 요청드립니다)
감사합니다.
2023-01-28
802
글번호 165790
답변완료
식 부탁드립니다.
안녕하세요?
차트 시작 이후 전봉고점 상향 돌파시 한 틱 위에서 2계약 매수한 후.
그로부터 20틱 올라가면 보유계약의 절반 청산, 청산 후 20틱 올라가면 다시 2계약 추가 매수, 그로부터 다시 20틱 올라가면 다시 보유계약의 절반(반올림) 청산, 그 청산 후 다시 20틱 올라가면 다시 2계약 추가 매수하는 식으로 꾸준히 반목되고,
최종매수가격이나 최종청산가격에서 20틱 떨어지면 2계약 청산,그로부터 다시 20틱 떨어지면 다시 청산된 것의 절반 매수 하는 식으로 반복되는 식 부탁드립니다.
(매수가격이나 일부 청산가격보다 더 밑으로 가면서 청산된 후 청산분 절반 매수하는 외에는 매수는 늘 최종매수시점보다 더 올라갈 때만 하는 것으로 가정합니다. 매도진입은 짜주시는 식을 응용할 생각입니다.)
2023-01-28
935
글번호 165789
답변완료
수정부탁드립니다
수직선수정부탁드립니다.
Input:af(0.02),maxAF(0.25),선크기(0.5);
Var:오늘(0),극대(0),극저(0),가속(0),내일(0),추세(0),상승(1),하락(-1),hTL2(0);
//---------------------------------------------------------------------------------
Var1 = Ema(C,1.5);
if Var1 > 0 and
극대 == 0 and 극저 == 0 then {
극대 = Var1; 극저 = Var1;
}
if Var1 > 0 and
오늘[1] == 0 then {
if 추세[1] == 0 then {
if Var1[1] < Var1 then 추세 = 상승;
if Var1[1] > Var1 then 추세 = 하락;
}
if 추세[1] == 상승 and Var1[1] > Var1 then {
추세 = 하락;
오늘 = 극대[1];
가속 = af;
}
if 추세[1] == 하락 and Var1[1] < Var1 then {
추세 = 상승;
오늘 = 극저[1];
가속 = af;
}
극저 = min(Var1,극저);
극대 = max(Var1,극대);
}
if 오늘[1] > 0 then {
if 추세[1] == 상승 then {
if Var1 > 내일[1] then {
오늘 = 내일[1];
극저 = 0;
if Var1 > 극대[1] then {
극대 = Var1;
가속 = min(maxAF,가속+af);
}
}
else {
추세 = 하락;
오늘 = 극대[1];
극대 = 0;
극저 = Var1;
가속 = af;
hTL2 = TL_New(극대,극저,가속,sDate,sTime,99999999); //99999999상부쪽직선
TL_SetSize(hTL2, 선크기);
TL_SetColor(hTL2,Lime);
}
}
if 추세[1] == 하락 then {
if Var1 < 내일[1] then {
오늘 = 내일[1];
극대 = 0;
if Var1 < 극저[1] then {
극저 = Var1;
가속 = min(maxAF,가속+af);
}
}
else {
추세 = 상승;
오늘 = 극저[1];
극저 = 0;
극대 = Var1;
가속 = af;
hTL2 = TL_New(극저,극대,가속,sDate,sTime,0); //0하부쪽직선
TL_SetSize(hTL2, 선크기);
TL_SetColor(hTL2,Magenta);
}
}
}
내일 = (max(극대,극저) - 오늘) * 가속 + 오늘;
2023-01-28
1040
글번호 165788
답변완료
질문 드립니다.
아래와 같은 방법으로
c,c2,c3,c4 의 상수를 앞에 곱해야하는데,
방법 있을까요?
---------------------------
파이썬 예제
w1 = np.array([[ 7.6870495e-01, -4.5000097e-01, -5.0288552e-01, -5.8628911e-01,-7.8140247e-01],
[-2.2677729e-01, -1.3227734e-01, -1.6453594e-01, -4.4095448e-01,-6.2959242e-01],
[-3.9802355e-01, -1.3464031e-01, 3.8020921e-01, -1.3022888e-01,-7.7714334e-04],
[ 6.9682324e-01, 1.8243028e-01, 5.3357744e-01, 6.5138638e-01,-6.7072177e-01]])
b1 = np.array([ 0.00463578, 0.00594319, 0.00514426, -0.00606843, 0.00222296])
w2 = np.array([[ 0.5617929 , 0.33208025, 0.13907313, 0.47333008, -0.3797783 ,-0.28105068],
[ 0.33742946, 0.12592183, 0.01064893, 0.52772814, -0.6247222 ,0.69132566],
[ 0.14056782, 0.49507526, 0.4480095 , 0.68785197, -0.72289205,-0.6297876 ],
[ 0.19173265, 0.12094978, -0.4096364 , 0.03867307, 0.59292454,-0.12875453],
[-0.49488088, -0.08192482, 0.17502253, -0.05582228, -0.23403022,0.17012648]])
b2 = np.array([ 0.00170565, 0.0005993 , 0.00020622, 0.0013302 , -0.00105772,0.00132773])
w3 = np.array([[-0.22596964],
[-0.05365248],
[-0.14615695],
[ 0.32034966],
[-0.47812763],
[-0.11717749]])
b3 = np.array([-0.00013015])
# x = ([[c],[c2],[c3],[c4]])
# ((x(w1)+b1)w2+b2)w3+b3
# (xw1w2+b1w2+b2)w3+b3
# xw1w2w3 + b1w2w3 + b2w3 + b3
w = np.dot(np.dot(w1,w2),w3)
b = np.dot(np.dot(b1,w2),w3)+np.dot(b2,w3)+b3
print(w)
print(b)
x = np.dot(x,w)+b
2023-01-28
1311
글번호 165787
답변완료
수식 문의드립니다
input : 시작시간(090000),종료시간(0);
input : Period1(1),Period2(2),Period3(3),Period4(4),Period5(5),Period6(6),Period7(7),Period8(8),Period9(9),Period10(10),Period11(11),Period12(12),Period15(15),Period20(20),Period25(25),Period30(30),Period35(35),Period40(40),Period52(52),Period70(70),Period80(80),
Period105(105),Period140(140),Period150(150),Period210(210),Period280(280),Period300(300),Period450(450),Period480(480),Period520(520),Period560(560),Period600(600),Period840(840),Period900(900),Period1120(1120),Period1200(1200),Period1800(1800),Period2400(2400),Period2800(2800),Period3000(3000),Period3600(3600),Period4800(4800),Period7200(7200),
Period58(58),Period60(60),Period62(62),Period82(82),Period84(84),Period28(70),Period31(11),Period32(24),Period33(5),
Period41(35),Period42(35),Period43(35),Period48(15),Period1001(850),Period1002(520),Period1003(480),Period1008(36),aa4(0.4),aa5(0.5),aa6(0.8),익절틱수s4(111),손절틱수s4(91);
var : mav1(0),mav2(0),mav3(0),mav4(0),mav5(0),mav6(0),mav7(0),mav8(0),mav9(0),mav10(0),mav11(0),mav12(0),mav15(0),mav20(0),mav25(0),mav30(0),mav35(0),mav40(0),mav52(0),mav70(0),mav80(0),mav105(0),mav140(0),mav150(0),mav210(0),mav280(0),mav300(0),mav450(0),mav480(0),mav520(0),mav560(0),mav600(0),
mav840(0),mav900(0),mav1120(0),mav1200(0),mav1800(0),mav2400(0),mav2800(0),mav3000(0),mav3600(0),mav4800(0),mav7200(0),
mav58(0),mav60(0),mav62(0),mav82(0),mav84(0),mav28(0),mav31(0),mav32(0),mav33(0),
mav41(0),mav42(0),mav43(0),mav48(0),mav1001(0),mav1002(0),mav1003(0),mav1008(0),Bxcond(false),Sxcond(false);
var : Tcond(false);
var : T(0);
var : ii(0);
var : BE1(0),BE2(0),BE3(0),BE4(0),BE5(0);
var : SE1(0),SE2(0),SE3(0),SE4(0),SE5(0);
mav1 = ma(c, Period1);
mav2 = ma(c, Period2);
mav3 = ma(c, Period3);
mav4 = ma(c, Period4);
mav5 = ma(c, Period5);
mav6 = ma(c, Period6);
mav7 = ma(c, Period7);
mav8 = ma(c, Period8);
mav9 = ma(c, Period9);
mav10 = ma(c, Period10);
mav11 = ma(c, Period11);
mav12 = ma(c, Period12);
mav15 = ma(c, Period15);
mav20 = ma(c, Period20);
mav25 = ma(c, Period25);
mav30 = ma(c, Period30);
mav35 = ma(c, Period35);
mav40 = ma(c, Period40);
mav52 = ma(c, Period52);
mav70 = ma(c, Period70);
mav80 = ma(c, Period80);
mav105 = ma(c, Period105);
mav140 = ma(c, Period140);
mav150 = ma(c, Period150);
mav210 = ma(c, Period210);
mav280 = ma(c, Period280);
mav300 = ma(c, Period300);
mav450 = ma(c, Period450);
mav480 = ma(c, Period480);
mav520 = ma(c, Period520);
mav560 = ma(c, Period560);
mav600 = ma(c, Period600);
mav840 = ma(c, Period840);
mav900 = ma(c, Period900);
mav1120 = ma(c, Period1120);
mav1200 = ma(c, Period1200);
mav1800 = ma(c, Period1800);
mav2400 = ma(c, Period2400);
mav2800 = ma(c, Period2800);
mav3000 = ma(c, Period3000);
mav3600 = ma(c, Period3600);
mav4800 = ma(c, Period4800);
mav7200 = ma(c, Period7200);
mav58 = ma(c, Period58);
mav60 = ma(c, Period60);
mav62 = ma(c, Period62);
mav82 = ma(c, Period82);
mav84 = ma(c, Period84);
mav28 = ma(c, Period28);
mav31 = ma(c, Period31);
mav32 = ma(c, Period32);
mav33 = ma(c, Period33);
mav41 = ma(c, Period41);
mav42 = ma(c, Period42);
mav43 = ma(c, Period43);
mav48 = ma(c, Period48);
mav1001 = ma(c, Period1001);
mav1002 = ma(c, Period1002);
mav1003 = ma(c, Period1003);
mav1008 = ma(c, Period1008);
var1 = abs(c-mav70);
var2 = abs(mav10-mav20);
var3 = abs(mav20-mav35);
var4 = abs(mav35-mav70);
var5 = abs(mav70-mav140);
var6 = abs(mav140-mav280);
var7 = abs(mav280-mav560);
var8 = abs(mav560-mav1120);
var9 = abs(mav1120-mav1800);
input : Atime(30),P1(2),P2(3),P3(5),P4(10),P5(20),P6(40);
var : TF(0),cnt(0),sum1(0),bmav2(0),sum2(0),bmav3(0),sum3(0),bmav5(0),sum4(0),bmav10(0),sum5(0),bmav20(0),sum6(0),bmav40(0);
Array : CC[500](0);
TF = TimeToMinutes(stime)%Atime;
if dayindex() == 0 or (TF < TF[1] and stime > stime[1]) Then
{
for cnt = 1 to 499
{
CC[cnt] = CC[cnt-1][1];
}
}
CC[0] = C;
if CC[P6-1] > 0 then
{
sum1 = 0;
sum2 = 0;
sum3 = 0;
sum4 = 0;
sum5 = 0;
sum6 = 0;
for cnt = 0 to P6
{
if cnt < P1 Then
sum1 = sum1+CC[cnt];
if cnt < P2 Then
sum2 = sum2+CC[cnt];
if cnt < P3 Then
sum3 = sum3+CC[cnt];
if cnt < P4 Then
sum4 = sum4+CC[cnt];
if cnt < P5 Then
sum5 = sum5+CC[cnt];
if cnt < P6 Then
sum6 = sum6+CC[cnt];
}
Bmav2 = sum1/P1;
Bmav3 = sum2/P2;
Bmav5 = sum3/P3;
Bmav10 = sum4/P4;
Bmav20 = sum5/P5;
Bmav40 = sum6/P6;
}
if (sdate != sdate[1] and stime >= 시작시간) or
(sdate == sdate[1] and (Stime == 시작시간 or (stime > 시작시간 and stime[1] < 시작시간))) Then
{
Tcond = True;
BXcond = false;
SXcond = false;
}
if stime == 종료시간 or (stime > 종료시간 and stime[1] < 종료시간) Then
{
Tcond = false;
if MarketPosition == 1 Then
ExitLong();
if MarketPosition == -1 Then
ExitShort();
}
if TotalTrades > TotalTrades[1] then
{
BXcond = false;
SXcond = false;
if (IsExitName("bl",0) == true or IsExitName("bp",0) == true or IsExitName("bx",0) == true or IsExitName("bx",0) == true) Then
BXcond = true;
if (IsExitName("sl",0) == true or IsExitName("sp",0) == true or IsExitName("sx",0) == true or IsExitName("sx",0) == true) Then
SXcond = true;
}
if Tcond == true then
{
if MarketPosition >= 0 Then
if mav3600 < c and mav7200 > mav4800 and mav4800 > mav2400 and mav2400 < mav1200 and mav1200 < mav600 and mav1200 < mav300 and ((mav4800 < mav600)or (mav4800 < mav300)) and
mav7200[1] > mav7200 and mav4800[1] > mav4800 and
mav2400[1] < mav2400 and mav1200[1] < mav1200 and mav900[3] > mav900[2] and mav900[2] > mav900[1] and mav900[1] > mav900 and mav300[1] > mav300 and
mav150[1] > mav150 and mav80[1] > mav80 and mav40[1] > mav40 and mav20[1] > mav20 and mav10[1] > mav10 and Bmav40 > Bmav20 and Bmav20 > Bmav10 Then
{
if CurrentContracts < 1 Then
sell("s4",OnClose,def,1);
}
if MarketPosition == -1 then
{
#s3
if mav3000[1] < mav3000 and mav2400[1] < mav2400 and mav1200[1] < mav1200 and mav150[1] < mav150 and mav80[1] < mav80 Then
{
ExitShort("s4-1",OnClose,def,"s4");
}
Else if mav2400[1] > mav2400 and mav600[20] > mav600 and mav600[3] > mav600[2] and mav600[2] < mav600[1] and mav600[1] < mav600 Then
{
ExitShort("s4-2",OnClose,def,"s4");
}
Else if mav2400[1] > mav2400 and mav600 > mav300 and mav300[30] > mav300 and mav300[3] < mav300[2] and mav300[2] < mav300[1] and mav300[1] < mav300 Then
{
ExitShort("s4-3",OnClose,def,"s4");
}
Else
{
if mav2400[1] > mav2400 and mav900 > mav600 and mav600 > mav300 and crossuP(mav80,mav150) Then
ExitShort("s4-4",OnClose,def,"s4");
}
ExitShort("sp",atlimit,AvgEntryPrice-PriceScale*익절틱수s4,"s4");
ExitShort("sl",AtStop,AvgEntryPrice+PriceScale*손절틱수s4,"s4");
}
}
위 수식을 활용하여 시뮬레이션차트 30틱에서 건수 900,000바 환경에서 익절틱수s4(변수이름)을 변수편집을 이용하여 최소60, 최대120, 증가 1로 설정하여 시뮬레이션하면
왜 1개의 값만 나오고 시뮬레이션할 때 마다 다른 값이 나오는지 궁금합니다
실제로 범위내에서 다른 값을 적용하면 시뮬레이션에서 나오 값보다 높은값이 나오는지 궁금합니다
몇일을 찾았으나 원인을 알 수 없어요
감사합니다.
2023-01-28
1350
글번호 165786