커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3685
글번호 230811
답변완료
수식 의뢰 부탁드립니다.
개발자님의 노고에 감사드립니다
분봉 차트에서 트레이딩을 하고 있습니다
매수조건
당일 저가 + ( 전영업일 고가 - 저가 ) 터치 시 매수하려고 합니다
감사합니다
2020-07-27
1722
글번호 140996
답변완료
부탁드립니다.
도움에 감사 드립니다.
변환부탁 드립니다.
2020-07-27
1774
글번호 140995
답변완료
참조 데이터(data2)관련 문제 문의
안녕하세요.
항상 도와주셔서 큰 도움이 되고 있습니다.
다름이아니라 참조데이터를 수식에 사용하는데 문제가 있어서 문의드립니다.
1. 코스닥 150 레버리지 ETF (data2) 의 '전일' 시종고저 기준으로 IBS라는 지표를 도출하고,
2. IBS가 0.8 이상일 경우 코스닥 150 인버스를 매수하는 로직을 작성하였으나,
3. data2가 아닌 코스닥 150 인버스(data1) 자체의 봉만을 참조하는 결과가 발생하고 있습니다.
- 그림1에서 IBS로그를 확인한 결과 0.8이상인 것을 확인할 수 있으며,
- 그림2에서 IBS값은 data2가 아닌, data1의 전일 IBS 값임을 확인할 수 있습니다.
(참고로 지표는 data2의 IBS값을 표기하고 있으며 정상적으로 보여주는 것을 알 수 있습니다. 아래 수식 공유드립니다.)
[시스템 수식]
Input : k(0.5);
#IBS지표
Input : highline(0.8),lowline(0.2);
var : IBS(0);
IBS= data2((dayclose(1)-daylow(1))/(dayhigh(1)-daylow(1)));
#1일 1회 매수
input: N(1);
var: cnt(0), count(0);
Count = 0;
for cnt = 0 to 10 {
if EntryDate(cnt) == sdate then
Count = Count + 1;
}
#Range
var: rng(0);
rng = dayhigh(1)-daylow(1);
#매수 조건
if IBS >= 0.8
and C > dayopen +rng*k
and count < N
then {
MessageLog("IBS %.2f", IBS);
buy("매수");
}
#매도 조건
if stime >= 151600
and stime <151800
Then
{
ExitLong("시초매도",AtMarket,DEF,"");
}
[지표 수식]
Input : highline(0.8),lowline(0.2);
var : IBS(0);
IBS=(data2(dayclose(1))-data2(daylow(1)))/(data2(dayhigh(1))-data2(daylow(1)));
Plot1(IBS, "IBS");
PlotBaseLine1(highline, "기준선1");
PlotBaseLine2(lowline, "기준선2");
2020-07-27
1847
글번호 140994
답변완료
종목검색식 부탁드립니다.
오늘 고점이후로 현재봉까지의 모든 wave의 높이(해당 wave의 고가 - 해당 wave의 저가)가
0.5*(어제 고점 - 어제 저점) 보다 크다
부탁드립니다.
그림설명
(1) 높이 > 0.5 *(A) 높이
(2) 높이 > 0.5 *(A) 높이
(3) 높이 > 0.5 *(A) 높이
이런 종목을 찾고 싶습니다.
또는 (1), (2), (3) 중 가장 작은 높이 > 0.5*(A) 높이
를 찾아라..입니다.
감사합니다.
2020-07-27
1853
글번호 140993
답변완료
도움을 부탁드리겠습니다.
안녕하세요..항상 도와주심에 감사드립니다.
이번에 너무 어려운 부탁을 좀 드리게 되었습니다.
첨부한 식은 3개로
1. 사용자 함수 : 고가 저가를 잇는 추세선함수
2. 1번 함수를 불러서 그려주는 지표
3. 타주기 분봉을 1분봉에서 그려주는 지표(고가저가 표시)
이셋을 섞는게 가능할까요..꼭 되었으면 좋겠습니다..
즉
1분봉 차트에서,
3번식 타주기 분봉차트를 가져와 지표로 표시해줄때에
1의 고가저가를 잇는 추세선 함수가 1분봉을 그리는게 아니라
불러온 타주기값의 고가저가를 사용해서 잇는 추세선을 그리게 하고 싶습니다.
며칠동안 이거저거 섞어보긴 했는데...
현재 제 능력으로는 십년걸려도 무리인걸 알았습니다 ㅠㅠ
꼭좀 부탁드립니다..너무 어렵습니다..오래걸리더라도 좀 도와주시면 안될까요 ...기다릴수 있습니다.
#==========================================#
# 사용자함수 : 고저라인 지그재그 파동
# 버 전 : 1.2
# 작 성 자 : 수식지왕
# 블 로 그 : http://yahoosir.blog.me
#==========================================#
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;
////////////////
////// 2. 고저라인 지그재그파동 지표식
////////////////
Input:기간(5),종가사용여부(0);
Var:TL1(0),신규구분(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
Value1 = HiLoLineZigZag(기간, 종가사용여부, 고, 저, 신규구분);
If Value1 == 1 Then { // 고점
If 신규구분 == 1 Then // 신규
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
Else If 신규구분 == 2 Then // 연장
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
} Else If Value1 == -1 Then { // 저점
If 신규구분 == 1 Then // 신규
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
Else If 신규구분 == 2 Then // 연장
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
}
TL_SetSize(TL1,2);
///////////// 3
#==========================================#
#==========================================#
# 지 표 명 : 타주기분봉차트
# 작 성 자 : 수식지왕
# 블 로 그 : http://yahoosir.blog.me
#==========================================#
Input:분봉(5);
Var:HH(0),LL(0),TL1(0),TL2(0),TL3(0),TL4(0);
Value1 = 분봉/BarInterval;
Value2 = DayIndex()%Value1;
If Value2 == 0 Then {
   HH = H;
   LL = L;
}
Else {
   HH = Max(HH,H);
   LL = Min(LL,L);
}
If Value2 == Value1 - 1 or time == iff(CodeCategory()<3,150000,151500) then  {
   TL1 = TL_New(Date[Value2],sTime[Value2],LL,Date[Value2],sTime[Value2],HH);
   TL2 = TL_New(Date[Value2],sTime[Value2],HH,Date,sTime,HH);
   TL3 = TL_New(Date[Value2],sTime[Value2],LL,Date,sTime,LL);
   TL4 = TL_New(Date,sTime,LL,Date,sTime,HH);
}
// TL1만으로는 구분이 잘 안되서 박스형태로 그리기 위해 추세선 4개를 사용했습니다.
2020-07-26
2003
글번호 140992
답변완료
좀목 검색식 부탁 드립니다.
종목을 아래 해당사항에 부합이 되면 추려내서 투자를 하려고 합니다.
1. 5일선, 20일선, 60일선이 정배열이면서
2. 현재가가 30일 이동평균을 뚫고
3. 그날에 거래량이 30일동안 평균의 5배인 종목
을 추려내려고 하고 싶을때 식을 어떻게 만들어야 하는지요? 부탁 드립니다.
만들다가 잘 못해서 올립니다. 감사합니다
2020-07-26
1730
글번호 140991
답변완료
수식 부탁드립니다.
노고에 감사드립니다.
아래의 조건을 수식작성부탁드립니다.
주봉 고가를 일봉에 적용하여 전일 주봉고가를 일봉 당일시가가 2%이내 상승한 종목
검색식 부탁드립니다.
감사합니다.
2020-07-26
1556
글번호 140990
답변완료
시스템 문의 드립니다.
안녕하세요
해외선물 매매 수식을 만들고 있습니다.
오일 종목을 확인하는 중... 일봉의 ADX 지표를 사용하고 있는데
차트에서는 ADX 값이 17 이하로 확인됩니다.
그런데 시스템 수식으로 ADX 값을 적용할때,
수식에서 ADX 값을 예외적용하려 했더니 값이 24 정도로 확인이 됩니다.
이렇게 갭이 차이나는게 설정 문제인지... 원인을 알고 싶습니다.
2020-07-25
1630
글번호 140989
답변완료
국내주식(일봉기준) 자동매매가 되는 수식인지 체크 부탁드릴께요~~
국내 주식입니다. 일봉 차트로 설정하였습니다.
data1: 삼성전자(일봉)
data2: kodex200(일봉)
아래 수식으로 적용하면 최초 매수진입이 장중에 조건에 도달시 매수가 되는 수식인가요?
그리고 추가 매수하는것도 장중에 매수가되는 수식인가요?
청산수식은 봉완성이 되는 조건이라 실제로 장끝난 후 신호가 발생하는 것은 알고 있습니다.
제가 원하는 사항은 장중에 해당 조건에 매수 진입 / 추가 매수 진입 되는 수식을
원하고 있습니다.
체크 부탁드릴께요~~~
input : 기준평균봉값(80);
input : 일차매수금액(100);
input : 이차매수금액(200);
input : 삼차매수금액(300);
input : 사차매수금액(400);
input : 오차매수금액(500);
input : 육차매수금액(500);
input : 최초진입하락폭(0.94);
input : 추가진입하락폭(0.96);
input : MFI기간(15),MFI값(90);
input : 심리도기간(15),심리도값(80);
var : mav(0,data2),MM(0,data1),SS(0,data1);
var : MMM(0,Data2),SSS(0,Data2);
mav = data2(ma(c,기준평균봉값));
MM = data1(mfi(MFI기간));
SS = data1(Simrido(심리도기간));
MMM = Data2(mfi(MFI기간));
SSS = Data2(Simrido(심리도기간));
if MarketPosition == 0 and data2(CrossDown(c,mav*최초진입하락폭)) then
buy("b1",atlimit,C,Floor(일차매수금액*10000/min(NextBarOpen,C)));
if MarketPosition == 1 then
{
if MaxEntries == 1 then # 85
buy("b2",AtLimit,LatestEntryPrice(0)*추가진입하락폭,Floor(이차매수금액*10000/c));
if MaxEntries == 2 then # 80
buy("b3",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.04),Floor(삼차매수금액*10000/c));
if MaxEntries == 3 then # 75
buy("b4",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.07),Floor(사차매수금액*10000/c));
if MaxEntries == 4 then # 70
buy("b5",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.09),Floor(오차매수금액*10000/c));
if MaxEntries == 5 then # 65
buy("b6",AtLimit,LatestEntryPrice(0)*(추가진입하락폭-0.10),Floor(육차매수금액*10000/c));
if MM > MFI값 or SS > 심리도값 or MMM > MFI값 or SSS > 심리도값 Then
exitlong("청산",atlimit,C);
}
2020-07-25
1668
글번호 140988