커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1589
글번호 230811
답변완료
문의드립니다
금년이 아닌 전년도의 피보나치를 구할수 있을까요?
고가
0.236
0.382
0.5
0.618
0.764
저가
감사합니다
2025-03-04
391
글번호 188782
답변완료
Valuewhen(2, 조건, 표시가격) 을 예스로 변환
키움의 Valuewhen(2, 조건, 표시가격) 을 예스로 변환할때 그동안
if 조건 Then
var1 = 표시가격; 으로 작성해 왔는데..
위 처럼 뒤로 2번째로 조건에 맞는 표시 가격의 값을 표시할때는 어떻게 해야 하는지요?
답변 미리 감사 드립니다
2025-03-04
402
글번호 188781
답변완료
시스템식 요청드립니다.
방금 밑에 수식 요청드렸었는데
수정하셧던 식을 적용하였더니 그림 1과 같이 나오게 되었습니다.
그래서 일부 수정하여 그림 2와 같이 나오게 되었는데
궁금한점은 1~6차 까지 매수하면서 4~6차의 경우 매수매도가 반복 되면서
평단이 밑으로 많이 내려갔을것 같은데 정확히 평단이 얼마인지는 알수 없나요??
그리고 아래의 시스템식으로 적용 하면 내려간 평단에서 3% 가 되었을때 익절이 되는게
맞는건지 궁금합니다.
-----------------------------------------------------------
안녕하세요
예스스탁입니다.
bx청산은 평단가가 기준입니다.
일부수량이 청산되면 평단가도 변하게 됩니다.
bx를 3차진입까지의 평단가로 수정해 드립니다.
input : N(14),금액(2000000);
input : 시작날짜 (20250109);
Input : 기준선기간(120);
Var : 기준선(0);
var : cntt(0),H1(0),L1(0);
var : cnt(0),sum(0),mav(0),DD(0);
var : AP(0),TT(0),entry(False);
var : LL(0),RR(0),rate(0);
var : 저항(0), B1(0) ;
Var : day(0),EntryDay(0),ddd(0),ED(0);
var : sum1(0),sum2(0),sum3(0),avg4(0);
#-------------------------------------
if sDate >= 시작날짜 Then
{
if Bdate != Bdate[1] Then
{
entry = true;
day = day+1;
dd = dd+1;
}
}
if TotalTrades > TotalTrades[1] Then
entry = False;
#-------------------------------------
#-------------------------------------
sum = 0;
For cnt = 0 to N-1
{
sum = sum + DayClose(cnt);
}
mav = (sum/N);
#-------------------------------------
#---------------------------------------
if (MarketPosition == 0) and (entry == true) and L > mav Then
Buy("1차매수",AtLimit,mav,Floor(금액/min(NextBarOpen,mav)));
if MarketPosition == 1 and (LatestEntryName(0) == "1차매수") and L > LatestEntryPrice(0)*0.95 Then
Buy("2차매수",AtLimit,LatestEntryPrice(0)*0.95,Floor(금액*1.15/min(NextBarOpen,mav)));
if MarketPosition == 1 and (LatestEntryName(0) == "2차매수") and L > LatestEntryPrice(0)*0.95 Then
Buy("3차매수",AtLimit,LatestEntryPrice(0)*0.95,Floor(금액*1.2/min(NextBarOpen,mav)));
if MarketPosition == 1 and (LatestEntryName(0) == "3차매수") and L > LatestEntryPrice(0)*0.95 Then
Buy("4차매수",AtLimit,LatestEntryPrice(0)*0.95,Floor(금액*1.25/min(NextBarOpen,mav)));
if MarketPosition == 1 and (LatestEntryName(0) == "4차매수") and L > LatestEntryPrice(0)*0.95 Then
Buy("5차매수",AtLimit,LatestEntryPrice(0)*0.95,Floor(금액*1.3/min(NextBarOpen,mav)));
if MarketPosition == 1 and (LatestEntryName(0) == "5차매수") and L > LatestEntryPrice(0)*0.95 Then
Buy("6차매수",AtLimit,LatestEntryPrice(0)*0.95,Floor(금액*1.35/min(NextBarOpen,mav)));
#-----------------------------------
if MarketPosition == 1 Then
{
#전봉대비 수량 감소(일부 청산발생을 위미)
if CurrentContracts < CurrentContracts[1] Then
{
#청산가 저장
var1 = LatestExitPrice(0);
if LatestExitName(0) == "3%익절" or LatestExitName(0) == "3-D%익절" or LatestExitName(0) == "3-E%익절" Then
Condition1 = true;
if LatestExitName(0) == "4%익절" or LatestExitName(0) == "4-D%익절" or LatestExitName(0) == "4-E%익절" Then
Condition2 = true;
if LatestExitName(0) == "5%익절" or LatestExitName(0) == "5-D%익절" or LatestExitName(0) == "5-E%익절" Then
Condition3 = true;
if LatestExitName(0) == "7%익절" or LatestExitName(0) == "7-D%익절" Then
Condition4 = true;
}
#전봉대비 수량 증가(추가 진입발생을 의미)
if CurrentContracts > CurrentContracts[1] AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") ) Then
{
#현재수량 저장
Var3 = CurrentContracts;
Var4 = AvgEntryPrice;
Condition1 = False;
Condition2 = False;
Condition3 = False;
Condition4 = False;
}
if CurrentContracts > CurrentContracts[1] AND ((LatestEntryName(0) == "4차매수")) Then
{
#현재수량 저장
Var3 = CurrentContracts;
Var4 = AvgEntryPrice;
Condition1 = False;
Condition2 = False;
Condition3 = False;
Condition4 = False;
}
if CurrentContracts > CurrentContracts[1] AND ((LatestEntryName(0) == "6차매수") or (LatestEntryName(0) == "5차매수")) Then
{
#현재수량 저장
Var3 = CurrentContracts;
Var4 = AvgEntryPrice;
Condition1 = False;
Condition2 = False;
Condition3 = False;
Condition4 = False;
}
if CurrentEntries <= 3 Then
{
var98 = LatestEntryPrice(0);
var99 = AvgEntryPrice;
}
if var98 > 0 and C < Var99 then
ExitLong("bx");
if Condition1 == False AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") )Then
ExitLong("3%익절",AtLimit,Var4*1.03,"",Floor(Var3*0.2),1);
if Condition2 == False AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") ) Then
ExitLong("4%익절",AtLimit,Var4*1.04,"",Floor(Var3*0.3),1);
if Condition3 == False AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") ) Then
ExitLong("5%익절",AtLimit,Var4*1.05,"",Floor(Var3*0.4),1);
if Condition4 == False AND ((LatestEntryName(0) == "1차매수") OR (LatestEntryName(0) == "2차매수") or (LatestEntryName(0) == "3차매수") ) Then
ExitLong("7%익절",AtLimit,Var4*1.07,"",Floor(Var3*0.1),1);
ExitLong("10%익절",AtLimit,Var4*1.10);
//4차 이상 진입
if CurrentEntries >= 4 Then
{
//4차 이후의 평듄
if CurrentContracts > CurrentContracts[1] Then
{
sum1 = sum1 + C*(CurrentContracts-CurrentContracts[1]);
sum2 = sum2 + (CurrentContracts-CurrentContracts[1]);
avg4 = sum1/sum2;
}
if CurrentEntries >= 4 Then
ExitLong("4차이후익절4",AtLimit,avg4*1.04,"4차매수");
if CurrentEntries >= 5 Then
ExitLong("4차이후익절5",AtLimit,avg4*1.04,"5차매수");
if CurrentEntries >= 6 Then
ExitLong("4차이후익절6",AtLimit,avg4*1.04,"6차매수");
}
Else
{
sum1 = 0;
sum2 = 0;
avg4 = 0;
}
}
Else#매수진입중이 아니면
{
#변수 0으로 초기화
var1 = 0;
Var2 = 0;
}
2025-03-05
497
글번호 188780
답변완료
수식 요청합니다
항상 감사드립니다.
일봉에서 월봉의 5봉중 최고(월봉중) 거래량을 표현하고 싶습니다.
2025-03-04
377
글번호 188778
답변완료
종목검색식 부탁드립니다.
다음 수식을 예스 종목검색식으로 부탁드립니다.
(1)
음봉=C<O;
Mp=ma(C, Period);
음봉(2) && 음봉(1) &&
C(2)>C(1) &&
O(2)>O(1) &&
O(2)>C(1)*(1+비율/100) &&
CrossUp(C, Mp) &&
L<C)1) && C>O(2)
(지표변수) Period: 20 / 비율: 5
(2)
오분선=((predayhigh()+predaylow()+predayclose())/3+predayhigh()-predaylow();
첫봉신호=
V>=수량 &&
C>O*상승률 &&
C>predayhigh() &&
Rsi(기간)>=기준선 &&
CrossUp(C, 오분선);
cnt=Countsince(date!=date(1), 첫봉신호);
cnt==1 && cnt(1)==0
(지표변수) 수량: 70000 / 상승률: 1.01 / 기준선: 60
2025-03-04
439
글번호 188777
답변완료
예스트레이딩 수식으로 부탁드립니다.
예스 종목 검색식으로 변환 부탁드립니다.
(1)
A=H-L;
B=Max(C, O)-L;
조건=A/B>2 && H/C(1)>(1+15/100);
기준가=Valuewhen(1, 조건, H);
CrossUp(C, 기준가)
(2)
A=H-L;
B=Max(C, O)-L;
조건=A/B>2 && H/C(1)>(1+15/100);
기준가=Valuewhen(1, 조건, H);
Dv=Valuewhen(1, 조건, V);
CrossUp(C, 기준가) && V>Dv
(3)
A=H-L;
B=Max(C, O)-L;
조건=A/B>2 && H/C(1)>(1+15/100);
기준가=Valuewhen(1, 조건, H);
Dv=Valuewhen(1, 조건, V);
봉갯수=BarsSince(조건):
CrossUp(C, 기준가) && 봉갯수<10
(4)
S=sum(V);
A=H-L;
B=Max(C, O)-L;
조건=A/B>2 && H/C(1)>(1+15/100);
기준가=Valuewhen(1, 조건, H);
누적Dv=S-Valuewhen(1, 조건, S(1))-V;
C>기준가 && CrossUp(V, 누적Dv)
2025-03-04
470
글번호 188776
답변완료
종목검색식 부탁드립니다.
아래 3가지 수식을 예스 종목검색식으로 부탁드립니다.
1)
상한선=BBandsUp(Period, D1);
C>O &&
V(1)*배수<V &&
C(1)*상승률>C &&
CrossUp(C, 상한선) &&
Highest(H(1), 기간)<C &&
V>Highest(V(1), 기간)
(지표변수) Period: 120 / D1: 1 / 배수: 2 / 상승률: 1.3 / 기간: 60
2)
기준=C>O && V>V(1)*비율;
Vv=Valuewhen(1, 기준, V/2);
캔들기준=if(BarsSince(기준)<봉수, Vv, 0);
Vm=if(C<O && C<C(1), V, 0);
S=sum(Vm);
Vm10=S-Valuewhen(1, 기준, S(1));
Conl=if(BarsSince(기준)<봉수, Vm10, 0);
CrossUp(Conl, 캔들기준)
(지표변수) 비율: 30 / 봉수: 15
3)
C(P)>O(P) &&
C>O &&
V(P)*2<V &&
CrossUp(C, C(P))
(지표변수) P: 10
2025-03-04
493
글번호 188775
답변완료
오류 부분을 수정해 주세요.
// ATR 계산을 위한 변수 선언
var: TR(0), EMA_ATR(0), alpha(0);
// EMA 계산을 위한 초기화
alpha = 2 / (ATRPeriod + 1);
TR = MaxList(High - Low, Abs(High - Close[1]), Abs(Low - Close[1]));
// EMA로 ATR 계산
if CurrentBar = 0 then
EMA_ATR = TR; // 첫 번째 바에서는 TR을 초기값으로 사용
else
EMA_ATR = alpha * TR + (1 - alpha) * EMA_ATR[1];
// AdjustedT1을 EMA_ATR로 설정
AdjustedT1 = EMA_ATR * VolatilityMultiplier;
위 수식에서
if CurrentBar = 0 then
EMA_ATR = TR; 부분이 오류가 발생 합니다. 바르게 수정 부탁합니다.
2025-03-04
384
글번호 188774
답변완료
문의드립니다
input : tenkan_len(9),tenkan_mult(2),kijun_len(26),kijun_mult(4),spanB_len(52),spanB_mult(6),offset(26);
var : ATR1(0),up1(0),dn1(0),upper1(0),lower1(0),os1(0),spt1(0),max1(0),min1(0),tenkan(0);
var : ATR2(0),up2(0),dn2(0),upper2(0),lower2(0),os2(0),spt2(0),max2(0),min2(0),kijun(0);
var : senkouA(0);
var : ATR3(0),up3(0),dn3(0),upper3(0),lower3(0),os3(0),spt3(0),max3(0),min3(0),senkouB(0);
var : tenkan_css(0),kijun_css(0),cloud_a(0),cloud_b(0),chikou_css(0),tx(0);
ATR1 = ATR(tenkan_len)*tenkan_mult;
up1 = (h+L)/2 + ATR1;
dn1 = (h+L)/2 - ATR1;
upper1 = iff(C[1] < upper1[1],min(up1,upper1[1]),up1);
lower1 = iff(C[1] > lower1[1],max(dn1,lower1[1]),dn1);
os1 = iff(c > upper1 , 1 ,IFf(c < lower1, 0 , os1[1]));
spt1 = iff(os1 == 1 , lower1 , upper1);
max1 = iff(CrossUp(c,spt1) or CrossDown(c,spt1) , max(c,max1[1]) , IFf(os1 == 1 , max(c,max1[1]) , spt1));
min1 = iff(CrossUp(c,spt1) or CrossDown(c,spt1) , min(c,min1[1]) , iff(os1 == 0 , min(c,min1[1]) , spt1));
tenkan = avg(max1,min1);
ATR2 = ATR(kijun_len)*kijun_mult;
up2 = (h+L)/2 + ATR2;
dn2 = (h+L)/2 - ATR2;
upper2 = iff(C[1] < upper2[1],min(up2,upper2[1]),up2);
lower2 = iff(C[1] > lower2[1],max(dn2,lower2[1]),dn2);
os2 = iff(c > upper2 , 1 ,IFf(c < lower2, 0 , os2[1]));
spt2 = iff(os2 == 1 , lower2 , upper2);
max2 = iff(CrossUp(c,spt2) or CrossDown(c,spt2) , max(c,max2[1]) , IFf(os2 == 1 , max(c,max2[1]) , spt2));
min2 = iff(CrossUp(c,spt2) or CrossDown(c,spt2) , min(c,min2[1]) , iff(os2 == 0 , min(c,min2[1]) , spt2));
kijun = avg(max2,min2);
senkouA = avg(kijun,tenkan);
ATR3 = ATR(spanB_len)*spanB_mult;
up3 = (h+L)/2 + ATR3;
dn3 = (h+L)/2 - ATR3;
upper3 = iff(C[1] < upper3[1],min(up3,upper3[1]),up3);
lower3 = iff(C[1] > lower3[1],max(dn3,lower3[1]),dn3);
os3 = iff(c > upper3 , 1 ,IFf(c < lower3, 0 , os3[1]));
spt3 = iff(os3 == 1 , lower3 , upper3);
max3 = iff(CrossUp(c,spt3) or CrossDown(c,spt3) , max(c,max3[1]) , IFf(os3 == 1 , max(c,max3[1]) , spt3));
min3 = iff(CrossUp(c,spt3) or CrossDown(c,spt3) , min(c,min3[1]) , iff(os3 == 0 , min(c,min3[1]) , spt3));
senkouB = avg(max3,min3);
tenkan_css = Red;
kijun_css = Blue;
cloud_a = teal;
cloud_b = red;
chikou_css = Green;
plot1(tenkan,"Tenkan-Sen",tenkan_css);
plot2(kijun,"Kijun-Sen",kijun_css);
if CrossUp(tenkan,kijun) Then
{
tx = Text_New(sDate,sTime,kijun,"매수");
Text_SetStyle(tx,2,1);
}
if CrossDown(tenkan,kijun) Then
{
tx = Text_New(sDate,sTime,kijun,"매도");
Text_SetStyle(tx,2,0);
}
위 지표에서
Kijun-Sen가 Tenkan-Sen를
골든크로스한 첫봉 일 때 검색돼게 부탁드리겠습니다
2025-03-04
458
글번호 188765