커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4356
글번호 230811
답변완료
수정부탁드립니다
Params: Period(20), Period1(5), Period2(10), Period3(34), Period4(50);
Params: Exit_L(15), Exit_PT(35);
Params: Contracts_N(3);
Vars : SP(0), TickSize(0), lastEntry(0);
SP = SignalPosition;
TickSize = OneTick * PriceScale;
v1 = Average(C,Period1);
v2 = Average(C,Period2);
v3 = Average(C,Period3);
v4 = Average(C,Period4);
v99 = Average(C,Period);
v88 = v2 - (3 * TickSize);
// 매수진입조건
Cond1 = (CrossUp(v1,v3) Or v3 < C) And 3500 < V;
Cond11 = ((CrossUp(v1,v2) Or (v88 < H And H < v88) ) And 1000 < V);
If Cond1 Then lastEntry = 1
Else If Cond11 Then lastEntry = 11;
Cond2 = CrossDown(v1,v2) Or C < v2;
// 매도진입조건
Cond3 = ((CrossDown(v1,v3) Or C < v3) And 3500 < V);
Cond33 = ((CrossDown(v1,v2) Or (v88 < L And L < v88)) And 1000 < V);
If Cond3 Then lastEntry = 3
Else If Cond33 Then lastEntry = 33;
Cond4 = CrossUp(v1,v2) Or v2 < C;
Cond5 = 12000 < AccumN(V,3);
If Cond1 Or Cond11 Then Buy("매수진입",def,def,Contracts_N);
If Cond3 Or Cond33 Then Sell("매도진입",def,def,Contracts_N);
If Cond5 Then SetStopProfittarget(Exit_PT * TickSize * CurrentContracts, PointStop);
If lastEntry = 11 Or lastEntry = 33 Then
Begin
SetProfitTarget(15 * TickSize, PointStop);
If SP = 1 Then ExitLong("R매수청산", Atlimit, v2 - 5 * TickSize,def,Contracts_N);
If SP = -1 Then ExitShort("R매도청산", Atlimit, v2 + 5 * TickSize,def,Contracts_N);
End
Else
Begin
If Cond2 Then ExitLong("매수청산",def,def,def,Contracts_N);
If Cond4 Then ExitShort("매도청산",def,def,def,Contracts_N);
End;
SetStopLoss(Exit_L * TickSize * currentContracts, PointStop);
위 수식을 예스랭귀지에 맞게 수정부탁드립니다
시그널메이커에서 작성된수식입니다
2017-06-29
95
글번호 110810
답변완료
전략문의
Params: Period(20), Period1(5), Period2(10), Period3(34), Period4(50), Exit_PT(50);
Vars : SP(0), TickSize(0);
SP = SignalPosition;
TickSize = OneTick * PriceScale;
v1 = Average(C,Period1);
v2 = Average(C,Period2);
v3 = Average(C,Period3);
v4 = Average(C,Period4);
v99 = Average(C,Period);
Cond1 = (CrossUp(v1,v3) Or v3 < C) And 3500 < V; // (5선과 34선 골든크로스 또는 종가가 34선위) 이고 거래량이 3500이상시 매수
If Cond1 Then Buy();
Cond2 = CrossDown(v1,v3) And C < v2; // 5선과 10선이 데드크로스 하고 종가가 10선아래일경우 청산
Cond3 = (CrossDown(v1,v3) Or C < v3) And 3500 < V; // (5선과 34선 데드크로스 또는 종가가 34선아래) 이고 거래량이 3500이상시 매도
If Cond3 Then Sell();
Cond4 = CrossUp(v1,v3) And v2 < C; // 5선과 10선이 골든크로스 하고 종가가 10위래일경우 청산
Cond5 = 12000 < AccumN(V,3);
Cond99 = CrossUp(v1,v99) And C < v1;
Cond88 = CrossDown(v1,v99) And v1 < C;
If Cond1 Then Buy("매수진입");
If Cond2 Then ExitLong("매수청산");
If Cond3 Then Sell("매도진입");
If COnd4 Then ExitShort("매도청산");
If Cond99 Then ExitLong("매수손절");
If Cond98 Then ExitShort("매도손절");
If Cond5 Then SetStopProfittarget(Exit_PT * TickSize * CurrentContracts, PointStop);
위 수식을 예스랭귀지에 수정 부탁드립니다
2017-06-29
121
글번호 110809
답변완료
지표질문드립니다
첨부파일1에 있는거처럼 차트표시해야할 마지막지표값표시가 체크가 안되어있을때 한번에 체크하는방법이 있나요?
첨부파일2에 표시된 파란선 위쪽으로 지표값이 나오게 설정하려면 어떻게 해야하나요?
2017-06-29
142
글번호 110808
답변완료
부탁 합니다.
안녕하세요.더운날씨에 고생 많으십니다.
일봉과 분봉에서 캔들마다 고가와 저가를 선으로 연결할수 있으면 부탁 합니다.
2017-06-28
112
글번호 110807
답변완료
부탁합니다
input : 시작시간(090000),종료시간(152000);
input : Period15(160),Period16(300),Period17(600),Period18(10),익절틱수(20),손절틱수(10);
Input : Period(12),sigPeriod(9);
input : Period33(12),sigPeriod34(9);
input : Period43(20),sigPeriod44(15);
var : mav15(0),mav16(0),mav17(0),mav18(0),Bxcond(false),Sxcond(false);
var : Tcond(false);
mav15 = ma(c, Period15);
mav16 = ma(c, Period16);
mav17 = ma(c, Period17);
mav18 = ma(c, Period18);
value1 = TRIX(Period);
value2 = ema(value1, sigPeriod);
value3 = TRIX(Period33);
value4 = ema(value3, sigPeriod34);
value5 = TRIX(Period43);
value6 = ema(value5, sigPeriod44);
if Bdate != Bdate[1] then
{
Tcond = True;
BXcond = false;
SXcond = false;
}
if stime == 종료시간 or (stime > 종료시간 and stime[1] < 종료시간) Then{
Tcond = false;
if MarketPosition == 1 Then
ExitLong();
if MarketPosition == -1 Then
ExitShort();
}
if TotalTrades > TotalTrades[1] then{
BXcond = false;
SXcond = false;
if (IsExitName("bl",1) == true or IsExitName("bp",1) == true or IsExitName("bx1",1) == true) Then
BXcond = true;
if (IsExitName("sl",1) == true or IsExitName("sp",1) == true or IsExitName("sx1",1) == true) Then
SXcond = true;
}
if Tcond == true then{
if MarketPosition <= 0 and Bxcond == false and
(value1 > value2 and value3 > value4 and mav15[3] < mav15[2] and mav15[2] < mav15[1] and mav15[1] < mav15 and mav16[1] < mav16 and mav17[1] < mav17 and mav18[1] < mav18) Then
buy("b",OnClose,def,1);
if MarketPosition == 1 Then{
if (mav17[1] < mav17 and mav18[1] < mav18 and CurrentContracts < 3) Then
buy("bb1",OnClose,def,1);
if (mav17[1] < mav17 and mav18[3] >= mav18[2] and mav18[2] <= mav18[1] and mav18[1] < mav18 and CurrentContracts < 5) Then
buy("bb2",OnClose,def,1);
if (CrossDown(value1, value2)) or (CrossDown(value3, value4)) or (mav17[3] > mav17[2] and mav17[2] > mav17[1] and mav17[1] > mav17 and mav18[3] > mav18[2] and mav18[2] > mav18[1] and mav18[1] > mav18) Then
ExitLong("bx");
ExitLong("bp",atlimit,AvgEntryPrice+PriceScale*익절틱수);
ExitLong("bl",AtStop,AvgEntryPrice-PriceScale*손절틱수);
}
if MarketPosition >= 0 and
Sxcond == false and
(value1 < value2 and value3 < value4 and mav15[3] > mav15[2] and mav15[2] > mav15[1] and mav15[1] > mav15 and mav16[1] > mav16 and mav17[1] > mav17 and mav18[1] > mav18) Then
sell("s",OnClose,def,1);
if MarketPosition == -1 then{
if mav17[1] > mav17 and mav18[1] > mav18 and CurrentContracts < 3 Then
sell("ss1",OnClose,def,1);
if mav17[1] > mav17 and mav18[3] <= mav18[2] and mav18[2] >= mav18[1] and mav18[1] > mav18 and CurrentContracts < 5 Then
sell("ss2",OnClose,def,1);
if (crossup(value1, value2)) or (crossup(value3, value4)) or (mav17[3] < mav17[2] and mav17[2] < mav17[1] and mav17[1] < mav17 and mav18[3] < mav18[2] and mav18[2] < mav18[1] and mav18[1] < mav18) Then
ExitShort("sx");
ExitShort("sp",atlimit,AvgEntryPrice-PriceScale*익절틱수);
ExitShort("sl",AtStop,AvgEntryPrice+PriceScale*손절틱수);
}
}
위 수식에서
매수진입 b2 추가하고 기존의 피라미딩 bb1,bb2 적용하고 청산수식 bx2을 추가하고자 하며,
반대로 매도진입 s2 추가하고 기존의 피라미딩 ss1,ss2 적용하고 청산수식 sx2을 추가하고자 합니다
정리를 하면
b2------ (value1 > value2 and value3 < value4 and value5 > value6 and mav18[1] < mav18) 신규 적용
기존의 피라미딩 bb1,bb2 적용
bx2--------(CrossDown(value5, value6)) 적용(b2로 진입한 것은 bx2청산하고자 합니다)
s2-------(value1 < value2 and value3 > value4 and value5 < value6 and mav18[1] > mav18) 신규 적용
기존의 피라미딩 ss1,ss2 적용
sx2--------(crossup(value5, value6)) 적용(s2로 진입한 것은 sx2청산하고자 합니다)
아래 수식은 제가 수식을 수정하였으나 에러 발생합니다
어디에 문제가 있는지 모르겠습니다
수정하여 주시기 바랍니다 감사합니다
input : 시작시간(090000),종료시간(152000);
input : Period15(160),Period16(300),Period17(600),Period18(10),익절틱수(20),손절틱수(10);
Input : Period(12),sigPeriod(9);
input : Period33(12),sigPeriod34(9);
input : Period43(20),sigPeriod44(15);
var : mav15(0),mav16(0),mav17(0),mav18(0),Bxcond(false),Sxcond(false);
var : Tcond(false);
mav15 = ma(c, Period15);
mav16 = ma(c, Period16);
mav17 = ma(c, Period17);
mav18 = ma(c, Period18);
value1 = TRIX(Period);
value2 = ema(value1, sigPeriod);
value3 = TRIX(Period33);
value4 = ema(value3, sigPeriod34);
value5 = TRIX(Period43);
value6 = ema(value5, sigPeriod44);
if Bdate != Bdate[1] then
{
Tcond = True;
BXcond = false;
SXcond = false;
}
if stime == 종료시간 or (stime > 종료시간 and stime[1] < 종료시간) Then{
Tcond = false;
if MarketPosition == 1 Then
ExitLong();
if MarketPosition == -1 Then
ExitShort();
}
if TotalTrades > TotalTrades[1] then{
BXcond = false;
SXcond = false;
if (IsExitName("bl",1) == true or IsExitName("bp",1) == true or IsExitName("bx1",1) == true) Then
BXcond = true;
if (IsExitName("sl",1) == true or IsExitName("sp",1) == true or IsExitName("sx1",1) == true) Then
SXcond = true;
}
if Tcond == true then{
if MarketPosition <= 0 and Bxcond == false and
(value1 > value2 and value3 > value4 and mav15[3] < mav15[2] and mav15[2] < mav15[1] and mav15[1] < mav15 and mav16[1] < mav16 and mav17[1] < mav17 and mav18[1] < mav18) Then
buy("b1",OnClose,def,1);
if MarketPosition <= 0 and Bxcond == false and
(value1 > value2 and value3 < value4 and value5 > value6 and mav18[1] < mav18) Then
buy("b2",OnClose,def,1);
if MarketPosition == 1 Then{
if (mav17[1] < mav17 and mav18[1] < mav18 and CurrentContracts < 3) Then
buy("bb1",OnClose,def,1);
if (mav17[1] < mav17 and mav18[3] >= mav18[2] and mav18[2] <= mav18[1] and mav18[1] < mav18 and CurrentContracts < 5) Then
buy("bb2",OnClose,def,1);
}
if MarketPosition == 1 Then{
if (CrossDown(value1, value2)) or (CrossDown(value3, value4)) or (mav17[3] > mav17[2] and mav17[2] > mav17[1] and mav17[1] > mav17 and mav18[3] > mav18[2] and mav18[2] > mav18[1] and mav18[1] > mav18) Then
exitlong("bx1",OnClose,def,"b1");
if (CrossDown(value5, value6)) Then
exitlong("bx2",OnClose,def,"b2");
ExitLong("bp",atlimit,AvgEntryPrice+PriceScale*익절틱수);
ExitLong("bl",AtStop,AvgEntryPrice-PriceScale*손절틱수);
}
if MarketPosition >= 0 and Sxcond == false and
(value1 < value2 and value3 < value4 and mav15[3] > mav15[2] and mav15[2] > mav15[1] and mav15[1] > mav15 and mav16[1] > mav16 and mav17[1] > mav17 and mav18[1] > mav18) Then
sell("s1",OnClose,def,1);
if MarketPosition >= 0 and Sxcond == false and
(value1 < value2 and value3 > value4 and value5 < value6 and mav18[1] > mav18) Then
sell("s2",OnClose,def,1);
if MarketPosition == -1 then{
if mav17[1] > mav17 and mav18[1] > mav18 and CurrentContracts < 3 Then
sell("ss1",OnClose,def,1);
if mav17[1] > mav17 and mav18[3] <= mav18[2] and mav18[2] >= mav18[1] and mav18[1] > mav18 and CurrentContracts < 5 Then
sell("ss2",OnClose,def,1);
}
if MarketPosition == -1 Then{
if (crossup(value1, value2)) or (crossup(value3, value4)) or (mav17[3] < mav17[2] and mav17[2] < mav17[1] and mav17[1] < mav17 and mav18[3] < mav18[2] and mav18[2] < mav18[1] and mav18[1] < mav18) Then
exitlong("sx1",OnClose,def,"s1");
if (crossup(value5, value6)) Then
exitlong("sx2",OnClose,def,"s2");
ExitShort("sp",atlimit,AvgEntryPrice-PriceScale*익절틱수);
ExitShort("sl",AtStop,AvgEntryPrice+PriceScale*손절틱수);
}
}
2017-06-28
107
글번호 110806
답변완료
수식부탁드립니다
1.
일목균형표 기준선이 하향 전환할 경우 기준선 천정을 표시한다(A)
일목균형표 기준선이 상향 전환할 경우 기준선 바닥을 표시한다(B)
A와 B의 상향 대칭을 표시한다
A와 B의 하향 대칭을 표시한다
감사합니다
2017-06-28
131
글번호 110803
2wnwn 님에 의해서 삭제되었습니다.
2017-06-28
3
글번호 110798
답변완료
이평선 수식문의
이평선 문의입니다.
5분봉의 21, 72, 200 이평선을
30분봉에 표시하고싶습니다.
2017-06-28
130
글번호 110795
답변완료
수식문의
로그 피보나치 수식부탁드립니다.
조건
1. 만약 전날의 진폭틱이 100틱이상이면 전날의 고점과저점의 로그피보나치선이 나오게(100틱이상안되면 아무것도 안나오게)
2. 만약 당일의 직폭틱이 100틱이상을 넘으면 당일의 고점과 저점의 로그피보나치선을
2017-06-28
131
글번호 110790