커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3625
글번호 230811
답변완료
수식 문의
예스트레이더를 활용하여 시카고 선물거래소(CME) 투자 시, dayopen/dayclose나 dayindex 등의 변수 활용 때 어떤 조정을 거쳐야 하는지 알고 싶습니다.
1. if c>dayopen+1 then buy();
와 같은 식을 한국선물시장에서 활용 중이라면, 해당 식을 CME에서 활용하기 위해서는 어떻게 조정하면 될까요?
2. dayindex>0 과 같은 조건을 CME에서 활용하기 위해서는 어떻게 조정하면 될까요?
3. 그 외에 dayclose(1)/dayhigh(1)/daylow(1)를 어떻게 표현하는지? 와 주의할 사항이 어떤 것들이 있을까요?
2019-08-21
265
글번호 131307
답변완료
문의드립니다~
틱차트에서
1.나스닥에서 10시30분을 기준으로 해서
위로50포인트단위가격으로 8개가로선 아래로50포인트단위가격으로 8개가로선을
긋고 싶습니다.
현재가격이 7672포인트인데 만약10시30분 시작가격이 7672라면은
위로 7700부터 50포인트단위로 가로선8개
아래로 7650부터 50포인트단위로 가로선8개
이런 식으로요~
2.매수 또는 매도진입을 하고나서 30틱이상 수익일때
50포인트단위의 가격에서 익절하고 싶습니다.
현재나스닥이 7672포인트인데
진입후 30틱이상 수익일때 7650,7600 이런단위가격에 왔을때
익절하는 식을 구하고 싶습니다.~
항상 감사한 마음 가지고 있습니다~
감사합니다~
2019-08-21
279
글번호 131306
답변완료
질문 드립니다.
안녕하세요.
1.
나스닥에서, 현재 나스닥이 가령 7659.75라면, 가장 가까운 50포인트 단위 가격을 중심으로 수평선을 다섯개(수평선이 안된다면 여하튼 상하로 변하더라도) 긋는 지표식 부탁드립니다.
즉, 이 경우,
가장 가까운 7650을 중심선으로 하고,
위에 7700, 7750 이렇게 두개,
아래에 7600, 7550 이렇게 두개,
총 다섯개의 선들이 그어 질 수 있는 지표식 부탁드립니다.
(완전 수평선이 불가능하면, 완전 수평선이 아니라하더라도, 여하튼 현재의 종가를 중심으로, 가장 가까운 50 포인트 단위 가격을 중심으로 그 위에 50포인트 간격 줄 두개, 아래로 두개, 총 다섯개 줄을 긋는 지표식 부탁 드립니다.
2. 같은 논리로,
오일에서, 가령 지금 가격이 56.12라면, 가장 가까운 56.00을 중심으로
그 위 50틱 위에 56.50, 그 위에 57.00,
아래로는 55.50, 55.00 이렇게 다섯개 줄,
3. 골드의 경우,
현재 1517.4라면,
가장 가까운 1515.0을 중심선으로,
위로는 1520.0, 1525.0,
아래로는 1510.0, 1505.0에 줄을 쳐 주는
지표식 부탁드립니다.
감사합니다.
2019-08-26
268
글번호 131305
답변완료
답변부탁드려요~
수고가 많으십니다.
예를들어 다음식으로 여러종목을 운용한다고 생각하면,
Input : shortPeriod(5), longPeriod(20), Period(3);
value1 = MACD(shortPeriod, longPeriod);
value2 = ema(value1, Period);
# 매수/매도청산
If CrossUP(value1, value2) Then
{
Buy();
}
# 매도/매수청산
If CrossDown(value1, value2) Then
{
Sell();
}
해외선물에서 이 시스템으로 여러종목을 운용한다면,
1. 해외선물 매매 시작시간 지정해서 시스템시작 (예: 한국시간 오후10시부터 매매)
2. 당일 실현손익과 여러종목의 현재 평가손익의 합이 1000$이 넘으면 모든 종목 시스템을 청산하고 당일 매매를 마치는 식이 어떻게 추가되면 될까요?
즉, 당일실현손익$ + 현평가손익총합$ = 1000$이상이면 시스템 청산후 매매종료하는 시스템 수식부탁드립니다.
수고하세요
2019-08-21
304
글번호 131304
답변완료
수고하십니다
종목검색식 부탁합니다.
ATR(14,9)
ATR지수 > ATR시그널
ATR지수 우상.
ADX(14)
+DI > -DI
+DI > ADX
ADX > -DI
거래량
120(외부변수)거래봉 평균거래량
현재거래봉 > 과거120평균거래봉[1] * 30배이상
2019-08-21
252
글번호 131303
답변완료
지표식 문의드립니다.
이전 N봉의 평균값을 N봉만큼 보여주는 지표식을 구현하고 싶습니다.
즉 N을 10으로 설정하면 현재봉에서는 이전 10개의 봉의 평균값이 현재부터 앞으로
10개의 봉까지 나오게 됩니다.
2019-08-20
232
글번호 131302
답변완료
추가 수익 구간
* 항상 많은 도움에 고맙습니다.
* 첨부파일 처럼 추가 수익 가능 구간이 있는데 40틱에서 자동 청산 되는 이유가 무었인가요?
< 63551번 글 참고>
즉 수익을 더할수 있는데 청산이 되네요.....
* 요청 사항
1.수익이 35틱 이상 한번 이라도 오면 max수익 60틱 이상 이면 무조건 청산후 거래금지
2.수익이 35틱 이상 한번 아라도 오면 min수익 30틱 이하 이면 무조건 청산후 거래금지
####
Input : 당일수익틱수(40);
var : N1(0),dayPl(0),당일수익(0),Xcond(false);
당일수익 = PriceScale*당일수익틱수;
if Bdate != Bdate[1] Then{Xcond = false; N1 = NetProfit; }
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] then{if daypl >= PriceScale*35 Then Xcond = true; if (IsExitName("목표40만원달성1",1) == true or IsExitName("목표40만원달성2",1) == true) then Xcond = true; }
if Xcond == false then {
var1 = ma(c,5) ;
var2 = ma(c,20);
if CrossUp(var1,var2) then Buy("매수1") ;
if CrossDown(var1,var2) then sell("매도1") ;
}
###########################################################################################################################
#가장 위
if MarketPosition == 1 then{ExitLong("목표40만원달성1",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts)); }
if MarketPosition == -1 then{ExitShort("목표40만원달성2",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts)); }
###########################################################################################################################
SetStopProfittarget(PriceScale*80,PointStop);
SetStopLoss(PriceScale*28,PointStop);
if sdate != sdate[1] Then SetStopEndofday(043000);
if bdate != bdate[1] Then SetStopEndofday(0);
* 항상 고맙습니다.
2019-08-21
282
글번호 131301
답변완료
수식점검부탁입니다.
$,안녕하세요
# 63764 보내주신 답변수식을 아래와 같이 인용해 봤습니다,그런데 var4 라인을 현재가가
croseup 경우는 소리발생이 정상인데 var4라인을 croseDown할경우를 응용해서 작성했는데
소리가 var4라인을 터치하지 않아도 소리가 납니다, 수식이 어디가 잘못된건지 도움 부탁
드립니다.제가 원하는식은 현재가가var4라인을 상향터치(croseUp)하거나 하향터치(croseDown)
시에도 소리발생 하는식입니다,var5라인도 같은 방식으로요, 도움부탁드립니다.
input : Per1(9),Per2(18),per3(28),per4(38),per5(55),per6(61.8),per7(85),per8(100),per9(138.2),per10(161.8);
Var : pivot(0),S1(0),S2(1),S3(1),S4(1),S5(0),cnt(0),t1(0),t2(0),t3(0),t4(0),t5(0),t6(0),t7(0);
Array : oo[10](0),hh[10](0),ll[10](0),cc[10](0);
if bdate > bdate[1]+30 then
{
oo[0] = o;
hh[0] = h;
ll[0] = L;
for cnt = 1 to 9
{
oo[cnt] = oo[cnt-1][1];
hh[cnt] = hh[cnt-1][1];
ll[cnt] = ll[cnt-1][1];
cc[cnt] = cc[cnt-1][1];
}
}
if h > hh[0] Then
hh[0] = h;
if l < ll[0] Then
ll[0] = l;
cc[0] = c;
if hh[1] > 0 and ll[1] > 0 then
{
S1 = (hh[0]+ll[0])/2;
S2 = (hh[1]+ll[1])/2;
S3 = hh[1];
S4 = ll[1];
s5 = oo[0];
var1 =10^(LOG10(oo[0]));
var2 =10^(LOG10(cc[1])+(LOG10(S3)-LOG10(S4))*(Per1/100));
var3 =10^(LOG10(cc[1])-(LOG10(S3)-LOG10(S4))*(Per1/100));
var4 =10^(LOG10(cc[1])+(LOG10(S3)-LOG10(S4))*(Per2/100));
var5 =10^(LOG10(cc[1])-(LOG10(S3)-LOG10(S4))*(Per2/100));
var6 =10^(LOG10(cc[1])+(LOG10(S3)-LOG10(S4))*(Per3/100));
var7 =10^(LOG10(cc[1])-(LOG10(S3)-LOG10(S4))*(Per3/100));
var8 =10^(LOG10(cc[1])+(LOG10(S3)-LOG10(S4))*(Per4/100));
var9 =10^(LOG10(cc[1])-(LOG10(S3)-LOG10(S4))*(Per4/100));
var10 =10^(LOG10(cc[1])+(LOG10(S3)-LOG10(S4))*(Per5/100));
var11 =10^(LOG10(cc[1])-(LOG10(S3)-LOG10(S4))*(Per5/100));
var12 =10^(LOG10(cc[1])+(LOG10(S3)-LOG10(S4))*(Per6/100));
var13 =10^(LOG10(cc[1])-(LOG10(S3)-LOG10(S4))*(Per6/100));
var14 =10^(LOG10(cc[1])+(LOG10(S3)-LOG10(S4))*(Per7/100));
var15 =10^(LOG10(cc[1])-(LOG10(S3)-LOG10(S4))*(Per7/100));
var16 =10^(LOG10(cc[1])+(LOG10(S3)-LOG10(S4))*(Per8/100));
var17 =10^(LOG10(cc[1])-(LOG10(S3)-LOG10(S4))*(Per8/100));
var18 =10^(LOG10(cc[1])+(LOG10(S3)-LOG10(S4))*(Per9/100));
var19 =10^(LOG10(cc[1])-(LOG10(S3)-LOG10(S4))*(Per9/100));
var20 =10^(LOG10(cc[1])+(LOG10(S3)-LOG10(S4))*(Per10/100));
var21 =10^(LOG10(cc[1])-(LOG10(S3)-LOG10(S4))*(Per10/100));
plot1(var1);
plot2(var2);
plot3(var3);
plot4(var4);
plot5(var5);
plot6(var6);
plot7(var7);
plot8(var8);
plot9(var9);
plot10(var10);
plot11(var11);
plot12(var12);
plot13(var13);
plot14(var14);
plot15(var15);
plot16(var16);
plot17(var17);
plot18(var18);
plot19(var19);
plot20(var20);
plot21(var21);
if crossup(h,var4) Then
PlaySound("C:₩예스트레이더₩data ₩Sound ₩alert.wav");
if CrossDown(l,var5) Then
PlaySound("C:₩예스트레이더₩data ₩Sound ₩alert.wav");
if crossup(l,var5) Then
PlaySound("C:₩예스트레이더₩data ₩Sound ₩alert.wav");
if CrossDown(h,var4) Then
PlaySound("C:₩예스트레이더₩data ₩Sound ₩alert.wav");
if crossup(h,var10) Then
PlaySound("C:₩예스트레이더₩data ₩Sound ₩alert.wav");
if CrossDown(l,var11) Then
PlaySound("C:₩예스트레이더₩data ₩Sound ₩alert.wav");
if crossup(h,var12) Then
PlaySound("C:₩예스트레이더₩data ₩Sound ₩alert.wav");
if CrossDown(l,var13) Then
PlaySound("C:₩예스트레이더₩data ₩Sound ₩alert.wav");
if crossup(l,var13) Then
PlaySound("C:₩예스트레이더₩data ₩Sound ₩alert.wav");
if CrossDown(h,var12) Then
PlaySound("C:₩예스트레이더₩data ₩Sound ₩alert.wav");
}
Text_Delete(t1);
Text_Delete(t2);
Text_Delete(t3);
Text_Delete(t4);
Text_Delete(t5);
Text_Delete(t6);
Text_Delete(t7);
t1 = Text_New(sdate,stime,10^(LOG10(cc[1])+(Log10(S3)-log10(S4))*(Per2/100))," MB:"+NumToStr(10^(LOG10(cc[1])+(Log10(S3)-log10(S4))*(Per2/100)),2));
t2 = Text_New(sdate,stime,10^(LOG10(cc[1])-(Log10(S3)-log10(S4))*(Per2/100))," MS:"+NumToStr(10^(LOG10(cc[1])-(Log10(S3)-log10(S4))*(Per2/100)),2));
t3 = Text_New(sdate,stime,10^(LOG10(cc[1])+(Log10(S3)-log10(S4))*(Per5/100))," +MM:"+NumToStr(10^(LOG10(cc[1])+(Log10(S3)-log10(S4))*(Per5/100)),2));
t4 = Text_New(sdate,stime,10^(LOG10(cc[1])-(Log10(S3)-log10(S4))*(Per5/100))," -MM:"+NumToStr(10^(LOG10(cc[1])-(Log10(S3)-log10(S4))*(Per5/100)),2));
t5 = Text_New(sdate,stime,10^(LOG10(cc[1])+(Log10(S3)-log10(S4))*(Per6/100))," +MR:"+NumToStr(10^(LOG10(cc[1])+(Log10(S3)-log10(S4))*(Per6/100)),2));
t6 = Text_New(sdate,stime,10^(LOG10(cc[1])-(Log10(S3)-log10(S4))*(Per6/100))," -MR:"+NumToStr(10^(LOG10(cc[1])-(Log10(S3)-log10(S4))*(Per6/100)),2));
t7 = Text_New(sdate,stime,s5," MO:"+NumToStr(s5,2));
Text_SetStyle(t1,5,2);
Text_SetStyle(t2,5,2);
Text_SetStyle(t3,5,2);
Text_SetStyle(t4,5,2);
Text_SetStyle(t5,5,2);
Text_SetStyle(t6,5,2);
Text_SetStyle(t7,5,2);
Text_SetColor(t1,RED);
Text_SetColor(t2,BLUE);
Text_SetColor(t3,RED);
Text_SetColor(t4,BLUE);
Text_SetColor(t5,RED);
Text_SetColor(t6,BLUE);
Text_SetColor(t7,LMAGENTA);
#,고맙습니다.
2019-08-20
213
글번호 131300
답변완료
재문의
최고점이랑 장대양봉은 나오는데 계산은 틀리게나와요 합부분들이 최고점 부터 장대양봉까지 합계가 이상하게 나와요. 장대양봉부터 오늘 현재봉까지의 합계도 다르게 나오고요 부탁점 드려요
힘드시다면 input 값을 4개만들어서 거래대금만 나오게 해주실수 있을가요?
년월일 값 4개 넣어서 거래대금 합계 두개 값이 출력되게 할수 있을까요
안녕하세요
예스스탁입니다.
최고점과 장대양봉의 전봉에 대한 텍스트는
최근것 하나만 출력되게 작성했습니다.
항상 현재봉 기준으로 15개안에 장대양봉이 있는지 확인해서 출력하면
텍스트가 겹쳐서 표시되게 됩니다. 이전것을 계속 삭제할수 밖에 없습니다.
1
input : P(200),Per(10),N(15);
var : cnt(0),i1(0),i2(0),HH(0),sum1(0),sum2(0);
var : tx1(0),tx2(0);
if index >= P then
{
i1 = -1;
for cnt = 0 To N-1
{
if C[cnt] >= O[cnt]*(1+per/100) Then
{
i1 = cnt;
}
}
HH = 0;
i2 = -1;
for cnt = 0 To P-1
{
if HH == 0 or (HH > 0 and H[cnt] > HH) Then
{
HH = H[cnt];
i2 = cnt;
}
}
if i2 > i1 and i1 > -1 and i2 > -1 then
{
Text_Delete(tx1);
tx1 = text_new(sdate[i1+1],stime[i1+1],H[i1+1],"장대양봉전봉");
Text_SetStyle(tx1,2,1);
Text_Delete(tx2);
tx2 = text_new(sdate[i2],stime[i2],H[i2],"최고고점");
Text_SetStyle(tx2,2,1);
sum1 = 0;
for cnt = 0 to i1
{
sum1 = sum1 + Money[cnt];
}
sum2 = 0;
for cnt = i1+1 to i2
{
sum2 = sum2 + Money[cnt];
}
plot1(sum1,"장대양봉~현재");
plot2(sum2,"최고~장대양봉전");
}
}
2
input : P(200),Per(10),N(15);
var : cnt(0),i1(0),i2(0),HH(0),sum1(0),sum2(0);
var : tx1(0),tx2(0);
if index >= P then
{
i1 = -1;
for cnt = 0 To N-1
{
if C[cnt] >= O[cnt]*(1+per/100) Then
{
i1 = cnt;
}
}
HH = 0;
i2 = -1;
for cnt = 0 To P-1
{
if HH == 0 or (HH > 0 and H[cnt] > HH) Then
{
HH = H[cnt];
i2 = cnt;
}
}
if i2 > i1 and i1 > -1 and i2 > -1 then
{
Text_Delete(tx1);
tx1 = text_new(sdate[i1+1],stime[i1+1],H[i1+1],"장대양봉전봉");
Text_SetStyle(tx1,2,1);
Text_Delete(tx2);
tx2 = text_new(sdate[i2],stime[i2],H[i2],"최고고점");
Text_SetStyle(tx2,2,1);
sum1 = 0;
for cnt = 0 to i1
{
sum1 = sum1 + Money[cnt];
}
sum2 = 0;
for cnt = i1+1 to i2
{
sum2 = sum2 + Money[cnt];
}
plot1(sum2/sum1*100,"비율");
}
}
즐거운 하루되세요
> 아무다 님이 쓴 글입니다.
> 제목 : 수정 부탁드려요
> 최근 200봉 내에서 최고값봉을 찾고 최고값봉부터 최근 15일내 장대양봉(10프로이상)이 있다면 장대양봉 직전 봉까지의 거래금액 합계와 장대양봉부터 현재 봉까지의 거래금액 합계 부탁드려요 전고점이 아니라 (최고고점에서 최근 15일이내 10프로이상 장대양봉전까지의 거래금액합계)/(최근 15일이내 장대양봉부터 현재봉(오늘)까지의 거래금액 합계) 알고싶어요
200일 이내 최고값은 양봉이든 음봉이든 상관없어요
그리고 15일이내 10프로이상의장대양봉이두개이상이면 먼저나온 장대양봉이기준이 되게해주셔요
1 각 합계금액
input : P(200),Per(10),N(15);
var : HH(0),MM(0),ii(0),tx1(0),tx2(0),cnt(0),NN(0),NI(0);
if index >= P and C >= O*(1+per/100) then
{
HH = 0;
MM = 0;
ii = 0;
for cnt = 200 DownTo 1
{
if HH == 0 or (HH > 0 and H[cnt] > HH) Then
{
HH = H[cnt];
MM = 0;
ii = cnt;
}
MM = MM+Money[cnt];
}
tx1 = text_new(sdate[ii],stime[ii],H[ii],"최고고점");
Text_SetStyle(tx1,2,1);
tx2 = text_new(sdate[1],stime[1],H[1],"장대양봉전봉");
Text_SetStyle(tx2,2,1);
NN = 0;
Ni = index;
}
if NI > 0 and index <= Ni+n then
{
NN = NN+money;
plot1(MM,"최고~장대양봉전봉 거래대금함계");
plot2(NN,"장대양봉~현재 거래대금함계");
}
2 비율
input : P(200),Per(10),N(15);
var : HH(0),MM(0),ii(0),tx1(0),tx2(0),cnt(0),NN(0),NI(0);
if index >= P and C >= O*(1+per/100) then
{
HH = 0;
MM = 0;
ii = 0;
for cnt = 200 DownTo 1
{
if HH == 0 or (HH > 0 and H[cnt] > HH) Then
{
HH = H[cnt];
MM = 0;
ii = cnt;
}
MM = MM+Money[cnt];
}
tx1 = text_new(sdate[ii],stime[ii],H[ii],"전고점");
Text_SetStyle(tx1,2,1);
tx2 = text_new(sdate[1],stime[1],H[1],"장대양봉전봉");
Text_SetStyle(tx2,2,1);
NN = 0;
Ni = index;
}
if NI > 0 and index <= Ni+n then
{
NN = NN+money;
plot1(NN/MM*100,"비율");
}
2019-08-20
299
글번호 131299