커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4484
글번호 230811
답변완료
부탁드립니다
A봉, B봉, C봉이 순서대로 있을때
[ 조건 1번 ]
B봉의 몸통이 A봉과 C봉 몸통 보다 위에 있고, A봉과 C봉 윗꼬리 고점 보다 아래에 있음
B봉의 윗꼬리 고점이 A봉과 C봉 윗꼬리 고점 보다 높음
B봉의 아래꼬리 저점이 A봉과 C봉 몸통 안에 있음
위 조건을 만족하는 과거의 C봉을 찾아서 봉 위에 ★표시
장중에 실시간으로 C봉이 위의 조건이 만족될때 봉위에 ★표시
장중에 실시간으로 만족하여 ★표시 되었다가, 종가 전에 조건이 없어지면 ★표시도 없어짐
[ 조건 2번 ]
B봉의 몸통이 A봉과 C봉 몸통 보다 아래 있고, A봉과 C봉 아래꼬리 저점 보다 위에 있음
B봉의 아래꼬리 저점이 A봉과 C봉 아래꼬리 저점 보다 낮음
B봉의 윗꼬리 고점이 A봉과 C봉 몸통 안에 있음
위 조건을 만족하는 과거의 C봉을 찾아서 봉 아래에 ★표시
장중에 실시간으로 C봉이 위의 조건이 만족될때 봉 아래에 ★표시
장중에 실시간으로 만족하여 ★표시 되었다가, 종가 전에 조건이 없어지면 ★표시도 없어짐
부탁드립니다
2016-11-14
138
글번호 103940
답변완료
수식문의
30 60 90 이평선의 이격도가 가장좁아질때에 (이평선이 모여질때) 검색식이 가능한가요 그
리고 3개의 이평의 이격도가 99.9이상인 시점에 거래량 동반한 양봉매수진입 이격이 모두 99.9이하인 시점에 거래량 동반한 음봉매도진입 시스템식 부탁합니다
2016-11-14
135
글번호 103939
답변완료
문의드립니다
Input : Period(14), LPercent(30), SPercent(70);
Var : value(0);
value = RSI(Period);
# 매수/매도청산
If CrossUP(value, LPercent) Then
{
Buy();
}
# 매도/매수청산
If CrossDown(value, SPercent) Then
{
Sell();
}
위 수식은 RSI 시스템 매매 수식입니다
위 수식을 이용하여 아래 같이 시스템매매를 만들고자 합니다
매수진입
이평선(100일선) 상승일 때만 RSI가 CrossUP 매수진입
매수 청산
RSI가 CrossDown 매수 청산
매도진입
이평선(100일선) 하락일 때만 RSI가 CrossDown 매도진입
매도청산
RSI가 CrossUP 매수 청산
부탁합니다
2016-11-13
113
글번호 103938
답변완료
문의드립니다
input : Period(14);
var1 = AccumN(iff(C-C[1]>0,C-C[1],0),Period)/AccumN(iff(C-C[1]>0,C-C[1],C[1]-C),Period)*100;
if var1 >= 70 Then
value1 = H;
if var1 <= 30 Then
value2 = L;
plot1(value1);
plot2(value2);
위 지표 수식에 대하여 주석을 달아주시기 바랍니다 감사합니다
2016-11-13
102
글번호 103937
답변완료
질문입니다.
선물분봉에서 거래를 하고자합니다.
먼저 다음과 같은 지표를 작성하였습니다.
Input : P1(10), P2(20);
Var1 = Ma(C, P1);
Var2 = Ma(C, P2);
Variable : maTestc1(0);
If C == Var1 Then
maTestc1 = 0;
If C > Var1 Then
maTestc1 = 1;
If C < Var1 Then
maTestc1 = -1;
Variable : maTestc2(0);
If C == Var2 Then
maTestc2 = 0;
If C > Var2 Then
maTestc2 = 1;
If C < Var2 Then
maTestc2 = -1;
Variable : maTest12(0);
If Var1 == Var2 Then
maTest12 = 0;
If Var1 > Var2 Then
maTest12 = 1;
If Var1 < Var2 Then
maTest12 = -1;
Variable : maTestTotal(0);
maTestTotal = maTestc1 + maTestc2 + maTest12;
Plot1(maTestTotal, "y3maTest", BLACK);
Plot2(0, "0", BLACK);
Plot3(1.5, "1.5", RED);
Plot4(3, "3", RED);
Plot5(-1.5, "-1.5", BLUE);
Plot6(-3, "-3", BLUE);
위 지표를 토대로 시스템을 작성하고자 합니다.
maTestTotal값은 -3부터 +3까지 움직입니다.
전략은 maTestTotal값이 -3, -1.5, 0, +1.5, +3값을 통과할때 발생하게 하고 싶습니다.
예를들어
현재 포지션이 매도포지션이고,
maTestTotal값이 현재 -3 이상이고 -1.5 미만에 존재할때,
-1.5를 상향돌파하면 매수입니다.
(전봉에서 maTestTotal값이 -1.5미만이거나 -1.5이고, 현재봉에서 -1.5 초과이면)
-1.5를 상향돌파한 후 다시 maTestTotal값이 -3에 도달한다면 매도로 진입합니다.
(maTestTotal값의 최소값은 -3입니다. 그러므로 -3에도달하면 매도진입)
maTestTotal값이 계속상승하여 0선 넘어간다면,
이때 매도진입은 -1.5선을 하향돌파할때로 바뀌게 됩니다.
maTestTotal값이 계속상승하여 +1.5를 넘어간다면,
매도진입은 0을 하향돌파할 때로 바뀌게 됩니다.
마찬가지로 maTestTotal값이 계속상승하여 최대값인 +3에 도달한다면,
(maTestTotal값이 한번이라도 +3을 터치한 이후)
매도진입은 +1.5를 하향돌파할 때로 바뀌게 됩니다.
매도진입도 마찬가지입니다.
현재 포지션이 매수이고,
maTestTotal값이 +3이하 +1.5초과상태에서 +1.5를 하향돌파하면
(전봉에서 maTestTotal값이 +1.5 초과이가나 +1.5이고, 현재봉에서 +1.5 미만이라면)
매도로 진입합니다.
이때 재매수는 maTestTotal값이 +3이 될때 발생합니다.
(maTestTotal값의 최대값은 +3이기 때문)
maTestTotal값이 하락하여 0 미만이된다면
재매수 진입은 maTestTotal값이 +1.5를 상향돌파할 때 일어납니다.
(전봉에서 maTestTotal값이 +1.5 미만이거나 +1.5이고, 현재봉에서 +1.5 초과라면)
maTestTotal값이 계속 하락하여 -1.5미만이된다면
재매수 진입은 maTestTotal값이 0을 상향돌파할 때 일어납니다.
(전봉에서 maTestTotal값이 0 미만이거나 0이고, 현재봉에서 0 초과라면)
maTestTotal값이 더 하락하여 -3 즉, 최소값에 도달을 하게 된다면,
(maTestTotal값이 한번이라도 -3을 터치한 이후)
이때 재매수 진입은 maTestTotal값이 -1.5를 상향돌파할 때 일어납니다.
(전봉에서 maTestTotal값이 -1.5 미만이거나 -1.5이고, 현재봉에서 -1.5 초과라면)
이와같은 매수와 매도조건이 maTestTotal값의 위치에따라 바뀌는 시스템을 만들고 싶습니다.
부탁은 저 지표를 사용해서 시스템을 만들고 싶습니다.
(지표를 바로이용하여도 좋고, 위 지표를 함수화하여 사용하여도 좋습니다.)
예시로 부탁드리겠습니다.
감사합니다.
2016-11-13
110
글번호 103936
답변완료
질문드립니다.
우선 1호가가 매수주문시 매수1호가로 주문하고, 매도시 매도1호가로 주문
상대 1호가가 매수주문시 매도1호가로 주문하고, 매도시 매수1호가로 주문
이렇다는 것을 알고 있는데..
호가공백이 있다면..
만약
잔량 가격 잔량
50 250.20
30 250.15 매도시 우선1호가, 매수시 상대1호가 ??
0 250.10 0
250.05 20 매수시 우선1호가, 매도시 상대1호가 ??
250.00 10
만약 호가판이 이렇다고 한다면..
여기서 우선1호가는 매수시는 250.05이고, 매도시는 250.15
상대1호가는 매수시는 250.15이고, 매도시는 250.05 인가요?
즉, 매수매도 호가잔량이 존재하는 경우만 카운팅을 하는 건지 궁금합니다.
호가가 빈 경우는 우선이나 상대 매수매도 호가에서 빠지는 것인지요?
기본적인 질문이긴 하지만, 잘 이해가 가지 않아서 질문드립니다.
혹시 질문이 이해가 되지 않으시면, 이해 안되시는 부분 다시 한번 말씀해주세요.
2016-11-13
103
글번호 103935
답변완료
질문입니다.
시스템에서 band%b에서 기준선인 상승중일 때 90을 돌파 후 하강 90을 돌파할 때 매도 신호와
하강에서 10을 돌파 후 10을 상승 할 때 매수 신호를 낼 수 있는 서식이 있을까요?
2016-11-13
114
글번호 103934
답변완료
수식질문
Input:length(12);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),TL2(0),TL3(0),Text1(0),처리구분(""),
TL_Val1(0),TL_Val2(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
{
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);
Text_Delete(Text1);
If 고점[3,1][1] < 고점[2,1][1] and 고점[2,1][1] > 고점[1,1][1] and 저점[2,1][1] < 저점[1,1][1] Then
TL_Delete(TL2);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],sDate[eBar],sTime[eBar],고점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1],NumToStr(abs(고점[1,1]-저점[1,1])/PriceScale,0)+NewLine+NumToStr(고점[1,1],2));
Text_SetStyle(Text1, 2, 1);
If 고점[3,1] < 고점[2,1] and 고점[2,1] > 고점[1,1] and 저점[2,1] < 저점[1,1] Then
{
sBar = Index - 저점[2,2];
eBar = Index - 저점[1,2];
TL2 = TL_New(sDate[sBar],sTime[sBar],저점[2,1],sDate[eBar],sTime[eBar],저점[1,1]);
TL_SetColor(TL2,BLUE);
}
}
}
If 처리구분 == "저점처리" Then
{
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);
Text_Delete(Text1);
If 저점[2,1][1] < 저점[1,1][1] and 저점[2,1][1] < 저점[3,1][1] and 고점[2,1][1] > 고점[1,1][1] Then
TL_Delete(TL3);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],sDate[eBar],sTime[eBar],저점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],NumToStr(abs(고점[1,1]-저점[1,1])/PriceScale,0)+NewLine+NumToStr(저점[1,1],2));
Text_SetStyle(Text1, 2, 0);
If 저점[2,1] < 저점[1,1] and 저점[2,1] < 저점[3,1] and 고점[2,1] > 고점[1,1] Then
{
sBar = Index - 고점[2,2];
eBar = Index - 고점[1,2];
TL3 = TL_New(sDate[sBar],sTime[sBar],고점[2,1],sDate[eBar],sTime[eBar],고점[1,1]);
TL_SetColor(TL3,RED);
}
}
}
TL_SetSize(TL1,3);
TL_SetColor(TL1,CYAN);
TL_SetSize(TL2,2);
TL_SetSize(TL3,2);
TL_Val1 = 0; TL_Val2 = 0;
If 고점[2,1] > 고점[1,1] and 고점[2,1] > 고점[3,1] Then
{
If 고점[1,2] < 저점[1,2] and 저점[3,1] < 저점[2,1] Then
TL_Val1 = (저점[2,1]-저점[3,1])/(저점[2,2]-저점[3,2]) * (Index-저점[3,2])+저점[3,1];
If 저점[1,2] < 고점[1,2] and 저점[2,1] < 저점[1,1] Then
TL_Val1 = (저점[1,1]-저점[2,1])/(저점[1,2]-저점[2,2]) * (Index-저점[2,2])+저점[2,1];
}
If 저점[2,1] < 저점[1,1] and 저점[2,1] < 저점[3,1] Then
{
If 저점[1,2] < 고점[1,2] and 고점[3,1] > 고점[2,1] Then
TL_Val2 = (고점[2,1]-고점[3,1])/(고점[2,2]-고점[3,2]) * (Index-고점[3,2])+고점[3,1];
If 고점[1,2] < 저점[1,2] and 고점[2,1] > 고점[1,1] Then
TL_Val2 = (고점[1,1]-고점[2,1])/(고점[1,2]-고점[2,2]) * (Index-고점[2,2])+고점[2,1];
}
If TL_Val1 > 0 Then Plot1(TL_Val1,"추세선1",BLUE); //점그래프
If TL_Val2 > 0 Then Plot2(TL_Val2,"추세선2",RED); //점그래프
------------------------------
이것은 틱변폭 수식을 이렇게 주셔서 적용하였을 경우
사진처럼 적용되어 나온겁니다. 제가 궁금한것은 중간에 추세선으로 되어 형광색으로 저점과 고점을 연결해 주는 색상이 저점으로 내려갈 땐 파랑색으로 표시되고 저점에서 고점으로 올라 갈땐 빨간색으로 표시할 수 있는지.. 그리고 변폭이 저점에서 고점으로 한번에 가는데 혹시
중간에 변폭을 좀더 작은 마디로 끊을 수 있는지 확인부탁드립니다.
그리고 변폭이 바뀌는 부분에서 매도신호 매수신호를 넣을수 있는지도 부탁드립니다.
그리고 매수 매도신호 발생시 소리도 같이 넣을 수 있는지 확인부탁드립니다.
2016-11-12
186
글번호 103933
답변완료
highest, lowest 문의
수고많으십니다. 아직 초보라서~
highest 와 lowest 를 이용하여 고점과 저점 채널을 첨부와 같이 만들었습니다
input : p(20);
var1 = (highest(c,p));
var2 = (lowest(c,p));
var3 = (highest(c,p))-(lowest(c,p));
if var1 > var1[1] Then
value1 = 1;
if var1 < var1[1] Then
value1 = -1;
if value1 == 1 Then
plot1(Var1,"고점",white);
Else
plot1(Var1,"고점",black);
~~~ 이런식으로 지표는 만들었는데
이 지표를 시스템식으로 만들려고 하는데요?
if C < var1[1] and c < var[2] and c < var[3] then
sell();
if C > var2[1] and c > var[2] and c > var[3]then
buy();
종가가 앞선 고점이나 저점보다 크다작다. 결과는 매수 매도 신호가 발생이 않되네요.
제가 원하는 시스템은 아래와 같이
if crossup(c, var1) Then
var11=index;
if index >= var11+10 and crossdown(c, var1) Then
sell("매도");
위의 수식은 채널 상단 터치후 10개봉동안 신고점이 발생되지 않고 종가가 고점을 다운시 매도 하는 수식으로 알고 있은데 시스템에서 수량(10개봉 또는 그보다 많은 봉)을 수정해도 시스템에 반영이 않되네요^^
첨부된 그림과 같이 로직을 짜고 싶습니다.(고점 매도/저점 매수)
1. 상단채널 터치후 일정봉(n) 동안 고점(상한채널)을 형성하지 못 할 경우 매도
2. 상단채널 터치후 일정봉(n) 상단채널을 새로이 형성시 그 상단을 var1에 저장
3. var1보다 큰 상단채널 형성시 var2에 저장 ....var(n)
4. var(n)이 낮아 질 경우 매도하는 시스템 입니다.(즉 var(n) < var2 < var1)
요점은 새로이 형성된 고점과 저점(채널상/하단)을 기억해서 앞선 고점(채널상단)
보다 낮아질 경우 매도 앞선 저점(하단채널)보다 높아질 경우 매수하는 시스템 입니다.
감사합니다.
2016-11-14
215
글번호 103932