커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4445
글번호 230811
답변완료
안녕하세요?
안녕하세요
아래수식1은 예전에 작성 해주신 수식입니다.
익절을 지정하면 한파동에 여러번 진입을 하는데요
한파동에 한번만 진입되도록 수정 부탁드립니다.
수식2 번도 한파동에 한번만 진입되도록 수정 부탁드립니다.
(죄송합니다. 한건만 질문을 드려야 하는데 직장인 이다 보니 주말에 검증을 하려다보니
두건을 동시에 질문을 드렸습니다.
바쁘시더라도 같이 수정 부탁드립니다.
수고하세요 그리고 감사합니다.)
수식1.
Input: length(10);
Var : j(0),jj(0),T(0);
var : 최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),TL1(0);
Array:HH[10,4](0),LL[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
If Index == 0 Then
{
HH[1,1] = H;
LL[1,1] = L;
}
Condition1 = Highest(H,length) == H and 최종고가 <> H;
Condition2 = Lowest (L,length) == L and 최종저가 <> L;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종꼭지점 == "저점" Then
{
If LL[1,1] > L Then 처리구분 = "저점처리";
Else 처리구분 = "고점처리";
}
Else If 최종꼭지점 == "고점" Then
{
If HH[1,1] < H Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
T = 1;
최종고가 = H; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
HH[j,jj] = HH[j-1,jj];
}
}
HH[1,1] = H;
HH[1,2] = Index;
HH[1,3] = sDate;
HH[1,4] = sTime;
TL1 = TL_New(LL[1,3],LL[1,4],LL[1,1],HH[1,3],HH[1,4],HH[1,1]);
TL_SetSize(TL1,1);
TL_SetColor(TL1,RED);
}
Else If HH[1,1] < H Then // 1번 고점보다 높은 고가 출현
{
HH[1,1] = H;
HH[1,2] = Index;
HH[1,3] = sDate;
HH[1,4] = sTime;
TL_SetEnd(TL1,HH[1,3],HH[1,4],HH[1,1]);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
T = -1;
최종저가 = L;
If 최종꼭지점 == "고점" then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
LL[j,jj] = LL[j-1,jj];
}
}
LL[1,1] = L;
LL[1,2] = Index;
LL[1,3] = sDate;
LL[1,4] = sTime;
TL1 = TL_New(HH[1,3],HH[1,4],HH[1,1],LL[1,3],LL[1,4],LL[1,1]);
TL_SetSize(TL1,1);
TL_SetColor(TL1,BLUE);
}
Else If LL[1,1] > L then
{
LL[1,1] = L;
LL[1,2] = Index;
LL[1,3] = sDate;
LL[1,4] = sTime;
TL_SetEnd(TL1,LL[1,3],LL[1,4],LL[1,1]);
}
최종꼭지점 = "저점";
}
if T == 1 and LL[1,1] > LL[2,1] Then
buy("b",AtStop,HH[2,1]+PriceScale*1);
if T == -1 and HH[1,1] > HH[2,1] Then
sell("s",AtStop,LL[2,1]-PriceScale*1);
if MarketPosition == 1 Then
ExitLong("bx",AtStop,LL[1,1][BarsSinceEntry]);
if MarketPosition == -1 Then
ExitShort("sx",AtStop,HH[1,1][BarsSinceEntry]);
수식2
(사용자함수: HiLoLineZigZag)
#==========================================#
# 사용자함수 : 고저라인 지그재그 파동
# 버 전 : 1.2
# 작 성 자 : 수식지왕
#==========================================#
Input:Length(NumericSimple),useCLprice(NumericSimple),
oHiZZ[MaxSize1,MaxSize2](NumericArrayRef), // 열번호 1:가격,2:Index,3:sDate,4:sTime
oLoZZ[MaxSize3,MaxSize4](NumericArrayRef),
oTL_NewBit(NumericRef); // 1:NewLine 2:SetEndLine
Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분("");
#==========================================#
HH = IFF(useCLprice==1,C,H);
LL = IFF(useCLprice==1,C,L);
If Index == 0 Then {
oHiZZ[1,1] = HH;
oLoZZ[1,1] = LL;
}
Condition1 = Highest(HH,length) == HH and 최종고가 <> HH;
Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL;
처리구분 = "";
If Condition1 and Condition2 Then { // 기간고점과 기간저점 동시 발생
If oHiZZ[1,1] < HH and oLoZZ[1,1] > LL Then { // 기존의 파동을 벗어난 경우
If HH - oHiZZ[1,1] > oLoZZ[1,1] - LL Then // 많이 벗어난 쪽으로 처리
처리구분 = "고점처리";
Else If HH - oHiZZ[1,1] < oLoZZ[1,1] - LL Then
처리구분 = "저점처리";
Else If 최종꼭지점 == "저점" Then // 벗어난 정도가 동일하면 지그재그 순서대로
처리구분 = "고점처리";
Else
처리구분 = "저점처리";
} Else If oLoZZ[1,1] > LL Then 처리구분 = "저점처리";
Else If oHiZZ[1,1] < HH Then 처리구분 = "고점처리";
Else If 최종꼭지점 == "저점" Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
} Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
oTL_NewBit = 0;
#==========================================#
If 처리구분 == "고점처리" Then {
최종고가 = HH; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then {
For j = 10 DownTo 2 {
For jj = 1 To 4 {
oHiZZ[j,jj] = oHiZZ[j-1,jj];
}
}
oHiZZ[1,1] = HH;
oHiZZ[1,2] = Index;
oHiZZ[1,3] = sDate;
oHiZZ[1,4] = sTime;
oTL_NewBit = 1;
} Else If oHiZZ[1,1] < HH Then { // 1번 고점보다 높은 고가 출현
oHiZZ[1,1] = HH;
oHiZZ[1,2] = Index;
oHiZZ[1,3] = sDate;
oHiZZ[1,4] = sTime;
oTL_NewBit = 2;
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then {
최종저가 = LL;
If 최종꼭지점 == "고점" then {
For j = 10 DownTo 2 {
For jj = 1 To 4 {
oLoZZ[j,jj] = oLoZZ[j-1,jj];
}
}
oLoZZ[1,1] = LL;
oLoZZ[1,2] = Index;
oLoZZ[1,3] = sDate;
oLoZZ[1,4] = sTime;
oTL_NewBit = 1;
} Else If oLoZZ[1,1] > LL then {
oLoZZ[1,1] = LL;
oLoZZ[1,2] = Index;
oLoZZ[1,3] = sDate;
oLoZZ[1,4] = sTime;
oTL_NewBit = 2;
}
최종꼭지점 = "저점";
}
If 최종꼭지점 == "고점" Then HiLoLineZigZag = 1;
Else If 최종꼭지점 == "저점" Then HiLoLineZigZag = -1;
Else HiLoLineZigZag = 0;
(시스템 수식)
Input:length(10);
Var:종가사용여부(0),
TL_NewBit(0);
Array:고[10,4](0),저[10,4](0);
Value1 = HiLoLineZigZag(length,종가사용여부,고,저,TL_NewBit);
If Value1 == 1 Then // 고점
Buy("B",AtStop,고[2,1]);
Else If Value1 == -1 Then // 저점
Sell("S",AtStop,저[2,1]);
2018-10-19
260
글번호 122824
답변완료
문의드립니다.
항상 친절하고 빠른 답변 고맙습니다.
문의드릴 내용은 아래와 같은 매매식에서 매수.매도 신호 발생될 경우 매수.매도신호 발생후 1개봉 뒤에 매수.매도가 실행되도록 하고싶습니다.
if crossup(5ma, 20ma) then
buy();
if crossdown(5ma, 20ma) then
sell();
수고하세요
2018-10-19
196
글번호 122821
답변완료
수식 문의 드립니다.
타주기,즉 5분 차트에서 60분 지표가 나타 내도록
data2가 아닌 수식으로 문의 드립니다.
Input:P4(4);
VAR:VARQ1(0);
VARQ1=ATR(P4);
plot1(varq1);
2018-10-19
214
글번호 122820
wscamtk 님에 의해서 삭제되었습니다.
2018-10-19
2
글번호 122819
답변완료
예스트레이더 활용술보고 문의 드립니다
abc추세선 수식인데 검증이 안되네용 ㅠㅠ 알려주세요 사용자 함수 이런거 만들어야되나요?
사용자 함수를 만들어야되면 어떻게 해야 될까요?
한글로 된 명령어 등록을 해야될꺼 같은데...
또 밑에 input에 p(50)은 무엇을 나타내는건가요?
input:p(50)
var:이평5(0), 이평20(0), 이평60(0),단계(0),
이평5아래시작 (0), 이평5상향돌파 (0), 이평5하향돌파 (0),
이평20아래시작 (0), 이평20상향돌파 (0), 이평20하향돌파 (0),
이평60아래시작 (0), 이평60상향돌파 (0), 이평60하향돌파 (0),
시작 (0), 시작bar (0),
a고점 (0), a고점bar(0), a기울기 (0), a추세선(0),
b고점 (0), b고점bar(0), b기울기 (0), b추세선(0),
c고점 (0), c고점bar(0), c기울기 (0), c추세선(0);
#--------------------------------------------------------#
#Index()와 마찬가지로 1봉이 바뀔 때마다 1씩 증가
#--------------------------------------------------------#
시작bar = 시작bar + 1; //필요 지점의 좌표값을 1씩 계속증가
a고bar = a고bar + 1:
b고bar = b고bar + 1:
c고bar = c고bar + 1:
이평5 = ma(c,5);
이평20 = ma(c,20);
이평60 = ma(c,60);
#--------------------------------------------------------#
#시작점 계산
#--------------------------------------------------------#
if h >= highest (h,p) - 0.01*(highest(h,p)-lowest(l.p)) then {
시작 = h;
시작bar = 0;
단계 = 0;
a기울기 = 0;
a추세선 = 0;
b기울기 = 0;
b추세선 = 0;
c기울기 = 0;
c추세선 = 0;
}
#--------------------------------------------------------#
# a추세선 계산
#--------------------------------------------------------#
if 시작 != 0 and 단계 == 0 and 이평5 > c Then
단계 = 이평5아래시작;
if 단계 == 이평5아래시작 and 이평5 < c then{
단계 = 이평5상향돌파;
a고점 = h;
a고bar = 0;
}
if 단계 == 이평5상향돌파 then {
if a고점 <= h then{
a고점 = h;
a고bar = 0;
}
if 이평5 > c then {
단계 = 이평5하향돌파;
a기울기 = (a고점-시작)/(시작bar-a고bar); // 기울기 = 높이/밑변
}
}
if a기울기 != 0 Then
a추세선 = a기울기 * 시작bar + 시작; // 기울기 * 거리 + 절편
#--------------------------------------------------------#
# b추세선 계산
#--------------------------------------------------------#
if 단계 == 이평5하향돌파 and 이평20 < c then{
단계 = 이평20아래시작;
if 단계 == 이평20아래시작 and 이평20 < c and a추세선 < c then{
단계 = 이평20상향돌파;
b고점 = h;
b고bar = 0;
}
if 단계 == 이평20상향돌파 then {
if b고점 <= h then{
b고점 = h;
b고bar = 0;
}
if 이평20 > c then {
단계 = 이평20하향돌파;
b기울기 = (b고점-시작)/(시작bar-b고bar); // 기울기 = 높이/밑변
}
}
if b기울기 != 0 Then
b추세선 = b기울기 * 시작bar + 시작; // 기울기 * 거리 + 절편
#--------------------------------------------------------#
# c추세선 계산
#--------------------------------------------------------#
if 단계 == 이평20하향돌파 and 이평60 < c then{
단계 = 이평60아래시작;
if 단계 == 이평60아래시작 and 이평60 < c and b추세선 < c then{
단계 = 이평60상향돌파;
c고점 = h;
c고bar = 0;
}
if 단계 == 이평60상향돌파 then {
if c고점 <= h then{
c고점 = h;
c고bar = 0;
}
if 이평60 > c then {
단계 = 이평60하향돌파;
c기울기 = (c고점-시작)/(시작bar-c고bar); // 기울기 = 높이/밑변
}
}
if c기울기 != 0 Then
c추세선 = c기울기 * 시작bar + 시작; // 기울기 * 거리 + 절편
#--------------------------------------------------------#
# 지표식
#--------------------------------------------------------#
plot1(이평5);
plot2(이평20);
plot3(이평60);
if a추세선 != 0 then plot4(a추세선,"a추세선",blue);
if b추세선 != 0 then plot4(b추세선,"b추세선",RED);
if c추세선 != 0 then plot4(c추세선,"c추세선",lgreen);
2018-10-19
197
글번호 122818
답변완료
봉의 그래프에서
수고하십니다
첨부화일에서 각 봉의 중간값에 대하여 그래프를 그려보고자합니다
한데 계산값을 보면은 중간값인데 그래프가 그려진곳은 값과 다르게 보이는데,,
왜그런지 모르겠습니다
좌측 3번째봉에서 중간값((시가-종가)/2+시가)이 322,250으로 계산되어 나오는데
그래프의 위치는 317,000 정도에 표시되어 있거든요???
봉 2번,3번,4번,5번,7번등이 중간에 표시되어있지 않은듯,,,
질문2
시뮬레이션챠트에서 종목추가하여 기본 그래프 아래에 나타나는 그래프에 이평을 표시할려면 어떻게 하여야하는지요???
질문3
프로그램 작성시에 첫번째 줄에 변수정의하고 초기값 지정하는데,,
각 봉마다 프로그램이 진행되고 다음봉은 다시 시작하는데
이때 이전에 변수에 지정했던 값이 초기화가 안되는거 같은데,,
맞나요???
다음봉 시작시 첫번째 줄부터 프로그램이 시작한다면 변수 정의 및 초기화 선언한 열도
지나가게되고 그럼 초기화가 되는거 아난가했는데,,,
이 프로그램은 다른 일반 컴파일러에서 일어나는 일과는 약간 다른 부분이 있어서
처음엔 엄청 햇갈리고 결과가 이상하게 나와서 어렵군요...
감사합니다.
2018-10-19
181
글번호 122817
답변완료
지표식 문의
안녕하세요
dipuls와 diminus의 풀어쓴 식을 필요로 합니다.
풀어쓴 식과 더불어 예를 들어 a라는 지표값을 대입할 수 있기 쉽도록 해주시면 더욱 좋구요..
2018-10-18
139
글번호 122816
답변완료
수식 요청 드립니다 .
안녕하세요 !
문의드릴 수식은 전일 고저/2 를 수평선으로 표시하는것인데,
전일봉이 양봉으로 끝났으면 빨간색, 반대면 파란색으로 표시되었으면 좋겠습니다!
감사합니다 !
2018-10-18
186
글번호 122815
답변완료
이평공부중에 궁궁즘.
수고하세요
이평을 공부중에 궁금한게 있어서 문의합니다
첨부화일을 보시면
빨강색 그래프는 챠트에서 원래 보여주는 5일 이평선입니다
그리고 나머지 2개는 좌측 시스템 편집기에서 작성하여 그린 그래프이고요,
한데 전부 5일 이평을 그린건데 각자 다르게 그려지고있네요,,
이평이 단순/가중/지수이평등이 있다고 들었는데,,,
그런 차이때문인건지요, 아님 다른 차이인가요???
2018-10-18
187
글번호 122814