커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7529
글번호 230811
답변완료
문의 (Pre-D)
1. 아래식 검증부탁드립니다.
장시작후 10분이내의 조건과 10분이후의 조건을 다르게 해줘야 하는데,
10분 이후인데도 불구하고 (MTA < M2인 상태이든 아니든 상관없이) Plot1이 계속 찍히고 있습니다.
그런데 조건식 내부에서 Plot을 했을 경우는 제대로 나오는듯 합니다.
첫번째와 같이 조건식 외부에서 가져다써야 하는데 왜 서로다른 결과를 보여주는지 궁금합니다.
///////////////////////////////////////////////////////////////////////////////
// 첫번째 (조건식 외부에서 플로팅): 오작동
///////////////////////////////////////////////////////////////////////////////
VARS: PreD.TM(0, DATA1), PreD.TMLA(FALSE, DATA1), PreD.TML(FALSE, DATA1);
VARS: PreD.TFBT3G.AQ1(FALSE, DATA1);
VARS: PreD.TFBT3G.BQ1(FALSE, DATA1);
if ( DATA1(Date <> Date[1]) ) then
{
PreD.TM = DATA1(TimeToMinutes(stime));
PreD.TMLA = FALSE;
PreD.TML = FALSE;
PreD.TFBT3G.AQ1 = FALSE;
PreD.TFBT3G.BQ1 = FALSE;
}
if ( (TimeToMinutes(stime) < PreD.TM + 10) ) then { PreD.TMLA = TRUE; }
else { PreD.TMLA = FALSE; }
if ( (TimeToMinutes(stime) >= PreD.TM + 10) ) then { PreD.TML = TRUE; }
else { PreD.TML = FALSE; }
if ( (PreD.TMLA == TRUE) ) then
{
if ( (MTA < M2) ) then { PreD.TFBT3G.AQ1 = TRUE; }
else { PreD.TFBT3G.AQ1 = FALSE; }
}
if ( (PreD.TML == TRUE) ) then
{
if ( (MTA > M2) AND (M1 > M2) ) then { PreD.TFBT3G.BQ1 = TRUE; }
else { PreD.TFBT3G.BQ1 = FALSE; }
}
if PreD.TFBT3G.AQ1 == TRUE then Plot1(H, "AQ1", RGB(0,255,0));
if PreD.TFBT3G.BQ1 == TRUE then Plot2(H, "BQ1", RGB(255,100,150));
///////////////////////////////////////////////////////////////////////////////
// 두번째 (조건식 내부에서 플로팅): 정상작동하는 듯 함
///////////////////////////////////////////////////////////////////////////////
VARS: PreD.TM(0, DATA1), PreD.TMLA(FALSE, DATA1), PreD.TML(FALSE, DATA1);
VARS: PreD.TFBT3G.AQ1(FALSE, DATA1);
VARS: PreD.TFBT3G.BQ1(FALSE, DATA1);
if ( DATA1(Date <> Date[1]) ) then
{
PreD.TM = DATA1(TimeToMinutes(stime));
PreD.TMLA = FALSE;
PreD.TML = FALSE;
PreD.TFBT3G.AQ1 = FALSE;
PreD.TFBT3G.BQ1 = FALSE;
}
if ( (TimeToMinutes(stime) < PreD.TM + 10) ) then { PreD.TMLA = TRUE; }
else { PreD.TMLA = FALSE; }
if ( (TimeToMinutes(stime) >= PreD.TM + 10) ) then { PreD.TML = TRUE; }
else { PreD.TML = FALSE; }
if ( (PreD.TMLA == TRUE) ) then
{
if ( (MTA < M2) ) then { PreD.TFBT3G.AQ1 = TRUE; Plot1(H, "AQ1", RGB(0,255,0)); }
else { PreD.TFBT3G.AQ1 = FALSE; Plot1(H, "AQ1", RGB(0,0,255)); }
}
if ( (PreD.TML == TRUE) ) then
{
if ( (MTA > M2) AND (M1 > M2) ) then { PreD.TFBT3G.BQ1 = TRUE; Plot2(H, "BQ1", RGB(255,100,150));}
else { PreD.TFBT3G.BQ1 = FALSE; Plot2(H, "BQ1", RGB(255,0,80));}
}
//if PreD.TFBT3G.AQ1 == TRUE then Plot1(H, "AQ1", RGB(0,255,0));
//if PreD.TFBT3G.BQ1 == TRUE then Plot2(H, "BQ1", RGB(255,100,150));
2013-11-22
205
글번호 69730
답변완료
문의드릴께요~
매수청산식에서 매수가 대비 7% 이상 수익시에 2% 하락하면 추적청산을 하려고 합니다.
예를 들어 1분봉으로 매매할 경우
1분봉 전의 고가가 수익률이 5%인 상태에서 1분내에 수급이 몰려와 13%까지 올라간후에
6%까지 내려왔습니다.
1분내에 쭉올라왔다가 내려온 경우인데 분챠트에서 틱챠트에서 처럼
11%에서 수익실현하는 방법을 알고 싶습니다.
exitlong으로 아래 수식을 만들었는데
1분봉 전에는 5% 이하였고, 그 다음봉에서 13%까지 올라와서 6%까지 내려온후에 아래 수식이 실행되는것 같습니다.
그래서 실제로 11%에서 청산이 안되는 것 같은데요.
if highest(H,barssinceentry) > EntryPrice*1.07 then
exitlong("청산",Atstop,highest(H,barssinceentry)*0.98);
위의 수식을 아래의 수식으로 사용하면 분봉 챠트에 상관없이 11%에 청산이 가능한지 궁금합니다.
/*최소 7% 수익 이후에 최고 가격대비 2% 하락하면 청산*/
SetStopTrailing(2,7,PercentStop,1);
아니면 시스템트레이딩 설정의 강제청산 탭에 있는 최대수익대비하락 기능을
이용하고 청산시점을 조건만족시 즉시로 해야 되는지 궁금합니다.
만약 강제청산 탭을 사용해야 된다면 셋팅을 정확히 어떻게 해야 되는지
알려주세요.
감사합니다~
2013-11-22
211
글번호 69729
답변완료
문의드립니다.
PlotPaintBar등으로 차트에 표시를 하게되게 된다면 이후에 5000바가 지나면 기록들은 다 사라지게 되는 건가요. 답변과 부탁드립니다.
2013-11-22
209
글번호 69728
답변완료
재문의
안녕하세요 답변에감사드립니다 오늘수정해주신 식으로 적용해보니 앞전식과 똑같이 5분씩빨리 신호가나옵니다 설정창에서 시간시작에 체크하고 청산은 15:00에됩니다 담당자님께서 시뮬차트에한번 돌려보시면 좋겠읍니다 제가보기엔 간단한문제같은데 까다로운문제인가요 C.T 를 사용하다가 Y.T 로 옮길려고 하는데 처음부터 난관에 부딫혀서 순탄치가않네요 그리고 예스트레이더 시뮬차트에 돌려보면 아무런 신호가 않나와서 우리트레이더로 시뮬했읍니다 혹시 우리트레이더에 돌려서 이런결과가 나오는지요 제가알기로는 동일한시스템으로 알고있는데요 근데 왜 에스트레이더는 아무런 신호가 않뜰까요 제가잘못가동한 부분이있는지 알려주십시요 제가 문의드린식에서 이문제를 꼭 해결하고 넘어가야되는 사정이라서요 바쁘시더라도 신경좀써주십시요 죄송합니다 감사합니다
( 11월 20일 )
Y.T
1신호 -355.000 ( - 0.71pt )
2신호 -280.000 ( - 0.56 pt )
3신호 +220.000 ( + 0.44 pt )
총손익 , -415.000 원
( 11월 총손익 ) , -2.830.000원
*********************************************************
C.T
1신호 -140.000 ( - 0.28 pt )
2신호 -120.000 ( - 0.24 pt )
3신호 +170.000 ( + 0.34 pt )
총손익 , -110.000 원
( 11월 총손익 ) , -255.000원
수수료 0.0015 %
슬리피지 0.05 pt
********************************************************************************
안녕하세요
예스스탁입니다.
수식에서 시간지정에서 차이가 있는것 같습니다.
예스랭귀지에서 첫봉은 90000이라는 시간을 가지므로
stime > 090000은 두번째 봉부터를 의미하는데
atstop이 if조건만족하고 다음봉에 신호가 발생하므로 세번째 봉부터 신호가 발생할수 있습니다.
해당 부분 두번째 봉에서 신호가 발생할수 있게 변경했습니다.
If stime < 150000 Then{
if stime >= 090000 then{
If MarketPosition==0 then{
buy("매수",Atstop,DayOpen+0.8);
sell("매도",Atstop,DayOpen-0.8);
}
if MarketPosition == -1 Then
buy("역매수",Atstop,lowest(low,BarsSinceEntry+1)+0.9);
if MarketPosition == 1 Then
sell("역매도",Atstop,highest(high,BarsSinceEntry+1)-0.9);
}
}
위식으로 차트에 적용하면
시초가에서 0.8 움직이면 "매수"나 "매도"가 진입하고
역매수와 역매도도 진입이후의 최고가나 최저가를 기준으로 0.9 움직일때 정확히 리버션진입합니다.
당일청산의 경우 실전에서는 해당 시간이 되면 즉시 주문이 집행됩니다.
리포트에는 강제청산으로 지정된 시간이 포함된 봉의 시간을 표시하게 되고
당일청산이 봉미완성시에 나오므로 그때의 가격을 알수 없어
리포트에는 해당봉의 종가로 표시됩니다.
예스트레이더의 수식은 모두 봉을 시작시간으로 시간을 사용합니다.
예스트레이더 상단 관리메뉴의 종합환경설정창으세
봉의 X축표시를 시작시간기준으로 하시고 보시기 바랍니다.
즐거운 하루되세요
> 민선생1 님이 쓴 글입니다.
> 제목 : 재문의
> 답변감사합니다 수정해주신 식으로 적용해보니 진입시간과가격은 동일한데요 결과가다릅니다 그리고 당일청산에서 2개다 15:00에 적용했는데 C.T 는 15:00에 청산인데 Y.T는 15:05분에 청산이되네요 그래서 02:55분으로 바꿔보니 15:00에 청산이됩니다 수수료 와 슬리피지는 2개다 동일하게했는데 왜다른결과가 나오나요 ? 다시좀 살펴주십시요 감사합니다
************************************************************
안녕하세요
예스스탁입니다.
역매수와 역매도 수식의 매개변수 지정이 잘못되어 있었습니다.
아래식으로 다시 적용하시면 됩니다.
If stime < 150000 Then{
if stime > 090000 then{
If MarketPosition==0 then{
buy("매수",Atstop,DayOpen+0.8);
sell("매도",Atstop,DayOpen-0.8);
}
if MarketPosition == -1 Then
buy("역매수",Atstop,lowest(low,BarsSinceEntry+1)+0.9);
if MarketPosition == 1 Then
sell("역매도",Atstop,highest(high,BarsSinceEntry+1)-0.9);
}
}
******************************************************************
If ttime<1500 Then
If ttime>0900 Then
If position=0 Then
Call buy("매수",Atstop,Def,opend+0.8)
Call sell("매도",Atstop,Def,opend-0.8)
Else
Call buy("역매수",Atstop,Def,llv(1,low,barnumsinceentry+1)+0.9)
Call sell("역매도",Atstop,Def,hhv(1,high,barnumsinceentry+1)-0.9)
End If
End if
End if
2013-11-22
252
글번호 69727
답변완료
문의 드립니다
제목 : 0.9pt 이익후 하락하여 -0.5pt 손해로로 내려오면 즉시청산
1. 진입하여 0.9pt 이상의 이익(고가기준)이 발생하였다가
다시 이익이 줄어들 경우 이익이 -0.5pt 손해(현재가)가 되면
즉시청산(봉 완성 기다리지 않고) 하는 수식 부탁드립니다.
2. ★-그러나 이게 제일 중요합니다 당일에 고가 대비 1포인트 아래이면서 수익은 나고 있다면
즉 당일고가대비 1포인트 아래에서 이러한 현상이 벌어진다면
청산은 필요 없이종가까지 가지고 갑니다..
▶..수익이면 최대한 수익을 챙기자 그런식 부탁 드립니다
그리고 주석좀 부탁드립니다
2013-11-21
199
글번호 69726
답변완료
질문 드립니다.
안녕하세요.
항상 친절하신 답변 감사드립니다.
예스랭귀지로 만드는 시스템에서 애로사항을 느끼는 점으로, buy나 sell 등의 매매함수가 작동이 됐을 때 (즉 주문이 나갔을 때), 실제로 주문이 체결되었는지 안되었는지에 관계 없이 marketposition 수가 1이냐 -1이냐 등이 정해 져서 실제로는 잔고가 없는데 청산함수 exitlong 등이 나갈 수 있는 문제점을 보게 됩니다.
(매수주문만 나가고 체결은 안 된 상태에서, 매수청산주문이 나가서 체결되는 바람에 원치 않았던 숏포지션이 생겨 버린다든지...)
(매수1계약-청산, 매수1계약-청산 이런 과정을 원하는데, 주문발주로만 이렇게 되고 실제로는 매수1-매수1-매수1... 이렇게 돼서 매수계약수가 쌓여 버린다든지... 마찬가지로 매도계약만 쌓여 버린다든지)
이런 문제를 예스랭귀지상에서 조금이라도 감소시킬 수 있는 방법이, 예스랭귀지의 '잔고함수들'을 써서 가능하지 않을까 싶은데,
잔고함수들을 적절히 사용해서,
1.
진입주문이 체결되지 않았을 때에는 청산주문이 나가지 않고
실제로 진입주문이 체결됐을 때에만, 즉 잔고가 생겨났을 때에만 청산주문이 나가게 되고,
그 청산주문이 체결돼서 잔고가 없어 졌을 때에만 다음의 새로운 진입주문이 나가게 되는,
그런 소스의 예제를 보여 주시면 대단히 감사하겠습니다.
////////// ////////// ////////// ////////// ////////// ////////// //////////
2.
위에서 말한 측면들과 관련하여,
예스랭귀지의 잔고함수들 중에서,
GetNumAccounts, GetNumPositions, GetPositionQuantity 등의 함수를 적절히 활용하면,
스팟에서의 여러 객체들의 기능을 활용하여 주문이 체결되었는지 아닌지를 구분하여 대응할 수 있는 것과 매우 유사한 소스를 작성할 수 있을 것 같은데,
이와 관련된 예제를 보여 주시면 대단히 감사하겠습니다.
(예:
2-1. 스팟에서 미체결 상태를 확인해서 그 경우에 미체결 주문을 취소나 정정할 수 있는 것과 유사하게,
예스랭귀지의 경우 주문 취소기능은 없지만, 청산 주문은 나가지 않을 수 있게, 최소한 미체결 상태를 확인하는 예스랭귀지 코드.
2-2. 스팟에서 미결제 상태를 확인해서, 그 경우에 그 미결제 잔고에 대해 청산주문을 내게 할 수 있는 것과 같이,
예스랭귀지에서, 직전에 낸 진입 주문이 체결되어 미결제 잔고가 생성되었고, 따라서 이 게 확인된 상태에서만, 이와 관련된 청산 주문이 나갈 수 있게 하는 예스랭귀지 코드.
*즉,
If 2-1과 같이, 아직 체결이 되지 않은 게 확인되면, 이어지는 청산주문은 없도록 하고,
Else 2-2와 같이, 직전에 낸 진입주문이 체결된 것이 확인되면, 비로소 청산주문이 나가도록 하는 YesLanguage Codes)
////////// ////////// ////////// ////////// ////////// ////////// //////////
3.
이런 기법들을 쓸 때에도, 가원장 상태와 진원장 상태가 다름으로써, 즉 양자가 일치하게 되는 몇초간의 시차 사이에서도 문제가 발생할 수 있을텐데, 이런 문제를 최소화할 수 있는 방법도 예제로 보여 주시면 대단히 감사하겠습니다.
감사합니다.
2013-11-22
340
글번호 69725
답변완료
지표식 질문입니다
30분 차트에서
하루하루
stime 093000 봉에서
이동평균선이
(증가했다가 감소한경우 or
감소했다가 증가한경우 )
계속 카운트 하고 싶습니다
2013-11-21
195
글번호 69724
마이토리 님에 의해서 삭제되었습니다.
2013-11-21
0
글번호 69723
답변완료
질문입니다
예스에서는 유로FX 차트를 구현할수 있는 방법이 어떻게 됩니까?
2013-11-21
206
글번호 69722