커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1862
글번호 230811
답변완료
문의드립니다.
이전 답변 감사드립니다. 덕분에 늘 좋은 공부가 됩니다. 한가지 더 질문을 드리고 싶은데요.
이전에 알려주신 수식에서 만약 현재 진행중인 조건이 완성되기 전에도 임시 추세선이 그려지도록 하려면 어떻게 해야 할까요? 즉, 직전조건 고점이나 저점과 현재 진행중인 조건의 저점이나 고점을 연결하는 추세선을 그리되 빨강이나 파랑이 아닌 다른 색으로 처리하여 현재 구간조건이 아직 끝나지 않았음을 알수 있도록요.. 이렇게 진행되다가 현재 진행중인 조건이 완성되면 최종확정의 의미로 빨강이나 파랑이 아래 수식대로 처리되게끔요
var : a(0),b(0);
var : HH(0),HD(0),HT(0);
var : HH1(0),HD1(0),HT1(0);
var : LL(0),LD(0),LT(0);
var : LL1(0),LD1(0),LT1(0);
var : TL(0),TL1(0),TL2(0),TL3(0),TL4(0),TL5(0);
var : T(0);
a = ma(C,5);
b = ma(c,20);
Condition1 = C > a and C > b;
Condition2 = C < a and C < b;
if T <= 0 and Condition1 == true and Condition1[1] == False Then
{
T = 1;
}
if T >= 0 and Condition2 == true and Condition2[1] == False Then
{
T = -1;
}
if T == 1 Then
{
if T != T[1] Then
{
HD = sDate;
HT = sTime;
HH = H;
HD1 = HD[1];
HT1 = HT[1];
HH1 = HH[1];
if HH1 > 0 and LL > 0 Then
{
value1 = HH1;
Value2 = LL;
TL = TL_new(HD1,HT1,value1,LD,LT,Value2);
TL1 = TL_new(sdate,sTime,value1,NextBarSdate,NextBarStime,value1);
TL2 = TL_new(sdate,sTime,value2,NextBarSdate,NextBarStime,value2);
TL3 = TL_new(sdate,sTime,value1-(value1-Value2)*0.382,NextBarSdate,NextBarStime,value1-(value1-Value2)*0.382);
TL4 = TL_new(sdate,sTime,value1-(value1-Value2)*0.500,NextBarSdate,NextBarStime,value1-(value1-Value2)*0.500);
TL5 = TL_new(sdate,sTime,value1-(value1-Value2)*0.618,NextBarSdate,NextBarStime,value1-(value1-Value2)*0.618);
TL_SetColor(TL,Red);
TL_SetColor(TL1,Magenta);
TL_SetColor(TL2,Magenta);
TL_SetColor(TL3,Magenta);
TL_SetColor(TL4,Magenta);
TL_SetColor(TL5,Magenta);
}
}
if H > HH Then
{
HD = sDate;
HT = sTime;
HH = H;
}
if HH1 > 0 and LL > 0 Then
{
TL_SetEnd(TL1,sDate,sTime,value1);
TL_SetEnd(TL2,sDate,sTime,value2);
TL_SetEnd(TL3,sDate,sTime,value1-(value1-Value2)*0.382);
TL_SetEnd(TL4,sDate,sTime,value1-(value1-Value2)*0.500);
TL_SetEnd(TL5,sDate,sTime,value1-(value1-Value2)*0.618);
}
}
if T == -1 Then
{
if T != T[1] Then
{
LD = sDate;
LT = sTime;
LL = L;
LD1 = LD[1];
LT1 = LT[1];
LL1 = LL[1];
if LL1 > 0 and HH > 0 Then
{
value1 = HH;
Value2 = LL1;
TL = TL_new(LD1,LT1,LL1,HD,HT,HH);
TL1 = TL_new(sdate,sTime,value1,NextBarSdate,NextBarStime,value1);
TL2 = TL_new(sdate,sTime,value2,NextBarSdate,NextBarStime,value2);
TL3 = TL_new(sdate,sTime,value1-(value1-Value2)*0.382,NextBarSdate,NextBarStime,value1-(value1-Value2)*0.382);
TL4 = TL_new(sdate,sTime,value1-(value1-Value2)*0.500,NextBarSdate,NextBarStime,value1-(value1-Value2)*0.500);
TL5 = TL_new(sdate,sTime,value1-(value1-Value2)*0.618,NextBarSdate,NextBarStime,value1-(value1-Value2)*0.618);
TL_SetColor(TL,Blue);
TL_SetColor(TL1,Cyan);
TL_SetColor(TL2,Cyan);
TL_SetColor(TL3,Cyan);
TL_SetColor(TL4,Cyan);
TL_SetColor(TL5,Cyan);
}
}
if L < LL Then
{
LD = sDate;
LT = sTime;
LL = L;
}
if HH1 > 0 and LL > 0 Then
{
TL_SetEnd(TL1,sDate,sTime,value1);
TL_SetEnd(TL2,sDate,sTime,value2);
TL_SetEnd(TL3,sDate,sTime,value1-(value1-Value2)*0.382);
TL_SetEnd(TL4,sDate,sTime,value1-(value1-Value2)*0.500);
TL_SetEnd(TL5,sDate,sTime,value1-(value1-Value2)*0.618);
}
}
2022-08-19
1608
글번호 161616
답변완료
문의드립니다.
안녕하세요.
매수:분봉에서
무포지션에서 40일이평선이 기준선인데요.
기준선 아래로 종가가 하나도 없이 기준선 위로 종가가 5개이상 형성되면
매수준비1 이 성립됩니다.
이후에도 종가가 하나라도 기준선 아래로 종가가 내려가면 메수준비1 은
해제됩니다.
매수준비1 이 성립된 후에
20일 이평선이 진입선이 됩니다.
종가가 6개 종가가 생길 때 진입선 위로 종가가 5개이상 형성되면
매수준비2 가 성립됩니다.
이후에도 종가가 진입선 아래로 2개 이상 생기면 매수준비2 는 헤제 됩니다
진입:
매수준비1 과 매수준비2 가 성립되고 음봉 다음에 양봉이 연속 2번 발생하면 매수진입합니다.
이 때의 음봉 종가를 손절선이라고 합니다.
손절:
매수 후에 손절선 가격을 현재가가 하향하면 손절합니다
매수청산:
진입 후에 20일 이평선 즉 진입선 가격을 종가가 하향하면 청산합니다.
매도: 반대논리로 부탁드립니다.
2022-08-19
1615
글번호 161610
답변완료
리얼차트
안녕 하세요?
리얼차트를 만들어 보려고 합니다.
파일을 보시면 위는 키움, 아래는 예스 입니다.
키움의 리얼 차트 처럼 만들어 보려고 하지만 안되네요.
그래서 방식을 문의 합니다.
부탁 합니다.
수고 하세요.
2022-08-19
1697
글번호 161609
답변완료
배포버전
안녕하세요~~
배포버전의
적용,검증,편집시 비번입력은 무슨 내용인가요?
배포버전도 수정이 가능한가요?
2022-08-19
1399
글번호 161606
답변완료
문의드립니다
수고 많으십니다
볼랜즈밴드 수식 부탁드립니다
매수조건
1.볼밴 상단 터치하거가 돌파이후
2.하락하여 중심선을 터치하거나 돌파이후
3.하단 선에 닫지 않고 중심선 위로 다시오라오는
양봉 발생시 매수진입 매도 청산
매도 조건
1.볼밴 하단 터치하거나 돌파이후
2.상승하여 중심선을 터치하거나 돌파하고나서
3.상단선을 터치하지 않고 중심선 아래로 내려오는
음봉 발생시 매도진입 매수청산
이런 수식을 부탁드립니다
너무 복잡한걸 부탁드려 죄송하고
염치없지만 꼭 좀 부탁드리겠습니다
항상 감사드립니다
2022-08-19
1681
글번호 161604
답변완료
78507 추가 질문 입니다.
78507 추가 질문 드렸습니다. 수고 하세요
2022-08-19
1310
글번호 161603
답변완료
예스코인 재실행시 신호위치 바뀜 문제
안녕하세요,
예스트레이더코인 게시판에 문의글 올렸었는데, 답이 안달려서 여기에도 올려봅니다. 양해 부탁드립니다.
예스트레이더 코인을 이용하여 36개 종목 멀티차트로 1분봉 5000개씩 띄운 차트쉐어를 이용해 코인 매매를 하고 있는데 문제가 있어 문의드립니다.
시스템에 멀티차트로 여러 종목을 봉 5000개를 띄워서 매매를 하면, 시간이 지나 봉이 5천개가 넘어갈때 과거 봉이 지워지고 5천개가 계속 유지되는 것이 아니라 누적으로 6천개 7천개 이렇게 계속 쌓이게 되는데,
시스템을 껐다 키면 누적되어 쌓여있던 봉이 삭제되고 다시 최근 5000봉만 뜨게 되면 기존에 있던 매매 신호가 완전히 바뀌게 됩니다. 그래서 매매가 완전 꼬이게 되구요.
왜 이런 문제가 생기는지 생각해봤는데 이평 계산이 차트 첫봉이라면 최종까지 봉 갯수가 달라지므로 신호가 바뀔수 있을 것 같은데 이동평균 계산방법이 가장 최근 봉 기준인지, 차트 첫봉 기준인지가 궁금합니다.
예를 들어 20이평이라면 차트 첫봉부터 과거 방향으로 20봉 평균인지,
차트에 나타난 첫봉부터 최근 방향으로 20봉 평균인지요.
신호가 바뀌는게 이동평균 계산 방식이 문제 때문이 맞는지, 맞다면 가장 최근 봉부터 과거순으로 이평선을 설정하려면 수식을 어떻게 바꿔야하는지, 이게 문제가 아니라면 왜 이런일이 발생하는지 문의드립니다.
매번 며칠 돌리다가 튕겨서 재실행 했을 때 신호가 완전히 바뀌어 버려서 제대로 된 매매를 할 수가 없습니다.
건수를 5000바로 설정하면 5천바를 넘어갈 때 차트 첫 봉을 하나씩 지워지게 해서 봉 갯수를 항상 5천바로 유지하게 할 수는 없는건가요?
예스 트레이더는 장 종료가 정해져있어 이런일이 없을 것 같은데, 코인은 24시간 켜놓게 되니 봉이 누적으로 계속 쌓여서 이런일이 발생하는 것 같습니다. 검토 부탁드립니다.
2022-08-19
1217
글번호 161602
답변완료
수식부탁드립니다.
Envelope (엔벨로프) 선 기울기에 따라서 선 색이 변하는 수식 부탁드니다.
그리고 Period(40) 에 Percent(1) (2) (3) (4) (5) 이렇게 한꺼번에 다 표시 되면 좋겠습니다.
Input : Period(40), Percent(2);
var : center(0),UPline(0),DNline(0);
center = ma(C, Period);
UPline = EnvelopeUp(Period, Percent);
Dnline = EnvelopeDown(Period, Percent);
Plot1(center, "중앙선");
Plot2(UPline, "EnvelopeUp");
Plot3(Dnline, "EnvelopeDown");
와 아래 수식을 합친 것입니다.
input : P(40);
var : mav(0),T(0);
mav = ma(C,40);
if mav > mav[1] Then
T = 1;
if mav < mav[1] Then
T = -1;
Plot1(mav,"이평",iff(T==1,RED,BLUE));
2022-08-19
1166
글번호 161600
답변완료
수식 부탁드립니다.
##1. 전환비율에의한 분홍점선과 하늘색점선의 중심값을 삭제하고 싶어요(주황색선)
주황색선 수식은 가능하면 삭제하지 말고 녹색으로 표시해서 비활성화 해 주세요
##2. 현재 수식에서 손절 나올 경우에는,
이평선과 상관없이 바로 스위칭되게 수정했으면 좋겠습니다.
만약에, 매수진입상태에서 (매도)손절이 나와서 바로 스위칭하게 되면,
이후 정상 매도진입신호가 추가되면 1계약 매매기 때문에 추가 매도진입은
안 되게 해 주세요
Input:전환비율(5);
input : StartTime(070300),EndTime(055500),P(60);
Input :익절(65),손절(50),당일수익(150),당일손실(100);
Var : N1(0),dayPl(0),Tcond(false),Xcond(false);
Var : j(0),jj(0),HH(0),LL(0),hiBar(0),loBar(0),최종꼭지점(""),처리구분("");
var : TL1(0),Text1(0),ADXV1(0),tl2(0),tl3(0),tx2(0),tx3(0),t(0),Emav(0);
var : TL4(0),TX4(0),TL5(0),TX5(0);
Array:고[10,4](0),저[10,4](0);
HH = H;
LL = L;
Emav = Ema(L,P);
If Index == 0 Then
{
고[1,1] = HH;
고[1,2] = 0;
고[1,3] = sDate;
고[1,4] = sTime;
저[1,1] = LL;
저[1,2] = 0;
저[1,3] = sDate;
저[1,4] = sTime;
}
If Index > 0 Then
{
hiBar = hiBar + 1;
loBar = loBar + 1;
}
If HH[hiBar] < HH Then hiBar = 0;
If LL[loBar] > LL Then loBar = 0;
Condition1 = 저[1,1] * (1 + (전환비율/100)) < HH and hiBar == 0;
Condition2 = 고[1,1] * (1 - (전환비율/100)) > LL and loBar == 0;
처리구분 = "";
If Condition1 and Condition2 Then // 고점과 저점 조건 동시 만족
{
If 최종꼭지점 == "저점" Then
{
If 저[1,1] > LL Then 처리구분 = "저점처리";
Else 처리구분 = "고점처리";
}
Else If 최종꼭지점 == "고점" Then
{
If 고[1,1] < HH Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
T = 1;
If 최종꼭지점 == "저점" Then
{
TL_SetEnd(TL2,저[1,3],저[1,4],value2);
Text_SetLocation(TX2,저[1,3],저[1,4],Value2 );
TL_SetEnd(TL4,저[1,3],저[1,4],value3);
Text_SetLocation(TX4,저[1,3],저[1,4],Value3 );
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH[hiBar];
고[1,2] = Index - hiBar;
고[1,3] = sDate[hiBar];
고[1,4] = sTime[hiBar];
hiBar = -1;
loBar = -1;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetSize(TL1,1);
TL_SetColor(TL1,RED);
value1 = 저[1,1]*(1+(전환비율/100));
value2 = 고[1,1]*(1-(전환비율/100));
value3 = (value1+Value2)/2;
TL2 = TL_New(고[1,3],고[1,4],value2 ,NextBarSdate,NextBarStime,value2);
TL_SetColor(TL2,Cyan);
TL_SetStyle(TL2,3);
Tx2 = Text_New(NextBarSdate,NextBarStime,value2,NumToStr(value2,2));
Text_SetColor(Tx2,Cyan);
TL4 = TL_New(고[1,3],고[1,4],value3 ,NextBarSdate,NextBarStime,value3);
TL_SetColor(TL4,Orange);
TL_SetStyle(TL4,3);
Tx4 = Text_New(NextBarSdate,NextBarStime,value3,NumToStr(value3,2));
Text_SetColor(Tx4,Orange);
}
Else If 고[1,1] < HH[hiBar] Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = HH[hiBar];
고[1,2] = Index - hiBar;
고[1,3] = sDate[hiBar];
고[1,4] = sTime[hiBar];
hiBar = -1;
loBar = -1;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
value2 = 고[1,1]*(1-(전환비율/100));
value3 = (value1+Value2)/2;
TL_SetBegin(TL2,고[1,3],고[1,4],value2);
Text_SetString(TX2,NumToStr(value2,2));
TL_SetBegin(TL4,고[1,3],고[1,4],value3);
Text_SetString(TX4,NumToStr(value3,2));
}
최종꼭지점 = "고점";
}
If 처리구분 == "저점처리" Then
{
t = -1;
If 최종꼭지점 == "고점" Then
{
TL_SetEnd(TL3,고[1,3],고[1,4],value5 );
Text_SetLocation(TX3,고[1,3],고[1,4],value5);
TL_SetEnd(TL5,고[1,3],고[1,4],value6 );
Text_SetLocation(TX5,고[1,3],고[1,4],value6);
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL[loBar];
저[1,2] = Index - loBar;
저[1,3] = sDate[loBar];
저[1,4] = sTime[loBar];
hiBar = -1;
loBar = -1;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetSize(TL1,1);
TL_SetColor(TL1,BLUE);
value4 = 고[1,1]*(1-(전환비율/100));
value5 = 저[1,1]*(1+(전환비율/100));
value6 = (value4+Value5)/2;
TL3 = TL_New(저[1,3],저[1,4],value5,NextBarSdate,NextBarStime,value5 );
TL_SetColor(TL3,Magenta);
TL_SetStyle(TL3,3);
TX3 = Text_New(NextBarSdate,NextBarStime,value5,NumToStr(value5,2));
Text_SetColor(TX3,Magenta);
TL5 = TL_New(저[1,3],저[1,4],value6,NextBarSdate,NextBarStime,value6 );
TL_SetColor(TL5,Orange);
TL_SetStyle(TL5,3);
TX5 = Text_New(NextBarSdate,NextBarStime,value5,NumToStr(value5,2));
Text_SetColor(TX5,Orange);
}
Else If 저[1,1] > LL[loBar] Then
{
저[1,1] = LL[loBar];
저[1,2] = Index - loBar;
저[1,3] = sDate[loBar];
저[1,4] = sTime[loBar];
hiBar = -1;
loBar = -1;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
value5 = 저[1,1]*(1+(전환비율/100));
value6 = (value4+Value5)/2;
TL_SetBegin(TL3,저[1,3],저[1,4],value5 );
Text_SetString(TX3,NumToStr(value5,2));
TL_SetBegin(TL5,저[1,3],저[1,4],value6 );
Text_SetString(TX5,NumToStr(value6,2));
}
최종꼭지점 = "저점";
}
TL_SetEnd(TL2,NextBarSdate,NextBarStime,Value2);
Text_SetLocation(TX2,NextBarSdate,NextBarStime,Value2);
TL_SetEnd(TL3,NextBarSdate,NextBarStime,Value5 );
Text_SetLocation(TX3,NextBarSdate,NextBarStime,Value5 );
TL_SetEnd(TL4,NextBarSdate,NextBarStime,Value3);
Text_SetLocation(TX4,NextBarSdate,NextBarStime,Value3);
TL_SetEnd(TL5,NextBarSdate,NextBarStime,Value6);
Text_SetLocation(TX5,NextBarSdate,NextBarStime,Value6);
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
Tcond = true;
Xcond = false;
N1 = NetProfit;
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
}
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] then
{
if daypl >= 당일수익 or daypl <= -당일손실 Then
Xcond = true;
if (IsExitName("dbp",1) == true or IsExitName("dbl",1) == true or
IsExitName("dsp",1) == true or IsExitName("dsl",1) == true) then
Xcond = true;
}
if Tcond == true and Xcond == false then
{
if MarketPosition >= 0 and T == 1 and L > 고[1,1]* (1 - (전환비율/100)) and C < Emav Then
Sell("s",AtStop,고[1,1]* (1 - (전환비율/100)));
if MarketPosition <= 0 and T == -1 and H < 저[1,1]* (1 + (전환비율/100)) and C > Emav Then
Buy("b",AtStop,저[1,1]* (1 + (전환비율/100)));
}
if MarketPosition == 1 then
{
ExitLong("bl",AtStop, max(EntryPrice-손절,고[1,1]* (1 - (전환비율/100))));
ExitLong("dbp",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts));
ExitLong("dbl",AtStop,EntryPrice-((당일손실+daypl)/CurrentContracts));
}
if MarketPosition == -1 then
{
ExitShort("sl",AtStop, min(EntryPrice+손절,저[1,1]* (1 + (전환비율/100))));
ExitShort("dsp",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
ExitShort("dsl",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts));
}
SetStopProfittarget(익절,PointStop);
2022-08-19
1303
글번호 161598