커뮤니티
예스랭귀지 Q&A
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1335
글번호 230811
답변완료
문의
스톡캐스틱 이중바닥 더블딥에서
매수하고싶어요
2025-03-05
386
글번호 188786
답변완료
수식 수정 의뢰 드립니다.
매매에 도움을 받고자 문의 드립니다.
아래는 ATR 관련 수식입니다. 혹시 시스템식이나 지표식으로 예스로 변환이 가능할까요?
_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, S electedValue( ROC( C, 1 ) ) ));
SD = StochD(8, 3, 3);
MH = MACD(8, 21) - Signal(8, 21, 5);
trendup = IIf(MH > 0 OR (MH > 0 AND MH > Ref(MH, -1)) AND RSI(3) >50 AND SD < 80 AND SD > Ref(SD, -1) AND ValueWhen(C,O<C), colorBlue, colorWhite);
trendcolor = IIf(MH < 0 OR (MH < 0 AND MH < Ref(MH, -1)) AND RSI(3) <50 AND SD > 20 AND SD < Ref(SD, -1) AND ValueWhen(C,O>C), colorRed, trendup);
Plot( C, "Close", trendcolor, styleCandle | styleThick );
_SECTION_END();
no=Param( "Swing", 5, 1, 55 );
res=HHV(H,no);
sup=LLV(L,no);
tsl=IIf(ValueWhen(IIf(C>Ref(res,-1),1,IIf(C<Ref(sup,-1),-1,0))!=0,IIf(C>Ref(res,-1),1,IIf(C<Ref(sup,-1),-1,0)),1)==1,sup,res);
Plot(tsl, _DEFAULT_NAME(), colorBlue, styleStaircase);
Buy = Cross(C,res) ;
Sell = Cross(sup,C) ;
_SECTION_END();
a=C;
g=(EMA(Close,3) * (2 / 4 - 1)-EMA(Close,5) * (2 / 6 - 1)) / (2 /4- 2 /6);
e=Ref(tsl,-1);
Buy = Cross(C,tsl) ;
Sell = Cross(tsl,C) ;
SellPrice=ValueWhen(Sell,e,1);
BuyPrice=ValueWhen(Buy,e,1);
Long=Flip(Buy,Sell);
Shrt=Flip(Sell,Buy );
Filter=Buy OR Sell;
Buy = Cross(C,tsl) ;
Sell = Cross(tsl,C) ;
shape = Buy * shapeUpArrow + Sell * shapeDownArrow;
PlotShapes( shape, IIf( Buy, colorGreen, colorRed ),0, IIf( Buy, Low, High ) );
a1=Ref(tsl,-1);
dist = 0.8*ATR(1); //0.8
dist1 = 1.8*ATR(1); //1.2
for( i = 0; i < BarCount; i++ )
{
if( Buy[i] )
{
PlotText( "Buy:" + L[ i ] + "₩nTgt: " + (a1[i]*1.005) + "₩nSL: " + (tsl[i]*0.9975), i, L[ i ]-dist[i], colorLime);
}
if( Sell[i] )
{
PlotText( "Sell:" + H[ i ] + "₩nT: " + (a1[i]*0.995) + "₩nSL: " + (tsl[i]*1.0025), i, H[ i ]+dist1[i], colorBlack);
}
}
2025-03-05
862
글번호 188785
답변완료
종목검색식 추가 부탁합니다.
우선 많은 수고에 감사드립니다.
다음과 같은 수식이 있습니다.
아래수식에서 키움 지표수식 MACD(12,26)-eavg(MACD(12,26),9)
Oscillator가 전봉에서 기준선0보다 높을경 매수조건을 덧붙여 주시면 고맙겠습니다.
A=RSI(14);
RSI저점=ValueWhen(1,CrossUp(A,30),O);
input : 배분1(0.236),배분2(1.02),DN(1.05);
var : 중최고가(0),중최저가(0),경계(0),경계1(False),경계2(False);
var : 기준봉(0),기준봉1(False),기준봉2(False),결과기준(0),결과기준1(false),결과기준2(false);
var : value(0);
중최고가=Highest(H,20);
중최저가=Lowest(L,20);
경계=(중최고가+중최저가)/2-(중최고가-중최저가)*배분1;
경계1=CROSSUP(C,경계)&&C>O*배분2;
경계2=CROSSDOWN(C,경계);
if 경계1 OR 경계2 Then
기준봉 = O;
기준봉1=CROSSUP(c,기준봉);
기준봉2=CROSSDOWN(c,기준봉);
if 기준봉1 OR 기준봉2 Then
결과기준 = O;
결과기준1=CROSSUP(c,결과기준);
결과기준2=CROSSDOWN(c,결과기준);
if 결과기준1 OR 결과기준2 Then
value = O;
if value < value[1] and
value >= value[1]*0.85 and
C <= O*1.01 Then
Find(1);
2025-03-04
471
글번호 188784
답변완료
수식문의드립니다.
input : N(120);
var : hh(0),hhindex(0),hc(0),ho(0),hv(0),hl(0);
#Highest
if Index >= N-1 Then
{
hh = h;
ll = l;
For cnt = 0 to N-1
{
if h[cnt] > hh Then {
hh = h[cnt];
hhindex=Index[cnt];
hc=c[cnt];
ho=o[cnt];
hv=v[cnt];
}
}
}
기간내 highest를 구하는 수식입니다.
이수식을 변경하여 highest가 발생한 이후(hhindex)부터 현재봉까지 lowest봉에 대해 아래의 정보를 추가적으로 얻고자 합니다.
Lindex=Index[cnt];
Lc=c[cnt];
Lo=o[cnt];
Lv=v[cnt];
항상 감사드립니다. ^^
2025-03-04
416
글번호 188783
답변완료
문의드립니다
금년이 아닌 전년도의 피보나치를 구할수 있을까요?
고가
0.236
0.382
0.5
0.618
0.764
저가
감사합니다
2025-03-04
379
글번호 188782
답변완료
Valuewhen(2, 조건, 표시가격) 을 예스로 변환
키움의 Valuewhen(2, 조건, 표시가격) 을 예스로 변환할때 그동안
if 조건 Then
var1 = 표시가격; 으로 작성해 왔는데..
위 처럼 뒤로 2번째로 조건에 맞는 표시 가격의 값을 표시할때는 어떻게 해야 하는지요?
답변 미리 감사 드립니다
2025-03-04
390
글번호 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
464
글번호 188780
답변완료
수식 요청합니다
항상 감사드립니다.
일봉에서 월봉의 5봉중 최고(월봉중) 거래량을 표현하고 싶습니다.
2025-03-04
368
글번호 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
429
글번호 188777