커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3650
글번호 230811
회원 님에 의해서 삭제되었습니다.
2024-09-13
710
글번호 143181
답변완료
부탁드립니다
아래 as8282님 질문 66689 (작성일 : 2020-03-26 오후 3:01:22)를 돌려보니
"선언되지 않은 이름 'IndiDivergence'가 사용되었씁니다" 라는 에러가 뜨는데
올려주신 ChgRateZigZag.yfu와 같이 Function 파일이 필요한것 같습니다
한번 확인 부탁 드립니다. 감사합니다
> as8282 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 아래식은 지난 선배님의 수식인데...
에러가나서 어떻게 해결할지 못해 문의드립니다.
Input:Rate(3),
kind(1); // 1:일반다이버전스,2:히든다이버전스,3:과장된다이버전스,4:3중다이버전스
Var:j(0),jj(0),iValue(0),
고저구분(0), // 1: 고점, 2: 저점
신규여부(0); // 1: 신규, 2: 연장
Array:HH[10,4](0),LL[10,4](0), // 1:가격, 2:Index, 3:sDate, 4:sTime
IH[10,4](0),IL[10,4](0), // 지표의 고,저점을 관리
TL[10](0),
BeginIndex[4](0);
var : tx1(0),tx2(0);
#==========================================#
iValue = RSI(9); // 지표값은 아래와 같이 다양하게 변경 가능
// iValue = StochasticsK(10,5);
// iValue = StochasticsD(5,3,3);
// iValue = MACD(12,26);
// iValue = MACD_OSC(12,26,9);
// iValue = CCI(9);
// iValue = LRS(C,14);
// iValue = Volume;
Plot1(iValue);
#==========================================#
// 주가 차트에 대한 파동선
고저구분 = ChgRateZigZag(Rate,0,HH,LL,신규여부); // 최소변동률지그재그
If 고저구분 == 1 Then { // 고점
If 신규여부 == 1 Then
{
TL[0] = TL_New(LL[1,3],LL[1,4],LL[1,1],HH[1,3],HH[1,4],HH[1,1]);
}
If 신규여부 == 2 Then // 고점 연장
{
TL_SetEnd(TL[0],HH[1,3],HH[1,4],HH[1,1]);
}
} Else If 고저구분 == -1 Then { // 저점
If 신규여부 == 1 Then
{
TL[0] = TL_New(HH[1,3],HH[1,4],HH[1,1],LL[1,3],LL[1,4],LL[1,1]);
}
If 신규여부 == 2 Then // 저점 연장
{
TL_SetEnd(TL[0],LL[1,3],LL[1,4],LL[1,1]);
}
}
TL_SetSize(TL[0],1);
TL_SetColor(TL[0],PINK);
if 고저구분 == 1 Then
{
if 고저구분[1] != 1 Then
{
tx1 = Text_New(HH[1,3],HH[1,4],HH[1,1],NumToStr(HH[1,1],2));
Text_SetStyle(tx1,2,1);
}
Else
{
Text_SetString(tx1,NumToStr(HH[1,1],2));
Text_SetLocation(tx1,HH[1,3],HH[1,4],HH[1,1]);
}
}
if 고저구분 == -1 Then
{
if 고저구분[1] != -1 Then
{
tx1 = Text_New(LL[1,3],LL[1,4],LL[1,1],NumToStr(LL[1,1],2));
Text_SetStyle(tx1,2,0);
}
Else
{
Text_SetString(tx1,NumToStr(LL[1,1],2));
Text_SetLocation(tx1,LL[1,3],LL[1,4],LL[1,1]);
}
}
#==========================================#
// 보조지표에 대한 파동선
Value1 = IndiDivergence(고저구분,신규여부,iValue,IH,IL); // 주가의 지그재그파동 결과를 입력
// 결과값이 1이면 정상, 0이면 오류
If Value1 == 1 Then {
If 고저구분 == 1 Then { // 고점
If 신규여부 == 1 Then // 주가 파동에 신규 고점 발생
{
TL[1] = TL_New_Self(IL[1,3],IL[1,4],IL[1,1],IH[1,3],IH[1,4],IH[1,1]);
tx2 = Text_New_Self(IH[1,3],IH[1,4],IH[1,1],NumToStr(IH[1,1],2));
Text_SetStyle(tx2,2,1);
}
Else // 주가의 꼭지점이 그대로라도 지표는 변하므로 매봉마다 연장처리
{
TL_SetEnd(TL[1],IH[1,3],IH[1,4],IH[1,1]);
Text_SetString(tx2,NumToStr(IH[1,1],2));
Text_SetLocation(tx2,IH[1,3],IH[1,4],IH[1,1]);
}
} Else If 고저구분 == -1 Then { // 저점
If 신규여부 == 1 Then // 주가 파동에 신규 저점 발생
{ TL[1] = TL_New_Self(IH[1,3],IH[1,4],IH[1,1],IL[1,3],IL[1,4],IL[1,1]);
tx2 = Text_New_Self(IL[1,3],IL[1,4],IL[1,1],NumToStr(IL[1,1],2));
Text_SetStyle(tx2,2,0);
}
Else
{
TL_SetEnd(TL[1],IL[1,3],IL[1,4],IL[1,1]);
Text_SetString(tx2,NumToStr(IL[1,1],2));
Text_SetLocation(tx2,IL[1,3],IL[1,4],IL[1,1]);
}
}
TL_SetSize(TL[1],1);
TL_SetColor(TL[1],BLUE);
}
#==========================================#
// 다이버전스 표시
If (kind == 1 and HH[2,1] < HH[1,1] and IH[2,1] > IH[1,1]) or
// 일반 약세 다이버전스 : 주가 고점 상승, 보조지표 고점 하락
(kind == 2 and HH[2,1] > HH[1,1] and IH[2,1] < IH[1,1]) or
// 히든 약세 다이버전스 : 주가 고점 하락, 보조지표 고점 상승
(kind == 3 and abs(HH[2,1] - HH[1,1]) <= 2 * PriceScale and IH[2,1] > IH[1,1]) Then {
// 과장된 약세 다이버전스 : 주가 고점의 차이가 2틱 이내이고 보조지표 고점 하락
Value2 = (HH[1,1]-HH[2,1])/(HH[1,2]-HH[2,2])*(Index-HH[2,2])+HH[2,1];
Value3 = (IH[1,1]-IH[2,1])/(IH[1,2]-IH[2,2])*(Index-IH[2,2])+IH[2,1];
If BeginIndex[0] == HH[2,2] Then {
// 다이버전스를 나타내는 추세선의 시작점이 변함이 없으면 추세선 끝점만 연장
TL_SetEnd(TL[2],sDate,sTime,Value2);
TL_SetEnd(TL[3],sDate,sTime,Value3);
} Else {
TL[2] = TL_New(HH[2,3],HH[2,4],HH[2,1],sDate,sTime,Value2);
TL[3] = TL_New_Self(IH[2,3],IH[2,4],IH[2,1],sDate,sTime,Value3);
BeginIndex[0] = HH[2,2]; // 추세선 시작점인 2번 고점의 index 값을 저장
}
TL_SetSize(TL[2],3);
TL_SetSize(TL[3],3);
TL_SetColor(TL[2],LGREEN);
TL_SetColor(TL[3],LGREEN);
}
If (kind == 1 and LL[2,1] > LL[1,1] and IL[2,1] < IL[1,1]) or
// 일반 강세 다이버전스 : 주가 저점 하락, 보조지표 저점 상승
(kind == 2 and LL[2,1] < LL[1,1] and IL[2,1] > IL[1,1]) or
// 히든 강세 다이버전스 : 주가 저점 상승, 보조지표 저점 하락
(kind == 3 and abs(LL[2,1] - LL[1,1]) <= 2 * PriceScale and IL[2,1] < IL[1,1]) Then {
// 과장된 강세 다이버전스 : 주가 저점의 차이가 2틱 이내, 보조지표 저점 상승
Value4 = (LL[1,1]-LL[2,1])/(LL[1,2]-LL[2,2])*(Index-LL[2,2])+LL[2,1];
Value5 = (IL[1,1]-IL[2,1])/(IL[1,2]-IL[2,2])*(Index-IL[2,2])+IL[2,1];
If BeginIndex[1] == LL[2,2] Then {
TL_SetEnd(TL[4],sDate,sTime,Value4);
TL_SetEnd(TL[5],sDate,sTime,Value5);
} Else {
TL[4] = TL_New(LL[2,3],LL[2,4],LL[2,1],sDate,sTime,Value4);
TL[5] = TL_New_Self(IL[2,3],IL[2,4],IL[2,1],sDate,sTime,Value5);
BeginIndex[1] = LL[2,2];
}
TL_SetSize(TL[4],3);
TL_SetSize(TL[5],3);
TL_SetColor(TL[4],MAGENTA);
TL_SetColor(TL[5],MAGENTA);
}
If kind == 4 and HH[3,1] < HH[1,1] and // 주가 고점 상승
(HH[1,1]-HH[3,1])/(HH[1,2]-HH[3,2])*(HH[2,2]-HH[3,2])+HH[3,1] > HH[2,1] and
// 2번 고점은 1번과 3번 고점을 잇는 선보다 밑에 위치
IH[3,1] > IH[1,1] and // 보조지표 고점 하락
(IH[1,1]-IH[3,1])/(IH[1,2]-IH[3,2])*(IH[2,2]-IH[3,2])+IH[3,1] > IH[2,1] Then {
// 2번 고점은 1번과 3번 고점을 잇는 선보다 밑에 위치
Value2 = (HH[1,1]-HH[3,1])/(HH[1,2]-HH[3,2])*(Index-HH[3,2])+HH[3,1];
Value3 = (IH[1,1]-IH[3,1])/(IH[1,2]-IH[3,2])*(Index-IH[3,2])+IH[3,1];
If BeginIndex[0] == HH[3,2] Then {
TL_SetEnd(TL[2],sDate,sTime,Value2);
TL_SetEnd(TL[3],sDate,sTime,Value3);
} Else {
TL[2] = TL_New(HH[3,3],HH[3,4],HH[3,1],sDate,sTime,Value2);
TL[3] = TL_New_Self(IH[3,3],IH[3,4],IH[3,1],sDate,sTime,Value3);
BeginIndex[0] = HH[3,2];
}
TL_SetSize(TL[2],3);
TL_SetSize(TL[3],3);
TL_SetColor(TL[2],LGREEN);
TL_SetColor(TL[3],LGREEN);
}
If kind == 4 and LL[3,1] > LL[1,1] and // 주가 저점 하락
(LL[1,1]-LL[3,1])/(LL[1,2]-LL[3,2])*(LL[2,2]-LL[3,2])+LL[3,1] < LL[2,1] and
// 2번 저점이 1번,3번 저점을 잇는 선보다 위에 위치
IL[3,1] < IL[1,1] and // 보조지표 저점 상승
(IL[1,1]-IL[3,1])/(IL[1,2]-IL[3,2])*(IL[2,2]-IL[3,2])+IL[3,1] < IL[2,1] Then {
Value4 = (LL[1,1]-LL[3,1])/(LL[1,2]-LL[3,2])*(Index-LL[3,2])+LL[3,1];
Value5 = (IL[1,1]-IL[3,1])/(IL[1,2]-IL[3,2])*(Index-IL[3,2])+IL[3,1];
If BeginIndex[1] == LL[3,2] Then {
TL_SetEnd(TL[4],sDate,sTime,Value4);
TL_SetEnd(TL[5],sDate,sTime,Value5);
} Else {
TL[4] = TL_New(LL[3,3],LL[3,4],LL[3,1],sDate,sTime,Value4);
TL[5] = TL_New_Self(IL[3,3],IL[3,4],IL[3,1],sDate,sTime,Value5);
BeginIndex[1] = LL[3,2];
}
TL_SetSize(TL[4],3);
TL_SetSize(TL[5],3);
TL_SetColor(TL[4],MAGENTA);
TL_SetColor(TL[5],MAGENTA);
}
2020-10-18
1002
글번호 143180
답변완료
수식 문의 드립니다.
이동평균선 5일선이 500일선 돌파시 3봉째종가에서 매수진입후 999호가 상승시 자동청산되고
5일선이 500일선 이탈시 2봉째종가에서 자동청산되도록 시스템식 좀 부탁드립니다.
2020-10-17
705
글번호 143179
답변완료
문의
안녕하세요
밑에수식은macd다이버전스식입니다 이식을 macd에서 Volume Power OBV지표로수정부탁합니다
감사합니다
Input : short(12), long(26), signal(9);
Var : MACDV(0) , MACDS(0), T(0);
var : Hi(0),Hc(0),Hi1(0),Hc1(0);
MACDV = MACD(short, long);
MACDS = ema(MACDV,signal);
if crossup(MACDV,MACDS) Then
{
T = 1;
Hi = macdv;
Hc = c;
Hi1 = hi[1];
Hc1 = hc[1];
}
if CrossDown(MACDV,MACDS) Then
{
T = -1;
if hi < hi1 and hc > hc1 and hc1 > 0 Then
sell();
}
if T == 1 Then
{
if macdv > hi Then
{
hi = macdv;
hc = c;
}
}
2020-10-19
703
글번호 143178
답변완료
문의드립니다.
현재 var: 상한선(0), 하한선(0);
선언하고 수식만들어서 쓰고 있습니다.
현재 이 선들은 시초가 기준으로 더하고 빼는거라 매일 바뀌지만 장중에는 일정합니다.
조건문을 활용해서 일정조건 달성시 이 선들 수식이 바뀌게 하고싶습니다.
기본은 상한선 = a , 하한선 = b
만약 상한선을 '그 날' '한번이라도' 뚫으면(상한선+pricescale*1 을 터치하면?) ,
상한선 = c , 하한선 = d 로 한다.
이렇게 가능할까요?
상한선을 한번이라도 뚫었으면 다시 그 밑으로 내려오더라도, 바뀐 수식으로 선이 계속 유지됐으면 합니다.
2020-10-17
584
글번호 143177
답변완료
식 문의드립니다.
안녕하세요, 식문의드립니다.
아래 식 작성해주셨는데 진행이 안되 다시 문의드립니다.
1.1번,2번 매수 수량 설정 없음
2. 2번매수 문제
(중복진입허용시 2번매수 발생 후 매도가 설정하지 않은 곳에서 발생
: 다음봉종가에 무조건 청산됨)
식 수정 부탁드립니다.
안녕하세요
예스스탁입니다.
input : ndate(20201016),매수가1(1000),매수가2(900),매도가1(1100),매도가2(950), 손절가(800);
if sDate >= ndate Then
{
if MarketPosition == 0 and l > 매수가1 and TotalTrades == 0 Then
Buy("b1",AtLimit,매수가1,50);
if MarketPosition == 1 and MaxEntries == 1 Then
{
ExitLong("bp1",AtLimit,매도가1);
if l > 매수가2 Then
Buy("b2",AtLimit,매수가2,50);
}
if MarketPosition == 1 and MaxEntries == 2 Then
{
ExitLong("bp2",AtLimit,매도가2);
ExitLong("bl",AtLimit,손절가);
}
}
즐거운 하루되세요
> 스누피독 님이 쓴 글입니다.
> 제목 : 식문의드립니다
>
안녕하세요, 식문의드립니다.
주식(1분봉)
설정한 일자부터 매수,매도 진행( 20년10월16일 장시작부터 설정한 매수매도 진행)
가격과 수량 설정할수 있게 부탁드립니다.
해당가격에 봉꼬리가 닫거나 갭발생시 설정값 이상,이하일때 바로 진입
1.매수
가격 : 1000원 이하
수량 : 50개
2.매도
가격 : 1100원 이상
수량 : 1번매수 전량
3.매수
<1번(1000원 이하 매수)에서 2번 매도 되지않고 가격이 하락시
가격 : 900원 이하
수량 : 80개
4.매도
<1번(1000원이하 매수),3번(900원 이하 매수) 매수가 발생한 이후에만 4번가격에서 매도
가격 : 950원 이상
수량 : 1번매수+3번매수 전량
5.손절
1번,3번 매수 후 매도 되지 못하고 가격이 더 하락하면 손절
가격 : 800원 이하
수량 : 1번매수+3번매수 전량
----------------------------------------
1번 2번이 발생되면 시스템 끝 ( 3,4번이 진행안됨)
3번 4번이 발생되면 시스템 끝
5번 발생되면 시스템 끝
부탁드립니다.
2020-10-17
618
글번호 143176
2wnwn 님에 의해서 삭제되었습니다.
2020-10-19
39
글번호 143175
답변완료
청산 수식 좀 확인 요청드립니다.
* 좋은 한주 되십시요.
* 요청 사항
var1 = ma(c,5) ;
var2 = ma(c,20) ;
if crossup(var1,var2) then buy("aa") ;
if crossdown(var1,var2) then sell("bb") ; 일 경우
. 청산 수식 좀 요청 드립니다.
.K100 = 100봉 최고가,최저가, 중심선 필요
.K50 = 50봉 최고가,최저가, 중심선 필요
.K10 = 10봉 최고가,최저가, 중심선 필요
.var1 = 1~100봉 3/1값(피보나치)
.var2 = 1~100봉 3/2값(피보나치)
.var3 = 1~100봉 3/3값(피보나치) 에서
. VAR1 이 K50 최고가선 크로스업하면 청산
. VAR1 이 K50 중심선 크로스업하면 청산
. VAR1 이 K50 최저가선 크로스업하면 청산
. VAR2 이 K100 최고가선 크로스다운하면 청산
. VAR2 이 K100 중심선 크로스다운하면 청산
. VAR2 이 K100 최저가선 크로스다운하면 청산
수식 좀 부탁 드립니다.
* 고맙습니다. 수고하십시요.
2020-10-19
504
글번호 143174
답변완료
당일 청산 문의
안녕하세요 관리자님
우선 늘 감사 드립니다.
아래의 수식 밑으로 오전 5시 10분에 포지션이 있으면 당일 청산 및 장 나스닥 종료시간인 6시까지 진입을 종료
포지션이 없으면 나스닥 장 종료시간 6시까지 진입만 종료 하고 싶은데 어떻게하는지 문의 드립니다.
미리 답변에 감사 드립니다.
if MarketPosition == 1 Then
{
if CrossDown(DZwave3, -200) or CrossDown(DZwave3, 400) or CrossDown(DZwave3, 900) or CrossDown(DZwave3, 1600) or CrossDown(DZwave3, 2500) Then
{
ExitLong();
}
}
if MarketPosition == -1 Then
{
if CrossUp(DZwave3, 200) or CrossUp(DZwave3, -400) or CrossUp(DZwave3, -900) or CrossUp(DZwave3, -1600) or CrossUp(DZwave3, -2500) Then
{
ExitShort();
}
}
2020-10-16
514
글번호 143173