커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4332
글번호 230811
답변완료
문의드립니다
1번 시스템input : Period(20),dv(2);input : 하단아래(3),하단위(4),상단위(3),상단아래(4);var : BBup(0),BBmd(0),BBdn(0);var : T(0),i1(0),i2(0),i3(0),i4(0),S(0),value(0);BBup = BollBandUp(Period,dv);BBmd = ma(c,Period);BBdn = BollBandDown(Period,dv);if CrossDown(C,BBdn) Then{ T = -1; i1 = 0;}if CrossUp(C,BBdn) Then{ T = 1; i2 = 0;}if CrossUp(C,BBup) Then{ T = 2; i3 = 0;}if CrossDown(C,BBup) Then{ T = -2; i4 = 0;}if T == -1 Then i1 = i1+1;if T == 1 Then i2 = i2+1;if T == 2 Then i3 = i3+1;if T == -2 Then i4 = i4+1;if S <= 0 and T == 1 and i2 == 하단위 and i1 >= 하단아래 Then{ S = 1; value = c-PriceScale*100;}if S >= 0 and T == -2 and i4 == 상단아래 and i3 >= 상단위 Then{ S = -1; value = c+PriceScale*100;}var : S1(0);if S == 1 Then{ if S == S[1] and L <= value Then S = 0;}S1 = 1;if S == -1 Then{ if S == S[1] and H >= value Then S = 0;}S1 = -1;input : short1(6),long1(18),sig1(7);input : short2(6),long2(21),sig2(7);input : short3(6),long3(27),sig3(7);var : macdv1(0),macds1(0);var : macdv2(0),macds2(0);var : macdv3(0),macds3(0);macdv1 = macd(short1,long1);macds1 = ema(macdv1,sig1);macdv2 = macd(short2,long2);macds2 = ema(macdv2,sig2);macdv3 = macd(short3,long3);macds3 = ema(macdv3,sig3);var : S3(0);if macdv1 < 0 and CrossUp(macdv1,macds1) andmacdv2 < 0 and CrossUp(macdv2,macds2) andmacdv3 < 0 and CrossUp(macdv3,macds3) ThenS3 = 1;if macdv1 > 0 and CrossUp(macdv1,macds1) andmacdv2 > 0 and CrossUp(macdv2,macds2) andmacdv3 > 0 and CrossUp(macdv3,macds3) ThenS3 = -1;input : atrMult(4.5);input : atrlen(12);input : rsmlen(3);input : tplen(14);var : i(0),sum(0),source(0);var : alpha(0),atrValue1(0),upperLevel(0),lowerLevel(0);var : previousLowerLevel(0),previousUpperLevel(0);var : trendDirection(Nan),superTrendValue(Nan);var : previousTrend(0);if CurrentBar > 1 Then{sum = 0;for i = 0 to rsmlen-1{sum = sum + c[i]*c[i];}source = sqrt(sum/rsmlen);alpha = 1 / atrlen ;atrValue1 = IFf(IsNan(atrValue1[1]) == true, ma(TrueRange,atrlen) , alpha * TrueRange + (1 - alpha) * IFf(isnan(atrValue1[1])==true,0,atrValue1[1]));upperLevel = source + atrMult * atrValue1;lowerLevel = source - atrMult * atrValue1;previousLowerLevel = iff(isnan(lowerLevel[1])==true,0,lowerLevel[1]);previousUpperLevel = iff(isnan(upperLevel[1])==true,0,upperLevel[1]);// Ensure continuity of lower and upper bandslowerLevel = iff(lowerLevel > previousLowerLevel or source[1] < previousLowerLevel , lowerLevel , previousLowerLevel);upperLevel = iff(upperLevel < previousUpperLevel or source[1] > previousUpperLevel , upperLevel , previousUpperLevel);// Determine direction and SuperTrendpreviousTrend = superTrendValue[1];// Initialize directionif IsNan(atrValue1[1]) == true Then trendDirection = 1;else if previousTrend == previousUpperLevel Then trendDirection = iff(source > upperLevel , -1 , 1);else trendDirection = iff(source < lowerLevel , 1 , -1);// Set SuperTrend value based on directionsuperTrendValue = iff(trendDirection == -1 , lowerLevel , upperLevel);}var : dist(0),chg(0),lvlCol(0);var : tp1(0),tp2(0),tp3(0),tp4(0),tp5(0),tp6(0),tp7(0);var : printedtp1(0),printedtp2(0),printedtp3(0),printedtp4(0),printedtp5(0),printedtp6(0),printedtp7(0);dist = abs(close-superTrendValue);lvlCol = iff(trendDirection > 0 , red , green);var : key1(0);var : key2(0);var : key3(0);var : key4(0);var : key5(0);var : key6(0);var : key7(0);if CrossUp(trendDirection, 0) or CrossDown(trendDirection, 0) Then{ //TL_Delete(keys); printedtp1 = 0; printedtp2 = 0; printedtp3 = 0; printedtp4 = 0; printedtp5 = 0; printedtp6 = 0; printedtp7 = 0; chg = abs(superTrendValue-superTrendValue[1]); tp1 = superTrendValue[1] + IFF(trendDirection > 0 , -chg , chg); tp2 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 2 , chg * 2); tp3 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 3 , chg * 3); tp4 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 4 , chg * 4); tp5 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 5 , chg * 5); tp6 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 6 , chg * 6); tp7 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 7 , chg * 7); key1 = TL_new(sdate[1],stime[1],tp1, sDate,sTime, tp1);TL_SetColor(Key1,lvlCol);TL_SetSize(Key1,2); printedtp1 = 1;}ElseTL_SetEnd(key1,sDate,sTime,TP1);var : u(0),d(0),alp(0),ur(0),dr(0),rs(0),R(0),tp(False);u = max(dist - dist[1], 0);d = max(dist[1] - dist, 0);alp = 1/tplen;ur = IFf(IsNan(ur[1]) == true, ma(u,tplen) , alp * u + (1 - alp) * IFf(isnan(ur[1])==true,0,ur[1]));dr = IFf(IsNan(dr[1]) == true, ma(d,tplen) , alp * d + (1 - alp) * IFf(isnan(dr[1])==true,0,dr[1]));rs = ur / dr;R = 100 - 100 / (1 + rs);tp = CrossDown(R, 60);var : extreme(0);var : extreme_tp1_dist(0);var : extreme_tp2_dist(0);var : extreme_tp3_dist(0);var : extreme_tp4_dist(0);var : extreme_tp5_dist(0);var : extreme_tp6_dist(0);var : extreme_tp7_dist(0);extreme = iff(trendDirection > 0 , low , high);extreme_tp1_dist = abs(extreme - tp1);extreme_tp2_dist = abs(extreme - tp2);extreme_tp3_dist = abs(extreme - tp3);extreme_tp4_dist = abs(extreme - tp4);extreme_tp5_dist = abs(extreme - tp5);extreme_tp6_dist = abs(extreme - tp6);extreme_tp7_dist = abs(extreme - tp7);var : tx(0),S2(0);if tp and trendDirection > 0 Then{tx = Text_New(sDate,sTime,L,"X");Text_SetStyle(tx,2,0);Text_SetColor(tx,Red);Text_SetSize(tx,20);Text_SetBold(tx,1);S2 = 1;}if tp and trendDirection < 0 Then{tx = Text_New(sDate,sTime,H,"X");Text_SetStyle(tx,2,1);Text_SetColor(tx,Green);Text_SetSize(tx,20);Text_SetBold(tx,1);S2 = -1;}if printedtp2 == 0 and extreme_tp2_dist < extreme_tp1_dist Then{ key2 = TL_new(sdate[1],stime[1],tp2, sDate,sTime, tp2);TL_SetColor(Key2,lvlCol);TL_SetSize(Key2,2); printedtp2 = 1;}Else{if printedtp2 == 1 ThenTL_SetEnd(key2,sDate,sTime,TP2);}if printedtp3 == 0 and extreme_tp3_dist < extreme_tp2_dist Then{ key3 = TL_new(sdate[1],stime[1],tp3, sDate,sTime, tp3);TL_SetColor(Key3,lvlCol);TL_SetSize(Key3,2); printedtp3 = 1;}Else{if printedtp3 == 1 ThenTL_SetEnd(key3,sDate,sTime,TP3);}if printedtp4 == 0 and extreme_tp4_dist < extreme_tp3_dist Then{ key4 = TL_new(sdate[1],stime[1],tp4, sDate,sTime, tp4);TL_SetColor(Key4,lvlCol);TL_SetSize(Key4,2); printedtp4 = 1;}Else{if printedtp4 == 1 ThenTL_SetEnd(key4,sDate,sTime,TP4);}if printedtp5 == 0 and extreme_tp5_dist < extreme_tp4_dist Then{ key5 = TL_new(sdate[1],stime[1],tp5, sDate,sTime, tp5);TL_SetColor(Key5,lvlCol);TL_SetSize(Key5,2); printedtp5 = 1;}Else{if printedtp5 == 1 ThenTL_SetEnd(key5,sDate,sTime,TP5);}if printedtp6 == 0 and extreme_tp6_dist < extreme_tp5_dist Then{ key6 = TL_new(sdate[1],stime[1],tp6, sDate,sTime, tp6);TL_SetColor(Key6,lvlCol);TL_SetSize(Key6,2); printedtp6 = 1;}Else{if printedtp6 == 1 ThenTL_SetEnd(key6,sDate,sTime,TP6);}if printedtp7 == 0 and extreme_tp7_dist < extreme_tp6_dist Then{ key7 = TL_new(sdate[1],stime[1],tp7, sDate,sTime, tp7);TL_SetColor(Key7,lvlCol);TL_SetSize(Key7,2); printedtp7 = 1;}Else{if printedtp7 == 1 ThenTL_SetEnd(key7,sDate,sTime,TP7);}if MarketPosition <= 1 and S1+S2+S3== 1 ThenSell();if MarketPosition == 1 and S1+S2+S3<= -1 ThenExitShort();if MarketPosition >= -1 and S1+S2+S3 == -3 ThenBuy();if MarketPosition == -1 and S1+S2+S3 >= -1 ThenExitLong();2번 시스템input : atrMult(4.5);input : atrlen(12);input : rsmlen(3);input : tplen(14);var : i(0),sum(0),source(0);var : alpha(0),atrValue1(0),upperLevel(0),lowerLevel(0);var : previousLowerLevel(0),previousUpperLevel(0);var : trendDirection(Nan),superTrendValue(Nan);var : previousTrend(0);if CurrentBar > 1 Then{sum = 0;for i = 0 to rsmlen-1{sum = sum + c[i]*c[i];}source = sqrt(sum/rsmlen);alpha = 1 / atrlen ;atrValue1 = IFf(IsNan(atrValue1[1]) == true, ma(TrueRange,atrlen) , alpha * TrueRange + (1 - alpha) * IFf(isnan(atrValue1[1])==true,0,atrValue1[1]));upperLevel = source + atrMult * atrValue1;lowerLevel = source - atrMult * atrValue1;previousLowerLevel = iff(isnan(lowerLevel[1])==true,0,lowerLevel[1]);previousUpperLevel = iff(isnan(upperLevel[1])==true,0,upperLevel[1]);// Ensure continuity of lower and upper bandslowerLevel = iff(lowerLevel > previousLowerLevel or source[1] < previousLowerLevel , lowerLevel , previousLowerLevel);upperLevel = iff(upperLevel < previousUpperLevel or source[1] > previousUpperLevel , upperLevel , previousUpperLevel);// Determine direction and SuperTrendpreviousTrend = superTrendValue[1];// Initialize directionif IsNan(atrValue1[1]) == true Then trendDirection = 1;else if previousTrend == previousUpperLevel Then trendDirection = iff(source > upperLevel , -1 , 1);else trendDirection = iff(source < lowerLevel , 1 , -1);// Set SuperTrend value based on directionsuperTrendValue = iff(trendDirection == -1 , lowerLevel , upperLevel);}var : dist(0),chg(0),lvlCol(0);var : tp1(0),tp2(0),tp3(0),tp4(0),tp5(0),tp6(0),tp7(0);var : printedtp1(0),printedtp2(0),printedtp3(0),printedtp4(0),printedtp5(0),printedtp6(0),printedtp7(0);dist = abs(close-superTrendValue);lvlCol = iff(trendDirection > 0 , red , green);var : key1(0);var : key2(0);var : key3(0);var : key4(0);var : key5(0);var : key6(0);var : key7(0);if CrossUp(trendDirection, 0) or CrossDown(trendDirection, 0) Then{ //TL_Delete(keys); printedtp1 = 0; printedtp2 = 0; printedtp3 = 0; printedtp4 = 0; printedtp5 = 0; printedtp6 = 0; printedtp7 = 0; chg = abs(superTrendValue-superTrendValue[1]); tp1 = superTrendValue[1] + IFF(trendDirection > 0 , -chg , chg); tp2 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 2 , chg * 2); tp3 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 3 , chg * 3); tp4 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 4 , chg * 4); tp5 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 5 , chg * 5); tp6 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 6 , chg * 6); tp7 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 7 , chg * 7); key1 = TL_new(sdate[1],stime[1],tp1, sDate,sTime, tp1);TL_SetColor(Key1,lvlCol);TL_SetSize(Key1,2); printedtp1 = 1;}ElseTL_SetEnd(key1,sDate,sTime,TP1);var : u(0),d(0),alp(0),ur(0),dr(0),rs(0),R(0),tp(False);u = max(dist - dist[1], 0);d = max(dist[1] - dist, 0);alp = 1/tplen;ur = IFf(IsNan(ur[1]) == true, ma(u,tplen) , alp * u + (1 - alp) * IFf(isnan(ur[1])==true,0,ur[1]));dr = IFf(IsNan(dr[1]) == true, ma(d,tplen) , alp * d + (1 - alp) * IFf(isnan(dr[1])==true,0,dr[1]));rs = ur / dr;R = 100 - 100 / (1 + rs);tp = CrossDown(R, 60);var : extreme(0);var : extreme_tp1_dist(0);var : extreme_tp2_dist(0);var : extreme_tp3_dist(0);var : extreme_tp4_dist(0);var : extreme_tp5_dist(0);var : extreme_tp6_dist(0);var : extreme_tp7_dist(0);extreme = iff(trendDirection > 0 , low , high);extreme_tp1_dist = abs(extreme - tp1);extreme_tp2_dist = abs(extreme - tp2);extreme_tp3_dist = abs(extreme - tp3);extreme_tp4_dist = abs(extreme - tp4);extreme_tp5_dist = abs(extreme - tp5);extreme_tp6_dist = abs(extreme - tp6);extreme_tp7_dist = abs(extreme - tp7);var : tx(0);if tp and trendDirection > 0 Then{tx = Text_New(sDate,sTime,L,"X");Text_SetStyle(tx,2,0);Text_SetColor(tx,Red);Text_SetSize(tx,20);Text_SetBold(tx,1);if MarketPosition <= 0 or (MarketPosition == 1 and MaxEntries < 10) ThenBuy("b");}if tp and trendDirection < 0 Then{tx = Text_New(sDate,sTime,H,"X");Text_SetStyle(tx,2,1);Text_SetColor(tx,Green);Text_SetSize(tx,20);Text_SetBold(tx,1);if MarketPosition >= 0 or (MarketPosition == -1 and MaxEntries < 10) ThenSell("s");}if printedtp2 == 0 and extreme_tp2_dist < extreme_tp1_dist Then{ key2 = TL_new(sdate[1],stime[1],tp2, sDate,sTime, tp2);TL_SetColor(Key2,lvlCol);TL_SetSize(Key2,2); printedtp2 = 1;}Else{if printedtp2 == 1 ThenTL_SetEnd(key2,sDate,sTime,TP2);}if printedtp3 == 0 and extreme_tp3_dist < extreme_tp2_dist Then{ key3 = TL_new(sdate[1],stime[1],tp3, sDate,sTime, tp3);TL_SetColor(Key3,lvlCol);TL_SetSize(Key3,2); printedtp3 = 1;}Else{if printedtp3 == 1 ThenTL_SetEnd(key3,sDate,sTime,TP3);}if printedtp4 == 0 and extreme_tp4_dist < extreme_tp3_dist Then{ key4 = TL_new(sdate[1],stime[1],tp4, sDate,sTime, tp4);TL_SetColor(Key4,lvlCol);TL_SetSize(Key4,2); printedtp4 = 1;}Else{if printedtp4 == 1 ThenTL_SetEnd(key4,sDate,sTime,TP4);}if printedtp5 == 0 and extreme_tp5_dist < extreme_tp4_dist Then{ key5 = TL_new(sdate[1],stime[1],tp5, sDate,sTime, tp5);TL_SetColor(Key5,lvlCol);TL_SetSize(Key5,2); printedtp5 = 1;}Else{if printedtp5 == 1 ThenTL_SetEnd(key5,sDate,sTime,TP5);}if printedtp6 == 0 and extreme_tp6_dist < extreme_tp5_dist Then{ key6 = TL_new(sdate[1],stime[1],tp6, sDate,sTime, tp6);TL_SetColor(Key6,lvlCol);TL_SetSize(Key6,2); printedtp6 = 1;}Else{if printedtp6 == 1 ThenTL_SetEnd(key6,sDate,sTime,TP6);}if printedtp7 == 0 and extreme_tp7_dist < extreme_tp6_dist Then{ key7 = TL_new(sdate[1],stime[1],tp7, sDate,sTime, tp7);TL_SetColor(Key7,lvlCol);TL_SetSize(Key7,2); printedtp7 = 1;}Else{if printedtp7 == 1 ThenTL_SetEnd(key7,sDate,sTime,TP7);}수고많으십니다1번 2번 지난번 만들어 주신 시스템 입니다항상 감사드립니다지나번 질문드린 내용 인데위 두시스템을 묶는 시스템을 부탁드립니다1번 시스템 이 매수면 1점 매도면-1점2번 시스템 이 매수면 1점 매도면-1점점수 합산하여2점이면 매수0점이면 청산-2점 이면 매도0점 이면 청산이런 시스템을 부탁드립니다지난번 질문 때 설명이 부족했던거 같습니다숫자나 점수는 제가 맞추겠습니다 기존 1번 2번 그대로 묶어 주십시요아무리 해봐도 제 머리로 안돼 부탁드립니다감사드립니다
2026-04-22
214
글번호 231713
답변완료
지표문의
1.현물상한가 선인데선물에 사용할려니 너무 괴리가 심해 못 쓰겠는데아래비율로 국내 선물,해외선물 에 사용하게 수정 안 될까요 ?당일 장 마다Plot1(BasePrice*1.05,"5%",Blue);Plot2(BasePrice*1.10,"10%",Cyan);Plot3(BasePrice*1.15,"15%",Green);Plot4(((BasePrice*1.15)+(BasePrice*1.20))/2,"15%",White);Plot5(BasePrice*1.20,"20%",LBlue);Plot6(BasePrice*1.25,"25%",Magenta);Plot7(BasePrice*1.30,"30%",Red);2.그럼 수고하세요
2026-04-22
132
글번호 231711
답변완료
종목 검색식 좀 부탁드립니다.
1. M=(C+이전주종가(1)+이전주종가(2))/3;2. M=(C+이전월종가(1)+이전월종가(2))/3;3. M=(C+이전주종가(1)+이전주종가(2)+이전주종가(3)+이전주종가(4)+이전주종가(5)+이전주종가(6)+이전주종가(7)+이전주종가(8)+이전주종가(9))/10;이3개의 모든 이평을 동시에 일봉에서 돌파하는 종목검색식 좀 부탁드립니다
2026-04-22
100
글번호 231710
답변완료
종목검색문의드립니다
srcF = CLOSE;srcS = CLOSE; VWmaF = SUM(srcF * VOLUME, 12) / SUM(VOLUME, 12);VWmaS = SUM(srcS * VOLUME, 26) / SUM(VOLUME,26); AvgF = MA(srcF, 12);AvgS = MA(srcS, 26); VPC = VWmaS - AvgS;VPR = IF(AvgF != 0, VWmaF / AvgF, 0);VM = IF(MA(VOLUME, 26) != 0, MA(VOLUME, 12) / MA(VOLUME, 26), 0);VPCI = VPC * VPR * VM; lenV = IF(VPC < 0, CEIL(ABS(VPCI - 3)), IF(VPC >= 0, CEIL(VPCI +3), 1));VPCc = IF(VPC > -1 AND VPC < 0, -1, IF(VPC < 1 AND VPC >= 0, 1, VPc)); PriceV = IF(lenV != 0, (LOW * (1/ VPCc) * (1/ VPR)) / lenV / 100, 0); DeV = 2 * VPCI * VM; AVSL = MA(LOW - PriceV + DeV, 26);bb=bbandsup(40,2);crossup(avsl,bb)
2026-04-22
104
글번호 231709
답변완료
print관련 질문
전략 실행차트에서 print문을 사용해 60분봉 Open, Close 값을 CSV 형태로 받았습니다.하지만 최대 1만개 Bar만 받을 수 있게 설정된 것 같습니다.혹시 80000개 Bar에 대해 print 값 받을 수 있는 방법이 있을까요?
2026-04-21
100
글번호 231708
답변완료
지표와 종목검색식 부탁 드립니다
VWAP(Volume-Weighted Average Price) 지표를 돌파하는 종목을 검색식 요청합니다맞는건지 검토 요청합니다키움에서는 단순히a=sum((H+L+C)/3*V, 기간1)/sum(V, 기간1);crossup(c,a)개인적으로 만들어 본 수식은 아래와 같습니다Input : 기간1(60), 거래량배수(1.5);// 거래량은 굳이 넣지 않아도 됩니다Var : tp(0), vwma(0), vol_avg(0);// 1. Typical Price (대표가격) 계산tp = (HIGH + LOW + CLOSE) / 3;// 2. SUM 대신 Accumn 함수 사용 (N기간 합계)// VWMA = (가격*거래량)의 N일 합계 / 거래량의 N일 합계vwma = Accumn(tp * VOLUME, 기간1) / Accumn(VOLUME, 기간1);// 3. AVG 대신 MA 함수 사용 (이동평균)vol_avg = MA(VOLUME, 기간1);// 4. 조건 검증 및 신호 발생If CrossUp(CLOSE, vwma) and VOLUME > vol_avg * 거래량배수 and CLOSE > OPEN and vwma > vwma[1] Then Find(1); // 종목 검색 시 '1'로 표시
2026-04-21
151
글번호 231707
답변완료
수정문의
Q1)y_hat = (C*1.000 + C(1)*0.992 + C(2)*0.969 + C(3)*0.932 + C(4)*0.883 + C(5)*0.823 + C(6)*0.755 + C(7)*0.682 + C(8)*0.607 + C(9)*0.531 + C(10)*0.458 + C(11)*0.389 + C(12)*0.325 + C(13)*0.267 + C(14)*0.216 + C(15)*0.172 + C(16)*0.135 + C(17)*0.105 + C(18)*0.080 + C(19)*0.060 + C(20)*0.044 + C(21)*0.032 + C(22)*0.023 + C(23)*0.016 + C(24)*0.011 + C(25)*0.008) / 10.515;mae_val = avg(abs(C - y_hat), 20);lower_band = y_hat - (mae_val * mult);A=BBandsDown(Period,D1);B=(eavg(V*C,Len)/eavg(V,Len) - avg(eavg(V*C,Len)/eavg(V,Len),Len)) / (0.015 * stdev(eavg(V*C,Len)/eavg(V,Len),Len));(CrossUp(C, lower_band) OR (L<=lower_band && C>lower_band)) && C>O &&(B < -100 OR B(1)<-100) and (A>L OR A(1)>L(1)) AND A<=C위 수식을 아래와 같이 예스랭기지로 옮겨 검색하고 있는데, 어떤 문제가 없는지 검토바랍니다.===========================================================================================================Input: Bandwidth(8), // 가우시안 커널의 대역폭 mult(2), // 엔벨로프 승수 src(C), // 적용 가격 Period(20),D1(2), len(20);Var: sum_w(0), sum_wy(0), y_hat(0), i(0), w(0), upper(0), lower(0), mae_val(0), M200(0), TX(0), signal_up(False), A(0),B(0);M200 = WMA(C, 200); // 1. 가우시안 가중치 회귀 계산 (머신러닝 커널 회귀)sum_w = 0;sum_wy = 0;For i = 0 to 25 { // Bandwidth를 사용하여 가중치 계산 w = exp(-(pow(i, 2) / (2 * pow(Bandwidth, 2)))); sum_w = sum_w + w; sum_wy = sum_wy + (src[i] * w);}If sum_w > 0 Then y_hat = sum_wy / sum_w;Else y_hat = src;// 2. 변동성(MAE) 기반 엔벨로프 구축mae_val = Ma(abs(src - y_hat), 20);upper = y_hat + (mae_val * mult);lower = y_hat - (mae_val * mult);Condition2 = M200[2]<M200[1] and M200[1]<M200;// 3. 상승 신호 로직 (하단 이탈 후 회복 시점)signal_up = CrossUp(src, lower);A=BollBandDown(Period,D1);B=(ema(V*C,Len)/ema(V,Len) - MA(ema(V*C,Len)/ema(V,Len),Len)) / (0.015 * std(ema(V*C,Len)/ema(V,Len),Len));If ((signal_up or (L<=lower && C>lower)) && c>o) && (B < -100 OR B[1]<-100) && (A>L OR A[1]>L[1]) && A<=CTheN Find(1);Q2)하이킨아시 5분봉차트의 "첫 봉"이A=PREDAYHIGH()-PREDAYLOW();B=DAYOPEN()+A*0.5;B1=RSI(14);CROSSUP(C,B) AND B1>50 AND 전봉대비 2%이상상승 AND 전일대비 10%이하를 만족하는 수식을 부탁합니다.(엊그제 작성해주신 하이킨아시분봉차트 위 신호가 무슨 이유인지 모르겠는대 자동매매에서 거의 걸리지 않습니다.)var : haClose(0),haOpen(0),haHigh(0),haLow(0);var : A(0),B(0),B1(0);#Heiken Ashi 시고저종haClose = (O+H+L+C)/4;haOpen = iff(index == 0,open,(haOpen [1] + haClose [1])/2) ; haHigh = MaxList(High, haOpen, haClose) ;haLow = MinList(Low, haOpen, haClose) ;A=DAYHIGH(1)-DAYLOW(1);B=DAYOPEN()+A*0.5;B1=RSI(14);Condition1 = CROSSUP(C,B) AND B1>50 AND haClose>haClose[1]*1.02 AND C >= C[1]*1.15;if Condition1[1] == true Then Find(1);
2026-04-21
230
글번호 231706
답변완료
시스템 수식 부탁드립니다.
만든 함수 2개 openprice, openprice_2매수식은 openprice 함수가 기준이고매도식은 openprice_2 함수가 기준입니다.매수식:무포지션에서매수준비1 :openprice 가 새로 생기면 매수준비1=1 이라고 정함이후에 종가가 openprice가격 이하에 오면매수준비1=0 이 되어 해제됩니다.매수준비1=1 유효할 때이후에 발생하는 가장 최근 음봉 종가를양봉 종가가 상방으로 돌파할 때 2계약 매수합니다.또는매수준비1=1 유효하면서직전 양봉종 가 < 현재봉 양봉 종가를 만족하는 양봉이 2개 연속으로 나올 때 2계약 매수합니다.청산:손절청산: 매수봉 저가를 종가가 아닌 현재가가하방 이탈시 전부 청산합니다.이익청산:1계약 청산:매수봉 종가를 저장하고 매수 이후에 생기는 양봉 종가가매수봉 종가 위에 위치하면 1계약만 이익청산하고 즉시손절가격을 매수진입가격인 본절가격으로 변경합니다.잔존 1계약 청산:이후에 바로직전봉의 저가를 종가가 아닌 현재가가하향하면 즉시 잔존 1계약을 청산 합니다.매도식: 반대논리로 부탁드립니다.
2026-04-21
97
글번호 231705
답변완료
PercentRankArray, PercentileArray 시계열 결과값 일부 N/A
1.PercentRankArray, PercentileArray 의 시계열 결과값에서 일부가 N/A로 나오는 case를 알고 싶습니다.2.1분 주기, 20000봉 차트 환경몇몇 특정 종목(065420:에스아이리소스 등)에서시스템 트레이딩 설정(시스템 매매 설정) -> 비용/수량:고정자산 기준 진입 -> 기준자산 금액 변경If MarketPosition == 0 Then {if signalName == "B_I" then Buy("B_I", OnClose);else if signalName == "B_E" then Buy("B_E", OnClose);else if signalName == "B_P" then Buy("B_P", OnClose);else if signalName == "B_L" then Buy("B_L", OnClose);}기준자산 case 100,000,000 시스템식 B_I(x), B_E(x), B_P(x), B_L(x)기준자산 case 40,000,000 시스템식 B_I(x), B_E(x), B_P(x), B_L(x)기준자산 case 38,000,000 시스템식 B_I(x), B_E(x), B_P(x), B_L(x)기준자산 case 37,100,000 시스템식 B_I(x), B_E(o), B_P(x), B_L(x) B_E(o) 1건기준자산 case 37,000,000 시스템식 B_I(x), B_E(o), B_P(x), B_L(x) B_E(o) 1건기준자산 case 36,000,000 시스템식 B_I(x), B_E(o), B_P(x), B_L(x) B_E(o) 1건기준자산 case 30,000,000 시스템식 B_I(x), B_E(o), B_P(x), B_L(o) B_E(o) 6건, B_L(o) 1건,기준자산 case 25,000,000 시스템식 B_I(o), B_E(o), B_P(x), B_L(o) 총 38건 B_E(o) 20건, B_L(o) 3건, B_I(o) 15건기준자산 case 20,000,000 시스템식 B_I(o), B_E(o), B_P(x), B_L(o) 총 85건기준자산 case 18,000,000 시스템식 B_I(o), B_E(o), B_P(x), B_L(o) 총 104건기준자산 case 15,000,000 시스템식 B_I(o), B_E(o), B_P(x), B_L(o) 총 107건기준자산 case 10,000,000 시스템식 B_I(o), B_E(o), B_P(x), B_L(o) 총 107건기준자산 case 5,000,000 시스템식 B_I(o), B_E(o), B_P(x), B_L(o) 총 108건지표식은 진입/청산위치를 전부 정확히 표시합니다.시스템식은 기준자산 금액 case에 따라서 시스템식이 작동을 하지 않는 경우가 생깁니다.시스템식은 기준자산 금액 case에 따라서 거래건수가 틀립니다.원인이 무엇인지요?
2026-04-21
125
글번호 231702