커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6135
글번호 230811
답변완료
매수를 하려면...
안녕하세요 저는 여러 종목에 대해서 모두 자동화를 하고 싶은데 이 경우
전략 차트를 여러개를 띄워야 하나요?
즉 한 전략 차트 내에서 예스랭귀지 스크립트로
다수의 종목을 매수/매도를 그 이름을 지정해서는 할 수는 없는 거죠?
(종목코드를 지정하고 싶다면 단지 계좌에 있는 것만 얻을 수 있고
다른 증권 api처럼 이번 미니 옵션 월물 모두 다 불러오기 - 이렇게 한 후
그 중 매수를 하는 것은 차트에 띄워진 것만 가능하기에 불가능하죠?)
감사합니다!
2022-02-15
1583
글번호 156287
답변완료
수식 부탁드립니다.
안녕하세요?
수고에 감사드립니다.
아래의 스토캐스틱 지표를 시스템식으로 전환해서 stok가 80이상이면 경고음소리가나고
stok가 20이하이면 경고음이 나오도록해 주시면 감사하겠습니다.
매수와 매도청산 방식은 아닙니다.
단순 경고음만 나오면 됩니다.
감사합니다.
Input : Period(12), Period1(5), Period2(5);
var : StoK(0),StoD(0);
StoK = StochasticsK(Period,Period1);
StoD = StochasticsD(Period,Period1,Period2);
Plot1(StoK, "StochasticsK");
Plot2(StoD, "StochasticsD");
PlotBaseLine1(20, "기준선20");
PlotBaseLine2(80, "기준선80");
2022-02-14
1184
글번호 156286
답변완료
종목검색
안녕하세요..항상 감사합니다.
5분봉 차트에서,
일목균형표의 기준선이 120분선을,
오늘을 제외한 5일전에 돌파한 종목 검색을 하고 싶습니다.
2022-02-14
1415
글번호 156285
답변완료
지표식 변환이 가능할까요?
트레이딩뷰에서 사용하던 웨이브트렌드 라는 지표인데
예스트레이더에서 사용하고 싶은데 공부 부족으로 헤매고 있습니다ㅠ
혹시 도움을 주실수 있을까요?
(sma는 ma와 같다고 하네요)
-----------------------------------------------------------------
n1 = input(10, "Channel Length")
n2 = input(19, "Average Length")
sma1 = input(7, "SMA Length")
r=input(8, title="Period", type=integer, minval=1)
obLevel1 = input(60, "Over Bought Level 1")
obLevel2 = input(53, "Over Bought Level 2")
osLevel1 = input(-60, "Over Sold Level 1")
osLevel2 = input(-53, "Over Sold Level 2")
b=ema(close,r)
buy_g=close[3]<b
sell_g=close[3]>b
ap = hlc3
esa = ema(ap, n1)
d = ema(abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ema(ci, n2)
wt1 = tci
wt2 = sma(wt1,sma1)
plot(0, color=gray)
plot(obLevel1, color=red)
plot(osLevel1, color=green)
plot(obLevel2, color=red)
plot(osLevel2, color=green)
plot(wt1, color=green)
plot(wt2, color=red)
plot(crossover(wt1, wt2)and buy_g ? wt2 : na, color = black , style = circles, linewidth = 3)
plot(crossunder(wt1, wt2)and sell_g ? wt2 : na, color = black , style = circles, linewidth = 3)
plot(crossover(wt1, wt2) and buy_g ? wt2 : na, color = green , style = circles, linewidth = 2)
plot(crossunder(wt1, wt2) and sell_g ? wt2 : na, color = (wt2 - wt1 > 0 ? red : lime) , style = circles, linewidth = 2)
barcolor(crossover(wt1, wt2)and buy_g ? (wt2 - wt1 > 0 ? aqua : yellow) : na)
barcolor(crossunder(wt1, wt2)and sell_g ? (wt2 - wt1 > 0 ? aqua : yellow) : na)
bgcolor(crossover(wt1,wt2) and buy_g ? green : na, transp=75)
bgcolor(crossunder(wt1,wt2) and sell_g ? red : na, transp=75)
alertcondition(crossover(wt1,wt2) and buy_g, title='Buy', message='Buy Alert')
alertcondition(crossunder(wt1,wt2) and sell_g, title='Sell', message='Sell Alert')
2022-02-14
1521
글번호 156284
답변완료
수정 부탁 드립니다.
안녕 하세요.
항상 도움 수셔서 감사드립니다.
한번더 요청을 드립니다.
1.마지막 고저라인 차트 끝까지 그려지게 수정해 주셨는데
반대 라인이 생성되면 끊어져야 되는데 계속 남아 두 라인이 있게 됩니다
수정 부탁 드리고요.
2.ZigZag 라인 상승,하락 색상을 구분해서 표시되게 부탁 드립니다.
Input:length(12);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),TL2(0),TL3(0),
Text1(0),처리구분(""),T(0),TL21(0),TL31(0),TL4(0),TL41(0),TL5(0),TL51(0);
Array:고점[10,2](0),저점[10,2](0); //가격,위치
처리구분 = "";
If Highest(H,length) == H and lastHiVal <> H and
Lowest(L,length) == L and lastLoVal <> L Then
{
If 저점[1,1] > L Then 처리구분 = "저점처리";
If 고점[1,1] < H Then 처리구분 = "고점처리";
}
Else If Highest(H,length) == H and lastHiVal <> H Then
처리구분 = "고점처리";
Else If Lowest(L,length) == L and lastLoVal <> L Then
처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
T = 1;
lastHiVal = H;
If 고점[1,2] < 저점[1,2] Then
{
For j = 10 DownTo 2
{
고점[j,1] = 고점[j-1,1];
고점[j,2] = 고점[j-1,2];
}
}
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
{
고점[1,1] = H;
고점[1,2] = Index;
sBar = Index - 저점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and
TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
TL_Delete(TL2);
TL_Delete(TL21);
Text_Delete(Text1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],sDate[eBar],sTime[eBar],고점[1,1]);
TL2 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],sDate[eBar],sTime[eBar],저점[1,1]);
//TL21 = TL_New(sDate[sBar],sTime[sBar],저점[1,1]+PriceScale*10,sDate[eBar],sTime[eBar],저점[1,1]+PriceScale*10);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1], NumToStr(고점[1,1],2));
Text_SetStyle(Text1, 2, 1);
TL_SetSize(TL2,3);
TL_SetColor(TL2,REd); //저점
TL_SetSize(TL21,1);
TL_SetColor(TL21,YELLOw); //저점
}
}
If 처리구분 == "저점처리" Then
{
T = -1;
lastLoVal = L;
If 저점[1,2] < 고점[1,2] then
{
For j = 10 DownTo 2
{
저점[j,1] = 저점[j-1,1];
저점[j,2] = 저점[j-1,2];
}
}
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L then
{
저점[1,1] = L;
저점[1,2] = Index;
sBar = Index - 고점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and
TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
TL_Delete(TL3);
TL_Delete(TL31);
Text_Delete(Text1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],sDate[eBar],sTime[eBar],저점[1,1]);
TL3 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],sDate[eBar],sTime[eBar],고점[1,1]);
//TL31 = TL_New(sDate[sBar],sTime[sBar],고점[1,1]-PriceScale*10,sDate[eBar],sTime[eBar],고점[1,1]-PriceScale*10);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],NumToStr(저점[1,1],1));
Text_SetStyle(Text1, 2, 10);
TL_SetSize(TL3,3);
TL_SetColor(TL3,BLUe);
TL_SetSize(TL31,1);
TL_SetColor(TL31,YELLOw);
}
}
TL_SetSize(TL1,1);
TL_SetColor(TL1,GRAy);
TL_Delete(TL4);
TL_Delete(TL41);
TL_Delete(TL5);
TL_Delete(TL51);
if T == 1 then
{
TL4 = TL_New(sDate[index-고점[1,2]],sTime[index-고점[1,2]],고점[1,1],sDate,sTime,고점[1,1]);
// TL41 = TL_New(sDate[index-고점[1,2]],sTime[index-고점[1,2]],고점[1,1]-PriceScale*10,sDate,sTime,고점[1,1]-PriceScale*10);
TL_SetColor(TL4,BLUE);
TL_SetSize(TL4,3);
TL_SetExtRight(TL4,true);
TL_SetColor(TL41,YELLOw);
TL_SetSize(TL41,1);
TL_SetExtRight(TL41,true);
TL_SetExtRight(TL2,true);
TL_SetExtRight(TL3,False);
}
if T == -1 then
{
TL4 = TL_New(sDate[index-저점[1,2]],sTime[index-저점[1,2]],저점[1,1],sDate,sTime,저점[1,1]);
//TL41 = TL_New(sDate[index-저점[1,2]],sTime[index-저점[1,2]],저점[1,1]+PriceScale*10,sDate,sTime,저점[1,1]+PriceScale*10);
TL_SetColor(TL5,REd); //저점
TL_SetSize(TL5,3);
TL_SetExtRight(TL5,true);
TL_SetColor(TL51,YELLOw); //저점
TL_SetSize(TL51,1);
TL_SetExtRight(TL51,true);
TL_SetExtRight(TL3,true);
TL_SetExtRight(TL2,False);
}
감사합니다.
2022-02-14
1492
글번호 156283
답변완료
부탁드립니다
$,안녕하세요
아래식을 일봉,주봉,월봉에 적용 가능하도록 도움 부탁드립니다
Input:비율(0);
var : aa(0),lc(0),hc(0);
aa = ema(ema(ema(c,10),10),10);
if aa[2]<=aa[1] and aa[1] > aa Then
{
lc = c;
}
Else
{
if lc > 0 and C < lc Then
lc = C;
}
if aa[2]>=aa[1] and aa[1] < aa Then
{
hc = c;
}
Else
{
if hc > 0 and C > hc Then
hc = C;
}
if lc > 0 Then
{
var1 = lc+(lc*비율/100);
Plot1(var1);
}
if hc > 0 Then
{
var2 = hc-(hc*비율/100);
plot2(Var2);
}
감사합니다.
2022-02-15
1182
글번호 156282
답변완료
문의 드립니다.
항셍장/유럽장/미국장 이런 표시를 차트에 글씨를 표시 하고 싶은데요.
검색해보니까 대부분 수직선으로 하고 있길래ㅠㅠ
해보니까 어렵습니다. 도움 부탁합니다.
항셍장오전시작
항셍장오전끝
항셍장오후시작
항셍장오후끝
항셍장저녁시작
항셍장저녁끝
유럽장시작
유럽장끝
미국장시작
미국장끝
이렇게 시작하는 캔들봉 위에 이런 글씨들이 표시 되었으면 좋겠습니다.
시작은 캔들봉 위에
끝은 캔들봉 아래에 표시 되게 부탁드립니다.
이런 글씨를 표시하는 것은 지표일까요? 아니면 강조? 어느 것이죠?
그동안 고생 하시며 수고 너무 많으십니다.
감사합니다. ㅠㅠ
2022-02-14
1276
글번호 156281
답변완료
추가 문의요~ ^^
1. 문한반복 진입 아닌거죠? 1회만 추가 진입하는거죠?
어쩔 때 보니까 무한반복 주문 나가던데.. 1회만 추가 진입으로 강제하고 싶어요
2번째 손절후 추가 진입시 반대로는 진입이 되는거 같은데요
추가 진입 시점부터 50포인트(특정포인트) 이익후 본전이면 청산이 가능할까요?
추가 진입은 손절이 있는듯한데 익절 목표가 없는듯 합니다.
익절가도 입력하고 싶습니다. ^^
감사합니다.~
-----------------------------------------------
안녕하세요
예스스탁입니다.
1
손절은 틱수로 지정되게 작성해 드립니다.
설정창의 강제청산에서 손절매를 설정하시면 안됩니다.
input: position(1),ntime(160000),vol(1),xtime(55800),손절틱수(30);
var : ST(0);
if Bdate != Bdate[1] Then
{
ST = sTime;
}
if ST > 0 then
{
if (sdate != sdate[1] and stime >= ntime) or
(sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then
{
if position == 1 Then
Buy("매수",OnClose,DEf,vol);
if position == -1 Then
Sell("매도",OnClose,DEf,vol);
}
}
IF Xtime > ST Then
SetStopEndofday(Xtime);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(Xtime);
}
if (sdate != sdate[1] and stime >= ST) or
(sdate == sdate[1] and stime >= ST and stime[1] < ST) Then
{
IF Xtime <= ST Then
{
SetStopEndofday(0);
}
}
if MarketPosition == 1 Then
Sell("bs",AtStop,EntryPrice-PriceScale*손절틱수);
if MarketPosition == -1 Then
Buy("sb",AtStop,EntryPrice+PriceScale*손절틱수);
2
2번 손절후 동일방향 즉시 재진입은 가능하지 않습니다.
랭귀지 체계상 청산후 바로 동일방향 진입이 발생하면 해당 진입이 다시 청산됩니다.
랭귀지 도움말의 예스랭귀지 활용--> 신호체계 내용을 확인하시기 바랍니다.
이에 따라 2번과 연계된 3번,4번도 가능하지 않습니다.
3
당일청산과 관련해서는 4가지를 확인하셔야 합니다.
별도로 수식적으로 수정하거나 할 부분은 없습니다.
3-1. 당일청산신호가 발생하지 않은 경우
당일청산은 지정한 시간이후에 첫 시세가 발생하면 신호가 발생합니다.
당일청산 신호 자체가 발생하지 않았다면 지정한 시간이후에 시세가 없는 경우입니다.
랭귀지에서 시간은 수신되는 데이타의 시간으로 판별합니다.
지정한 시간이후에 시세가 없으면 당일청산이 발생하지 못합니다.
3-2. 당일청산신호가 발생하고 주문은 집행되었지만 체결이 안된 경우
해당 부분은 신호가 발생하고 주문도 정상적으로 수행된 상태입니다.
다만 주문이 미체결된 내용이므로
시스템 트레이딩 설정창의 부가기능에 시간자동정정기능을 이용해 대응해 보실수 있습니다.
시간자동정정은 신호발생후 N초뒤에 정정하는 내용으로 1차,2차 설정이 가능합니다.
3-3. 당일청산신호가 발생하고 주문은 집행되었지만 주문거부된 경우
해당 부분은 신호가 발생하고 주문도 정상적으로 수행했지만 증거금등의 이유로 거부난 경우입니다.
주문거부 내용을 확인하셔야 합니다.
3-4. 당일청산신호는 발생했지만 주문은 집행안된 경우
해당부분은 주로 설정창의 주문시작신호 때문에 발생합니다.
설정창의 주문시작신호는 [모든신호], [진입신호] 중 택1해서 설정이 됩니다.
[모든신호]는 적용이후 발생하는 모든 신호에 대해 주문을 집행하지만
[진입신호]는 시스템 적용 후 진입신호가 발생한 이후부터 주문을 집행하게 됩니다.
즉 [진입신호]는 실제 잔고에 포지션이 없을때 새로운 진입부터 주문을 하기 위한 설정입니다.
주문시작신호를 [진입신호]로 설정한 상태에서 자동매매 중에
설정창을 다시 띄운후에 확인버튼을 클릭하면 이후 다시 다음 진입부터 주문이 집행되므로
적용이후 첫신호가 청산신호이면 신호는 표시되지만 주문집행은 하지 않게 됩니다
그러므로 주문시작신호가 [진입신호]로 설정된 상태에서 자동매매 중에
시스템 트레이딩 설정창을 다시 띄워을 경우에는
주문시작신호를 상황에 따라 [모든신호]나 [진입신호]로 변경하고 적용하셔야 합니다.
즐거운 하루되세요
> 스카스카 님이 쓴 글입니다.
> 제목 : 수식 도움 요청드립니다. ^^
> 감사합니다.
아래와 같이 특정시간 진입 수식으로 잘 사용하고 있습니다.
input: position(1),ntime(160000),vol(1),xtime(55800);
var : ST(0);
if Bdate != Bdate[1] Then
{
ST = sTime;
}
if ST > 0 then
{
if (sdate != sdate[1] and stime >= ntime) or
(sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then
{
if position == 1 Then
Buy("매수",OnClose,DEf,vol);
if position == -1 Then
Sell("매도",OnClose,DEf,vol);
}
}
IF Xtime > ST Then
SetStopEndofday(Xtime);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(Xtime);
}
if (sdate != sdate[1] and stime >= ST) or
(sdate == sdate[1] and stime >= ST and stime[1] < ST) Then
{
IF Xtime <= ST Then
{
SetStopEndofday(0);
}
}
여기에 추가를 부탁드립니다. ^^
1. 손절매(손절)가 나면 즉시 반대 포지션 진입 (매수 진입 후 청산되면 바로 매도 진입)
2. 손절매(손절)가 나면 즉시 같은 포지션으로 진입 (매수 진입 후 청산되면 바로 같은 방향 진입)
3. 추가 진입은 손익절 포인트가 조절되었으면 좋겠습니다.
4. 추가 진입시 목표가에 도달하지 못하고 정해진 포인트 이상 갔다가 떨어지면 청산 (예: 청산후 재 진입시 50포인트 이익이였다가 본전으로 오면 강제청산)
마지막으로 가끔 청산이 안되던데 무슨 이유가 있을까요? (컴퓨터는 꺼지지 않았습니다)
가끔 xtime(55800) 장 종료시에 청산이 안되는데 무슨 이유가 있을까요?
위 2가지가 안되면서 큰 손실을 입었는데요.. 너무 프로그램을 믿은 탓도 있구요 ㅎㅎ
2000만원 손해(2022년 1월 13일 나스닥)를 보았습니다. 혹시 주의 사항이 있는지 알려주세요~ ^^
감사합니다~
2022-02-14
1786
글번호 156280
답변완료
모멘텀 지표
질의 사항
한 권으로 끝내는 181쪽, 182쪽 모멘텀 지표 질의
1 번
181쪽, 182쪽 에서 모멘텀 지표에 대해서 0선을 기준선으로 기술하고 있는데,
예스트레이더 내의 제공 지표인 Momentum, Net Change Oscillator, Price Rate Of Change, Sonar Momentum 중에서
어느 지표를 지표를 대상으로 한 것인지요?
Momentum 지표라고 생각하고 책을 읽었는데,
예스트레이더 내의 Momentum 지표는 기준선값이 100 으로 작성되어 있습니다.
MMT = Momentum(Period);
PlotBaseLine1(100, "기준선1");
Momemtum = 금일종가/n일전 종가*100
Momentum = C / C[Period] * 100;
2 번
181쪽, 182쪽 에서의 모멘텀 지표가 예스트레이더 내의 Momentum 지표라면,
또 0 선을 기준으로 하여 책의 기술 내용대로 따르자면
Momemtum = 금일종가/n일전 종가*100 - 100 으로 보정하여 사용하면 되는 것인지요?
2022-02-14
1517
글번호 156278